概要
macOS 15.0.1+DevContainerを利用しているとたまにGPG署名ができなくなってしまう状況になりました。
error: gpg failed to sign the datafatal: failed to write commit objectいま、ログがどっかいったのでないのですがスペースとしておいておきます。
ちなみにmacOSを更新するとpinentry-macの設定がリセットされるっぽいのでbrew install pinentry-macとしてからホストマシンで適当にコミットしようとするとダイアログがでてきてパスワードの入力が求められました。
なのでOSを更新した場合にはこっちも有効かもしれません。
対応方法
GPGのエージェントがおかしいっぽいので直します。
~/.gnupg/gpg-agent.confを編集します。
enable-ssh-supportpinentry-program /opt/homebrew/bin/pinentry-macenable-ssh-supportはつけていても問題なかったのでつけています。
Keychainからパスワードを引っ張ってくるための設定としてpinentry-programのパスはwhich pinentry-macで取ってきた値を突っ込みます。
最後に、
gpgconf --kill gpg-agentgpgconf --launch gpg-agentと入力してgpg-agentを再起動します。ただ設定を読み込み直すだけでダメっぽいです。
あ、ここまでの話は全部ホストマシンでやります。
最後にDevContainerを再起動すればちゃんと署名できるようになっていると思います、多分。
ロックされている場合
$ gpg --list-keys --keyid-format LONGgpg: Note: database_open 134217901 waiting for lock (held by 3142) ...みたいな不穏なメッセージが出るときに使います。
とりあえず原因がわからないので毎回~/.gnupgをふっとばしています。
$ rm -rf ~/.gnupg$ gpgconf --kill gpg-agent$ gpgconf --launch gpg-agent$ vi ~/.gnupg/gpg-agent.confとして
enable-ssh-supportpinentry-program /opt/homebrew/bin/pinentry-macを書いて保存し、このままだと鍵がないので、
$ gpg --import private.keyで鍵をインポートしたあと、
$ gpg --edit-key GPG_KEY_IDで対話形式で鍵を変更し、信頼するようにします。
trust5と入力して全面的に鍵を信頼するように変更したらquitで保存して終了します。
最後に、
$ gpgconf --kill gpg-agent$ gpgconf --launch gpg-agentでgpg-agentを再起動します。この状態でDevContainerを開き直せば署名ができるようになっていると思います、多分。