2

我尝试通过添加一些额外的源文件(不包括在上游档案中)并应用一些补丁来定制和重建一个 Debian 源包。更具体地说,我尝试通过添加自定义插件来自定义 Ubuntu“ppp”包。我执行以下操作:

1)我用“apt-get source ppp”下载并解压源包

2)我进入“ppp-xxx”子树并使用“dpkg-buildpackage -uc”干净地重建包,以确保源包一切正常。(实际上现在一切都很好)。

3) 现在我将自定义补丁放入“debian”子树的“debian/patches”子文件夹中。然后我在“debian/patches/series”文件中引用它们。我还将自定义源文件全部放在一个文件夹中,例如“tacacs”,然后将此文件夹放入“debian/extra”子文件夹中。我不确定是否应该将它们完全放在那里,但我没有看到更适合它们的地方。

4) 现在我尝试再次运行“dpkg-buildpackage -uc”来构建自定义包。我看到以下内容:

  • “dpkg-buildpackage/dpkg-source/quilt”尝试将我的自定义补丁应用到我的自定义源中,但找不到它们。所以它失败了,构建完全失败了。
  • 构建失败并停止后,我可以在构建树中看到我的自定义插件(“tacacs”)子文件夹,但它是空的。所以补丁失败也就不足为奇了。

所以问题是:我应该把我的自定义源文件放在哪里,我还应该做些什么来让“dpkg-source -b”看到它们并将它们注入到构建树中?

4

1 回答 1

2

我找到了两种方法来解决我的问题:

  1. 第一个似乎更恰当和惯用。它是将附加源放置到以主要原始 tarball 命名的“补充原始 tarball”中,并添加“组件名称”(如 中所述man dpkg-source)。在构建之前,在主 tarball 上提取补充 tarball,附加代码到达构建树,在那里可以对其进行修补和编译。事实上,我的附加代码已经打包到存档中,所以我只需要重命名存档。

    不幸的是,这种方法对我不起作用,因为来自补充 tarball 的代码只能注入到构建树的根目录,而 pppd 插件代码应该放在pppd/plugins子目录中。而且我找不到一种方法来创建指向正确子目录中代码的符号链接dpkg-source/quilt

  2. 所以我不得不使用第二种方法:

    • dpkg-source -x我将其他源代码直接解压缩到使用(或apt-get source)创建的干净源代码树中的适当位置
    • 然后我申请dpkg-source --commit了源目录并在子目录中获得了一个补丁以及一个引用新创建的补丁debian/patches的正确文件。series此补丁包含在将其他源放置到源树时发生的所有更改。因此,可以通过重新应用此补丁在适当的位置重新创建其他源。
    • 我将新创建的补丁和series文件保存到临时位置并删除了源代码树。
    • 我重新创建了干净的源代码树dpkg-source -x
    • 我再次将保存的补丁和series文件放到debian/patches了源码树的文件夹中。我还编辑debian\changelogdebian\control指出应该构建新版本的包,而不是将新包与原始包混淆。
    • 现在我可以使用dpkg-buildpackage -uc -us. 这还不是最终版本,因为它不包含我的自定义补丁,但它确实包含我的自定义源。

    • 最后,我将自定义补丁添加到debian/patches目录中,将对它们的引用添加到debian/patches/series文件中,dpkg-buildpackage再次运行并获得了我想要的包。

尽管此方法适用于将源代码注入到源代码树中的任何所需位置,但它有一个缺点,即需要手动解压缩其他源代码,将其与原始代码混合并转换为补丁。每次更新此附加代码时,都必须重复所有这些操作。而在第一种方法中,将补充 tarball 替换为其新版本就足够了,并确保所有后续补丁都适用。

于 2017-03-25T14:14:35.577 回答