将任何操作系统升级到新的发行版本都可能非常耗时,并且充满问题。
事实上,“升级”这个词甚至可能不适用。在过去很多时候,我必须执行完全重新安装,因为所谓的升级路径会失败。当涉及到多个系统时,执行重新安装非常耗时,而我通常在任何给定时间都有八到十个系统。
我使用的第一个 Fedora(Fedora)升级路径是集成到以前版本的 Anaconda 安装程序中的。它在相当简单的安装中似乎可以工作,但是,经过多年的多次升级和多个发行版本,它会在孤立、重复和不需要的软件包的形式下留下大量的垃圾。
首次出现在 Fedora 18 中的新版本 Anaconda(Anaconda)没有任何用于执行升级的选项。大约在同一时间,有人尝试使用一个名为 fed-up 的程序提供升级路径,该程序可从第三方存储库获得。我认识的大多数尝试使用它的人,包括我,都得到了非常糟糕的结果。我有一个系统只是拒绝启动超过 GRUB 菜单,该菜单启动了该过程的第二部分。有时,主机在升级后根本无法使用。
我最近在多个系统上从 Fedora 22 升级到 23,然后从 Fedora 23 升级到 24,并且发现新的 dnf system-upgrade 程序和过程比以前的自动化或半自动化升级程序更加可用和可靠。
dnf system-upgrade
新的 Fedora 升级系统基于 DNF,它是 YUM 的替代软件包管理器。我发现 DNF 比 YUM 更适合我发现自己执行的所有软件包管理任务。作为执行升级的 dnf system-upgrade 方法 的基础,它似乎也工作得更好。
system-upgrade 最初在 Fedora 23 中引入,作为从 Fedora 22 升级的一种手段,我在 system-upgrade 方面取得了良好且可靠的成功。这是一个多步骤的过程,但它可以很容易地通过一个或两个脚本实现自动化。
system-upgrade 过程并非没有至少一个问题,对我而言。在多个主机上升级后,显示管理器在启动序列期间或通过命令行均未启动。结果证明显示管理器服务链接丢失,因此 systemd 无法启动 GUI 登录管理器。添加以下符号链接解决了该问题。
ln -s /etc/systemd/system/display-manager.service -> /usr/lib/systemd/system/sddm.service
sddm 显示管理器是 Fedora 23 和 24 的当前默认显示管理器。如果您安装了 KDE 的 kdm 或 GNOME 的 gdm 等您喜欢的显示管理器,则可以替换它。
dnf system-upgrade 还提供了一些工具,以确保和验证升级后的系统合理地没有垃圾。我认为这是确保未来升级也干净且无故障的非常重要的一步。
升级准备
无论如何执行升级,即使是全新安装最新版本并擦除以前的版本,为升级做好准备始终是一个好主意。以下是一些技巧,可帮助确保事情顺利进行。
文件系统设计
良好的文件系统设计可以追溯到主机计算机上 Linux 的初始安装。主要目标是确保个人数据在升级或重新安装期间不会被擦除。实现此目标的最佳方法是在初始操作系统安装期间将 /home 目录创建为单独的文件系统。如果 /home 是一个单独的文件系统,则可以保留它,而不会在升级或完全重新安装期间受到干扰。
dnf system-upgrade 过程和重新安装都允许您保留当前的 home 文件系统,而无需重新格式化它。然后在重新启动时自动挂载它。
备份
始终执行 /home 以及其他目录(特别是 /etc 和 /var)的备份。特别是 /etc 和 /var 都包含在重新安装后可能有用的数据。/etc 目录包含一些本地配置文件,例如 DHCP 和网络接口配置文件,您可能希望在重新安装后将其复制回 /etc。有些也可能在其他情况下成功的升级期间被覆盖。拥有这些备份以便复制任何被覆盖的配置文件可能非常有用。
/var 目录可能包含域名字服务、各种 SQL 数据库和 Web 服务(如 Apache)等程序的数据。您也会希望保留这些数据。
阅读程序
请务必阅读在 Fedora Wiki 升级页面(Fedora wiki 升级页面)上发布的升级程序。此页面通常不仅包含执行升级所需的特定说明,还包含有关升级的常见问题列表、执行升级的技巧以及有关如何解决可能发生的升级后问题的部分。
运行升级
这可能是升级中最简单的部分,因为您只需输入一系列非常具体的命令。
本节中的命令假定您以 root 用户身份登录。执行升级的第一步是确保您的系统已经拥有当前版本的最新更新。
dnf -y update
您应该在执行 DNF 更新后重新启动系统,特别是如果更新包含新内核。
接下来,安装 dnf system upgrade 插件包。
dnf install dnf-plugin-system-upgrade
第三步是下载您要升级到的新版本所需的文件。此 dnf system-upgrade 程序旨在升级一个或两个发行版本,因此您可以从 Fedora 22 升级到 Fedora 23 或 24,或者从 Fedora 23 升级到 24。请务必在命令中指定正确的 releasever。
dnf system-upgrade download --refresh --releasever=24
第四步是运行以下命令,该命令将重新启动计算机并启动升级过程。起初,它看起来像常规重启,但它将显示一条消息,指示升级正在开始,然后显示各种状态消息,指示每个软件包的升级进度。
dnf system-upgrade reboot
在升级结束时,系统将重新启动并将您带到正常的登录屏幕。
清理
但是,在您开始生产性工作之前,您应该执行更多步骤,以确保系统处于合理干净的状态。这确保了定期更新将顺利执行,并为下一次升级提供了一个良好、无垃圾的起点。
有时,系统级软件包会在 /etc 中安装新的配置文件,了解这些文件始终是一个好主意,这样您就可以使用原始配置(如果您已修改它)或新配置。新的配置文件可能需要进行修改才能满足您的特定要求。此命令标识您可能想要检查的那些新的配置文件。
rpmconf -a
您还应该使用以下命令查找具有损坏依赖关系的软件包。
dnf repoquery --unsatisfied
如果存在任何未满足的依赖关系,您可能应该删除命令列出的软件包,因为它们不太可能正常工作。
也可能存在具有不同版本级别的重复软件包。以下命令查找这些软件包。
dnf repoquery --duplicated
如果找到重复的软件包,则应删除旧版本,仅保留最新版本。
您的系统上可能仍然存在一些未在 Fedora 存储库中列出的软件包。以下命令列出这些软件包。
dnf list extras
如果找到任何额外的软件包,您可能应该删除它们。只需确保不要删除可能从其他存储库(例如 RPMFusion 或 DropBox)安装的软件包。例如,您可能还会发现,如果 LibréOffice 文件不是从 Fedora 存储库安装的,而是使用 LibréOffice 网站上的下载安装的,则这些文件会在此命令中显示出来。
可以使用以下命令删除所有重复、额外或具有损坏依赖关系的软件包。
dnf autoremove
但在执行此操作之前,您应该确定它们是否真的不再需要。我更喜欢使用先前命令提供的列表,并手动删除不需要的软件包。我不建议使用 dnf autoremove 命令。
结论
我现在已经在使用 dnf system-upgrade 程序的多个系统上执行了至少两次升级。它们运行良好,我只遇到了上面提到的一个问题,即缺少符号链接。我终于感觉可以安全地使用这种升级方法了。
虽然完全升级带有 GUI 桌面的典型桌面系统可能需要几个小时,但我花费在每个系统上的实际时间仅限于输入命令。通过创建用于实际升级的命令的简短脚本,我甚至进一步减少了时间。我没有编写升级后命令的脚本,因为它们需要一些判断和决策,关于哪些软件包应该保留,哪些可以删除。
DNF 安装程序可用于 CentOS 7,但不适用于 6 版本。因此,从 CentOS 升级不能使用 dnf system-upgrade 程序。我希望他们可以提供该功能,因为我有几个 CentOS 6 主机,我希望为它们提供一个轻松的升级到 CentOS 7 的路径。
每个人的环境都不同,可能会以不同的方式体验 dnf system-upgrade 程序。我希望在评论部分阅读您的体验。
3 条评论