2008-09-25 38 views
109

我有一个程序的源代码(取自cvs/svn/git/...),我想为它构建一个Debian/Ubuntu包。该软件包是存在于仓库,但:如何从源代码构建Debian/Ubuntu包?

  • 这是一个旧版本(缺乏特点,我需要)
  • 我需要比默认略有不同的编译选项。

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

  • 如何检查我是否已正确列出所有依赖关系? (我可以通过查看旧版本的依赖来获得一些提示,但是可能已经添加了新的依赖关系。)
  • 我该如何防止更新系统在更新的repo上安装旧版本?
  • 我该如何防止系统安装更新的版本(如果没有),覆盖我的自定义软件包?
+0

的AU相似:http://askubuntu.com/questions/28372/how-do-i- get-the-source-code-of-packages-installed-through-apt-get – 2015-05-17 07:33:31

回答

2

我相信this是Debian软件包'bible'。

嗯,这是Debian新的维护者指南,所以它很多都不适用,但它们确实涵盖了什么地方。

0

Here是一个构建Debian软件包的教程。

基本上,你需要:

  1. 设置您的文件夹结构
  2. 创建控制文件
  3. 选择创建的postinstprerm脚本
  4. 运行的dpkg-DEB

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

25

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

dpkg-buildpackage -us -uc -nc 

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

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

获得依赖关系是一门黑色艺术。 “官方”的方法是检查构建依赖是如果程序包只与基本系统,“构建必要”包和您指定的构建依赖关系构建。不知道常规依赖的一般答案,只是在wade中:)

我该如何防止更新系统在更新中安装旧版本的回购协议? 我怎样才能防止系统安装新版本(当它出来),覆盖我的自定义软件包?

我的知识可能是过期就这一个,但要同时满足: 使用的dpkg --set-选择。假设nullidentd是你想留下来放包,以root身份运行

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

或者,因为你是从源代码构建,您可以使用一个epoch设置版本号虚高和永远不会再打扰。要使用新纪元,请将新条目添加到debian/changelog文件中,并在版本号前加上99:。鉴于我nullidentd例如,您更新更新日志的第一行就写着:

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

Bernard's link是好的,特别是如果你要创建自己的debian目录 - 也很有帮助是developers referencegeneral resource pageAdam's link也看起来不错,但我不熟悉它。

+1

“dpkg --set-selections”仍然有效,但现在更好的方法是“aptitude hold nullidentd”。 – 2008-09-25 15:45:38

6

对于你想要做的,你可能想要使用debian源代码差异,所以你的包类似于官方的一个,除了上游版本使用。您可以从packages.debian.org下载源代码差异,或者使用“apt-get source”将它与.dsc和原始源代码归档一起获取。

然后你解开你的上游源的新版本,更改到该目录,并应用做

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

下载的差异然后,让你想编译选项的变化,并通过建立包做

dpkg-buildpackage -rfakeroot -us -uc 
75

你可以使用特殊软件包“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 
+0

谢谢!我刚刚使用它来将Subversion 1.6.6移植到只有1.6.5作为其最新可用版本的Ubuntu安装中,并且其工作完美无瑕。为我节省了好几个小时的时间! :) – 2010-01-20 17:44:30

3
  • 放 “的Debian” 从原始包到目录您的源代码目录
  • 使用“dch”更新软件包版本
  • 使用“debuild”生成软件包
1

我如何检查我是否已正确列出的所有依赖关系?

pbuilder是通过在chroot环境中设置干净的基础系统来检查构建依赖性和依赖性的极好工具。通过在pbuilder中编译软件包,您可以轻松检查构建依赖关系,并通过在pbuilder环境中对其进行测试,您可以检查依赖关系。

1

如果你想在安装的依赖关系,一个快速和肮脏的方式,使用方法:

apt-get build-dep 

这将安装依赖关系。您需要在您的sources.list源线这样的:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free 

如果从测试到稳定向后移植包,被告知请的依赖性可能会有所改变。 apt-get build-deb命令为当前存储库中的源包安装依赖项。

但是,当然,dpkg-buildpackage -us -uc将显示任何卸载的依赖关系。

如果您想更频繁地编译,请使用cowbuilder。

apt-get install cowbuilder 

然后,创建一个构建领域:

须藤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 

观看其中cowbuilder放所得到的包。

祝你好运!