web-dev-qa-db-ja.com

カーネルパッケージの保持の背後にあるロジックは何ですか?

Ubuntu 16.04以降でapt-get upgradeを実行することに関して、もう少し知識のある人が何かを説明できることを期待しています。

私が見ている振る舞いは、apt-get upgradeが新しいカーネルパッケージをインストールしない場合があり、時には:

すなわち、出力から:

The following packages have been kept back:
linux-generic linux-headers-generic linux-image-generic linux-tools-generic

I dodist-upgradeを実行するとそれらのパッケージがインストールされることを知っています(その答えを繰り返さないでください:-)。私が知らないのは、それらのパッケージの保留を制御していることです。
apt-get upgradeを実行すると、時々新しいカーネルがインストールされ、パッケージが保持される場合があります。

これらの保留はCanonical自体によって設定されていますか?それは他のパッケージの依存関係に関連していますか?

4
Dave LeFevre

apt-get upgradeコマンドは、パッケージを新しいバージョンにアップグレードするだけです。新しいパッケージをインストールしたり、パッケージをアップグレードするためにパッケージを削除したりしません。

カーネルをアップグレードするとき、実際には新しいカーネルをインストールしています。 Ubuntuはカーネルをアップグレードせず、古いカーネルを保持したまま新しいカーネルをインストールします。

しかし、なぜ?なぜ最新バージョンにアップグレードするのではなく、新しいバージョンのカーネルをインストールするのですか?答えは安定性のためです。

カーネルのアップグレード後に何が起こるかわかりません。システムの起動に失敗したり、ハードウェアを正しく動作させられない可能性があります。常に古いバージョンを保持する必要がありますので、問題が発生した場合でもマシンが動作します。

動作中のカーネルをアップグレードしないでください。

Slackware システムアップグレードガイド と言います。


詳細情報

man apt-get

現在、インストールされているパッケージが削除されたり、まだインストールされていないパッケージが取得およびインストールされたりすることはありません。別のパッケージのインストールステータスを変更せずにアップグレードできない現在インストールされているパッケージの新しいバージョンは、現在のバージョンのままになります。

ただし、ご存じのとおり、apt-get dist-upgradeまたはapt upgradeを使用して、これらの「保持された」パッケージもインストールできます。

$ apt-cache search linux-image-4.4.*-generic | tail -3
linux-image-4.4.0-75-generic - Linux kernel image for version 4.4.0 on 64 bit x86 SMP
linux-image-4.4.0-77-generic - Linux kernel image for version 4.4.0 on 64 bit x86 SMP
linux-image-4.4.0-78-generic - Linux kernel image for version 4.4.0 on 64 bit x86 SMP

見る?これらは異なるパッケージであるため、アップグレードではなく新規インストールです。

5
Ravexina