我尝试通过添加一些额外的源文件(不包含在上游存档中)并应用一些补丁来自定义和重建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-source -b”看到它们并将它们注入构建树?
答案 0 :(得分:1)
我找到了两种解决问题的方法:
第一个似乎更恰当和惯用。它是放置
命名为“补充原始tarball”的其他来源
主要原始tarball之后加上“组件”
名称“(如man dpkg-source
中所述)。补充tarball
在构建之前通过主tarball提取并添加
代码到达构建树,在那里可以修补和编译它。
实际上我的附加代码已经打包到存档中,所以我只需要重命名存档。
不幸的是,这个方法对我来说不起作用,因为来自补充tarball的代码
可以只注入构建树的根,以及pppd插件代码
应该放在pppd/plugins
子目录中。我不能
找到一种方法来创建适当的代码的符号链接
dpkg-source/quilt
的子目录。
所以我不得不使用第二种方法:
dpkg-source -x
(或apt-get source
)创建的干净源代码树中的适当位置dpkg-source --commit
应用于源目录,并在debian/patches
子目录中获得了一个补丁以及引用新创建的补丁的正确series
文件。此修补程序包含将其他源放置到源树时发生的所有更改。因此,可以通过重新应用此修补程序在适当的位置重新创建其他源。series
文件保存到临时位置,并删除了源树。dpkg-source -x
重新创建了干净的源代码树。series
文件再次放到源树的debian/patches
文件夹中。我还编辑了debian\changelog
和debian\control
,以表明应该构建新版本的软件包,而不是将新软件包与原始版本混淆。现在,我可以使用dpkg-buildpackage -uc -us
构建新版本的软件包。这还不是最终版本,因为它不包含我的自定义补丁,但它已经包含我的自定义源。
最后我将自定义补丁添加到debian/patches
目录,将对它们的引用添加到debian/patches/series
文件,再次运行dpkg-buildpackage
并得到我想要的包得到。
虽然此方法可以使用源代码注入到源树中的任何所需位置,但它有一个缺点,即应手动解压缩其他源,与原始代码混合并转换为补丁。每次更新此附加代码时,都必须重复所有这些操作。在第一种方法中,用新版本替换补充tarball就足够了,并确保所有后续补丁都适用。