我怎样才能正确签署我修改和重新编译的软件包?

在获得apt-get source nginx的反向版​​本的apt-get source nginx nginx并修改debian/rules以包含uwsgi模块之后,我运行了dpkg-buildpackage 。 最后的结果是:

 dpkg-deb: building package `nginx' in `../nginx_0.7.67-3~bpo50+1_i386.deb'. dpkg-deb: building package `nginx-dbg' in `../nginx-dbg_0.7.67-3~bpo50+1_i386.deb'. signfile nginx_0.7.67-3~bpo50+1.dsc gpg: keyring `/home/shogun/.gnupg/secring.gpg' created gpg: skipped "Faidon Liambotis <[email protected]>": secret key not available gpg: [stdin]: clearsign failed: secret key not available dpkg-genchanges >../nginx_0.7.67-3~bpo50+1_i386.changes dpkg-genchanges: warning: the current version (0.7.67-3~bpo50+1) is smaller than the previous one (0.7.67-3) dpkg-genchanges: not including original source code in upload dpkg-buildpackage: binary and diff upload (original source NOT included) dpkg-buildpackage: warning: Failed to sign .dsc and .changes file 

它抱怨说,因为我不是包的原始维护者,我的密钥不匹配。

这真的是必要的,如果是这样,我怎么能使用我的密钥做gpg匹配?

如果您为自己的私人使用而构buildPGP签名Debian软件包是没有必要的。 这只是(官方)Debian开发人员在将新软件包上传到Debian“unstable”分支时的通用身份validation方法。

要避免错误消息,请使用:

dpkg-buildpackage -uc -us

(另请参阅dpkg-buildpackage的联机帮助页)

当你制作一个不同版本的包时(就像你这样做了,因为你改变了构build规则),你应该真的添加一个更新日志条目。 这样,你的软件包将有不同的版本号(所以你会立即知道这不是从发行版中的标准软件包),你会有一个你改变了什么的痕迹。

编辑debian/changelog ,并添加一个模仿现有条目格式的条目。 从今天开始,selectlike 0.7.67-3~bpo50+meder1的版本号(你需要dpkg --compare-versions表示你的版本更新)。 把你的电子邮件地址作为维护者; 这样,你就清楚地表明这是你修改的软件包,而dpkg-buildpackage会要求你的GPG密码。

如果您是Emacs用户,请安装dpkg-dev-el软件包,然后使用Cc CaCc Cc命令添加并确定更新日志条目。

虽然签名软件包不是必需的,并且可以使用-uc -us选项来避免这一步骤,但签署软件包也是有帮助的,尤其是在其他人使用软件包的情况下,或者您将通过不安全的通信path。 这并不难。

要生成一个好的签名,请参阅dpkg-buildpackage的手册页 。 默认情况下,它使用gpg标记包。 从它打印的错误信息,似乎你只是还没有生成一个gpg密钥。 有关说明和背景信息 ,请参阅GnuPrivacyGuardHowto – 社区Ubuntu文档 。

正如@Gilles所指出的那样,你还应该通过更改日志文件来更改软件包版本号,并提供你将要使用的gpg密钥的电子邮件地址。 一个简单的方法就是运行dch --local foo命令,其中“foo”是更改的关键字。 如果你真的不想这样做,并且需要指定一个不同的维护者或上传者名称/地址,或者在签名时使用特定的密钥,那么你也可以在构build时使用-m-e-k选项。

请参阅如何重buildDebian软件包以获取更多提示。

当有人试图决定给定的软件包是否由他们信任的人签名时,棘手的部分就来了。 查看PGP的信任networking来处理所涉及的微妙问题。