有没有一种简单的方法可以自动修补 ubuntu 源,因为它们可用并上传到 PPA?

有没有一种简单的方法可以自动修补 ubuntu 源,因为它们可用并上传到 PPA?

我正在寻找一个工具来执行以下操作:

  • 自动检测一组源包的更新(特别是 gtk+2 和 gtk+3)
  • 下载源码包
  • 将我自己的自定义补丁应用到源代码中
  • 正确提交补丁(dpkg-source --commit [something-or-other]?)
  • 如果成功,将它们上传到 Launchpad 上的 PPA(然后我可以按照通常的方式将我的系统指向它)。

Launchpad 能帮我做所有这些吗?

如果没有,是否有一个工具可以通过 cron 作业自动完成所有这些操作?

如果上述方法失败,我将自己尝试一些东西,但我需要什么命令来:

  • 检测并下载源包更新?(我更喜欢 (bzr|git) pull 之类的东西,而不是每次都必须 apt-get source 一个全新的副本)
  • 在本地自动提交补丁(我每次都会使用相同的提交描述)?
  • 以非交互方式将源代码上传至 PPA?

我发现了一个问题(为自定义 PPA 修补 Wine 的正确方法是什么?),它与此类似,但答案中的步骤仍然基本上是手动和交互的。完全不干预的版本加上自动检测源更新将大有帮助。

答案1

嗯,听起来包装配方是这里的必经之路。基本上,只要 Launchpad 上的 bzr 分支发生变化,打包配方就可以自动创建 Ubuntu 源包并将它们上传到 PPA。在线文档非常好,但我会举几个例子……

首先,指定要跟踪的分支(例如,lp:gtk3),然后添加一个命令将您自己的 Debian 打包分支嵌套到该分支中。看看这个食谱我为 Inkscape 的每日构建而创建。

# bzr-builder format 0.4 deb-version 1:0.48+devel+{revno}+{revno:packaging}
lp:inkscape
nest packaging lp:~inkscape.dev/inkscape/debian-packaging debian

此配方每天使用 Inkscape 的最新上游源代码创建一个 Ubuntu 软件包,但从lp:~inkscape.dev/inkscape/debian-packaging分支到名为“ ”的子文件夹debian

Launchpad 上的打包配方页面允许您指定要自动将软件包上传到哪个 PPA。在我们的例子中,它被上传到这里

作为替代方法,您可以根据现有的 Ubuntu 软件包而不是直接根据上游源来制定配方。例如,lp:ubuntu/gtk+3.0。然后您需要创建此代码的一个分支,并提交您需要的任何修改。lp:~myaccount/ubuntu/saucy/gtk+3.0/my-custom-build例如,我们将其称为。然后您将创建一个配方来自动合并你的更改而不是嵌套包装说明。食谱看起来是这样的:

# bzr-builder format 0.4 deb-version {debversion}+{date}
lp:ubuntu/gtk+3.0
merge my-custom-build lp:~myaccount/ubuntu/saucy/gtk+3.0/my-custom-build

因此,每当官方 Ubuntu 包发生变化时,此配方就会自动构建自定义 Ubuntu 源包并将其上传到您的 PPA。

如果您采用这种“合并”方法,则有两种方法可以应用补丁。要么直接在分支中编辑上游源代码,让 bzr 负责合并,要么使用quilt 在debian/文件夹中创建补丁文件。每种方法都有各自的优点/缺点。前一种方法更聪明一些……如果上游开发人员采用了您的一个补丁,那么合并通常仍然有效,Ubuntu 软件包将成功构建。后一种方法允许您使用基于 Debian 的标准方法处理补丁,将打包代码与上游代码分开……但是,如果上游开发人员采用了您的一个补丁,那么 quilt 将无法应用(重复的)补丁,软件包将无法构建。

相关内容