Debin / Ubuntu Linux 都是使用 APT + Dpkg 來管理套件,安裝 deb 檔,若遇到新版套件安裝後,發現到有問題,要怎麼還原回前一個版本呢?(或者說是降版)
Debian 套件 安裝/升級,如何降級(Downgrade)還原(Rollback)
apt 安裝新版的套件後,發現新版的不穩定,需要 rollback,有幾個步驟要做:
- 查詢最近安裝的歷史紀錄,找到上一版的版本編號
- 使用 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)
function apt-history() {
case "$1" in
install)
cat /var/log/dpkg.log | grep 'install '
;;
upgrade|remove)
cat /var/log/dpkg.log | grep $1
;;
rollback)
cat /var/log/dpkg.log | grep upgrade | \
grep "$2" -A10000000 | \
grep "$3" -B10000000 | \
awk '{print $4"="$5}'
;;
*)
cat /var/log/dpkg.log
;;
esac
}
直接執行全部 rollback:apt-get -s install $(apt-history rollback | tr '\n' ' ')
- apt-history rollback > rollback.txt
- apt-get -s install $(cat rollback.txt | tr '\n' ' ')
- 或 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