当前位置:  开发笔记 > 运维 > 正文

如何从源代码构建Debian/Ubuntu包?

如何解决《如何从源代码构建Debian/Ubuntu包?》经验,为你挑选了4个好方法。

我有一个程序的源代码(取自cvs/svn/git/...),我想为它构建一个Debian/Ubuntu包.包存在于存储库中,但是:

它是旧版本(缺少我需要的功能)

我需要与默认值略有不同的编译选项.

这样做最简单的方法是什么?我关心的是一些事情

如何检查是否已正确列出所有依赖项?(我可以通过查看旧版本所依赖的内容获得一些提示,但可能已添加了新的依赖项.)

我怎样才能阻止更新系统在更新中的repo中安装旧版本?

我如何阻止系统安装新版本(当它出来时),覆盖我的自定义包?

小智.. 77

您可以使用特殊包"checkinstall"来获取所有甚至不在debian/ubuntu中的包.

您可以使用"uupdate"(apt-get install devscripts)从源代码构建包含现有debian源的包:

libdrm2的示例:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc


小智.. 26

首先,标题问题:假设debian目录已经存在,请在源目录(包含debian目录的目录)中并调用dpkg-buildpackage.我喜欢用以下选项运行它:

dpkg-buildpackage -us -uc -nc

这意味着不签署结果,不清洁.

如何检查是否已正确列出所有依赖项?

获得依赖是一种黑色艺术."官方"方法是检查构建取决于是否包仅使用基本系统,"构建必需"包以及您指定的构建依赖项构建.不知道常规依赖的一般答案,只是涉水:)

我怎样才能阻止更新系统在更新中的repo中安装旧版本?我如何阻止系统安装新版本(当它出来时),覆盖我的自定义包?

我的知识可能已经过时了,但要解决这两个问题:使用dpkg --set-selections.假设nullidentd是您想要保留的包,请以root身份运行

echo 'nullidentd hold' | dpkg --set-selections

或者,由于您是从源代码构建的,因此您可以使用一个纪元来人为地设置版本号,并且不会再次受到打扰.要使用纪元,请在debian/changelog文件中添加一个新条目,并在版本号前添加99:.鉴于我的nullidentd示例,更新后的更改日志的第一行将显示为:

nullidentd (99:1.0-4) unstable; urgency=low

Bernard的链接很好,特别是如果你必须自己创建debian目录 - 开发人员参考和一般资源页面也很有帮助. 亚当的链接看起来也不错,但我不熟悉它.



1> 小智..:

您可以使用特殊包"checkinstall"来获取所有甚至不在debian/ubuntu中的包.

您可以使用"uupdate"(apt-get install devscripts)从源代码构建包含现有debian源的包:

libdrm2的示例:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc



2> 小智..:

首先,标题问题:假设debian目录已经存在,请在源目录(包含debian目录的目录)中并调用dpkg-buildpackage.我喜欢用以下选项运行它:

dpkg-buildpackage -us -uc -nc

这意味着不签署结果,不清洁.

如何检查是否已正确列出所有依赖项?

获得依赖是一种黑色艺术."官方"方法是检查构建取决于是否包仅使用基本系统,"构建必需"包以及您指定的构建依赖项构建.不知道常规依赖的一般答案,只是涉水:)

我怎样才能阻止更新系统在更新中的repo中安装旧版本?我如何阻止系统安装新版本(当它出来时),覆盖我的自定义包?

我的知识可能已经过时了,但要解决这两个问题:使用dpkg --set-selections.假设nullidentd是您想要保留的包,请以root身份运行

echo 'nullidentd hold' | dpkg --set-selections

或者,由于您是从源代码构建的,因此您可以使用一个纪元来人为地设置版本号,并且不会再次受到打扰.要使用纪元,请在debian/changelog文件中添加一个新条目,并在版本号前添加99:.鉴于我的nullidentd示例,更新后的更改日志的第一行将显示为:

nullidentd (99:1.0-4) unstable; urgency=low

Bernard的链接很好,特别是如果你必须自己创建debian目录 - 开发人员参考和一般资源页面也很有帮助. 亚当的链接看起来也不错,但我不熟悉它.



3> Mark Baker..:

对于你想要做的事情,你可能想要使用debian源差异,所以你的软件包类似于官方的软件包,不同于上游版本.您可以从packages.debian.org下载源差异,或者可以使用"apt-get source"将其与.dsc和原始源存档一起下载.

然后解压缩上游源的新版本,切换到该目录,然后应用您下载的差异

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

然后进行您想要编译选项的更改,并通过执行来构建包

dpkg-buildpackage -rfakeroot -us -uc



4> Dariusz Cies..:

基于Ubuntu的 ccache 构建示例:

sudo apt-get update
sudo apt-get build-dep ccache
apt-get -b source ccache
sudo dpkg -i ccache*.deb

更多细节:http://blog.aplikacja.info/2011/11/building-packages-from-sources-in-debianubuntu/

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有