如何从源代码构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软件包的教程。

基本上,你需要:

  1. 设置你的文件夹结构
  2. 创build一个控制文件
  3. 可以select创buildpostinstprerm脚本
  4. 运行dpkg-deb

我通常在我的Makefile中执行所有这些操作,所以我只需键入make即可将二进制文件吐出并一次打包。