sudo apt-get update 升級問題

·

sudo apt-get update

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?

https://stackoverflow.com/questions/41456504/what-is-etc-apt-apt-conf-d-50unattended-upgrades-ucf-old-and-can-i-safely-delet

作筆記給自己補腦一下:

常用的 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

hosted by kinsta

Comments

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Hey, 想嘗試 Kinsta 主機嗎?

18748

Kinsta 高效能主機

wPowered Starter 方案

馬上訂購

18749
Your Mastodon Instance