如何使用 DNF 升级您的 Fedora Linux 系统

6 位读者喜欢这篇文章。
How to upgrade your Fedora Linux system with DNF

Opensource.com

将任何操作系统升级到新的发行版本都可能非常耗时,并且充满问题。

事实上,“升级”这个词甚至可能不适用。在过去很多时候,我必须执行完全重新安装,因为所谓的升级路径会失败。当涉及到多个系统时,执行重新安装非常耗时,而我通常在任何给定时间都有八到十个系统。

我使用的第一个 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 程序。我希望在评论部分阅读您的体验。

标签
David Both
David Both 是一位开源软件和 GNU/Linux 倡导者、培训师、作家和演讲者。自 1996 年以来,他一直从事 Linux 和开源软件工作,自 1969 年以来一直从事计算机工作。他是“系统管理员的 Linux 哲学”的坚定拥护者和传播者。

3 条评论

我会尝试一下。

我已成功使用了简单且成功的 Ubuntu 升级至少 5 年 - 次数多到数不清 - 只有一次失败。一直想知道为什么 Fedora 在这方面遇到这么多麻烦 - 我迄今为止尝试的每种 Fedora 方法都失败了。

希望今晚能成功 ;-)

多年来,我一直在使用此处记录的“不受支持的” yum 更新方法

https://fedoraproject.org/wiki/Upgrading_Fedora_using_package_manager

除了大约在 Fedora 16 或 17 附近的 systemd 惨败之外,这种方法一直像魅力一样工作,并尽可能地保持系统在线。您确实需要注意依赖关系,并且可能必须解决问题并恢复软件包,但它确实有效。我有一些(虚拟)机器使用此方法从 Fedora 1 连续升级到 Fedora 23(尽管 systemd 需要一些认真的恢复工作)。对于我来说,这一直是远程系统(如数小时的驾驶时间远程)的最佳方法,在这种情况下,您根本不能在升级过程中使它们脱机。Fed-up 比“preupgrade”好得多,但对我来说毫无价值,因为它使用了 Anaconda,并在升级期间使机器脱机,并且如果出现任何问题,您可能会在远程机器上迅速陷入困境。

除了该 URL 中记录的直接手动“dnf --releasver=”方法之外,上面的 URL 还指出他们创建了一个(是的,不受支持的)脚本来自动化大部分操作。这就是 fedora-upgrade 软件包。是的,它是“不受支持的”,但应该受到支持。我遇到的唯一失败是依赖关系错误,这些错误根本不应该出现在 rpm 存储库中。诸如循环依赖关系和损坏的过时依赖关系之类的东西。如果他们实际支持 fedora-upgrade 过程,他们将被迫修复这些损坏的依赖关系。幸运的是,这些问题很容易解决,并且可以实现干净的升级,几乎没有停机时间或失去对远程服务器的控制。只需备份已安装软件包的数据库,并删除任何有问题的软件包(通常是 rpmfusion),然后在升级后重新安装即可。

如果说近年来我看到任何问题,那就是在旧硬件上没有进行足够的测试。我想和许多人一样,我收集了各种年龄的计算机,我一直让它们运行“以防万一”。也许这是一种囤积癖,但请允许我说:我的囤积癖让我能够使用一些旧硬件恢复一些我保存在 ZipDisks 上的文件,这些旧硬件仍然可以管理我的 ZipDisk 驱动器上的连接器。
我最终跳过了 Fedora 22,并等待了 23,因为据我所知,我的 Intel 显卡芯片的问题没有任何识别或修复。一旦您花了一个完整的周末进行升级,却不得不降级到以前的版本,您就不想很快再经历一次,而这还是在进行备份的情况下(幸运的是)。
我在这些“自动”升级中遇到了一些灾难性的失败。它看起来很酷,因为您不必在升级后为您的独特情况加载所有单独的位和片段,但是当它不起作用时……呃!而且非常耗时。
我首选的升级方式是备份,然后进行网络安装。

Creative Commons License本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.