Logo
Overview

macOSの最新版でGPG署名に失敗する話

December 9, 2024
1 min read

概要

macOS 15.0.1+DevContainerを利用しているとたまにGPG署名ができなくなってしまう状況になりました。

Terminal window
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を編集します。

Terminal window
enable-ssh-support
pinentry-program /opt/homebrew/bin/pinentry-mac

enable-ssh-supportはつけていても問題なかったのでつけています。

Keychainからパスワードを引っ張ってくるための設定としてpinentry-programのパスはwhich pinentry-macで取ってきた値を突っ込みます。

最後に、

Terminal window
gpgconf --kill gpg-agent
gpgconf --launch gpg-agent

と入力してgpg-agentを再起動します。ただ設定を読み込み直すだけでダメっぽいです。

あ、ここまでの話は全部ホストマシンでやります。

最後にDevContainerを再起動すればちゃんと署名できるようになっていると思います、多分。

ロックされている場合

Terminal window
$ gpg --list-keys --keyid-format LONG
gpg: Note: database_open 134217901 waiting for lock (held by 3142) ...

みたいな不穏なメッセージが出るときに使います。

とりあえず原因がわからないので毎回~/.gnupgをふっとばしています。

Terminal window
$ rm -rf ~/.gnupg
$ gpgconf --kill gpg-agent
$ gpgconf --launch gpg-agent
$ vi ~/.gnupg/gpg-agent.conf

として

Terminal window
enable-ssh-support
pinentry-program /opt/homebrew/bin/pinentry-mac

を書いて保存し、このままだと鍵がないので、

Terminal window
$ gpg --import private.key

で鍵をインポートしたあと、

Terminal window
$ gpg --edit-key GPG_KEY_ID

で対話形式で鍵を変更し、信頼するようにします。

Terminal window
trust
5

と入力して全面的に鍵を信頼するように変更したらquitで保存して終了します。

最後に、

Terminal window
$ gpgconf --kill gpg-agent
$ gpgconf --launch gpg-agent

でgpg-agentを再起動します。この状態でDevContainerを開き直せば署名ができるようになっていると思います、多分。