Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

如何使用 yum/dnf 来降级或回滚一些软件包更新?

Solution Unverified - Updated -

Environment

  • Red Hat Enterprise Linux 5.4 及更新的版本
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7
  • Red Hat Enterprise Linux 8
  • Red Hat Enterprise Linux 9

Issue

  • 如何将安装的软件包回滚或降级到之前的版本?
  • 如何使用 yum 来降级或回滚一些软件包更新?
  • 回滚软件包的最佳实践是什么?
  • 如何使用 yum downgrade 选项?
  • 是否可以找到 yum 执行事务的操作系统更新历史记录?
  • 如何将 java 版本降级为 1.8.0.252?

Resolution

警告: 不支持对以下软件包的回滚或降级,因为这些软件包本身以及其依赖项会假设进行 update-only 或 install-only 操作:

  • dbus
  • glibc (glibc 的依赖项,如 gcc)
  • selinux-policy*

因此,不建议将系统降级为低的次版本(例如:RHEL8.5 到 RHEL8.4,或将 RHEL7.9 降级到 RHEL7.8),因为这可能会使系统处于预期以外的状态。如果需要进行这样的操作,强烈建议仅在进行了系统备份后进行。通常,yum history 选项用于进行小的更新回滚。

请阅读以下指南以了解更多信息:

Red Hat Enterprise Linux 5 :

  • Red Hat Enterprise Linux 5.4 提供了 Yum 3.2.22,它包括一个降级选项。使用这个选项,可以将软件包降级到以前的最高版本,或者您可以指定软件包要降级到的整版本号。例如:

    [root@host ~]# yum downgrade vsftpd-2.0.5-12.el5
  • 请注意,这也可能会删除依赖于该软件包当前版本的软件包。通常,对于某些紧密相关的软件包,您可能需要将它们全部降级。否则,yum 会删除紧密相关的软件包,以满足依赖项要求。

  • 例如,如果要降级 httpd:

    [root@host ~]# yum downgrade httpd-2.2.3-22.el5
    [snip]
    Dependencies Resolved

    ========================================================================================================================
    Package Arch Version Repository Size
    ========================================================================================================================
    Installing:
    httpd i386 2.2.3-22.el5 rhel-i386-server-5 1.2 M
    Removing:
    httpd i386 2.2.3-31.el5 installed 3.1 M
    Removing for dependencies:
    httpd-manual i386 2.2.3-31.el5 installed 3.4 M
    mod_ssl i386 1:2.2.3-31.el5 installed 173 k

    Transaction Summary
    ========================================================================================================================
    Install 1 Package(s)
    Update 0 Package(s)
    Remove 3 Package(s)

    Total download size: 1.2 M
    Is this ok [y/N]:
  • httpd-manualmod_ssl 软件包也会被删除(而不是降级),因为降级的 httpd 无法满足当前版本 httpd-manual 和 mod_ssl 的依赖关系。

  • 要一起降级它们,您可以在命令中添加它们:

    [root@host ~]# yum downgrade httpd-2.2.3-22.el5 httpd-manual-2.2.3-22.el5 mod_ssl-2.2.3-22.el5

    Dependencies Resolved

    ========================================================================================================================
    Package Arch Version Repository Size
    ========================================================================================================================
    Installing:
    httpd i386 2.2.3-22.el5 rhel-i386-server-5 1.2 M
    httpd-manual i386 2.2.3-22.el5 rhel-i386-server-5 833 k
    mod_ssl i386 1:2.2.3-22.el5 rhel-i386-server-5 87 k
    Removing:
    httpd i386 2.2.3-31.el5 installed 3.1 M
    httpd-manual i386 2.2.3-31.el5 installed 3.4 M
    mod_ssl i386 1:2.2.3-31.el5 installed 173 k

    Transaction Summary
    ========================================================================================================================
    Install 3 Package(s)
    Update 0 Package(s)
    Remove 3 Package(s)

    Total download size: 2.1 M
    Is this ok [y/N]:
  • 在这里,我们可以看到 httpd, httpd-manualmod_ssl 的较新版本会使用这些 RPM 的旧版本一起重新安装,没有软件包会因为依赖关系被删除。

  • 执行降级的问题:

    • 降级操作通常会非常棘手,但在 yum 版本 3.2.27 及更高版本中,可以执行 _一些_ 降级。这些操作并不是完美的,应该谨慎使用
    • 如需了解更多详细信息,请参阅 yum.baseurl.org

Red Hat Enterprise Linux 6 和 7:

  • yum 会保存一个有关每个事务信息的 sqlite 数据库。历史记录以事务 ID 的形式进行组织,当 yum 事务会影响到系统的软件包配置时就会被更新。通常情况下,此数据库可以在 /var/lib/yum/history/ 目录中找到。

  • yum history 命令允许用户查看事务历史记录。

  • 以下命令列出所有事务的历史记录:-

    # yum history list all
  • 这将列出事务 ID,以及日期和时间、执行的操作以及更改的软件包数量。

  • 有关特定事务的更多信息,请记下该事务的事务 ID,并在这个命令中使用它:-

    # yum history info <transaction_ID>
  • Red Hat Enterprise Linux 6 和 7 提供了 yum history 选项,请参阅:如何使用 yum history 在 Red Hat Enterprise Linux 6、7 中回滚更新

Red Hat Enterprise Linux 8 和 9:

  • dnf 会保存一个有关每个事务信息的 sqlite 数据库。历史记录以事务 ID 的形式进行组织,当 yum/dnf 事务会影响到系统的软件包配置时就会被更新。通常情况下,这个数据库可以在 /var/lib/dnf/history/ 目录中找到。

  • dnf history 命令允许用户查看事务历史记录。

  • 以下命令列出所有事务的历史记录:-

    # dnf history list
  • 这将列出事务 ID,以及日期和时间、执行的操作以及更改的软件包数量。

  • 有关特定事务的更多信息,请记下该事务的事务 ID,并在这个命令中使用它:-

    # dnf history info <transaction_ID>

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments