M1 MacでもVerifiedコミットするぞと、GPGキーをインポートしたら、エラーになってコミットが出来ない状態になってしまった。
その原因と解決方法について書いておく。
はじめに
今回は、Intel Macで出力したGPGキーを、M1 Macでインポートした際に発生したエラーの解決方法です。
パスコードの入力には pinentry-mac
を使用しており、export GPG_TTY=$(tty)
は設定している前提となる。
GPGキーのインポート方法や、GPGキーを使ってコミットに署名を付ける方法は以下の記事を参照して欲しい。
GitHubのコミットに署名を付ける方法stdout.blog
発生するエラー
GPGキーのインポートではエラーにならないが、コミットをすると以下のように失敗する状態になってしまう。
$ git commit -m "失敗するよ"
> error: gpg failed to sign the data
> fatal: failed to write commit object
簡単な文字列で実行してもエラーになってしまう。
$ echo "test" | gpg --clearsign
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> test
> gpg: signing failed: No pinentry
> gpg: [stdin]: clear-sign failed: No pinentry
エラーの解決方法
エラーの原因は、pinentry-mac
のパスが変わっているためです。
# Intel Mac
$ which pinentry-mac
> /usr/local/bin/pinentry-mac
# M1 Mac
$ which pinentry-mac
> /opt/homebrew/bin/pinentry-mac
なので、~/.gnupg/gpg-agent.conf
に書いているパスを変更するだけで直るはず。
- pinentry-program /usr/local/bin/pinentry-mac
+ pinentry-program /opt/homebrew/bin/pinentry-mac
変更したら、GPGを再起動させるために gnupg-agent
を終了させる必要がある。
起動は自動なので、終了させるだけでOK。
$ gpgconf --kill gpg-agent
試しにもう一度、簡単な文字列で実行してみる。
$ echo "test" | gpg --clearsign
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
> test
> -----BEGIN PGP SIGNATURE-----
> iHUEARYKAB0WIQTJMsSbSxup6Xnu6kqds4l7OZU5aQUCYckcLQAKCRCds4l7OZU5
> adAtAP94EcA3VLolDM5CokS++Llkwk1sRqagiPfd7ZNG6wVu7AEA+/9dZ3GD7yA9
> xVbgjySY97msTsJWp7mQcJPHQhAzgw8=
> =AR63
> -----END PGP SIGNATURE-----
このようなログが出ていれば成功となる。
コミットも出来るようになっているので試して欲しい。
おまけに
インポートしたGPGのリストを見ると以下のようになっている。
$ gpg --list-secret-keys --keyid-format=long
> /Users/username/.gnupg/pubring.kbx
> ------------------------------------
> sec ed25519/[GPGキーID] YYYY-MM-DD [SC]
> ****
> uid [ unknown] YOURNAME (COMMENT) <YOUREMAIL>
> ssb cv25519/**** YYYY-MM-DD [E]
この [ unknown]
というのが気になってしかたない。
以下のコマンドを実行すれば [ultimate]
にすることが出来る。
$ gpg --edit-key [GPGキーID] trust quit
> gpg (GnuPG) 2.3.4; Copyright (C) 2021 Free Software Foundation, Inc.
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.
> Secret key is available.
> sec ed25519/[GPGキーID]
> created: YYYY-MM-DD expires: never usage: SC
> trust: ultimate validity: unknown
> ssb cv25519/8A1C1B0A15331D56
> created: YYYY-MM-DD expires: never usage: E
> [ unknown] (1). YOURNAME (COMMENT) <YOUREMAIL>
> sec ed25519/[GPGキーID]
> created: YYYY-MM-DD expires: never usage: SC
> trust: ultimate validity: unknown
> ssb cv25519/****
> created: YYYY-MM-DD expires: never usage: E
> [ unknown] (1). YOURNAME (COMMENT) <YOUREMAIL>
> Please decide how far you trust this user to correctly verify other users’ keys
> (by looking at passports, checking fingerprints from different sources, etc.)
> 1 = I don’t know or won’t say
> 2 = I do NOT trust
> 3 = I trust marginally
> 4 = I trust fully
> 5 = I trust ultimately
> m = back to the main menu
> Your decision? 5
> Do you really want to set this key to ultimate trust? (y/N) y
> sec ed25519/[GPGキーID]
> created: YYYY-MM-DD expires: never usage: SC
> trust: ultimate validity: unknown
> ssb cv25519/****
> created: YYYY-MM-DD expires: never usage: E
> [ unknown] (1). YOURNAME (COMMENT) <YOUREMAIL>
以上です。おつかれさまでしたー