如何从源代码构buildDebian / Ubuntu包?
我有一个程序的源代码(从CVS / svn / git / …),我想build立一个Debian / Ubuntu的包。 该软件包存在于软件仓库中,但是:
- 这是一个旧版本(缺乏我需要的function)
- 我需要比默认稍微不同的编译选项。
什么是最简单的方法呢? 我很关心一些事情
- 我怎样才能检查我是否正确列出所有的依赖关系? (我可以通过查看旧版本的依赖来获得一些提示,但是可能已经添加了新的依赖关系。)
- 我该如何阻止更新系统在更新中安装旧版本的回购站点?
- 我怎样才能防止系统安装新版本(当它出来),覆盖我的自定义软件包?
你可以使用特殊软件包“checkinstall”来安装所有甚至不在debian / ubuntu中的软件包。
您可以使用“uupdate”( apt-get install devscripts
)从现有的debian源代码构build一个包:
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
首先,标题问题:假设debian目录已经在那里,在源目录(包含debian目录的目录),并调用dpkg-buildpackage。 我喜欢用这些选项运行它:
dpkg-buildpackage -us -uc -nc
这意味着不签名的结果,不清洁。
我怎样才能检查我是否正确列出所有的依赖关系?
获得依赖是黑色艺术。 “正式”的方法是检查构build依赖是如果包只与基础系统,“构build必要”包和您指定的构build依赖关系构build。 不知道常规依赖的一般答案,只是在:)
我该如何防止更新系统在更新中安装旧版本的回购站点? 我怎样才能防止系统安装新版本(当它出来),覆盖我的自定义软件包?
我的知识可能已经过时了,但是要解决这两个问题:使用dpkg –set-selections。 假设nullidentd是你想要保留的包,以root身份运行
echo 'nullidentd hold' | dpkg --set-selections
或者,由于您是从源代码构build的,因此您可以使用时代将版本号人为设置为高,不会再次受到困扰。 要使用纪元,添加一个新的条目到debian / changelog文件中,并在版本号前加上99:。 鉴于我的nullidentd示例,您的更新的更新日志的第一行将为:
nullidentd (99:1.0-4) unstable; urgency=low
伯纳德的链接是好的,特别是如果你必须自己创builddebian目录 – 也有帮助的是开发人员参考和一般资源页面 。 亚当的联系也看起来不错,但我不熟悉它。
对于你想要做的,你可能想要使用debian源代码差异,所以你的包类似于官方的一个,除了使用的上游版本。 您可以从packages.debian.org下载源代码差异,或者使用“apt-get source”将其与.dsc和原始源代码归档一起使用。
然后,你解压缩上游源代码的新版本,更改到该目录,并应用你下载的差异
zcat ~/downloaded.diff.gz | patch -p1 chmod +x debian/rules
然后进行想要编译选项的更改,并通过执行来构build包
dpkg-buildpackage -rfakeroot -us -uc
基于Ubuntu的 ccache 构build示例:
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/
- 将“debian”目录从原始软件包放到源目录中
- 使用“ dch ”来更新软件包的版本
- 使用“debuild”来构build包
我相信这是Debian软件包'圣经'。
那么,这是Debian新的维护者指南,所以它很多都不适用,但它们确实涵盖了什么地方。
如果您使用的是Ubuntu,请查看pkgcreator项目: http : //code.google.com/p/pkgcreator
我怎样才能检查我是否正确列出所有的依赖关系?
通过在chroot环境中设置一个干净的基础系统, pbuilder
是一个非常好的工具来检查构build依赖和依赖关系。 通过在pbuilder中编译软件包,您可以轻松检查构build依赖关系,并通过在pbuilder环境中对其进行testing,您可以检查依赖关系。
如果您想要安装构build依赖关系的快速和肮脏的方法,使用:
apt-get build-dep
这将安装依赖项。 你需要source.list中的源代码行:
deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free
如果您将软件包从testing恢复到稳定状态,请注意,依赖关系可能已更改。 apt-get build-deb命令为当前的资源库中的源代码包安装依赖项。
但是,当然,dpkg-buildpackage -us -uc将显示任何卸载的依赖关系。
如果你想更频繁地编译,请使用cowbuilder。
apt-get install cowbuilder
然后创build一个构build区域:
sudo DIST =挤压ARCH = amd64 cowbuilder –create
然后编译一个源码包:
apt-get source cowsay # do your magic editing dpkg-source -b cowsay-3.03+dfsg1 # build the new source packages cowbuilder --build cowsay_3.03+dfsg1-2.dsc # build the packages from source
观看牛仔布放在哪里的包裹。
祝你好运!
这里是一个build立Debian软件包的教程。
基本上,你需要:
- 设置你的文件夹结构
- 创build一个控制文件
- 可以select创buildpostinst或prerm脚本
- 运行dpkg-deb
我通常在我的Makefile中执行所有这些操作,所以我只需键入make即可将二进制文件吐出并一次打包。