Photo by Evie S. on Unsplash
在 VPS ubuntu 16.04 執行 sudo apt-get update 升級指令時,出現 The following packages have been kept back 的訊息,有 XX 個程序不能更新,就如下:
The following packages have been kept back:
libssl-dev openssl php5.6-bcmath php5.6-cli php5.6-common php5.6-curl php5.6-fpm php5.6-gd php5.6-imap
php5.6-json php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-opcache php5.6-readline php5.6-recode php5.6-soap
php5.6-xml php5.6-zip php7.0-bcmath php7.0-cli php7.0-common php7.0-curl php7.0-fpm php7.0-gd php7.0-imap
php7.0-json php7.0-mbstring php7.0-mcrypt php7.0-mysql php7.0-opcache php7.0-readline php7.0-recode php7.0-soap
php7.0-xml php7.0-zip
0 upgraded, 0 newly installed, 0 to remove and 36 not upgraded.
這有可能會因為部份 packages 的安裝版本比 release 版更新而出現這個問題,解決方法是使用下面的指令,統一更新到發佈的版本,記得先鏡像備份主機,避免出錯。
apt-get -u dist-upgrade
另外一個錯誤,也造成升級失敗,錯誤碼如下:
N: Ignoring file '50unattended-upgrades.ucf-dist' in directory '/etc/apt/apt.conf.d/' as it has an invalid filename extension
查了一下資料,這可能是之前升級前遺留下來的文件,可以將它刪除。
sudo rm /etc/apt/apt.conf.d/50unattended-upgrades.ucf-dist
再執行一次升級指令:
sudo apt-get update && sudo apt-get upgrade
參考資料:
[SOLVED] apt-get error
https://ubuntuforums.org/showthread.php?t=1897475
What is /etc/apt/apt.conf.d/50unattended-upgrades.ucf-old and can I safely delete it?
作筆記給自己補腦一下:
常用的 APT 命令參數:
apt-cache search package //尋找 package
apt-cache show package //顯示 package 的相關信息
apt-cache depends package //瞭解使用依賴
apt-cache rdepends package //查看該包被哪些包依賴
sudo apt-get install package //安裝 package
sudo apt-get install package – – reinstall //重新安裝 package
sudo apt-get -f install //修復安裝 (-f = ——fix-missing)
sudo apt-get remove package //刪除 package
sudo apt-get remove package – – purge //刪除 package,包括刪除配置文件
sudo apt-get update //從 APT 伺服器中同步本機的套件檔案清單
sudo apt-get upgrade //升級已安裝的 package
sudo apt-get dist-upgrade //升級系統
apt-get dist-upgrade 在升級的同時會為了解決相依性而安裝新套件,而 apt-get upgrade 並不會。
詳細的說明 apt-get upgrade 和 apt-get dist-upgrade 的差別:
- apt-get upgrade 是系統將現有的 Package 升級,如果有相依性的問題,而此相依性需要安裝其它新的 Package 或影響到其它 Package 的相依性時,此 Package 就不會被升級,會保留下來。
- apt-get dist-upgrade 可以解決相依性的問題,如果有相依性問題,需要安裝 / 移除新的 Package,就會試著去安裝 / 移除它,所以這樣的升級會被認為是有點風險的升級。( 升級前請先備份系統 )
sudo apt-get clean && sudo apt-get autoclean //清理下載的 package
當使用 apt-get install 指令安裝套件,下載下來的 package 會放置於 /var/cache/apt/archives,使用 apt-get clean 指令可以將之清除,避免佔用硬碟空間。
2017/08/13 補充:
今天更新一台 VPS 主機時,更新到一半時主機斷線,再連上線時,出現錯誤碼:
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
資料夾裡面的檔案有問題,使得更新套件出現錯誤,所以把它完全刪除。
sudo rm /var/lib/dpkg/updates/*
sudo apt-get update
參考資料:
Some upgrades show packages being kept back
https://debian-administration.org/article/69/Some_upgrades_show_packages_being_kept_back

發佈留言