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]:
    
  • 这里我们可以看到,使用旧的 RPM 安装重新安装了 httpdhttpd-manualmod_ssl,且没有软件包从依赖项中删除。

  • 执行降级需要注意的问题:

    • 降级比较困难,但在 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 及更新的版本中回滚更新

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>
    
  • 在 Red Hat Enterprise Linux 8 和 9 中,可以使用 dnf history 撤销一个事务。yum 是 dnf 的一个别名,因此这两个术语是可以互换使用的:如何使用 yum history 在 Red Hat Enterprise Linux 6 及更新的版本中回滚更新

Root Cause

Diagnostic Steps

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