Ubuntu 22.04适配apt-key弃用后,如何让software-properties-gtk识别第三方仓库及密钥
我完全懂你现在的困扰——为了避开apt-key的弃用警告,还提升了安全性,把第三方仓库的密钥都迁移到了/usr/share/keyrings,仓库配置也规规矩矩放在/etc/apt/sources.list.d里,结果系统自带的「软件和更新」(也就是software-properties-gtk)却认不出这些仓库了,连“其他软件”标签里都看不到,确实挺闹心的。
咱们先搞清楚根源:software-properties-gtk目前的设计逻辑,还是默认只认/etc/apt/trusted.gpg和/etc/apt/trusted.gpg.d这两个位置的密钥,对于咱们放到/usr/share/keyrings的密钥,它没法自动关联识别仓库和对应的签名密钥。不过别慌,有几个可行的解决办法:
方法一:修改仓库配置文件格式,让GUI能识别密钥路径
这是最安全也最推荐的方案,只要给每个仓库的.list文件加上明确的signed-by参数,software-properties-gtk就能正确读取到仓库信息。
举个具体的例子:
- 假设你原来的仓库行是这样的:
deb https://example.com/repo jammy main - 修改成带签名密钥路径的格式:
deb [arch=amd64 signed-by=/usr/share/keyrings/example-key.gpg] https://example.com/repo jammy main
注意这里的arch=amd64可以根据你的系统架构调整,不需要的话也可以删掉,但signed-by参数必须准确指向你存储密钥的文件路径。
修改完所有.list文件后,重新打开software-properties-gtk,应该就能在“其他软件”标签里看到这些第三方仓库了。
方法二:给密钥创建软链接到trusted.gpg.d(折中方案)
如果你不想一个个修改仓库文件,可以用软链接的方式,让trusted.gpg.d目录“指向”你存放在/usr/share/keyrings的密钥文件。这样既不用复制密钥(避免重复维护),又能让software-properties-gtk识别到。
执行命令的格式如下(替换成你的密钥文件名):
sudo ln -s /usr/share/keyrings/your-key-file.gpg /etc/apt/trusted.gpg.d/your-key-file.gpg
不过要提醒你:虽然这个方法简单,但本质上还是让APT把这些密钥当成全局信任的密钥,和原来的apt-key逻辑类似,安全性上不如第一种方法,所以如果追求最高安全标准,还是优先选方法一。
方法三:用新的add-apt-repository命令添加仓库
如果以后要新增第三方仓库,直接用支持signed-by参数的add-apt-repository命令来添加,这样生成的仓库配置文件本身就符合新规范,software-properties-gtk也能直接识别。
命令格式示例:
sudo add-apt-repository "deb [signed-by=/usr/share/keyrings/new-key.gpg] https://new-repo.com/repo jammy main"
最后说句题外话
目前software-properties-gtk确实还没完全适配APT新的密钥存储规范,不过Ubuntu后续版本应该会更新这个工具,让它直接支持/usr/share/keyrings或者/etc/apt/keyrings这类安全路径的密钥。在那之前,上面的方法应该能解决你的问题。
备注:内容来源于stack exchange,提问作者Blitzkoder

