Debian 套件安裝升級後 如何降版還原(Rollback)

Debin / Ubuntu Linux 都是使用 APT + Dpkg 來管理套件,安裝 deb 檔,若遇到新版套件安裝後,發現到有問題,要怎麼還原回前一個版本呢?(或者說是降版)

Debian 套件 安裝/升級,如何降級(Downgrade)還原(Rollback)

apt 安裝新版的套件後,發現新版的不穩定,需要 rollback,有幾個步驟要做:

  1. 查詢最近安裝的歷史紀錄,找到上一版的版本編號
  2. 使用 dpkg --force-downgrade -i 或 apt-get -s install 來降級

查詢最近安裝的歷史紀錄,在 /var/log/dpkg.log 可以查到,版本編號也在裡面,不過得要再做點整理才能方便 apt 或 dpkg 直接操作。

此篇文章 Can I rollback an apt-get upgrade if something goes wrong? 有寫好 apt-history 的 function 可以使用(建議直接加入 .bashrc)

  1. function apt-history() {
  2. case "$1" in
  3. install)
  4. cat /var/log/dpkg.log | grep 'install '
  5. ;;
  6. upgrade|remove)
  7. cat /var/log/dpkg.log | grep $1
  8. ;;
  9. rollback)
  10. cat /var/log/dpkg.log | grep upgrade | \
  11. grep "$2" -A10000000 | \
  12. grep "$3" -B10000000 | \
  13. awk '{print $4"="$5}'
  14. ;;
  15. *)
  16. cat /var/log/dpkg.log
  17. ;;
  18. esac
  19. }

直接執行全部 rollback:apt-get -s install $(apt-history rollback | tr '\n' ' ')

  1. apt-history rollback > rollback.txt
  2. apt-get -s install $(cat rollback.txt | tr '\n' ' ')
  3. 或 apt-get install $(cat rollback.txt | tr '\n' ' ')

查到版本的編號,要直接指定版本的 apt / dpkg 指令如下述:(下述 dpkg 命令是從自己機器的之前版本直接抓取安裝)

  • sudo dpkg --force-downgrade -i /var/cache/apt/archives/percona-server-common-5.75.7.17-11-1.jessieamd64.deb /var/cache/apt/archives/percona-server-server-5.75.7.17-11-1.jessieamd64.deb /var/cache/apt/archives/percona-server-client-5.75.7.17-11-1.jessieamd64.deb
  • sudo apt-get install percona-server-common-5.7=5.7.17-11-1.jessie percona-server-server-5.7=5.7.17-11-1.jessie percona-server-client-5.7=5.7.17-11-1.jessie

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料