现在 apt-key 已弃用,如何添加 Ubuntu PPA 作为 Debian APT 源?

Rya*_*Lue 26 debian apt gpg ppa apt-key

背景

\n

过去,如果您想在 Debian 中从 Ubuntu PPA 安装软件,方法是:

\n
    \n
  1. 从 keyserver.ubuntu.com 导入/信任开发人员的 GPG 密钥,

    \n
    $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com E58A9D36647CAE7F\n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. 然后将存储库添加到/etc/apt/sources.list.d/...

    \n
    # /etc/apt/sources.list.d/papirus-ppa.list\ndeb http://ppa.launchpad.net/papirus/papirus/ubuntu focal main\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
\n

(在我的脑海中,可以在mkusb 的 Ubuntu 文档 wikiPapirus 图标主题自述文件中找到示例。)

\n

问题

\n

问题是这种方法现在会产生弃用警告一年多前已apt-key弃用):

\n
$ apt-key adv ...\nWarning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))\n
Run Code Online (Sandbox Code Playgroud)\n
\n

忍者 编辑

\n

请参阅下面的答案,了解此命令中的另一个单独弃用apt-key

\n
\n

解决方案?

\n

新方法(例如Docker为例)有两个方面:

\n
    \n
  1. 将开发者的 GPG 密钥保存到磁盘,

    \n
    $ apt-key adv ...\nWarning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))\n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. 然后在定义新的 APT 源时指定该 GPG 密钥的路径:

    \n
    $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
\n

步骤 1 是替换 的部分apt-key,但似乎无法从 keyserver.ubuntu.com 获取单独的 GPG 密钥。是否可以针对 Ubuntu PPA 采用这种方法?如果没有,如何在不使用 的情况下将 Ubuntu PPA 添加为 Debian 中的软件源apt-key

\n

Rya*_*Lue 15

apt-key adv基本上将 CLI 参数/选项直接传递给gpg,但仅在设置临时密钥环之后。您可以手动执行相同的操作:

\n
$ export GNUPGHOME="$(mktemp -d)"  # optional (skipping this means keys will be imported to your GPG keyring)\n$ gpg --recv-keys --keyserver keyserver.ubuntu.com 54B8C8AC\n$ gpg --export 54B8C8AC | sudo tee /usr/share/keyrings/mkusb-archive-keyring.gpg\n$ cat <<-SOURCE | sudo tee /etc/apt/sources.list.d/mkusb.list\n    deb [signed-by=/usr/share/keyrings/mkusb-archive-keyring.gpg] http://ppa.launchpad.net/mkusb/ppa/ubuntu focal main\n    SOURCE\n
Run Code Online (Sandbox Code Playgroud)\n

apt-key只是一个 shell 脚本,因此您可以在您最喜欢的编辑器中自行检查代码;例如 vim $(which apt-key)。)

\n
\n

如果它不起作用...

\n

起初,我收到此错误:

\n
$ sudo apt update\n...\nGet:12 http://ppa.launchpad.net/papirus/papirus/ubuntu focal InRelease [18.0 kB]\nErr:12 http://ppa.launchpad.net/papirus/papirus/ubuntu focal InRelease\n  The following signatures couldn\'t be verified because the public key is not available: NO_PUBKEY E58A9D36647CAE7F\n
Run Code Online (Sandbox Code Playgroud)\n

结果发现是文件权限问题:

\n
$ sudo apt update\n...\nGet:12 http://ppa.launchpad.net/papirus/papirus/ubuntu focal InRelease [18.0 kB]\nErr:12 http://ppa.launchpad.net/papirus/papirus/ubuntu focal InRelease\n  The following signatures couldn\'t be verified because the public key is not available: NO_PUBKEY E58A9D36647CAE7F\n
Run Code Online (Sandbox Code Playgroud)\n

确保您保存的是具有644权限的开发人员 GPG 密钥。

\n
\n

另一个问题

\n

gpg(1)联机帮助页:

\n
       --keyserver name\n          This option is deprecated - please use the --keyserver in \xe2\x80\x98dirmngr.conf\xe2\x80\x99 instead.\n
Run Code Online (Sandbox Code Playgroud)\n

显然原来的方法已被双重弃用!AFAIKgpg还没有发出有关使用此 CLI 选项的警告,但此问题的正确解决方案似乎是这样的?

\n
$ ls -l /usr/share/keyrings/*\n...\n-rw-r--r-- 1 root root     3375 Nov 22 21:38 /usr/share/keyrings/filebot-archive-keyring.gpg\n-rw-r--r-- 1 root root     1124 Nov 22 21:38 /usr/share/keyrings/mkusb-archive-keyring.gpg\n-rw------- 1 root root     1126 Nov 29 08:15 /usr/share/keyrings/papirus-archive-keyring.gpg\n
Run Code Online (Sandbox Code Playgroud)\n

除了我尝试了这个并得到了

\n
gpg: keyserver receive failed: Connection timed out\n
Run Code Online (Sandbox Code Playgroud)\n

因此,如果有人有任何想法,我会洗耳恭听。

\n