介绍:
早在三月份,我购买了一台预装了 Ubuntu 20.04 的新戴尔 XPS 13。由于 20.10 版本已经发布,我立即尝试升级它。这次升级部分成功,但并非完全成功。我意识到它并不完全成功的原因是,每当我检查更新时,它都会告诉我我仍在运行 20.04 并且可以升级到 20.10(这不起作用)。这对我来说成为问题的方式是,我永远不会被提供升级到 21.04(或任何更高版本)的选项。
我的系统的当前状态:
我的系统上有很多矛盾的信息:
- /etc/lsb-release 显示我正在运行 20.10。
- hostnamectl 程序说我正在运行 20.04.1 LTS。
- /etc/os-release 显示我正在运行 20.04.1 LTS。
- /etc/issue 显示我正在运行 20.10。
- lsb_release 程序说我正在运行 20.04.1 LTS。
- 无论生成 MOTD 是什么,都表明我正在运行 20.10。
- /etc/apt/sources.list 所有非注释行均引用 groovy(20.10 的代码名称)。
我最初的升级尝试失败的原因是:
我最初升级尝试时的 main.log 以此行结尾:
2021-03-05 21:29:16,691 ERROR got error from PostInstallScript ./xorg_fix_proprietary.py (g-exec-error-quark: Failed to execute child process “./xorg_fix_proprietary.py” (No such file or directory) (8))
之前的一切看起来都成功了。我不确定为什么它找不到该文件,因为该文件存在于 /usr/lib/python3/dist-packages/DistUpgrade/ 中。
我后续升级尝试失败的原因是:
后续尝试的日志文件中没有错误。相反,我们只得到以下信息:
2021-05-27 20:32:20,571 DEBUG abort called
这出现在日志文件中我本来可以得到的位置:
2021-03-05 21:16:54,953 DEBUG quirks: running StartUpgrade
运行 /usr/bin/do-release-upgrade 时实际打印到屏幕上的内容是:
Calculating the changes
Calculating the changes
Restoring original system state
Aborting
虽然日志文件中没有任何内容表明这一点,但我相信它中止的原因是它感觉到系统已经升级。
迄今为止的调试步骤:
我一直在 /usr/lib/python3/dist-packages/DistUpgrade/ 中挖掘文件,试图找到输出/日志未提供的信息。很明显,由于 DistUpgradeController.calcDistUpgrade() 返回 False,因此该过程被中止。我尝试向该函数添加额外的日志来确定触发哪个返回语句,但升级过程似乎没有看到/使用我的修订版本的文件,即使在我编译它并确认 ./ 之后也是如此。pycache有一个更新的文件。所以这似乎是一条死路,除非/直到我能弄清楚如何让它使用我修改过的 python 文件。
另一种方法可能是确定在我最初的升级尝试中运行 xorg_fix_proprietary.py 失败后应该做什么,以便我可以手动执行这些步骤。这使我找到了 fullUpgrade() 中调用 postUpgrade() 的地方。看起来该过程中可能未运行的唯一部分是:
if os.path.exists("/var/lib/ubuntu-release-upgrader/release-upgrade-available"):
os.unlink("/var/lib/ubuntu-release-upgrader/release-upgrade-available")
但事实上,该文件在我的系统中并不存在!
可能的后续步骤
我可以想象按照以下方式之一进行:
- 弄清楚如何使用我自己修改过的 DistUpgrade*.py 文件版本,并修改它们以跳过导致升级失败的检查。
- 找到某种方法降级回 20.04 系统,以便我可以再次尝试全新升级。
- 手动进行必要的更改,以便我的系统识别它实际上正在运行 20.10。
我将非常感激任何关于哪种方法最不危险以及如何进行的建议。
答案1
当您预装 Ubuntu 时,它与您自行安装的版本略有不同。您的版本是专门为您的机器量身定制的。
这就是升级失败的原因。程序需要某个版本的 Ubuntu,但无法获得。
您可以直接安装它,但我不建议这样做。
答案2
软件包 dell-linux-assistant 不适用于 groovy,这可能是升级失败的原因。
您可以在软件更新程序设置中禁用 somerville-dla-team ppa,然后再次运行 groovy 升级。