如何在自定义和重建Debian软件包时添加其他源文件?

时间:2017-03-23 06:17:54

标签: debian packaging customizing

我尝试通过添加一些额外的源文件(不包含在上游存档中)并应用一些补丁来自定义和重建Debian源包。更具体地说,我尝试通过添加自定义插件来自定义Ubuntu“ppp”包。我做了以下事情:

1)我使用“apt-get source ppp”

下载并解压缩源包

2)我进入“ppp-x.x.x”子树并使用“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”看到它们并将它们注入构建树?

1 个答案:

答案 0 :(得分:1)

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

  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并得到我想要的包得到。

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