为将软件包上传到PPA进行版本控制

我有一个名为Artha的软件包,我将其作为源码和(deb)二进制文件分发给x86和x86_64架构,也就是说我有创建deb文件的经验。我收到了很多设置PPA的请求。我打算在即将发布的版本中完成这项工作。Ubuntu存储库中的Artha版本为1.0.2,而我正试图创建一个Artha 1.0.3的PPA。
我阅读了Launchpad的个人软件包归档文档,现在已经设置好了PPA,但是版本控制页面上说,对于像Artha这样已经存在于Ubuntu存储库中的软件包,命名为artha-1.0.2-1ubuntu1,PPA版本应该是artha-1.0.3-1ubuntu1ppa1,这样当Ubuntu存储库更新到Artha的1.0.3版本时,它会覆盖我的PPA软件包。
通常情况下,当我制作我的.deb软件包时,会得到这些文件。
  • artha_1.0.3.orig.tar.bz2
  • artha_1.0.3-1.debian.tar.gz
  • artha_1.0.3-1.dsc
  • artha_1.0.3-1_amd64.build
  • artha_1.0.3-1_amd64.changes
  • artha_1.0.3-1_amd64.deb

以及它们在i386上的等效物。这个页面关于上传到PPA的说明说,文件.dsc、.changes和.debian.tar.gz将会被上传。

我有些困惑。如何让这些文件拥有前面提到的版本?也就是说,加上"ppa"后缀?我觉得手动重命名Artha的源代码包提取目录似乎不是正确的方法。

此外,我应该使用debuild -S -sd还是debuild -S -sa?Launchpad页面上说,已存在软件包的另一版本应该使用前者。这对我来说听起来有点含糊。这是什么意思?更新的版本算作另一版本吗?

关于设置PPA有很多详细的页面。但它们只是用于一次性设置,而PPA则是为了更快地提供特定软件包的更新,可维护性非常重要。如果有人能指点我一份关于如何进行更新等内容的文档,那就太好了。也就是说,关于初次上传后发生的事情的文档。

1个回答

生成的软件包版本取决于debian/changelog中提供的版本号,因此您必须在那里设置正确的版本。 1.0.3-1将取代仅适用于Ubuntu的上传版本1.0.3-0ubuntu1
$ dpkg --compare-versions 1.0.3-1 le 1.0.3-0ubuntu1 || echo "False"
False

但它不会取代来自Debian并带有Ubuntu更改的版本,即1.0.3-1ubuntu1
$ dpkg --compare-versions 1.0.3-1 le 1.0.3-1ubuntu1 || echo "False"
$

波浪符(~)字符在版本号中具有特殊意义。例如:
$ dpkg --compare-versions 1.0.3-1 le 1.0.3-1~ppa1 || echo "False"
False

由于您的软件包不是来自Debian,我选择使用一个版本号,例如1.0.3-0~ppa1。这样可以确保它的版本号小于直接从Debian同步或在Ubuntu中引入的版本。
因此,您的变更日志应该如下所示:
artha (1.0.3-0~ppa1) quantal; urgency=low

  * New upstream release.

 -- Your Name <foo@bar.com>  Sun, 07 Oct 2012 13:06:56 -0400

无论是使用debuild -S -sd还是debuild -S -sa都是一个不同的问题,但这里有一个简短的答案。 -sa确保.orig.tar.bz2将被上传。如果您之前没有上传过这个上游版本,请使用这个选项。 -sd明确地使得只有debian.tar.gzdiff.tar.gz被上传。这适用于当您对已经在目标存档或PPA中可用的上游版本进行更改时。这是因为原始tarball应该已经存在那里。

哦,我忘了提到我的软件包也在Debian的存储库中,我猜Ubuntu的存储库只有因为继承关系才有。上面建议的版本1.0.3-0~ppa1还有效吗? - legends2k
下一个同步的Debian版本将是1.0.3-1并覆盖它。由于它不基于Debian版本,这可能是可以接受的。 - Martin Ueding
这暴露了一个小问题:如果你正在编写一个库,并将其版本命名为1.2.3-0~ppa1,那么你将无法在debian/controlDepends部分中写入1.2.3 - Alexander Shishenko
为了跟进亚历山大的评论,更明智的做法可能是将包的名称更改为与您的需求相关的具体名称。 - Alexis Wilke