如何创建和管理多架构PPA?

我有一个程序,需要为每个Ubuntu版本重新编译。

目前,我正在使用Ubuntu的PPA打包它,仅适用于当前发行版。

最终,我必须为以前的Ubuntu版本提供软件包。

我不确定如何完成这个任务。

Ubuntu PPA构建服务器是如何工作的 - 它只是查看debian/changelog文件中最新的changelog条目中的分发字段,以确定应该为哪个分发版构建软件包吗?

Debian规范允许将多个分发版添加到分发字段中。但这似乎对我没有帮助。

一些Ubuntu文档谈论了将分发名称编码到版本号(在debian changelog文件中)中的方法。

但是这在实践中如何工作呢?有了新版本的程序,然后呢?我为每个分发版添加一个新的changelog条目,然后通过dput上传后,PPA构建服务器会自动为每个分发版构建新的软件包吗?还是PPA构建服务器只查看第一个changelog条目?


2我对这个过程也非常感兴趣! - Marco Ceppi
3个回答

上传每个Ubuntu版本都需要一次是正道。
Launchpad不会为不再支持的Ubuntu版本构建软件包,只会为特定版本的Ubuntu构建软件包。目标版本(就像你已经知道的那样)在changelog文件中通过最新条目来指定!
请记住,您的程序所依赖的软件包可能在所有Ubuntu版本上的版本不一样。
您还提到了“多架构”(架构= CPU类型,例如x86,LPIA,AMD64),这没有区别,因为只要在软件包定义(debian/control)文件中有Architecture: any,上传的每个软件包都将为所有可用的架构构建,这也允许您使软件包依赖于不同架构的不同软件包(通过定义多次软件包)。

所以,为了获得一个线性的变更日志,我首先会在变更日志文件的顶部添加一个Ubuntu版本的版本号,然后上传该文件,接着再在文件的顶部添加另一个Ubuntu版本的相同版本号,然后再次上传。 - Hjulle


1听起来很有趣。我不能直接使用那个,因为我不使用bzr或launchpad作为代码库托管(我使用Mercurial)。但是!也许可以在launchpad上创建一个bzr代码库,并且每次我想触发新的软件包构建时,将最新的变更集从我的主要代码库转储到那里。 - maxschlepzig
我并不经常编写代码,所以对此感到兴奋。 - aperson
@maxschlepzig 如果你有关于如何将你的Hg资料导入到Launchpad的问题,请提出一个单独的问题,我会回答它。 - Jorge Castro

关于命名规范,标准做法是这样的:
1.0-0ubuntu1 用于最终进入Ubuntu官方存档的软件包 1.0-0ubuntu1~lucidppa1 用于您在lucid上放置PPA的软件包版本 1.0-0ubuntu1~karmicppa1 用于Karmic上的该软件包版本
原因是版本字段中的波浪线(~)表示版本号“小于零”。因此,如果有人在Karmic上添加了您的PPA,他们将获得~karmicppa1软件包。当他们升级到Lucid(并重新添加您的PPA)时,它将被Lucid PPA软件包替换。如果您的软件包随后进入官方存档,从您的PPA过渡将顺利进行。
另一个优点是,在版本字段中放置发布信息可以清楚地指示文件适用于哪个发布版本(并在某种程度上提醒您每个发布版本都需要上传一个)。例如,当您有不同的依赖关系时,您可能还需要为每个Ubuntu发布版本创建不同的分支。

Scott - 这方面有什么文档吗? - Bartosz Radaczyński
这些波浪线和其他的东西可能被标记在某个隐蔽的地方。其余的只是我在其他开发者中观察到的惯例,而不是官方记录的做法。 - Scott Ritchie
好的,谢谢。你提出的命名规范确实很有效。 - Bartosz Radaczyński
我应该补充一下,有时候这还会进一步扩展,在ppa之前加上一个额外的: 1.0-0ubuntu1karmic1~ppa1这样做的原因是,Karmic 的官方稳定版本可能发布为 1.0-0ubuntu1~karmic1,而我们希望 PPA 版本比它低。 - Scott Ritchie
不得不在 Freenode 的 #launchpad 上询问,并且显然这在 LaunchPad Wiki 的 构建源代码软件包 页面上有部分文档记录。感谢关于这个约定的信息,非常有帮助 ^_^ - TrinitronX