我需要来自Debian的特定(源或二进制)软件包。
我可以使用apt-get下载软件包吗?
我如何才能将Debian存储库添加到我的sources.list中,使其仅在基于案例的情况下使用?不会通过使用整个Debian存储库弄乱我的系统吗?
如何获得Debian存储库的gpg密钥,以确保该软件包已由Debian档案文件签名?
(请不要告诉我,系统可能会崩溃。我知道这一点,所以不在乎,因为我可以轻松地还原VM快照。)
我需要来自Debian的特定(源或二进制)软件包。
我可以使用apt-get下载软件包吗?
我如何才能将Debian存储库添加到我的sources.list中,使其仅在基于案例的情况下使用?不会通过使用整个Debian存储库弄乱我的系统吗?
如何获得Debian存储库的gpg密钥,以确保该软件包已由Debian档案文件签名?
(请不要告诉我,系统可能会崩溃。我知道这一点,所以不在乎,因为我可以轻松地还原VM快照。)
Answers:
我将单独回答几个问题:
如何下载(而不是安装)单个二进制软件包?
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手册页,该手册页也提供了一些不错的示例来完成您需要的事情。特别是请参见示例中的“跟踪稳定”部分,因为它描述的内容非常接近您的需求:
使用多个源和APT固定时,有一个有用的命令:
# 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]
并通过手动跟踪GPG密钥或在PGP Key Statistics项目中进行检查来跟踪单个GPG密钥给Debian开发人员。而且,除非从您的PGP / GPG密钥到Debian密钥档案之间没有链条,否则您将不得不在某个时间点实现信念上的飞跃。
如何手动下载和验证单个软件包
因此,另一种方法更加复杂,因为deb软件包不是单独签名的,而是仅Release
文件签名的。因此,您将需要下载并验证签名Release
和Packages
文件以及单独的软件包。
我将添加一个更清晰的示例。
假设您要从amd64架构上的Ubuntu 官方PPA下载用于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维护者密钥,从启动板检查密钥等)。
验证Release
文件上正确的签名后,可以转到下一步–验证软件包文件。
sha256sum Packages
c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad Packages
$ grep c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad Release
c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad 3379 main/binary-amd64/Packages
如您所见,签名可以在已签名的Release
文件中找到,因此我们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文章中阅读更多内容。
gpg
命令不需要root特权?它应该是一种管理工具。