我刚刚更新到gnupg 2.1并且0install的单元测试现在运行得非常慢。似乎每次运行gnupg时,它都会产生一个新的gpg-agent
进程。每个测试用例需要1秒钟,然后代理进程继续运行:
$ make
Ran: 272 tests in: 26.08 seconds.
(通常需要3秒左右)
$ ps x|grep gpg-agent
8514 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-72f14da --use-standard-socket --daemon
8543 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-19c19f2e --use-standard-socket --daemon
8564 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-d641112 --use-standard-socket --daemon
8570 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-399201f1 --use-standard-socket --daemon
8581 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-36a69b79 --use-standard-socket --daemon
8588 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-1636a396 --use-standard-socket --daemon
8596 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-47c832e --use-standard-socket --daemon
8602 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-3b1df330 --use-standard-socket --daemon
8651 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-7c2e2f8 --use-standard-socket --daemon
8662 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-2ecf7baa --use-standard-socket --daemon
8672 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-3a613862 --use-standard-socket --daemon
8696 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-3dc428bc --use-standard-socket --daemon
8704 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-324a4b7d --use-standard-socket --daemon
8760 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-3d953fbb --use-standard-socket --daemon
8770 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-11bab9c2 --use-standard-socket --daemon
8779 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-37699d43 --use-standard-socket --daemon
8790 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-25d40809 --use-standard-socket --daemon
8801 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-183d596b --use-standard-socket --daemon
8811 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-1d4ed6aa --use-standard-socket --daemon
8822 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-19587e45 --use-standard-socket --daemon
8832 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-1775543e --use-standard-socket --daemon
8849 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-555b9f5 --use-standard-socket --daemon
8864 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-2b571a1d --use-standard-socket --daemon
8872 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-254df8a7 --use-standard-socket --daemon
8885 ? Ss 0:00 gpg-agent --homedir /tmp/0install-test-34930097 --use-standard-socket --daemon
8943 pts/3 R+ 0:00 grep --color=auto gpg-agent
如何防止这些代理进程启动(或以其他方式使单元测试正常工作)?
GnuPG 2.1总是启动代理,即使它实际上并不需要它。由于0install不需要访问密钥,我可以通过监听测试目录中的Unix套接字S.gpg-agent
来解决问题。您需要按如下方式回复gpg:
OK Pleased to meet you
HAVEKEY
回应ERR 67108881 No secret key <GPG Agent>
AGENT_ID
回应ERR 67109139 Unknown IPC command <GPG Agent>
OK
回复所有其他输入。这将0install单元测试运行时间从26s减少到1.1s,并且最后没有剩余的进程。
更新gnupg> = 2.1.13
它不再在GNUPGHOME
中寻找插座。相反,您必须调用gpgconf --list-dirs
来查找位置并避免每单位1次测试时间的惩罚。见:https://lists.gnupg.org/pipermail/gnupg-devel/2016-June/031192.html
GnuPG 2.1 requires the agent for all private key operations,没有办法禁用它。改为使用GnuPG 1或2(仍然保持并行)。
您生成大量代理的原因是使用--homedir
选项的不同主目录,否则将使用单个目录。从GnuPG 2.1开始,与代理的所有通信都通过GnuPG homedirectory中的套接字执行。