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