为什么将已签名的deb软件包复制到我的私有deb仓库后,它们会显示未经验证?

快速版本

我已经建立了一个私有的deb软件包仓库,并将一些签名的deb软件包复制到其中。我已经在本地安装了签名密钥。然而,当我尝试从仓库安装时,出现了以下警告:

WARNING: The following packages cannot be authenticated!

当我手动安装时,我只需按下 y 键,但我想使用 Puppet 自动安装这些软件包,但失败了。
那么问题出在哪里呢?我需要用我自己控制的密钥重新签名软件包吗?有没有更好的方法来确保我安装了特定版本的 Puppet?
更多细节
我从 puppet debian repository - http://apt.puppetlabs.com/ 获取了这些软件包,我只需从(对于 lucid)this directory 复制软件包。
然后使用一个脚本更新存储库,该脚本为每个存储库运行以下命令:
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) <info@puppetlabs.com>
...

这样做的理由是我希望所有的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半个答案,不太确定,但Debian维基关于创建存储库的方式(此处)将其列为无法使用签名软件包。请参见9种替代方案。 - gertvdijk
1个回答

在Debian中,*.deb软件包并不直接签名。虽然有一种方法可以实现签名,但在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.*)都会被列在一个名为Release的文件中,并附带它们的校验和。该文件将使用存储库的PGP密钥进行签名,签名文件可以是Release.gpg或InRelease。
所以基本上,如果你把任何软件包放入自己的APT存储库中,你需要对该存储库进行签名,并在想要使用该存储库中的任何软件包时,使用apt-key add将你自己的存储库签名密钥导入到你的系统中。