apt-add-存储库

apt-add-存储库

背景

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

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

    $ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com E58A9D36647CAE7F
    
  2. 然后将存储库添加到/etc/apt/sources.list.d/...

    # /etc/apt/sources.list.d/papirus-ppa.list
    deb http://ppa.launchpad.net/papirus/papirus/ubuntu focal main
    

(在我的脑海中,可以在以下位置找到示例mkusb 的 Ubuntu 文档 wiki或者Papirus 图标主题自述文件.)

问题

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

$ apt-key adv ...
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))

忍者 编辑

下面这个答案apt-key对于此命令中的另一个单独弃用!

解决方案?

新方法(例如,码头工人) 是双重的:

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

    $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
  2. 然后在定义新的 APT 源时指定该 GPG 密钥的路径:

    # /etc/apt/sources.list.d/docker.list
    deb [... signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian buster stable
             ⬑------------------ this part is new -----------------⬏
    

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

答案1

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

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

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


如果它不起作用...

起初,我收到此错误:

$ sudo apt update
...
Get:12 http://ppa.launchpad.net/papirus/papirus/ubuntu focal InRelease [18.0 kB]
Err:12 http://ppa.launchpad.net/papirus/papirus/ubuntu focal InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E58A9D36647CAE7F

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

$ ls -l /usr/share/keyrings/*
...
-rw-r--r-- 1 root root     3375 Nov 22 21:38 /usr/share/keyrings/filebot-archive-keyring.gpg
-rw-r--r-- 1 root root     1124 Nov 22 21:38 /usr/share/keyrings/mkusb-archive-keyring.gpg
-rw------- 1 root root     1126 Nov 29 08:15 /usr/share/keyrings/papirus-archive-keyring.gpg

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


另一个问题

gpg(1)联机帮助页:

       --keyserver name
          This option is deprecated - please use the --keyserver in ‘dirmngr.conf’ instead.

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

$ echo "keyserver hkp://keyserver.ubuntu.com" >> "${GNUPGHOME}/dirmngr.conf"
$ gpgconf --kill dirmngr
$ gpg --recv-keys 54B8C8AC
...

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

gpg: keyserver receive failed: Connection timed out

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

答案2

你至少有三个选择:

apt-add-存储库

Debian 软件包software-properties-common包含apt-add-repository.只需运行sudo apt-add-repository ppa:<user>/<ppa-name>,它就会将存储库添加到您的 APT 源并导入密钥。

从密钥服务器获取密钥

将密钥导入到单独的密钥环中,然后将其移动到 APT 期望的位置:

$ echo "keyserver hkps://keyserver.ubuntu.com" >> "${GNUPGHOME}/dirmngr.conf"
$ gpgconf --kill dirmngr
# I don't quite understand why this failed for you. Maybe a temporary network fluke or a firewall issue?
$ gpg --no-default-keyring --keyring=./papirus.gpg --recv-keys 54B8C8AC
$ sudo mv papirus.gpg /etc/apt/trusted.gpg.d/
$ sudo chown root:root /etc/apt/trusted.gpg.d/papirus.gpg
$ sudo chmod 644 /etc/apt/trusted.gpg.d/papirus.gpg

手动下载密钥

如果您出于某种原因无法从密钥服务器获取公钥,但可以手动下载它,则导入下载的文件,papirus.pub如下所示:

$ echo "keyserver hkps://keyserver.ubuntu.com" >> "${GNUPGHOME}/dirmngr.conf"
$ gpgconf --kill dirmngr
$ gpg --no-default-keyring --keyring=./papirus.gpg --import ./papirus.pub
$ sudo mv papirus.gpg /etc/apt/trusted.gpg.d/
$ sudo chown root:root /etc/apt/trusted.gpg.d/papirus.gpg
$ sudo chmod 644 /etc/apt/trusted.gpg.d/papirus.gpg

相关内容