我如何正确地签署我修改并重新编译的包?

我如何正确地签署我修改并重新编译的包?

dpkg-buildpackage获取了apt-get source nginxnginx 的 backports 版本并进行了修改debian/rules以包含 uwsgi 模块后运行。该命令的最后结果是:

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 匹配?

答案1

如果您是为了个人使用而构建 Debian 软件包,则无需对其进行 PGP 签名。这只是 (官方) Debian 开发人员将新软件包上传到 Debian“不稳定”分支时使用的常用身份验证方法。

为了避免错误消息,只需使用:

dpkg-buildpackage -uc -us

(另请参阅 dpkg-buildpackage 的手册页)

答案2

当您制作软件包的不同版本时(正如您所做,因为您更改了构建规则),您确实应该添加一个变更日志条目。这样,您的软件包将具有不同的版本号(因此您会立即知道它不是发行版中的标准软件包),并且您将会跟踪您所做的更改。

编辑debian/changelog,并添加一个模仿现有条目格式的条目。从今天开始,选择一个版本号like 0.7.67-3~bpo50+meder1(您希望某个版本号dpkg --compare-versions表明您的版本较新)。将您的电子邮件地址作为维护者;这样,您就会清楚地知道这是您修改过的一个软件包,并且dpkg-buildpackage会要求您输入 GPG 密码。

如果您是 Emacs 用户,请安装该dpkg-dev-el软件包,然后使用C-c C-aC-c C-c命令添加和完成您的变更日志条目。

答案3

虽然对包进行签名并非必要,而且-uc -us可以使用选项来避免该步骤,但对包进行签名也是有帮助的,尤其是当其他人将使用它,或者您将通过不安全的通信路径发送它时。而且这并不难。

要生成良好的签名,请参阅dpkg-buildpackage 的手册页。默认情况下,它使用 gpg 签名包。从它打印的错误消息来看,似乎你还没有生成 gpg 密钥。参见例如GnuPrivacyGuardHowto - 社区 Ubuntu 文档了解一些说明和背景。

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

如何重建 Debian 软件包了解更多提示。

当有人试图确定某个包是否由他们信任的人签名时,就会出现棘手的部分。查看 PGP 信任网以处理所涉及的微妙问题。

相关内容