我dpkg-buildpackage
获取了apt-get source nginx
nginx 的 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-a
和C-c C-c
命令添加和完成您的变更日志条目。
答案3
虽然对包进行签名并非必要,而且-uc -us
可以使用选项来避免该步骤,但对包进行签名也是有帮助的,尤其是当其他人将使用它,或者您将通过不安全的通信路径发送它时。而且这并不难。
要生成良好的签名,请参阅dpkg-buildpackage 的手册页。默认情况下,它使用 gpg 签名包。从它打印的错误消息来看,似乎你还没有生成 gpg 密钥。参见例如GnuPrivacyGuardHowto - 社区 Ubuntu 文档了解一些说明和背景。
正如@Gilles 所说,您还应该通过 changelog 文件更改软件包版本号,并提供您将使用的 gpg 密钥的电子邮件地址。一个简单的方法是运行命令dch --local foo
,其中“foo”是更改的关键字。如果您真的不想这样做,并且需要指定不同的维护者或上传者的姓名/地址,或者在签名时使用的特定密钥,您也可以在构建时使用 ,-m
或-e
选项-k
。
看如何重建 Debian 软件包了解更多提示。
当有人试图确定某个包是否由他们信任的人签名时,就会出现棘手的部分。查看 PGP 信任网以处理所涉及的微妙问题。