![为什么签名的 deb 包在复制到我的私人 deb 仓库时会显示它们未经身份验证?](https://linux22.com/image/1112700/%E4%B8%BA%E4%BB%80%E4%B9%88%E7%AD%BE%E5%90%8D%E7%9A%84%20deb%20%E5%8C%85%E5%9C%A8%E5%A4%8D%E5%88%B6%E5%88%B0%E6%88%91%E7%9A%84%E7%A7%81%E4%BA%BA%20deb%20%E4%BB%93%E5%BA%93%E6%97%B6%E4%BC%9A%E6%98%BE%E7%A4%BA%E5%AE%83%E4%BB%AC%E6%9C%AA%E7%BB%8F%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%EF%BC%9F.png)
快速版本
我已经设置了一个私有 deb 存储库并将一些已签名的 deb 包复制到其中。我已经在本地安装了签名密钥。但是当我尝试从存储库安装时,我收到此警告:
WARNING: The following packages cannot be authenticated!
手动安装时,我可以直接按,y但我想使用 puppet 自动安装这些包,但失败了。
那么问题是什么?我需要用我控制的密钥重新签发软件包吗?有没有更好的方法可以确保我安装了特定版本的 Puppet?
更多细节
我已经收到来自puppet debian 仓库-http://apt.puppetlabs.com/我只是从(对于 lucid)复制了这个包此目录
然后使用针对每个存储库运行以下命令的脚本来更新存储库:
cd /var/www/html/apt/ubuntu/lucid
dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz
dpkg-scansources sources /dev/null | gzip -9c > sources/Sources.gz
我已经在客户端安装了签名密钥。
$ sudo apt-key list
/etc/apt/trusted.gpg
--------------------
...
pub 4096R/4BD6EC30 2010-07-10 [expires: 2016-07-08]
uid Puppet Labs Release Key (Puppet Labs Release Key) <[email protected]>
...
这样做的原因是我希望所有 Puppet 客户端都是同一版本。因此所有机器都应该使用以下 pin 从我的存储库获取软件包/etc/apt/preferences.d/puppet
:
Package: puppet puppet-common facter
Pin: origin deb.example.org
Pin-Priority: 1001
(我们目前正在使用 puppet 2.6.x,所以我需要优先级 1001 来将精确客户端从 2.7.x 降级)。
我读过持有包裹但这并不能帮助我更改软件包版本。
欢迎一切建议。
答案1
*.deb
包裹是不是在 Debian 中直接签名。有一种方法可以做到这一点,但 Debian 中没有使用它。
Debian 和 Ubuntu APT 存储库使用的原理如下:
所有*.deb
二进制包及其校验和都列在一个文件中(例如)binary-i386/Packages.gz
。(所有当前的 Debian 和 Ubuntu 版本都使用 MD5、SHA-1 和 SHA-256 这三种校验方式(!)。旧版本仅使用 MD5。)所有*.dsc
源包都列在 中source/Sources.gz
。
然后将所有这些文件binary-*/Packages.*
及其source/Sources.*
校验和列在文件中,该文件使用 PGP 密钥Release
签名为Release.gpg
或。InRelease
存储库。
所以基本上,如果您将任何包放入您自己的 APT 存储库,您将需要对该存储库进行签名,并apt-key add
在您想要使用该存储库中的任何包时将您自己的存储库的签名密钥导入到您的系统中。