歡迎光臨
每天分享高質量文章

在 RHEL/CentOS 系統上使用 YUM history 命令回滾升級操作 | Linux 中國

yum history 命令允許系統管理員將系統回滾到上一個狀態,但由於某些限制,回滾不是在所有情況下都能成功,有時 yum 命令可能什麼都不做,有時可能會刪掉一些其他的包。
— 2daygeek


本文導航
編譯自 | https://www.2daygeek.com/rollback-fallback-updates-downgrade-packages-centos-rhel-fedora/ 
 作者 | 2daygeek
 譯者 | lujun9972

為伺服器打補丁是 Linux 系統管理員的一項重要任務,為的是讓系統更加穩定,效能更加最佳化。廠商經常會釋出一些安全/高危的補丁包,相關軟體需要升級以防範潛在的安全風險。

Yum (Yellowdog Update Modified) 是 CentOS 和 RedHat 系統上用的 RPM 包管理工具,yum history 命令允許系統管理員將系統回滾到上一個狀態,但由於某些限制,回滾不是在所有情況下都能成功,有時 yum 命令可能什麼都不做,有時可能會刪掉一些其他的包。

我建議你在升級之前還是要做一個完整的系統備份,而 yum history 並不能用來替代系統備份的。系統備份能讓你將系統還原到任意時候的節點狀態。

推薦閱讀:

◈ 在 RHEL/CentOS 系統上使用 YUM 命令管理軟體包[1]
◈ 在 Fedora 系統上使用 DNF (YUM 的一個分支)命令管理軟體包 [2]
◈ 如何讓 history 命令顯示日期和時間[3]

某些情況下,安裝的應用程式在升級了補丁之後不能正常工作或者出現一些錯誤(可能是由於庫不相容或者軟體包升級導致的),那該怎麼辦呢?

與應用開發團隊溝通,並找出導致庫和軟體包的問題所在,然後使用 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 Update Process

  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. Resolving Dependencies

  17. --> Running transaction check

  18. ---> Package git.x86_64 0:1.7.1-8.el6 will be updated

  19. ---> Package git.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. --> Finished Dependency Resolution

  27. Dependencies Resolved

  28. =================================================================================================

  29. Package Arch Version Repository Size

  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. Transaction Summary

  37. =================================================================================================

  38. Upgrade 4 Package(s)

  39. Total download size: 5.5 M

  40. Is this ok [y/N]: n

你會發現 git 包可以被升級,那我們就用它來實驗吧。執行下麵命令獲得軟體包的版本資訊(當前安裝的版本和可以升級的版本)。

  1. # yum list git

  2. Loaded plugins: fastestmirror, security

  3. Setting up Update Process

  4. Loading mirror speeds from cached hostfile

  5. * epel: mirror.csclub.uwaterloo.ca

  6. Installed Packages

  7. git.x86_64 1.7.1-8.el6 @base

  8. Available Packages

  9. git.x86_64 1.7.1-9.el6_9 updates

執行下麵命令來將 git 從 1.7.1-8 升級到 1.7.1-9

  1. # yum update git

  2. Loaded plugins: fastestmirror, presto

  3. Setting up Update Process

  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. Resolving Dependencies

  10. --> Running transaction check

  11. ---> Package git.x86_64 0:1.7.1-8.el6 will be updated

  12. --> Processing Dependency: git = 1.7.1-8.el6 for package: perl-Git-1.7.1-8.el6.noarch

  13. ---> Package git.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. --> Finished Dependency Resolution

  18. Dependencies Resolved

  19. =================================================================================================

  20. Package Arch Version Repository Size

  21. =================================================================================================

  22. Updating:

  23. git x86_64 1.7.1-9.el6_9 updates 4.6 M

  24. Updating for dependencies:

  25. perl-Git noarch 1.7.1-9.el6_9 updates 29 k

  26. Transaction Summary

  27. =================================================================================================

  28. Upgrade 2 Package(s)

  29. Total download size: 4.6 M

  30. Is this ok [y/N]: y

  31. Downloading Packages:

  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. Total 5.8 MB/s | 4.6 MB 00:00

  39. Running rpm_check_debug

  40. Running Transaction Test

  41. Transaction Test Succeeded

  42. Running Transaction

  43. Updating : perl-Git-1.7.1-9.el6_9.noarch 1/4

  44. Updating : git-1.7.1-9.el6_9.x86_64 2/4

  45. Cleanup : perl-Git-1.7.1-8.el6.noarch 3/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.noarch 2/4

  49. Verifying : git-1.7.1-8.el6.x86_64 3/4

  50. Verifying : perl-Git-1.7.1-8.el6.noarch 4/4

  51. Updated:

  52. git.x86_64 0:1.7.1-9.el6_9

  53. Dependency Updated:

  54. perl-Git.noarch 0:1.7.1-9.el6_9

  55. Complete!

驗證升級後的 git 版本.

  1. # yum list git

  2. Installed Packages

  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 | Date and time | Action(s) | Altered

  5. -------------------------------------------------------------------------------

  6. 13 | root | 2017-08-18 13:30 | Update | 2

  7. 12 | root | 2017-08-10 07:46 | Install | 1

  8. 11 | root | 2017-07-28 17:10 | E, I, U | 28 EE

  9. 10 | root | 2017-04-21 09:16 | E, I, U | 162 EE

  10. 9 | root | 2017-02-09 17:09 | E, I, U | 20 EE

  11. 8 | root | 2017-02-02 10:45 | Install | 1

  12. 7 | root | 2016-12-15 06:48 | Update | 1

  13. 6 | root | 2016-12-15 06:43 | Install | 1

  14. 5 | root | 2016-12-02 10:28 | E, I, U | 23 EE

  15. 4 | root | 2016-10-28 05:37 | E, I, U | 13 EE

  16. 3 | root | 2016-10-18 12:53 | Install | 1

  17. 2 | root | 2016-09-30 10:28 | E, I, U | 31 EE

  18. 1 | root | 2016-07-26 11:40 | E, I, U | 160 EE

上面命令顯示有兩個包受到了影響,因為 git 還升級了它的依賴包 perl-Git。 執行下麵命令來檢視關於操作的詳細資訊。

  1. # yum history info 13

  2. Loaded plugins: fastestmirror, presto

  3. Transaction ID : 13

  4. Begin time : Fri Aug 18 13:30:52 2017

  5. Begin rpmdb : 420:f5c5f9184f44cf317de64d3a35199e894ad71188

  6. End time : 13:30:54 2017 (2 seconds)

  7. End rpmdb : 420:d04a95c25d4526ef87598f0dcaec66d3f99b98d4

  8. User : root

  9. Return-Code : Success

  10. Command Line : update git

  11. Transaction performed with:

  12. Installed rpm-4.8.0-55.el6.x86_64 @base

  13. Installed yum-3.2.29-81.el6.centos.noarch @base

  14. Installed yum-plugin-fastestmirror-1.1.30-40.el6.noarch @base

  15. Installed yum-presto-0.6.2-1.el6.noarch @anaconda-CentOS-201207061011.x86_64/6.3

  16. Packages Altered:

  17. Updated git-1.7.1-8.el6.x86_64 @base

  18. Update 1.7.1-9.el6_9.x86_64 @updates

  19. Updated perl-Git-1.7.1-8.el6.noarch @base

  20. Update 1.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, from Fri Aug 18 13:30:52 2017

  4. Updated git-1.7.1-8.el6.x86_64 @base

  5. Update 1.7.1-9.el6_9.x86_64 @updates

  6. Updated perl-Git-1.7.1-8.el6.noarch @base

  7. Update 1.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. Resolving Dependencies

  14. --> Running transaction check

  15. ---> Package git.x86_64 0:1.7.1-8.el6 will be a downgrade

  16. ---> Package git.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. --> Finished Dependency Resolution

  20. Dependencies Resolved

  21. =================================================================================================

  22. Package Arch Version Repository Size

  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. Transaction Summary

  28. =================================================================================================

  29. Downgrade 2 Package(s)

  30. Total download size: 4.6 M

  31. Is this ok [y/N]: y

  32. Downloading Packages:

  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. Total 3.4 MB/s | 4.6 MB 00:01

  40. Running rpm_check_debug

  41. Running Transaction Test

  42. Transaction Test Succeeded

  43. Running Transaction

  44. Installing : perl-Git-1.7.1-8.el6.noarch 1/4

  45. Installing : git-1.7.1-8.el6.x86_64 2/4

  46. Cleanup : perl-Git-1.7.1-9.el6_9.noarch 3/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.noarch 2/4

  50. Verifying : git-1.7.1-9.el6_9.x86_64 3/4

  51. Verifying : perl-Git-1.7.1-9.el6_9.noarch 4/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. # yum list git

  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 Downgrade Process

  4. Resolving Dependencies

  5. --> Running transaction check

  6. ---> Package git.x86_64 0:1.7.1-8.el6 will be a downgrade

  7. ---> Package git.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. --> Finished Dependency Resolution

  11. Dependencies Resolved

  12. =================================================================================================

  13. Package Arch Version Repository Size

  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. Transaction Summary

  19. =================================================================================================

  20. Downgrade 2 Package(s)

  21. Total download size: 4.6 M

  22. Is this ok [y/N]: y

  23. Downloading Packages:

  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. Total 3.7 MB/s | 4.6 MB 00:01

  28. Running rpm_check_debug

  29. Running Transaction Test

  30. Transaction Test Succeeded

  31. Running Transaction

  32. Installing : perl-Git-1.7.1-8.el6.noarch 1/4

  33. Installing : git-1.7.1-8.el6.x86_64 2/4

  34. Cleanup : perl-Git-1.7.1-9.el6_9.noarch 3/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.noarch 2/4

  38. Verifying : git-1.7.1-9.el6_9.x86_64 3/4

  39. Verifying : perl-Git-1.7.1-9.el6_9.noarch 4/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 list git

  2. # dnf history

  3. # dnf history info

  4. # dnf history undo

  5. # dnf list git

  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[5] 譯者:lujun9972 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

LCTT 譯者

lujun9972 ? ? ? ?
共計翻譯:72 篇
貢獻時間:49 天


推薦文章

< 左右滑動檢視相關文章 >

點選圖片、輸入文章 ID 或識別二維碼直達

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖