据我所知,gpg-agent is older than us
当 gpg-agent 版本与 gpg 版本不匹配时,会出现警告,通常是因为安装了两个 gpg-agent(并共享套接字)。我看到的有关此警告的其他答案通常归结为卸载旧的 gpg-agent 或在更新后重新启动它。我遇到了相反的问题:我找不到这个具有较新版本的“us”是什么。
$ pass email
gpg: WARNING: server 'gpg-agent' is older than us (2.2.27 < 2.2.32)
不仅仅是pass
,任何使用 gpg 的情况都会显示警告。据我所知,只有来自 ubuntu 存储库的 gpg 和 gpg-agent 才有:
$ gpgconf
gpg:OpenPGP:/usr/bin/gpg
gpg-agent:Private Keys:/usr/bin/gpg-agent
scdaemon:Smartcards:/usr/lib/gnupg/scdaemon
gpgsm:S/MIME:/usr/bin/gpgsm
dirmngr:Network:/usr/bin/dirmngr
pinentry:Passphrase Entry:/usr/bin/pinentry
当我使用 gpg 时,我调用的确实是那些二进制文件:
$ which gpg
/usr/bin/gpg
$ which gpg-agent
/usr/bin/gpg-agent
它们都是2.2.27版本:
$ gpg --version
gpg (GnuPG) 2.2.27
libgcrypt 1.9.4
$ gpg-agent --version
gpg-agent (GnuPG) 2.2.27
libgcrypt 1.9.4
如果我卸载 gpg-agent,我就不能再使用我的 gpg 密钥了:
$ sudo apt remove gpg-agent
$ pass email
gpg: decryption failed: No secret key
如果我卸载 gpg,就没有其他 gpg:
$ sudo apt remove gpg
$ gpg --version
Command 'gpg' not found, but can be installed with:
sudo apt install gpg
我尝试查找路径中是否有任何其他 gpg 二进制文件(我曾经使用 安装了较新版本guix
),但没有:
$ for folder in $PATH
$ find $folder -name "gpg*"
$ end
/usr/bin/gpg
/usr/bin/gpg-agent
/usr/bin/gpg-connect-agent
/usr/bin/gpg-wks-server
/usr/bin/gpgcompose
/usr/bin/gpgconf
/usr/bin/gpgparsemail
/usr/bin/gpgsm
/usr/bin/gpgsplit
/usr/bin/gpgtar
/usr/bin/gpgv
我运行了gpgconf --kill all
、、systemctl --user restart gpg-agent
重新启动了计算机多次,但警告仍然存在。
那么我该如何找到这个神秘的 gpg(版本 2.2.32),或者还有什么可能导致警告?
答案1
这个答案将非常具体地针对我的情况(作为 guix 用户),但事实证明我的系统上确实有 gpg 2.2.32,即使它不在路径中,因为它是的依赖项pass
。由于我使用 guix 安装了它,pass
(以及抱怨版本不匹配的其他软件)已修补为使用其绝对路径调用此特定版本,而不是在中gpg
查找。gpg
$PATH
要查找gpg
GNU 商店中剩余的任何版本:
$ find /gnu/store/ -type d -name '*gnupg-*'
/gnu/store/97xv2yyswpiq6p2mlm5zqdk23q8z8sdh-gnupg-2.2.32
要确定哪个包依赖于它:
$ guix gc --referrers /gnu/store/97xv2yyswpiq6p2mlm5zqdk23q8z8sdh-gnupg-2.2.32
/gnu/store/yiyhfm10gldx1g5lqyys49r6czna22dj-password-store-1.7.4
这确实是pass
我正在使用的:
$readlink (which pass)
/gnu/store/yiyhfm10gldx1g5lqyys49r6czna22dj-password-store-1.7.4/bin/pass
因此,对于使用国外发行版的 guix 的用户来说,可能的选择是:
继续使用 ubuntu
gpg-agent
和 guix 的gpg
客户端,如果它不会妨碍任何工作,则接受警告。继续使用 ubuntu 的
gpg-agent
,并且不使用guix
依赖于 的任何包,gnupg
以确保我们只使用 ubuntu 的gpg
客户端。停止使用 ubuntu
gpg-agent
,改用 guix。要禁用 ubuntu 的服务并确保不会重新启动它:$ systemctl --user mask --now gpg-agent.service gpg-agent.socket gpg-agent-ssh.socket gpg-agent-extra.socket gpg-agent-browser.socket
根据我的经验,卸载 ubuntu
gpg-agent
只能暂时起作用,我认为直到 ubuntu 检查更新并想要验证签名。无需
gnupg
在 guix 端明确安装:它似乎pass
会自动启动 guix 的。只有当两者都必须共享套接字gpg-agent
时才会出现问题。gpg-agent