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

在自定义和重建Debian软件包时,如何添加其他源文件?,debian,packaging,customizing,Debian,Packaging,Customizing,我试图通过添加一些额外的源文件(不包括在上游存档中)和应用一些补丁来定制和重建Debian源代码包。更具体地说,我尝试通过添加自定义插件来定制Ubuntu“ppp”包。我做了以下工作: 1) 我下载并解压带有“apt get source ppp”的源代码包 2) 我进入“ppp-x.x.x”子树,用“dpkg buildpackage-uc”干净地重建包,以确保源包一切正常。(实际上现在一切都好了) 3) 现在,我将定制补丁放在“debian”子树的“debian/patches”子文件夹中。

我试图通过添加一些额外的源文件(不包括在上游存档中)和应用一些补丁来定制和重建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/Cutter”尝试应用我的自定义 我的自定义源的补丁程序,无法找到它们。所以它失败了 构建完全失败
  • 构建失败并停止后,我可以在构建树中看到我的自定义插件(“tacacs”)子文件夹,但它是空的。 所以补丁失败也就不足为奇了

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

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

  • 第一种似乎更为恰当和惯用。这是个好地方 “补充原始柏油球”的其他来源 在主要的原始焦油球之后加上“成分” 名称”(如
    man dpkg源代码
    中所述)。辅助焦油球
    在构建和附加之前在主柏油球上提取
    代码到达构建树,在那里可以对其进行修补和编译。
    事实上,我的附加代码已经打包到归档文件中,所以我只需重命名归档文件

    不幸的是,这个方法对我不起作用,因为代码来自补充tarballs 只能注入到构建树的根目录中,以及pppd插件代码 应该放在
    pppd/plugins
    子目录中。但我不能 找到一种方法,以正确的方式创建代码的符号链接 带有
    dpkg源代码/coult
    的子目录

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

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

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


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

    IIRC您需要在
    debian/files
    或类似的文件中枚举它们。@tripleee谢谢您,但我相信您在确切意义上对
    debian/files
    的理解是错误的。正如我看到的,这个文件包含在构建中生成的输出文件列表。在
    debian
    目录中还有很多其他文件包含这些列表,也许我必须尝试所有这些文件,但我以前没有得到正确的答案。也许我将其与
    debian/install
    混合使用。快速谷歌搜索表明,这是您枚举希望安装在某处的非标准文件的地方。