このへん、日本語情報が全然見つからなかったので、備忘録を兼ねて公開メモに残す。
発生した事象
自作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ファイルの役割がはっきりわかって原因まで速攻で辿りつけました。
ありがとうございます(`・ω・´)