このへん、日本語情報が全然見つからなかったので、備忘録を兼ねて公開メモに残す。
発生した事象
自作AMIでapt-get upgrade
を行った際、以下のようなエラーにあたった。
Setting up apt (0.9.7.9+deb7u1) ...
Extracting templates from packages: 100%
ERROR: Can't find the archive-keyring
Is the debian-archive-keyring package installed?
dpkg: error processing apt (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
apt
E: Sub-process /usr/bin/dpkg returned an error code (1)
debian-archive-keyring
がないよ?という話。
/etc/apt/trusted.gpg
はちゃんとある。
以前これと同じオチで*.gpg
ファイルがAMIのvolume作成時に削除される問題にあたっていて、volume作成時にtrusted.gpg
を削除対象から除外していたから。
具体的にはec2-bundle-vol
に引数-i
を指定するようにしていた。
% ec2-bundle-vol -i /etc/apt/trustdb.gpg,/etc/apt/trusted.gpg ....
だが、なぜかapt
はtrustdb.gpg
があるのにコケる。。。
ひとまずその場はdebian-archive-keyring.deb
を直接ダウンロードしてきて、dpkg -i
して事なきを得た。
問題は何だったか
/usr/share/keyrings/*.gpg
が、同様にAMIのvolume生成時に消されていた事が原因。
apt
のソースコードを追ったところ、apt
自身のupgradeの際に、apt.postinst
でapt-key update
が走るようになっており、
その中で /usr/share/keyrings/debian-archive-keyring.gpg
を参照していた。
平時はtrusted.gpg
しか参照されないので問題なかったが、apt
自身のupgradeの時には上記の事情があり、エラーで止まってしまった。
対策
/usr/share/keyrings/*.gpg
を、AMI volume 生成時に削除しないようにした。
要するに、ec2-bundle-vol
の引数-i
のリストに、/usr/share/keyrings/*.gpg
も含めるようにした。
% ec2-bundle-vol -i /etc/apt/trustdb.gpg,/etc/apt/trusted.gpg,/usr/share/keyrings/*.gpg ....
thanks for
@osm さんにkeyring周りの情報を教えてもらったおかげで、各gpgファイルの役割がはっきりわかって原因まで速攻で辿りつけました。
ありがとうございます(`・ω・´)