我有一个程序源(取自cvs / svn / git / ...),我想为其构建Debian / Ubuntu软件包。该软件包位于存储库中,但是:
- 它是较旧的版本(缺少我需要的功能)
- 我需要的编译选项与默认选项略有不同。
最简单的方法是什么?我担心两件事
- 如何检查我是否正确列出了所有依赖项?(通过查看旧版本所依赖的内容,可以得到一些提示,但是可能已添加了新的依赖项。)
- 如何防止更新系统在更新的回购中安装旧版本?
- 如何防止系统安装新版本(发布时),覆盖我的自定义软件包?
我有一个程序源(取自cvs / svn / git / ...),我想为其构建Debian / Ubuntu软件包。该软件包位于存储库中,但是:
最简单的方法是什么?我担心两件事
Answers:
您可以将特殊软件包“ 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
libdrm-2.3.1
?也是libdrm-2.4.1.tar.gz
从哪里来的(我最初的假设是我们要打包在deb中的应用程序的已编译二进制文件,但是替换现有版本,对吗?)
You must put some 'source' URIs in your sources.list
,请取消注释/etc/apt/sources.list
首先,标题问题:假设debian目录已经存在,位于源目录(包含debian目录的目录)中,并调用dpkg-buildpackage。我喜欢使用以下选项来运行它:
dpkg-buildpackage -us -uc -nc
这意味着不要在结果上签名也不要清理。
如何检查我是否正确列出了所有依赖项?
获得依赖关系是一门妖术。“正式”方式是检查构建依赖关系的方式,即软件包是否仅使用基本系统,“ build-essential”软件包以及您指定的构建依赖项进行构建。不知道常规依赖关系的一般答案,只需涉足:)
如何防止更新系统在更新的回购中安装旧版本?如何防止系统安装新版本(发布时),覆盖我的自定义软件包?
我的知识可能不合时宜,但要解决这两个问题:使用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目录时- 开发人员参考和常规资源页面也很有帮助。 亚当的链接看起来也不错,但我并不熟悉。
对于您想做的事情,您可能要使用debian源文件diff,因此您的软件包与官方软件包相似,除了所使用的上游版本不同。您可以从packages.debian.org下载源差异文件,也可以使用“ apt-get source”将其与.dsc和原始源文件存档一起获得。
然后解压缩上游源的新版本,切换到该目录,并通过执行以下操作应用下载的差异
zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules
然后进行您想编译选项的更改,并通过以下方式构建程序包
dpkg-buildpackage -rfakeroot -us -uc
示例基于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/
如果您使用的是Ubuntu,请查看pkgcreator项目:http : //code.google.com/p/pkgcreator
如果您想要一种快速而肮脏的方式来安装构建依赖项,请使用:
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
然后创建一个构建区域:
sudo DIST =挤压ARCH = amd64 Cowbuilder-创建
然后编译一个源包:
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将最终包装放在何处。
祝好运!