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]:
    
  • 在这里我们可以看到,较新版本的 httpdhttpd-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 选项,请参阅:How to use yum history to roll back an update in 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>
    

备注 : 您还可以使用 Red Hat Network Satellite 来回滚或降级软件包,请参阅:How to use Red Hat Network Satellite to rollback packages on a Red Hat Enterprise Linux system?

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.