🔖

署名付きcommitでerror: gpg failed to sign the dataになるとき.

2021/12/31に公開

署名付きでgit commitすると,時々下記のエラーが発生する.

原因を調べるため$ echo 'test'|gpg --clearsignする.

$ git commit -S -m 'massage'
error: gpg failed to sign the data
fatal: failed to write commit object

①Inappropriate ioctl for deviceの場合

$ echo 'test'|gpg --clearsign
gpg: 署名に失敗しました: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
  • 改善例
    ~/.zshrcにexport GPG_TTY=$TTYを追記し
    実行中のgpg-agentを停止
    $ gpgconf --kill gpg-agent

②Screen or window too smallの場合

$ echo 'test'|gpg --clearsign
gpg: 署名に失敗しました: Screen or window too small
gpg: [stdin]: clear-sign failed: Screen or window too small

上記エラーのときは,ターミナルのウィンドウサイズが小さすぎてpinentry-cursesが起動しないのが原因なので,
gpg-agentが呼び出すpinentry programをpinentry-macに変更する(pinentry-macは入力画面がGUIで表示されるため.)

  • 改善例
$ brew install pinentry-mac
//pinentryプログラムを変更
$ echo 'pinentry-program /usr/local/bin/pinentry-mac' > ~/.gnupg/gpg-agent.conf 
//実行中のgpg-agentを停止
$ gpgconf --kill gpg-agent

[gpgの全体的な説明と使い方]
https://github.com/lfit/itpol/blob/master/protecting-code-integrity.md#configure-gpg-agent-options

[①の参考文献]
https://unix.stackexchange.com/a/608921

Discussion