为本地安装创建自己的软件包的正确方法是什么?

jav*_*vex 7 package-management packaging apt

我正在运行 Ubuntu 12.04 LTS 服务器。我目前有一个问题,我用过的一个软件包有一个烦人的错误。我不想删除它并从源代码构建它,而是想将它集成到 Ubuntus/Debians 包管理中。

来自 ArchLinux,我们通过复制原始 PKGBUILD 并以编译包的方式更改它来做到这一点。这是一个非常简单的过程,但它会通知包管理器有关此包的信息,即使它不在本地存储库中。

Ubuntu/Debian 有类似的方法吗?我可以轻松地将我的软件包基于过时的 Ubuntu 版本并安装此软件包而不是原始存储库吗?

注意:相关软件是 libvirt(我至少需要 0.9.13,12.04 运行 0.9.8),虽然我很感激评论中针对此特定软件包的解决方案,但我正在寻找针对此类问题的更通用的解决方案将来出现。

与问题相反,我如何“艰难地”手动组装我自己的包?什么是最简单的Debian软件包指南?我对创建包不感兴趣,而是使用现有资源并将它们更新到更新版本。

Ste*_*Dee 6

我会先下载 Ubuntu 版本的源代码和构建依赖项:

apt-get install dpkg-dev
apt-get build-dep <package>
apt-get source <package>
Run Code Online (Sandbox Code Playgroud)

Ubuntu 版本所基于的未修改的上游源将位于名为 <pkg>_<ver>.orig.tar.gz 的文件中(压缩方案可能会有所不同) - 我会将其解压缩到一个目录中(我们称之为“dir A”),然后将源代码下载到修复了错误的版本到另一个目录(“dir B”),然后为更改的内容生成补丁:

diff -Nur <dirA> <dirB> >/tmp/upgrade.patch
Run Code Online (Sandbox Code Playgroud)

然后切换到apt-get source解压修改后的Ubuntu版本所在目录,打上补丁

patch -p1 </tmp/upgrade.patch
Run Code Online (Sandbox Code Playgroud)

假设两个上游版本之间没有太多更改,并且它们与 Ubuntu 打包程序的任何更改都不冲突,这应该可行。然后编辑 Ubuntu 包中的 debian/changelog 给它一个新的版本号,dpkg-buildpackage 应该为你构建一个自定义版本..