我目前安装了 Ubuntu 20.04,并希望将我的版本升级到 22.04。我还启用了几个第三方存储库,并从每个存储库安装了一些软件包。我从大量研究中了解到,这种情况往往是版本升级失败的主要原因,并导致许多人建议全新安装每次需要升级版本时,我都会重新安装 Ubuntu。坦率地说,这对我来说不是一个实用的解决方案,因为每隔几年就需要付出巨大努力才能将我的系统重建到原来的状态(例如安装软件、下载在全新安装期间需要备份的数据等)。相反,我想了解问题的本质,并学习如何正面处理它,以便我可以使用标准的 Ubuntu 版本升级路径(例如update-manager
或do-release-upgrade
)。
我知道版本升级过程目前会禁用所有第三方/PPA 存储库。具体是如何做到的(例如,它基本上只是注释掉 中的那些行/etc/apt/sources.list
和.list
中的文件/etc/apt/sources.list.d/
)?请详细说明为什么这样做以及升级后需要做什么(希望有示例?)。
我也知道最近发布升级过程有一个新的选项允许保持第三方/PPA 存储库处于启用状态。这到底有什么不同,以及在这种情况下升级后需要做什么?
我意识到这个问题可能很难完全回答,因为第三方软件的定义并不明确。我基本上是在寻求必要的理解,以便做出明智的决定,了解我应该在这个过程中做什么。
作为参考,以下是我系统上的第三方存储库列表。每个存储库都在 中的自己的.lists
文件中/etc/apt/sources.list.d
。也许这些可以在任何示例中使用。
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu focal stable
deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main
deb [arch=amd64] https://keepersecurity.com/desktop_electron/Linux/repo/deb stable main
deb [arch=amd64 signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu focal main
deb [arch=amd64,arm64,armhf] http://packages.microsoft.com/repos/code stable main
最后,我读过这个问题但它并没有特别的帮助。我想我主要关注的是了解 Ubuntu 版本升级过程究竟会做什么,以及第三方存储库如何/为什么会导致问题的细节,这样我在评估特定存储库时就能做出决定。
答案1
“*这究竟是如何做到的(例如,它基本上只是注释掉 /etc/apt/sources.list 中的那些行以及 /etc/apt/sources.list.d/ 中的 .list 文件)?*”
是的,这正是 do-release-upgrade Python 脚本所做的事情。
“我还知道最近发布升级过程有一个新选项,允许保持第三方/PPA 存储库启用。“
它并不是最近才推出的(该链接来自 2019 年)。该功能用于测试,以便 PPA 作者可以发现这些小冲突和错误,然后进行修复。它仅防止禁用非 Ubuntu(PPA,第三方)源。它不会对发布升级计算做出任何其他更改。使用可能会(也可能不会)破坏您的升级。
“我想了解问题的本质,并学习如何正面解决它“
最常见的问题是版本冲突。我们来举一个例子来说明它的工作原理:
- 您的 Ubuntu 20.04 包含一个(示例)软件包
libfoo 1.1
。您有多个应用程序依赖于它。 - 在 20.04 周期期间,您安装了提供 -- 以及其他软件包 -- 的 Frobozz PPA
libfoo 1.3
。 - 最后,您想要发布升级到 Ubuntu 22.04,其中包括
libfoo 1.2
。
在发布升级期间,您不知道,baz
现在更新了软件包指定它需要的正是libfoo 1.2
,这通常不是问题,因为整个版本都是假设该版本构建的。但是,由于libfoo 1.3
已经安装,因此安装失败,所有具有依赖关系的baz
软件包也会失败。baz
“正面”解决方案是从 Frobozz PPA(包括libfoo 1.3
)卸载冲突的 20.04 软件包,并将系统恢复为原版 Ubuntu(libfoo 1.2
)。然后,当 PPA 作者开始构建兼容的 22.04 软件包时,您可以安装它们。或者您可以从其他地方安装与 22.04 兼容的软件包。请记住,卸载应用程序包不会删除目录中的任何数据/home
。
- 25 年来,围绕单一、统一的依赖版本集构建发行版一直是 Debian 系统设计的基本要素。不要反对。他们不会改变它,所以顺其自然吧。