
私はMeltdownパッチをリリースして以来、Ubuntuサーバーのカーネルをアップグレードしてきました。私は、ほぼすべてのサーバーでapt autoremove
システムにまだ存在する古いカーネルをクリーンアップするために、再起動後にこのプログラムを2回実行する必要があることに気づきました。
初めて実行すると、最初に2つの古いバージョンのカーネルが削除されます。
% 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.
なぜ一度にできないのだろうか。
答え1
具体的には、カーネルのメンテナンススクリプトは/etc/kernel/postinst.d/apt-auto-removal
カーネルリストを作成し、それをAPT設定として保持して保存します/etc/apt/apt.conf.d/01autoremove-kernels
。このプロセスは、現在実行中のカーネル、構成中のカーネル、および最近インストールされた2つのカーネルを保持します。
おそらく、最初のクリーンアップの前にスクリプトが最後に実行されたときに-96
これらのカテゴリの1つに属していたため、最終的に保護されました。最初のクリーンアップ後は機能しなくなり、削除候補になります。把握したいならなぜ、この01autoremove-kernels
ファイルにはデバッグ情報が含まれています。最初のクリーンアップの前後にもう一度見てみると、他のカーネルバージョンが保護されている理由がわかります。
カーネルの自動除去は意図的に保守的で過度に慎重です。 ;を使用すると、自動的に(最終的に)それを処理できますunattended-upgrades
。バラよりUbuntu Wikiもっと学ぶ。