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

Nic*_*ker 10 launchpad ppa source

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

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

Launchpad 可以为我做所有这些吗?

如果没有,是否有一种工具可以从 cron 工作中自动完成所有这些工作?

如果上述失败,我会自己敲一些东西,但是我需要什么命令:

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

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

小智 3

嗯,听起来包装食谱是正确的选择。基本上,只要 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
Run Code Online (Sandbox Code Playgroud)

本秘籍每天使用 Inkscape 的最新上游源代码创建一个 Ubuntu 软件包,但将自定义的 Debian 打包指令从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
Run Code Online (Sandbox Code Playgroud)

因此,只要官方 Ubuntu 软件包发生变化,本秘籍就会自动构建自定义 Ubuntu 源代码包并将其上传到您的 PPA。

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