[Ubuntu] セキュリティアップデートの自動インストール に書いたように、セキュリティアップデートを自動で適用しています。先日、別の作業で、サーバーにログインしてみると、セキュリティアップデートの適用に失敗していることに気づきました。
今回、これを修復するにあたって行った作業を、自分の作業記録代わりにまとめておきます。なにぶん慣れない作業だったので、あれこれ試したことも書いていますので、ご容赦ください。
セキュリティアップデートのログは、 /var/log/unattended-upgrades 以下に保存されているので、ログファイルを調べるとカーネルヘッダのアップデートの際にエラーが起きてました。
2015-08-18 06:48:35,902 INFO 許可されているパッケージ導入元: ['o=Ubuntu,a=precise-security']
2015-08-18 06:50:36,988 INFO Packages that are upgraded: linux-headers-virtual linux-image-virtual linux-libc-dev linux-virtual
2015-08-18 06:50:36,989 INFO dpkg のログを '/var/log/unattended-upgrades/unattended-upgrades-dpkg_2015-08-18_06:50:36.988737.log' に書き込み中
2015-08-18 06:51:06,919 ERROR アップグレードのインストールが失敗しました!
2015-08-18 06:51:06,920 ERROR エラーメッセージ: 'installArchives() failed'
さらに詳細にログを見ると、ディスク容量不足とありました。ちなみに、インストールに失敗したのは、linux-headers-3.2.0-89 および linux-headers-3.2.0-89-virtual パッケージのインストールでした。
なお、現時点で動作しているカーネルのバージョンは、
bitnami@ip-10-132-190-144:~$ uname -r
3.2.0-88-virtual
bitnami@ip-10-132-190-144:~$
でした。
なにはともあれ、まずは不要なファイルを削除して、再度インストールすればいいかと思い、
bitnami@ip-10-132-190-144:~$ sudo apt-get update
bitnami@ip-10-132-190-144:~$ sudo apt-get -f install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
linux-image-3.2.0-76-virtual
(略)
linux-headers-3.2.0-65-virtual
これらを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
linux-headers-3.2.0-90 linux-headers-3.2.0-90-virtual linux-headers-virtual linux-image-3.2.0-90-virtual linux-image-virtual linux-virtual
提案パッケージ:
fdutils linux-doc-3.2.0 linux-source-3.2.0 linux-tools
以下のパッケージが新たにインストールされます:
linux-headers-3.2.0-90 linux-headers-3.2.0-90-virtual linux-image-3.2.0-90-virtual
以下のパッケージはアップグレードされます:
linux-headers-virtual linux-image-virtual linux-virtual
アップグレード: 3 個、新規インストール: 3 個、削除: 0 個、保留: 177 個。
5 個のパッケージが完全にインストールまたは削除されていません。
25.6 MB のアーカイブを取得する必要があります。
この操作後に追加で 104 MB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main linux-image-3.2.0-90-virtual amd64 3.2.0-90.128 [12.9 MB]
取得:2 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main linux-virtual amd64 3.2.0.90.104 [1,760 B]
取得:3 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main linux-image-virtual amd64 3.2.0.90.104 [2,318 B]
取得:4 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main linux-headers-3.2.0-90 all 3.2.0-90.128 [11.7 MB]
取得:5 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main linux-headers-3.2.0-90-virtual amd64 3.2.0-90.128 [978 kB]
取得:6 http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ precise-updates/main linux-headers-virtual amd64 3.2.0.90.104 [2,286 B]
25.6 MB を 1秒 で取得しました (22.8 MB/s)
Selecting previously unselected package linux-image-3.2.0-90-virtual.
(データベースを読み込んでいます ... 現在 566980 個のファイルとディレクトリがインストールされています。)
(.../linux-image-3.2.0-90-virtual_3.2.0-90.128_amd64.deb から) linux-image-3.2.0-90-virtual を展開しています...
Done.
Selecting previously unselected package linux-headers-3.2.0-90.
(.../linux-headers-3.2.0-90_3.2.0-90.128_all.deb から) linux-headers-3.2.0-90 を展開しています...
dpkg: /var/cache/apt/archives/linux-headers-3.2.0-90_3.2.0-90.128_all.deb の処理中にエラーが発生しました (--unpack):
ディレクトリ `./usr/src/linux-headers-3.2.0-90/arch/ia64/include/asm/uv' の作成中にエラーが発生しました: デバイスに空き領域がありません
MaxReports にすでに達しているため、レポートは書き込まれません
dpkg-deb: error: subprocess ペースト was killed by signal (Broken pipe)
Selecting previously unselected package linux-headers-3.2.0-90-virtual.
(.../linux-headers-3.2.0-90-virtual_3.2.0-90.128_amd64.deb から) linux-headers-3.2.0-90-virtual を展開しています...
dpkg: /var/cache/apt/archives/linux-headers-3.2.0-90-virtual_3.2.0-90.128_amd64.deb の処理中にエラーが発生しました (--unpack):
(`./usr/src/linux-headers-3.2.0-90-virtual/scripts/recordmcount' の処理中に) `/usr/src/linux-headers-3.2.0-90-virtual/scripts/recordmcount.dpkg-new' の作成に失敗しました: デバイスに空き領域がありません
MaxReports にすでに達しているため、レポートは書き込まれません
dpkg-deb: error: subprocess ペースト was killed by signal (Broken pipe)
以下のパッケージの処理中にエラーが発生しました:
/var/cache/apt/archives/linux-headers-3.2.0-90_3.2.0-90.128_all.deb
/var/cache/apt/archives/linux-headers-3.2.0-90-virtual_3.2.0-90.128_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
bitnami@ip-10-132-190-144:~$
と実行しても、やはり同じようにディスクに空きがなくてエラーになってしまいます。
dfで確認すると
bitnami@ip-10-132-190-144:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda1 10321208 7680236 2116688 79% /
udev 293896 8 293888 1% /dev
tmpfs 60432 168 60264 1% /run
none 5120 0 5120 0% /run/lock
none 302152 0 302152 0% /run/shm
bitnami@ip-10-132-190-144:~$
となっており、容量的には約2G近く空いてます。
なんか妙だなとおもって、ひょっとしてiノードが足りなかったりして、まさかねと思って調べてみると
bitnami@ip-10-132-190-144:~$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda1 655360 648599 6761 99% /
udev 73474 377 73097 1% /dev
tmpfs 75538 254 75284 1% /run
none 75538 3 75535 1% /run/lock
none 75538 1 75537 1% /run/shm
bitnami@ip-10-132-190-144:~$
あぁ・・・。どうもあたりだったようです。話としては、iノードが不足するとファイルを作れなくなると聞いてましたが、まさか本当に起きるなんてびっくりです。
ということで、先に不要なパッケージを削除してみます。
bitnami@ip-10-132-190-144:~$ sudo apt-get autoremove
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt-get -f install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
linux-headers-virtual : 依存: linux-headers-3.2.0-89-virtual しかし、インストールされていません
E: 未解決の依存関係があります。-f オプションを試してください。
bitnami@ip-10-132-190-144:~$
ところが、現時点ではカーネルヘッダのインストールに失敗した状態なので、依存性エラーになってしまってます。
仕方ないので、まずは手作業で不要なカーネルヘッダのパッケージを削除します。古いlinux-headers-3.2.0-xx および linux-headers-3.2.0-xx-virtual あたりをいくつか消します。
bitnami@ip-10-132-190-144:~$ sudo dpkg --purge linux-headers-3.2.0-60-virtual linux-headers-3.2.0-60
(データベースを読み込んでいます ... 現在 567894 個のファイルとディレクトリがインストールされています。)
linux-headers-3.2.0-60-virtual を削除しています ...
linux-headers-3.2.0-60 を削除しています ...
bitnami@ip-10-132-190-144:~$ sudo dpkg --purge linux-headers-3.2.0-61-virtual linux-headers-3.2.0-61
(データベースを読み込んでいます ... 現在 545865 個のファイルとディレクトリがインストールされています。)
linux-headers-3.2.0-61-virtual を削除しています ...
linux-headers-3.2.0-61 を削除しています ...
bitnami@ip-10-132-190-144:~$
若干ですが、iノードの空きも増えました。
これで、修復をしてみます。
bitnami@ip-10-132-190-144:~$ sudo apt-get -f install
(略)
linux-image-virtual (3.2.0.89.103) を設定しています ...
linux-headers-3.2.0-90 (3.2.0-90.128) を設定しています ...
linux-headers-3.2.0-90-virtual (3.2.0-90.128) を設定しています ...
dpkg: 依存関係の問題により linux-headers-virtual の設定ができません:
linux-headers-virtual は以下に依存 (depends) します: linux-headers-3.2.0-89-virtual ...しかし:
パッケージ linux-headers-3.2.0-89-virtual はまだインストールされていません。
dpkg: linux-headers-virtual の処理中にエラーが発生しました (--configure):
依存関係の問題 - 設定を見送ります
エラーメッセージは前の失敗から続くエラーであることを示しているので、レポートは書き込まれません。
dpkg: 依存関係の問題により linux-virtual の設定ができません:
linux-virtual は以下に依存 (depends) します: linux-headers-virtual (= 3.2.0.89.103) ...しかし:
パッケージ linux-headers-virtual はまだ設定されていません。
dpkg: linux-virtual の処理中にエラーが発生しました (--configure):
依存関係の問題 - 設定を見送ります
エラーメッセージは前の失敗から続くエラーであることを示しているので、レポートは書き込まれません。
linux-libc-dev (3.2.0-89.127) を設定しています ...
以下のパッケージの処理中にエラーが発生しました:
linux-headers-virtual
linux-virtual
E: Sub-process /usr/bin/dpkg returned an error code (1)
bitnami@ip-10-132-190-144:~$
あれ?やはりエラーになりました。
どうも、最初にセキュリティアップデートでインストールに失敗したバージョンの linux-Headers が正しく設定されていないようです。
なので、それぞれのパッケージをインストールしようとしたのですが、
bitnami@ip-10-132-190-144:~$ sudo apt-get install linux-headers-3.2.0-89-virtual
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の問題を解決するために 'apt-get -f install' を実行する必要があるかもしれません:
以下のパッケージには満たせない依存関係があります:
linux-headers-3.2.0-89-virtual : 依存: linux-headers-3.2.0-89 しかし、インストールされようとしていません
E: 未解決の依存関係です。'apt-get -f install' を実行してみてください (または解法を明示してください)。
bitnami@ip-10-132-190-144:~$
bitnami@ip-10-132-190-144:~$ sudo apt-get install linux-headers-3.2.0-89
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の問題を解決するために 'apt-get -f install' を実行する必要があるかもしれません:
以下のパッケージには満たせない依存関係があります:
linux-headers-virtual : 依存: linux-headers-3.2.0-89-virtual しかし、インストールされようとしていません
E: 未解決の依存関係です。'apt-get -f install' を実行してみてください (または解法を明示してください)。
bitnami@ip-10-132-190-144:~$
だめでした。
で、途方にくれて、ネットを調べていると、似たようなカーネル関係でトラブッてる話題がありました。
12.04-server update failure after full /boot, apt not working, unmet dependencies to non exiting linux-image kernel
一旦、先に linux-virtual や linux-headers-virtual を削除すればいいようです。
やってみます。
bitnami@ip-10-132-190-144:~$ sudo dpkg --purge linux-headers-virtual
(データベースを読み込んでいます ... 現在 545884 個のファイルとディレクトリがインストールされています。)
linux-headers-virtual を削除しています ...
bitnami@ip-10-132-190-144:~$ sudo dpkg --purge linux-virtual
(データベースを読み込んでいます ... 現在 545881 個のファイルとディレクトリがインストールされています。)
linux-virtual を削除しています ...
bitnami@ip-10-132-190-144:~$
次に、足りないパッケージをインストールします。
bitnami@ip-10-132-190-144:~$ sudo apt-get install linux-headers-3.2.0-89
bitnami@ip-10-132-190-144:~$ sudo apt-get install linux-headers-3.2.0-89-virtual
問題なくインストールできました。
再度インストールします。
bitnami@ip-10-132-190-144:~$ sudo apt-get install linux-headers-virtual
bitnami@ip-10-132-190-144:~$ sudo apt-get install linux-virtual
これで、正しくインストールできたはずです。念のため、修復も試しておきます。
bitnami@ip-10-132-190-144:~$ sudo apt-get -f install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
linux-image-3.2.0-76-virtual
(略)
linux-headers-3.2.0-65-virtual
これらを削除するには 'apt-get autoremove' を利用してください。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 177 個。
bitnami@ip-10-132-190-144:~$
特に変更作業も発生しないので、問題なさそうです。
一旦ここで、再起動してみます。
bitnami@ip-10-132-190-144:~$ uname -r
3.2.0-90-virtual
bitnami@ip-10-132-190-144:~$
無事カーネルもアップデートされたようです。
最後に、今後のために不要なパッケージを削除しておきます。
bitnami@ip-10-132-190-144:~$ sudo apt-get autoremove --purge
めでたしめでたし。
ちなみに、autoremove を呼び出す際に、 --purge をつけないと設定ファイルが残ってしまいます。この場合、dpkg --list で見ると、先頭2文字が rc になってます。この状態を解消するには、 dpkg --purge パッケージ名 などを使って削除してください。
dpkg -lの[rc]について