2017-03-23 24 views
1

我尝试通过添加一些额外的源文件(未包含在上游存档中)并应用一些修补程序来尝试定制和重建Debian源包。更具体地说,我尝试通过添加自定义插件来自定义Ubuntu“ppp”包。我做了以下内容:如何在定制和重建Debian软件包时添加其他源文件?

1)我下载并使用 “apt-get的源PPP”

2)我进入 “PPP-XXX” 子树,并使用“dpkg-buildpackage干净重建包解压源码包-uc“来确保源代码包的一切正常。 (实际上现在一切正常)。

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

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

  • “的dpkg-buildpackage/dpkg的源/被子”试图 修补程序应用我的自定义我的自定义来源和无法找到他们。所以它失败了,并且 构建完全失败。
  • 构建失败并停止后,我可以在构建树中看到自定义插件(“tacacs”)子文件夹,但它是空的。 所以补丁失败并不奇怪。

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

+0

IIRC你需要在'debian/files'中列举它们。 – tripleee

+0

@tripleee谢谢,但我相信你确实是错误的'debian/files'。正如我所看到的,这个文件包含了构建中生成的输出文件列表。在'debian'目录中有许多其他文件包含这些列表,也许我将不得不尝试所有这些,我以前没有得到正确的答案。 –

+0

也许我正在用'debian/install'混合它。快速谷歌搜索表明,这是你枚举你想安装在某个地方的非标准文件的地方。 – tripleee

回答

1

我发现了两个办法来解决我的问题:

  1. 第一个似乎是更合适的地道。将 附加源添加到名为 的“补充原始压缩包”中,并在主要原始压缩包中添加“组件 名称”(如man dpkg-source中所述)。补充tarball 在构建之前通过主压缩包提取,并且额外的 代码到达构建树,可以在其中进行修补和编译。 事实上,我的附加代码已经打包到归档中,所以我只需要重命名归档。

    不幸的是这种方法并没有为我工作,因为从补充tar包 可以把代码注入到只有构建树的根,和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一次,并得到了我想要得到的包。

虽然这种方法与源代码注入到源树中的任何期望的地方工作,它的缺点是附加源应手动拆包,与原来的代码混合并转化成补丁。所有这些操作必须在每次更新这些附加代码时重复。而在第一种方法中,用新版本替换补充tar包就足够了,并确保所有后续补丁都能很好地应用。

相关问题