手机版
你好,游客 登录 注册 搜索
背景:
阅读新闻

在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作

[日期:2018-01-18] 来源:Linux中国   作者:Linux [字体: ]

为服务器打补丁是 Linux 系统管理员的一项重要任务,为的是让系统更加稳定,性能更加优化。厂商经常会发布一些安全/高危的补丁包,相关软件需要升级以防范潜在的安全风险。

Yum (Yellowdog Update Modified) 是 CentOSRedHat 系统上用的 RPM 包管理工具,yum history 命令允许系统管理员将系统回滚到上一个状态,但由于某些限制,回滚不是在所有情况下都能成功,有时 yum 命令可能什么都不做,有时可能会删掉一些其他的包。

我建议你在升级之前还是要做一个完整的系统备份,而 yum history 并不能用来替代系统备份的。系统备份能让你将系统还原到任意时候的节点状态。

某些情况下,安装的应用程序在升级了补丁之后不能正常工作或者出现一些错误(可能是由于库不兼容或者软件包升级导致的),那该怎么办呢?

与应用开发团队沟通,并找出导致库和软件包的问题所在,然后使用 yum history 命令进行回滚。

注意:

  • 它不支持回滚 selinux,selinux-policy-*,kernel,glibc (以及依赖 glibc 的包,比如 gcc)。
  • 不建议将系统降级到更低的版本(比如 CentOS 6.9 降到 CentOS 6.8),这会导致系统处于不稳定的状态

让我们先来看看系统上有哪些包可以升级,然后挑选出一些包来做实验。

  1. #yum update
  2. Loaded plugins: fastestmirror, security
  3. Setting up UpdateProcess
  4. Loading mirror speeds from cached hostfile
  5. epel/metalink |12 kB 00:00
  6. * epel: mirror.csclub.uwaterloo.ca
  7. base |3.7 kB 00:00
  8. dockerrepo |2.9 kB 00:00
  9. draios |2.9 kB 00:00
  10. draios/primary_db |13 kB 00:00
  11. epel |4.3 kB 00:00
  12. epel/primary_db |5.9 MB 00:00
  13. extras |3.4 kB 00:00
  14. updates |3.4 kB 00:00
  15. updates/primary_db |2.5 MB 00:00
  16. ResolvingDependencies
  17. -->Running transaction check
  18. --->Packagegit.x86_64 0:1.7.1-8.el6 will be updated
  19. --->Packagegit.x86_64 0:1.7.1-9.el6_9 will be an update
  20. --->Package httpd.x86_64 0:2.2.15-60.el6.centos.4 will be updated
  21. --->Package httpd.x86_64 0:2.2.15-60.el6.centos.5 will be an update
  22. --->Package httpd-tools.x86_64 0:2.2.15-60.el6.centos.4 will be updated
  23. --->Package httpd-tools.x86_64 0:2.2.15-60.el6.centos.5 will be an update
  24. --->Package perl-Git.noarch 0:1.7.1-8.el6 will be updated
  25. --->Package perl-Git.noarch 0:1.7.1-9.el6_9 will be an update
  26. -->FinishedDependencyResolution
  27. DependenciesResolved
  28. =================================================================================================
  29. PackageArchVersionRepositorySize
  30. =================================================================================================
  31. Updating:
  32. git x86_64 1.7.1-9.el6_9 updates 4.6 M
  33. httpd x86_64 2.2.15-60.el6.centos.5 updates 836 k
  34. httpd-tools x86_64 2.2.15-60.el6.centos.5 updates 80 k
  35. perl-Git noarch 1.7.1-9.el6_9 updates 29 k
  36. TransactionSummary
  37. =================================================================================================
  38. Upgrade4Package(s)
  39. Total download size:5.5 M
  40. Isthis ok [y/N]: n

你会发现 git 包可以被升级,那我们就用它来实验吧。运行下面命令获得软件包的版本信息(当前安装的版本和可以升级的版本)。

  1. #yumlistgit
  2. Loaded plugins: fastestmirror, security
  3. Setting up UpdateProcess
  4. Loading mirror speeds from cached hostfile
  5. * epel: mirror.csclub.uwaterloo.ca
  6. InstalledPackages
  7. git.x86_64 1.7.1-8.el6@base
  8. AvailablePackages
  9. git.x86_64 1.7.1-9.el6_9 updates

运行下面命令来将 git1.7.1-8 升级到 1.7.1-9

  1. #yum update git
  2. Loaded plugins: fastestmirror, presto
  3. Setting up UpdateProcess
  4. Loading mirror speeds from cached hostfile
  5. * base: repos.lax.quadranet.com
  6. * epel: Fedora.mirrors.pair.com
  7. * extras: mirrors.seas.harvard.edu
  8. * updates: mirror.sesp.northwestern.edu
  9. ResolvingDependencies
  10. -->Running transaction check
  11. --->Packagegit.x86_64 0:1.7.1-8.el6 will be updated
  12. -->ProcessingDependency:git=1.7.1-8.el6forpackage: perl-Git-1.7.1-8.el6.noarch
  13. --->Packagegit.x86_64 0:1.7.1-9.el6_9 will be an update
  14. -->Running transaction check
  15. --->Package perl-Git.noarch 0:1.7.1-8.el6 will be updated
  16. --->Package perl-Git.noarch 0:1.7.1-9.el6_9 will be an update
  17. -->FinishedDependencyResolution
  18. DependenciesResolved
  19. =================================================================================================
  20. PackageArchVersionRepositorySize
  21. =================================================================================================
  22. Updating:
  23. git x86_64 1.7.1-9.el6_9 updates 4.6 M
  24. Updatingfor dependencies:
  25. perl-Git noarch 1.7.1-9.el6_9 updates 29 k
  26. TransactionSummary
  27. =================================================================================================
  28. Upgrade2Package(s)
  29. Total download size:4.6 M
  30. Isthis ok [y/N]: y
  31. DownloadingPackages:
  32. Setting up and reading Presto delta metadata
  33. Processing delta metadata
  34. Package(s) data still to download:4.6 M
  35. (1/2):git-1.7.1-9.el6_9.x86_64.rpm |4.6 MB 00:00
  36. (2/2): perl-Git-1.7.1-9.el6_9.noarch.rpm |29 kB 00:00
  37. -------------------------------------------------------------------------------------------------
  38. Total5.8 MB/s |4.6 MB 00:00
  39. Running rpm_check_debug
  40. RunningTransactionTest
  41. TransactionTestSucceeded
  42. RunningTransaction
  43. Updating: perl-Git-1.7.1-9.el6_9.noarch1/4
  44. Updating:git-1.7.1-9.el6_9.x86_64 2/4
  45. Cleanup: perl-Git-1.7.1-8.el6.noarch3/4
  46. Cleanup:git-1.7.1-8.el6.x86_64 4/4
  47. Verifying:git-1.7.1-9.el6_9.x86_64 1/4
  48. Verifying: perl-Git-1.7.1-9.el6_9.noarch2/4
  49. Verifying:git-1.7.1-8.el6.x86_64 3/4
  50. Verifying: perl-Git-1.7.1-8.el6.noarch4/4
  51. Updated:
  52. git.x86_64 0:1.7.1-9.el6_9
  53. DependencyUpdated:
  54. perl-Git.noarch 0:1.7.1-9.el6_9
  55. Complete!

验证升级后的 git 版本.

  1. #yumlistgit
  2. InstalledPackages
  3. git.x86_64 1.7.1-9.el6_9@updates
  4. # rpm -q git
  5. git-1.7.1-9.el6_9.x86_64

现在我们成功升级这个软件包,可以对它进行回滚了。步骤如下。

 

使用 YUM history 命令回滚升级操作

首先,使用下面命令获取 yum 操作的 id。下面的输出很清晰地列出了所有需要的信息,例如操作 id、谁做的这个操作(用户名)、操作日期和时间、操作的动作(安装还是升级)、操作影响的包数量。

  1. #yum history
  2. #yum history list all
  3. Loaded plugins: fastestmirror, presto
  4. ID |Login user |Dateandtime|Action(s)|Altered
  5. -------------------------------------------------------------------------------
  6. 13| root |2017-08-1813:30|Update|2
  7. 12| root |2017-08-1007:46|Install|1
  8. 11| root |2017-07-2817:10| E, I, U |28 EE
  9. 10| root |2017-04-2109:16| E, I, U |162 EE
  10. 9| root |2017-02-0917:09| E, I, U |20 EE
  11. 8| root |2017-02-0210:45|Install|1
  12. 7| root |2016-12-1506:48|Update|1
  13. 6| root |2016-12-1506:43|Install|1
  14. 5| root |2016-12-0210:28| E, I, U |23 EE
  15. 4| root |2016-10-2805:37| E, I, U |13 EE
  16. 3| root |2016-10-1812:53|Install|1
  17. 2| root |2016-09-3010:28| E, I, U |31 EE
  18. 1| root |2016-07-2611:40| E, I, U |160 EE

上面命令显示有两个包受到了影响,因为 git 还升级了它的依赖包 perl-Git。 运行下面命令来查看关于操作的详细信息。

  1. #yum history info13
  2. Loaded plugins: fastestmirror, presto
  3. Transaction ID :13
  4. Begintime:FriAug1813:30:522017
  5. Begin rpmdb :420:f5c5f9184f44cf317de64d3a35199e894ad71188
  6. Endtime:13:30:542017(2 seconds)
  7. End rpmdb :420:d04a95c25d4526ef87598f0dcaec66d3f99b98d4
  8. User: root
  9. Return-Code:Success
  10. CommandLine: update git
  11. Transaction performed with:
  12. Installed rpm-4.8.0-55.el6.x86_64 @base
  13. Installedyum-3.2.29-81.el6.centos.noarch @base
  14. Installedyum-plugin-fastestmirror-1.1.30-40.el6.noarch@base
  15. Installedyum-presto-0.6.2-1.el6.noarch@anaconda-CentOS-201207061011.x86_64/6.3
  16. PackagesAltered:
  17. Updatedgit-1.7.1-8.el6.x86_64 @base
  18. Update1.7.1-9.el6_9.x86_64 @updates
  19. Updated perl-Git-1.7.1-8.el6.noarch@base
  20. Update1.7.1-9.el6_9.noarch@updates
  21. history info

运行下面命令来回滚 git 包到上一个版本。

  1. #yum history undo 13
  2. Loaded plugins: fastestmirror, presto
  3. Undoing transaction 53,fromFriAug1813:30:522017
  4. Updatedgit-1.7.1-8.el6.x86_64 @base
  5. Update1.7.1-9.el6_9.x86_64 @updates
  6. Updated perl-Git-1.7.1-8.el6.noarch@base
  7. Update1.7.1-9.el6_9.noarch@updates
  8. Loading mirror speeds from cached hostfile
  9. * base: repos.lax.quadranet.com
  10. * epel: fedora.mirrors.pair.com
  11. * extras: repo1.dal.innoscale.net
  12. * updates: mirror.vtti.vt.edu
  13. ResolvingDependencies
  14. -->Running transaction check
  15. --->Packagegit.x86_64 0:1.7.1-8.el6 will be a downgrade
  16. --->Packagegit.x86_64 0:1.7.1-9.el6_9 will be erased
  17. --->Package perl-Git.noarch 0:1.7.1-8.el6 will be a downgrade
  18. --->Package perl-Git.noarch 0:1.7.1-9.el6_9 will be erased
  19. -->FinishedDependencyResolution
  20. DependenciesResolved
  21. =================================================================================================
  22. PackageArchVersionRepositorySize
  23. =================================================================================================
  24. Downgrading:
  25. git x86_64 1.7.1-8.el6 base 4.6 M
  26. perl-Git noarch 1.7.1-8.el6 base 29 k
  27. TransactionSummary
  28. =================================================================================================
  29. Downgrade2Package(s)
  30. Total download size:4.6 M
  31. Isthis ok [y/N]: y
  32. DownloadingPackages:
  33. Setting up and reading Presto delta metadata
  34. Processing delta metadata
  35. Package(s) data still to download:4.6 M
  36. (1/2):git-1.7.1-8.el6.x86_64.rpm |4.6 MB 00:00
  37. (2/2): perl-Git-1.7.1-8.el6.noarch.rpm |29 kB 00:00
  38. -------------------------------------------------------------------------------------------------
  39. Total3.4 MB/s |4.6 MB 00:01
  40. Running rpm_check_debug
  41. RunningTransactionTest
  42. TransactionTestSucceeded
  43. RunningTransaction
  44. Installing: perl-Git-1.7.1-8.el6.noarch1/4
  45. Installing:git-1.7.1-8.el6.x86_64 2/4
  46. Cleanup: perl-Git-1.7.1-9.el6_9.noarch3/4
  47. Cleanup:git-1.7.1-9.el6_9.x86_64 4/4
  48. Verifying:git-1.7.1-8.el6.x86_64 1/4
  49. Verifying: perl-Git-1.7.1-8.el6.noarch2/4
  50. Verifying:git-1.7.1-9.el6_9.x86_64 3/4
  51. Verifying: perl-Git-1.7.1-9.el6_9.noarch4/4
  52. Removed:
  53. git.x86_64 0:1.7.1-9.el6_9 perl-Git.noarch 0:1.7.1-9.el6_9
  54. Installed:
  55. git.x86_64 0:1.7.1-8.el6 perl-Git.noarch 0:1.7.1-8.el6
  56. Complete!

回滚后,使用下面命令来检查降级包的版本。

  1. #yumlistgit
  2. # rpm -q git
  3. git-1.7.1-8.el6.x86_64

 

使用YUM downgrade 命令回滚升级

此外,我们也可以使用 YUM downgrade 命令回滚升级。

  1. #yum downgrade git-1.7.1-8.el6 perl-Git-1.7.1-8.el6
  2. Loaded plugins: search-disabled-repos, security, ulninfo
  3. Setting up DowngradeProcess
  4. ResolvingDependencies
  5. -->Running transaction check
  6. --->Packagegit.x86_64 0:1.7.1-8.el6 will be a downgrade
  7. --->Packagegit.x86_64 0:1.7.1-9.el6_9 will be erased
  8. --->Package perl-Git.noarch 0:1.7.1-8.el6 will be a downgrade
  9. --->Package perl-Git.noarch 0:1.7.1-9.el6_9 will be erased
  10. -->FinishedDependencyResolution
  11. DependenciesResolved
  12. =================================================================================================
  13. PackageArchVersionRepositorySize
  14. =================================================================================================
  15. Downgrading:
  16. git x86_64 1.7.1-8.el6 base 4.6 M
  17. perl-Git noarch 1.7.1-8.el6 base 29 k
  18. TransactionSummary
  19. =================================================================================================
  20. Downgrade2Package(s)
  21. Total download size:4.6 M
  22. Isthis ok [y/N]: y
  23. DownloadingPackages:
  24. (1/2):git-1.7.1-8.el6.x86_64.rpm |4.6 MB 00:00
  25. (2/2): perl-Git-1.7.1-8.el6.noarch.rpm |28 kB 00:00
  26. -------------------------------------------------------------------------------------------------
  27. Total3.7 MB/s |4.6 MB 00:01
  28. Running rpm_check_debug
  29. RunningTransactionTest
  30. TransactionTestSucceeded
  31. RunningTransaction
  32. Installing: perl-Git-1.7.1-8.el6.noarch1/4
  33. Installing:git-1.7.1-8.el6.x86_64 2/4
  34. Cleanup: perl-Git-1.7.1-9.el6_9.noarch3/4
  35. Cleanup:git-1.7.1-9.el6_9.x86_64 4/4
  36. Verifying:git-1.7.1-8.el6.x86_64 1/4
  37. Verifying: perl-Git-1.7.1-8.el6.noarch2/4
  38. Verifying:git-1.7.1-9.el6_9.x86_64 3/4
  39. Verifying: perl-Git-1.7.1-9.el6_9.noarch4/4
  40. Removed:
  41. git.x86_64 0:1.7.1-9.el6_9 perl-Git.noarch 0:1.7.1-9.el6_9
  42. Installed:
  43. git.x86_64 0:1.7.1-8.el6 perl-Git.noarch 0:1.7.1-8.el6
  44. Complete!

注意: 你也需要降级依赖包,否则它会删掉当前版本的依赖包而不是对依赖包做降级,因为 downgrade 命令无法处理依赖关系。

 

至于 Fedora 用户

命令是一样的,只需要将包管理器名称从 yum 改成 dnf 就行了。

  1. # dnf listgit
  2. # dnf history
  3. # dnf history info
  4. # dnf history undo
  5. # dnf listgit
  6. # dnf downgrade git-1.7.1-8.el6 perl-Git-1.7.1-8.el6

via: https://www.2daygeek.com/rollback-fallback-updates-downgrade-packages-centos-rhel-fedora/

作者:2daygeek 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

本文永久更新链接地址http://www.linuxidc.com/Linux/2018-01/150414.htm

linux
相关资讯       Yum命令  history命令 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款