背景
过去,如果您想在 Debian 中从 Ubuntu PPA 安装软件,方法是:
从 keyserver.ubuntu.com 导入/信任开发人员的 GPG 密钥,
$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com E58A9D36647CAE7F
然后将存储库添加到
/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
对于此命令中的另一个单独弃用!
解决方案?
新方法(例如,码头工人) 是双重的:
将开发者的 GPG 密钥保存到磁盘,
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
然后在定义新的 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