gpg-agent 比我们年长:如何找到“我们”?

gpg-agent 比我们年长:如何找到“我们”?

据我所知,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

要查找gpgGNU 商店中剩余的任何版本:

$ 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 的用户来说,可能的选择是:

  • 继续使用 ubuntugpg-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

    根据我的经验,卸载 ubuntugpg-agent只能暂时起作用,我认为直到 ubuntu 检查更新并想要验证签名。

    无需gnupg在 guix 端明确安装:它似乎pass会自动启动 guix 的。只有当两者都必须共享套接字gpg-agent时才会出现问题。gpg-agent

相关内容