C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

WSL 環境で git commit したら gpg が failed してしまった時に思い出すメモ

状況

git with GPG on zsh on Arch Linux on WSL:

> git commit -m "neko nyan ko"
error: gpg failed to sign the data
fatal: failed to write commit object

gitgpg で死んでいる。 gpg で死んでいるので gpg --list-keys をとりあえず確認するが、鍵は一見正常に扱える状態に見える。さてなんじゃろう?

> echo "hoge" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

hoge
gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device

簡単な文字列を gpg へ投げると容赦無く死んだ。

解決方法

GPG_TTY=$(tty)

これだけだと、直後はまだ:

> echo "hoge" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

hoge
gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device

さらに何かよくない深刻化した事態が脳裏をよぎる。しかし大丈夫、稼働中の gpg プロセスをすべて kill してから試すと、 tty なパスフレーズ入力を経由しつつ:

f:id:USAGI-WRP:20200220040206p:plain

期待動作してくれるようになる:

echo "hoge" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

hoge
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEnbin1TDZDg++OLb7iLhqD0jAIdYFAl5NhZgACgkQiLhqD0jA
IdaXEBAAp6CO9J61DuTdCA32sn6M+sZSjXlWmJH06gecgw3eeynVTevPUtFmRZx6
jcvjDzHKxvlQRar2zMh6B9/ZN65OdjO/gJQIarz8anZNoGer6OWWFBDB0vb91ROD
ZlfopI6XgGbbEufOrB3MBtFQkT7YS5RrZd8Gm7GEFhV3bCYxnh/RRkhXCH+zhLPP
OnkBbgG9muSe1VYOHqo8Z2CRpp9KWRnGwThyFkHrWgF9/rplWc/lWqpjxgY1UsP9
0z60HmADtuvM+S1xciOu+2IFo+BGPb2bLhwUNAMlRSFzvLyEb55MAnBRrI7Qeu0Y
WgCvyRpSwt7Pmtn2CXqYlfg7mMNgks657DLp98tdF/pIy8bPWMT2N3IkECER5UjI
mNpuNgOZVUiqUglO+yLx+H7p0RF7bMfzUHts3aszdkuHoNuKp+xRq/EO5cPB+3ID
bigzdCb/eyHvu+WV+o1vLo6BTNiX3V+PoMT7HP1DhWYDB3z7b/7iJ/pAGCXLi4QL
QZLwyRq7fU0wMalL/qmAyhNtvxJGOXKN9iybzyglIj+EIe4nRawdKqrmEvnSSnPQ
A4YyRd7x4VN8apnpxwcqkV97kQnpACOPmsfpuzfr+O+LdwKGV4J0NWe9YP3sIx+N
7g2OgKLJqQ8L7zeYp3rABG++rlXruxlcEmZdcQY+1Z4ja39GHrw=
=EKCe
-----END PGP SIGNATURE-----

解決😃