treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

Debianで「以下のパッケージは保留されます:」に遭遇

Debianで稼働しているサーバで保留されているパッケージを発見したので対処、そのときの様子をご報告です。

初心者向けの内容、通常のupgradeで適用されないアップデートはdist-upgradeを利用する、という話をちょっとしたTIPS付きで。

きっかけ

Debianで稼働するサーバにBIND9セキュリティ脆弱性の対処(アップデート適用)を実施後、気づいた動き。
本題と関係ないけど、BIND9セキュリティ脆弱性は
https://www.jpcert.or.jp/at/2020/at200035.html
DoS防止などの観点から必要。

アップデートしたら、保留パッケージに遭遇。

f:id:treedown:20200904145327p:plain
--------------------------------------------------------------
$ sudo apt-get update
  ※省略
$ sudo apt-get upgrade
  ※中略
アップグレードパッケージを検出しています... 完了
以下のパッケージは保留されます:
linux-image-686-pae
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
--------------------------------------------------------------

この「保留: 1 個」が今回の対処する対象。

一度確認してみよう。

保留されたパッケージは「何か問題があって適用されないか」「別のコマンドを使って適用する必要がある」のいずれかであることがほとんどです。

確認のため、apt(apt-get)コマンドに「list --upgradable」と付与して実行すると、保留されたパッケージの詳細をみることができます。

f:id:treedown:20200904145502p:plain
--------------------------------------------------------------
$ sudo apt list --upgradable
一覧表示... 完了
linux-image-686-pae/oldstable 4.9+80+deb9u11 i386 [4.9+80+deb9u10 からアップグレード可]
N: 追加バージョンが 2 件あります。表示するには '-a' スイッチを付けてください。
--------------------------------------------------------------
linux-image-686-paeが4.9+80+deb9u10バージョンから4.9+80+deb9u11バージョンへのアップグレードがリリースされたことで、保留パッケージが出てきたということのよう。
コメントにある「-a」オプションも付与して実行してみると、
--------------------------------------------------------------
$ sudo apt list --upgradable -a
一覧表示... 完了
linux-image-686-pae/oldstable 4.9+80+deb9u11 i386 [4.9+80+deb9u10 からアップグレード可]
linux-image-686-pae/now 4.9+80+deb9u10 i386 [インストール済み、4.9+80+deb9u11 にアップグレード可]
linux-image-686-pae/oldstable 4.9+80+deb9u6 i386
--------------------------------------------------------------
より詳細が閲覧できます。バージョン4.9+80+deb9u10からバージョン4.9+80+deb9u11へのアップグレードが保留パッケージの要因なことと、現在の当該バージョン(インストール済)は「linux-image-686-pae/now 4.9+80+deb9u10 i386」だよ、ということが分ります。ちなみに「linux-image-686-pae/oldstable 4.9+80+deb9u6 i386」とあるのは、アップグレード対象の「4.9+80+deb9u10」の一つ前のバージョンを示している(と思う)

しかし、(某10というOSみたいに)ユーザの意思を置き去りにしてまでもアップグレードは勝手に適用されない。さすがはDebian。手動で実行。

適用前のテスト動作と実際の適用

手動でアップグレードにカテゴリ分けされたバージョンアップを適用するには通常の「apt-get upgrade」では適用できず、「apt-get dist-upgrade」が必要になります。

まずはシミュレーションモード(実際に実行しないけど、実行した場合どうなるかを確認出来るモード)でエラーが発生しないことを確認してみます。

f:id:treedown:20200904145601p:plain
-------------------------------------------------------------
$ sudo apt-get -s dist-upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージが新たにインストールされます:
linux-image-4.9.0-13-686-pae
以下のパッケージはアップグレードされます:
linux-image-686-pae
アップグレード: 1 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
Inst linux-image-4.9.0-13-686-pae (4.9.228-1 Debian:9.13/oldstable [i386])
Inst linux-image-686-pae [4.9+80+deb9u10] (4.9+80+deb9u11 Debian:9.13/oldstable [i386])
Conf linux-image-4.9.0-13-686-pae (4.9.228-1 Debian:9.13/oldstable [i386])
Conf linux-image-686-pae (4.9+80+deb9u11 Debian:9.13/oldstable [i386])
--------------------------------------------------------------

エラーは特に出ない実行してもよさそう。アップグレードを実行(実際に適用を実施)します。

--------------------------------------------------------------
$ sudo apt-get dist-upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージが新たにインストールされます:
linux-image-4.9.0-13-686-pae
以下のパッケージはアップグレードされます:
linux-image-686-pae
アップグレード: 1 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
38.1 MB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 142 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y
changelog を読んでいます... 完了
 ※中略
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-4.9.0-13-686-pae
Found initrd image: /boot/initrd.img-4.9.0-13-686-pae
Linux イメージを見つけました: /boot/vmlinuz-4.9.0-12-686-pae
Found initrd image: /boot/initrd.img-4.9.0-12-686-pae
Linux イメージを見つけました: /boot/vmlinuz-4.9.0-11-686-pae
Found initrd image: /boot/initrd.img-4.9.0-11-686-pae
完了
linux-image-686-pae (4.9+80+deb9u11) を設定しています ...
--------------------------------------------------------------

途中で「W: Possible missing firmware /lib/firmware/e100/d101m_ucode.bin for module e100」が出たものの、これは<Debianのapt-get upgradeでやたらとWarningがでる原因 - treedown’s Report>の件なので今回とは関係なし。

無事アップグレードは最後まで実行されました。

これで保留されたパッケージが
--------------------------------------------------------------
$ sudo apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
--------------------------------------------------------------
表示されなくなりました。