![有没有一种简单的方法可以自动修补 ubuntu 源,因为它们可用并上传到 PPA?](https://linux22.com/image/1097932/%E6%9C%89%E6%B2%A1%E6%9C%89%E4%B8%80%E7%A7%8D%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E8%87%AA%E5%8A%A8%E4%BF%AE%E8%A1%A5%20ubuntu%20%E6%BA%90%EF%BC%8C%E5%9B%A0%E4%B8%BA%E5%AE%83%E4%BB%AC%E5%8F%AF%E7%94%A8%E5%B9%B6%E4%B8%8A%E4%BC%A0%E5%88%B0%20PPA%EF%BC%9F.png)
我正在寻找一个工具来执行以下操作:
- 自动检测一组源包的更新(特别是 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 将无法应用(重复的)补丁,软件包将无法构建。