debuild - 密钥不可用(他人的密钥)

我正在尝试使用debuild构建cairo。
我一直进行到最后,出现了这个消息:
gpg: skipped "Robert Ancell <robert.ancell@canonical.com>": secret key not available

既然我不是Robert Ancell,这是有道理的 - 我该如何使用自己的密钥呢?
gpg --list-key outputs:
$ gpg --list-key /home/stu/.gnupg/pubring.gpg
 ----------------------------
pub   1024R/2ADA7053 2009-05-04 uid                  Launchpad PPA for Aleksander Morgado

pub   2048R/17F35B46 2015-01-28 uid                  Stuart Axon
<stu.axon@gmail.com> uid                  Launchpad PPA for Stuart
Axon <stuaxo2@yahoo.com> sub   2048R/B8E8ED59 2015-01-28

我有一个环境变量:
DEBSIGN_KEYID=17F35B46

你用了哪个debuild命令?试着加上-us -uc标志。 - Seth
使用debuild -us -uc可以正常工作,但我认为这是用于未签名构建的?我想要创建自己的PPA,这需要一个已签名的构建(我想是这样的?),所以我尝试使用普通的debuild - Stuart Axon
是的,那将是未签名的。如果您正在尝试创建PPA,则我假设您对源代码进行了更改。如果是这样,为什么您没有更新变更日志呢?(debuild要求使用上一个变更日志条目的用户密钥) - Seth
谢谢 - 我没有更新,因为我不知道我在做什么。- 我猜我应该使用dch -i来更新版本并编辑更改日志.. (?) - Stuart Axon
2我会的。只需简单地说“重建使用x标志来修复y”。有关版本控制的帮助,请查看此处的版本控制部分:https://help.launchpad.net/Packaging/PPA/BuildingASourcePackage。基本上,由于存储库中cairo-dock的版本是3.4.1-0ubuntu1,那么你的版本应该是3.4.1-0ubuntu1ppa1。 - Seth
谢谢:) - 我在构建cairo而不是cairo-dock,但会应用这个。 - Stuart Axon
让我们在聊天中继续这个讨论。 - Stuart Axon
^ 按下了“将讨论移至聊天室按钮”,FTR-最好将信息保留在此处,而不是在聊天中 :) - 将更新更改日志作为答案接受,因为这是我犯的错误。 - Stuart Axon
4个回答

debuild要求输入最后编辑changelog的用户的密钥。如果您正在上传到PPA,则您的软件包必须与当前存储库中的等效软件包不同,因此您应该编辑changelog。
使用dch更新版本和changelog,然后重新构建。debuild将要求您输入密钥。(如果您不确定要使用哪个版本号,请参阅Launchpad帮助文档链接

生气的,因为这是我的问题,在细节方面为另一个人点赞 - 不确定如何在这个奇怪的游戏化世界中公平地分配积分。 - Stuart Axon

使用-k选项告诉debuild要使用哪个密钥,例如。
debuild -kB57F5641

请注意,在-k和密钥ID之间不允许有空格。

我目前正在使用XUbuntu 16.04 "Xenial Xerus",并且遇到了同样的问题:无论是debuild还是debsign都返回了secret key not available错误,尽管我确实创建了一个本地密钥,并且我也将其上传到Ubuntu Keyserver
我已经尝试过使用-k选项手动设置我的密钥。我还将我的密钥设置为默认密钥,并编辑了debian/changelog文件,以及其他很多事情,但是没有任何效果:我仍然得到相同的错误。
...然后我意识到我是用gpg2而不是gpg创建了我的密钥。你猜我做了什么?
首先,我打开了一个shell终端窗口并重命名了gpg二进制文件: sudo mv /usr/bin/gpg /usr/bin/gpg.bak
然后,我创建了一个指向gpg2二进制文件的gpg符号链接: sudo ln -s /usr/bin/gpg2 /usr/bin/gpg

在我进行了这些操作之后,诸如 debuild -S -sadebsign some-file_source.changes 等命令终于正常工作。

我不知道 debuilddebsigndpkg-buildpackage 等命令具体出了什么问题,但我有一种感觉它们是将参数发送给 gpg,尽管只有 gpg2 能解析(“理解”)这些参数。因此,创建一个符号链接(以创建一个实际上运行 gpg2 二进制文件的伪造 gpg 二进制文件)可以解决这个问题。

然而,还有更优雅的方法来强制让 debsign 使用 gpg2

  • 设置 -pgpg2 选项给 debsign
  • /etc/devscripts.conf~/.devscripts 中设置 DEBSIGN_PROGRAM=gpg2

这个答案太棒了...现在 - 我们在哪里提交错误报告呢?我猜,如果不是创建符号链接,而是将 debuild 和 debsign 改为指向 gpg2 而不是 gpg,这样会起作用吗?- 那么我们就离一个补丁的目标更近了... - Stuart Axon
@StuartAxon debuilddebsigndevscripts包的一部分,而dpkg-buildpackagedpkg-dev包的一部分。在Ubuntu发行版中,devscriptsdpkg-dev都由Ubuntu开发者ubuntu-devel-discuss@lists.ubuntu.com维护,因此报告这些包的错误的好方法是运行apport:apport-bug devscripts将帮助您在Launchpad上为devscripts创建错误报告,而apport-bug dpkg-dev将对dpkg-dev在Launchpad上执行相同操作。 - Yuri Sucupira
非常感谢!我花了一整天的时间试图解决完全相同的问题,但只找到建议生成新密钥的答案。我希望全世界都能迁移到gpg2,并最终放弃gpg。 - Alexander Solovets
@AlexanderSolovets 不客气。 :) 谢谢您提出的建议编辑。 :) - Yuri Sucupira

首先,每次包的修订都需要编辑变更日志。如果您对包进行了更改,这是一个必需的步骤;您可以使用dch来添加这样的变更日志,正如Seth所建议的那样。
然而,如果您只是想生成一个没有额外更改的包,以便您可以直接安装该包,那么您不需要编辑变更日志,您只需要解决签名密钥问题即可。
我不认为这里的任何一个答案都是100%完整的。因此,我会稍微借鉴两者的观点,但在这里加上我自己的建议和解决方案,因为我经常使用nginx软件包合并。

引用Seth的话,debuild将根据最后一个更改日志编辑器来确定密钥。这是自动的,您需要更新更改日志,以在最新的更改日志条目末尾使用您的凭据。

如Florian所述,您也可以使用 -kKEYIDNUM 选项来告诉 debuild 与哪个密钥签名,并强制使用该密钥。


现在,我针对这两个问题提出了解决方案,以便自动使用我想要签名的密钥进行签名...

很长一段时间以来,每当我旧的硬盘在以前的系统上损坏时,我都会遇到这个问题。我真的不想每次编辑changelog,也不想每次手动传递-k选项给debuild

最后,MOTUs帮助我解决了这个问题,通过明确指定要用哪个密钥进行签名,他们向我介绍了.devscriptsdebuild和其他工具将调用其中定义的环境变量;这使我能够添加选项,debuild调用的dpkg-buildpackage将始终追加这些选项。

因此,为了使每次运行debuild-k选项自动生效,您可以将以下内容添加到您的~/.devscripts文件中,以自动添加-k选项:

DEBUILD_DPKG_BUILDPACKAGE_OPTS="-kABCD1234"

这将使其持续添加到debuild选项中;这也是一种确保您的密钥始终用于签名的方法。
这对于Ubuntu上传和PPA上传都有帮助。