Linux-Kernel

為什麼 apt autoremove 不會一次刪除所有舊核心包?

  • January 12, 2018

自從他們發布了 Meltdown 漏洞更新檔以來,我一直在升級我們的 Ubuntu 伺服器的核心。我注意到幾乎在所有伺服器上,重新啟動後我必須執行apt autoremove兩次才能清理系統上仍然存在的所有舊核心。

如果我第一次執行它,它首先會刪除兩個舊版本的核心:

% sudo apt autoremove
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
 linux-headers-4.4.0-103 linux-headers-4.4.0-103-generic linux-headers-4.4.0-104 linux-headers-4.4.0-104-generic linux-image-4.4.0-103-generic linux-image-4.4.0-104-generic
 linux-image-extra-4.4.0-103-generic linux-image-extra-4.4.0-104-generic
0 upgraded, 0 newly installed, 8 to remove and 2 not upgraded.
After this operation, 596 MB disk space will be freed.

但是,在它完成後我apt autoremove再次執行,它刪除了一個舊版本:

% sudo apt autoremove
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
 linux-headers-4.4.0-96 linux-headers-4.4.0-96-generic linux-image-4.4.0-96-generic linux-image-extra-4.4.0-96-generic
0 upgraded, 0 newly installed, 4 to remove and 2 not upgraded.
After this operation, 298 MB disk space will be freed.

我想知道,為什麼它不能一次性做到這一點?

核心的維護者腳本,特別/etc/kernel/postinst.d/apt-auto-removal是建構一個要保留的核心列表,作為 APT 配置儲存在/etc/apt/apt.conf.d/01autoremove-kernels. 此程序保留目前執行的核心、正在配置的核心以及兩個最新安裝的核心。

大概是在您第一次清理之前最後一次執行腳本時,-96由於它屬於其中一個類別,因此最終受到保護。在您第一次清理後,它不再這樣做並成為移除的候選對象。如果您想弄清楚原因,該01autoremove-kernels文件包含調試資訊;在第一次清理之前和之後再次查看它,應該會揭示為什麼各種核心版本受到保護。

核心自動刪除是有目的的保守和謹慎的錯誤。unattended-upgrades您可以使用;自動(最終)處理這個問題 有關詳細資訊,請參閱Ubuntu 維基

引用自:https://unix.stackexchange.com/questions/416540