有几个问题我会逐个回答:
如何下载(而不是安装)单独的二进制包?
apt-get有一个选项只下载包:
-d Download only - do NOT install or unpack archives
你会在
/var/cache/apt/archives/
目录下找到已下载的软件包。在这种情况下,你需要向apt添加一个新的源列表配置。
如何下载单个源代码包?
apt-get source <package>
或者当您知道.dsc文件的位置时:
dget http://http.debian.net/debian/pool/main/k/knot/knot_1.2.0~rc3-1.dsc
这两种方法都会验证文件上的签名
如何固定sources.list,也就是如何不搞乱我的安装?
您已经指向了APT Pinning的基本描述页面,我只想补充一点,您可能还想阅读apt_preferences的手册,其中也有很好的示例来完成您需要的事情。特别是在EXAMPLES中的“跟踪稳定版”部分,因为它描述了与您需求非常接近的内容:
在处理多个源和APT Pinning时,有一个有用的命令:
# apt-cache policy knot
knot:
Installed: 1.1.3-1~bpo60+1
Candidate: 1.2.0~rc3-1~bpo60+1
Version table:
1.2.0~rc3-1~bpo60+1 0
500 http://deb.knot-dns.cz/debian/ squeeze/main amd64 Packages
*** 1.1.3-1~bpo60+1 0
100 /var/lib/dpkg/status
1.0.5-1~bpo60+1 0
500 http://ppa.sury.org/debian/ squeeze/main amd64 Packages
这显示已安装的版本为1.1.3-1~bpo60+1,候选版本为1.2.0~rc3-1~bpo60+1,将在下一次apt-get upgrade
中安装。此外,还有一些来自另一个存储库的旧版本可用。
如何下载Debian存档密钥?
Debian存档密钥发布在ftp-master上。您需要将密钥导入到您的gpg密钥环中:
$ gpg --import archive-key-6.0.asc
gpg: key 473041FA: public key "Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 9 signed: 31 trust: 0-, 0q, 0n, 0m, 0f, 9u
gpg: depth: 1 valid: 31 signed: 38 trust: 25-, 0q, 0n, 1m, 5f, 0u
gpg: depth: 2 valid: 21 signed: 31 trust: 19-, 0q, 0n, 0m, 2f, 0u
gpg: depth: 3 valid: 3 signed: 12 trust: 2-, 0q, 0n, 0m, 1f, 0u
gpg: depth: 4 valid: 1 signed: 8 trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2013-09-22
然后你将需要检查它的签名:
$ gpg --list-sig 473041FA
pub 4096R/473041FA 2010-08-27 [expires: 2018-03-05]
uid Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>
sig 3 473041FA 2010-08-27 Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>
sig 7E7B8AC9 2010-08-27 Joerg Jaspert <joerg@debian.org>
sig P B12525C4 2010-08-27 [User ID not found]
sig D0EC0723 2010-08-27 [User ID not found]
sig 8AEA8FEE 2010-08-27 [User ID not found]
sig A3AE44A4 2010-08-28 [User ID not found]
sig 00D8CD16 2010-08-28 Alexander Reichle-Schmehl <alexander@reichle.schmehl.info>
sig CD15A883 2010-08-28 [User ID not found]
sig 672C8B12 2010-08-28 [User ID not found]
sig 2 C4CF8EC3 2010-08-28 [User ID not found]
sig 2 D628A5CA 2010-08-28 [User ID not found]
跟踪Debian开发者的个人GPG密钥,可以手动跟踪,或者检查
PGP Key Statistics项目。除非你的PGP/GPG密钥与Debian密钥存档之间存在链接,否则在某个时间点上你将不得不相信一次。
如何手动下载和验证单个软件包
因此,另一种方法更加复杂,因为deb软件包并不是单独签名的,而只有
Release
文件被签名。因此,您需要下载并验证
Release
和
Packages
文件以及单个软件包的签名。
我将添加一个更清晰的示例。
假设您想从
官方PPA下载Ubuntu precise上amd64架构的
Knot DNS的Debian软件包。
您将需要浏览目录并找到这些文件:
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release.gpg
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/main/binary-amd64/Packages
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/pool/main/k/knot/knot_1.2.0~rc3-1~precise+1_amd64.deb
下一步是验证“Release”文件上的签名:
$ gpg --verify Release.gpg Release
gpg: Signature made Fri 01 Mar 2013 07:14:38 PM CET using RSA key ID F9C59A45
gpg: Good signature from "Launchpad Datové schránky"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 5246 3488 670E 69A0 9200 7C24 F233 1238 F9C5 9A45
当然,您需要通过其他方式验证密钥(例如Debian / Ubuntu维护者密钥,在launchpad上检查等等...)
当您验证了Release文件上的正确签名后,可以进行下一步 - 验证Packages文件。
sha256sum Packages
c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad Packages
$ grep c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad Release
c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad 3379 main/binary-amd64/Packages
正如您所看到的,签名可以在已签名的“发布”文件中找到,因此我们通过计算和比对其SHA-256指纹来验证“软件包”文件的完整性。
最后一步类似。您需要计算并比对每个软件包的指纹:
$ sha1sum knot_1.2.0~rc3-1~precise+1_amd64.deb
8b34078e9bfef7aa818b2f926a28838b0ede9f43 knot_1.2.0~rc3-1~precise+1_amd64.deb
$ grep -A 13 "Package: knot$" Packages | grep "^SHA1: "
SHA1: 8b34078e9bfef7aa818b2f926a28838b0ede9f43
在这一点上,我们已经将包安全地链接到签名的“Release”文件上。因此,如果您相信“Release”文件上的签名,您可以确信该包已完整下载。
您可以在Debian Wiki的
Secure APT文章中阅读更多内容。