第2.02节 下载源码

最新版本的sendmail可以通过以下方式获得:

http://www.sendmail.org/

当你下载源码时,你必须从所列的源码中选择满足你的需求的一个。除了选择你想要的sendmail的版本,你还要在两种发布版本中选择一种tar包的压缩形式。那些以.Z结尾的是用unix命令compress压缩的。

以.gz结尾的是用GNU工具gzip进行压缩的。后者更受欢迎,因为包文件更小更易于传输。

除了两种发布的形式外,每个版本带有一个PGP签名文件。在V8.11版本前,这个签名用来验证解压文件,也就是说在你验证它之前要先解压tar包。从V8.11版本起,每个压缩包对应一个签名文件,因此,没有必要在在验证之前解压。

签名文件与发布包文件同名但带有一个.sig后缀。
sendmail.8.14.1.tar.gz          ← the distribution file
sendmail.8.14.1.tar.gz.sig      ← the signature file for this distribution file
sendmail.8.14.1.tar.Z           ← the distribution file
sendmail.8.14.1.tar.Z.sig       ← the signature file for this distribution file

如果你对早期的sendmail版本还没有验证,那么你现在就要从sendmail.org下载并安装PGPKEYS文件:

ftp://ftp.sendmail.org/pub/sendmail/PGPKEYS

下载这个文件后,用下列命令将它所含的keys加到PGP key ring中:

pgp -ka PGPKEYS      ← for pgp version 2.x
pgpk -a PGPKEYS      ← for pgp version 5.x
gpg --import PGPKEYS ← for gpg

如果使用gpg命令,你的输出可能看起来是这个样子的:

% gpg --import PGPKEYS
gpg: key 16F4CCE9: "Sendmail Security <sendmail-security@sendmail.org>" 22 new
signatures
gpg: key 7093B841: public key "Sendmail Signing Key/2007 <sendmail@Sendmail.ORG>"
imported
gpg: key AF959625: "Sendmail Signing Key/2006 <sendmail@Sendmail.ORG>" 7 new
signatures
gpg: key 1EF99251: "Sendmail Signing Key/2005 <sendmail@Sendmail.ORG>" 9 new
signatures
gpg: key 95F61771: "Sendmail Signing Key/2004 <sendmail@Sendmail.ORG>" 7 new
signatures
gpg: key 396F0789: "Sendmail Signing Key/2003 <sendmail@Sendmail.ORG>" 27 new
signatures
gpg: key 678C0A03: "Sendmail Signing Key/2002 <sendmail@Sendmail.ORG>" 13 new
signatures
gpg: key CC374F2D: "Sendmail Signing Key/2001 <sendmail@Sendmail.ORG>" 14 new
signatures
gpg: key E35C5635: "Sendmail Signing Key/2000 <sendmail@Sendmail.ORG>" 5 new
signatures
gpg: key A39BA655: "Sendmail Signing Key/1999 <sendmail@Sendmail.ORG>" 4 new
signatures
gpg: key D432E19D: "Sendmail Signing Key/1998 <sendmail@Sendmail.ORG>" 4 new
signatures
gpg: key 12D3461D: "Sendmail Signing Key/1997 <sendmail@Sendmail.ORG>" 4 new
signatures
gpg: key A0F8AA0C: public key "Sendmail, Inc. Security Officer <security-
officer@sendmail.com>" imported
gpg: key BF7BA421: "Eric Allman <eric@allman.name>" 4 new user IDs
gpg: key BF7BA421: "Eric Allman <eric@allman.name>" 44 new signatures
gpg: key A00E1563: "Gregory Neil Shapiro <gshapiro@sendmail.com>" 48 new signatures
gpg: key 22327A01: "Claus Assmann (PGP2) <ca+pgp2@Sendmail.ORG>" 14 new signatures
gpg: Total number processed: 15
gpg:               imported: 1
gpg:           new user IDs: 4
gpg:         new signatures: 222
gpg: 3 marginal(s) needed, 1 complete(s) needed, classic trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u

注意看在前面所导入的最新的key是key7093B841(2007的签名),用以下命令打印它的指纹来验证这个key是合法的。

% gpg --fingerprint 7093B841
pub  1024R/7093B841 2006-12-16
     Key fingerprint = D9 FD C5 6B EE 1E 7A A8  CE 27 D9 B9 55 8B 56 B6
uid                  Sendmail Signing Key/2007 <sendmail@Sendmail.ORG>

然后与下列显示出的合法指纹作比较:

18 A4 51 78 CA 72 D4 A7  ED 80 BA 8A C4 98 71 1D← Sendmail Security
CA AE F2 94 3B 1D 41 3C  94 7B 72 5F AE 0B 6A 11← 1997
F9 32 40 A1 3B 3A B6 DE  B2 98 6A 70 AF 54 9D 26← 1998
25 73 4C 8E 94 B1 E8 EA  EA 9B A4 D6 00 51 C3 71← 1999
81 8C 58 EA 7A 9D 7C 1B  09 78 AC 5E EB 99 08 5D← 2000
59 AF DC 3E A2 7D 29 56  89 FA 25 70 90 0D 7E C1← 2001
7B 02 F4 AA FC C0 22 DA  47 3E 2A 9A 9B 35 22 45← 2002
C4 73 DF 4A 97 9C 27 A9  EE 4F B2 BD 55 B5 E0 0F← 2003
46 FE 81 99 48 75 30 B1  3E A9 79 43 BB 78 C1 D4← 2004
4B 38 0E 0B 41 E8 FC 79  E9 7E 82 9B 04 23 EC 8A← 2005
18 A4 51 78 CA 72 D4 A7  ED 80 BA 8A C4 98 71 1D← 2006
E3 F4 97 BC 9F DF 3F 1D  9B 0D DF D5 77 9A C9 79← 2006
D9 FD C5 6B EE 1E 7A A8  CE 27 D9 B9 55 8B 56 B6← 2007

如果所下载的PGPKEYS文件的指纹列表中的不匹配,那么这个文件是不可靠的。

需要注意的是,一旦你在你的key ring中增加了一个正确的PGPKEYS文件,你就可以执行下面的命令,任何新下载的源码的完整性和可靠性可以通过这些命令来验证。

pgp signature-file distribution-file             ← for pgp version 2.x
pgpv signature-file distribution-file            ← for pgp version 5.x
gpg --verify signature-file distribution-file    ← for gpg

如果tar包没有问题,gpg命令会显示签名是合法的。例如:

% gpg --verify sendmail.8.14.1.tar.gz.sig sendmail.8.14.1.tar.gz
gpg: Signature made Tue Jan 09 12:11:36 2007 PST using RSA key ID 7093B841
gpg: Good signature from "Sendmail Signing Key/2007 <sendmail@Sendmail.ORG>"
Primary key fingerprint: D9 FD C5 6B EE 1E 7A A8  CE 27 D9 B9 55 8B 56 B6

上面的短语Good signature意味着发布的文件是完整可靠的并且在签名后没有被修改。另一种预防措施是确认上面所显示的指纹与官方之前发布的指纹是否匹配。

除了正确的输出信息,你也许也会碰巧遇见关于自身设置的warnings。例如,下列warns和本地gpg命令设置有关,而与发布版本的合法性无关。

gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.

如果验证失败,那么检查可能的错误:

每个版本的签名与对应的tar包相匹配。重新取得匹配正确的版本。

使用ftp命令下载时,要确定使用二进制模式。用正确的模式重新取得版本。

所相信的映像FTP站点可能不像我们所期望的正式。如果它们发布的版本不能通过验证,那么从官方站点重新取得之前发布的版本。

官方发布的版本可能出现问题。如果这个版本不能通过验证,那么先检查一下你的PGP复本是否安装正确,然后确认一下你的网络畅通并且没有被损坏。如果上述方法都不起作用(包括重新取得发布版本),在邮件中描述你的问题发送给sendmail@sendmail.org的相关人员。