gpgv:导入密钥后无法为‘~/.gnupg/trustedkeys.gpg’分配锁

gpgv:导入密钥后无法为‘~/.gnupg/trustedkeys.gpg’分配锁

我目前正在尝试设置一个小型(部分)Ubuntu 镜像。在这样做的时候,我偶然发现了gpgv。由于我需要 gpgv 来验证镜像文件的签名,我尝试通过以下方式将 Ubuntu 密钥环文件导入我的密钥环:

gpg --no-default-keyring --keyring trustedkeys.gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg

当我运行时gpgv,出现一个错误:

gpgv: can't allocate lock for '/home/sync_user/.gnupg/trustedkeys.gpg'

但是,当我刚刚cp /usr/share/keyrings/ubuntu-archive-keyring.gpg ~/.gnupg/trustedkeys.gpg运行的时候gpgv,没有任何错误消息。

即使我有完全相同的权限等,错误在第一种情况下仍然存在,但在第二种情况下不存在:

  1. 导入的密钥:
sync_user@machine:~/.gnupg$ ls -lah
total 20K
drwx------ 2 sync_user sync_user 4.0K Aug 22 12:01 .
drwxr-xr-x 6 sync_user sync_user 4.0K Aug 21 16:59 ..
-rw------- 1 sync_user sync_user 1.2K Aug 22 11:55 trustdb.gpg
-rw-r--r-- 1 sync_user sync_user 7.8K Aug 22 11:55 trustedkeys.gpg
  1. 复制的钥匙圈:
sync_user@machine:~/.gnupg$ ls -lah
total 20K
drwx------ 2 sync_user sync_user 4.0K Aug 22 12:01 .
drwxr-xr-x 6 sync_user sync_user 4.0K Aug 21 16:59 ..
-rw------- 1 sync_user sync_user 1.2K Aug 22 11:55 trustdb.gpg
-rw-r--r-- 1 sync_user sync_user 7.3K Aug 22 12:03 trustedkeys.gpg

另一个注意事项:同一台机器和其他机器上的不同用户也会发生同样的情况。我已经尝试使用 ubuntu 20.04 和 arch linux 安装 - 结果相同。

sgpgv --version是:gpgv (GnuPG) 2.2.19 libgcrypt 1.8.5在 ubuntu 上和gpgv (GnuPG) 2.2.21 libgcrypt 1.8.6在 arch 上。

有谁知道这种行为的根源在哪里?

我将感谢每一条评论。

答案1

我发现,如果我在导入之前触摸一下文件,就不会出现错误。

那么,touch ~/.gnupg/trustedkeys.kbx然后gpg --export <key id> | gpg --no-default-keyring --keyring ~/.gnupg/trustedkeys.kbx --import

答案2

触摸该文件对我来说不起作用。

不过,我在 strace 下运行了 gpgv,看到了以下情况:

11857 close(3)                          = 0                          
11857 access("/var/cache/debmirror/.gnupg/trustedkeys.kbx", F_OK) = 0  
11857 access("/var/cache/debmirror/.gnupg/trustedkeys.kbx", R_OK) = 0  
11857 access("/var/cache/debmirror/.gnupg/trustedkeys.kbx", W_OK) = 0  
11857 write(2, "gpgv: can't allocate lock for '/"..., 74) = 74  
11857 write(2, "'\n", 2)                = 2  
11857 openat(AT_FDCWD, "Release.gpg", O_RDONLY) = 3  
11857 read(3, "-----BEGIN PGP SIGNATURE-----\n\ni"..., 8192) = 1760  
11857 read(3, "", 8192)                 = 0  
11857 openat(AT_FDCWD, "Release", O_RDONLY) = 4  
11857 read(4, "Origin: Debian\nLabel: Debian\nSui"..., 8192) = 8192  
11857 read(4, "\n 345032ae178d52433929ef4b76962a"..., 8192) = 8192

由此,我推断,它抱怨的不是它不能做什么,而是它能做什么。

从文件中删除写权限会消除(误导性的)“错误”消息......这也不会阻止程序继续运行。

相关内容