当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

我有一个程序源(取自cvs /svn /git /…),我想为其构建Debian /Ubuntu软件包。该软件包位于存储库中,但是:

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

  • 我需要的编译选项与默认选项略有不同。

最简单的方法是什么?我担心两件事

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

  • 如何防止更新系统在更新的回购中安装旧版本?

  • 如何防止系统安装更新版本(发布时),覆盖我的自定义软件包?

最佳答案

您可以对所有甚至不在debian /ubuntu中的软件包使用特殊软件包”checkinstall”。

您可以使用”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

次佳答案

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

dpkg-buildpackage -us -uc -nc

这意味着不要在结果上签名也不要清理。

How can I check if I have listed all the dependencies correctly?

获得依赖关系是一门妖术。 “official”的检查方式取决于软件包是否仅使用基本系统,”build-essential”软件包以及您指定的构建依赖项进行构建。不知道常规依赖关系的一般答案,只需涉足:)

How I can I prevent the update system installing the older version in the repo on an update? How I can prevent the system installing a newer version (when its out), overwriting my custom package?

我的知识可能不合时宜,但是要解决这两个问题:请使用dpkg –set-selections。假设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 page也很有用。 Adam’s link看起来也不错,但我不熟悉。

第三种答案

对于您想做的事情,您可能想使用debian的diff,因此除了使用的上游版本外,您的软件包与官方软件包相似。您可以从packages.debian.org下载源差异文件,也可以使用“ apt-get源文件”将其与.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/

第五种答案

  • 将”debian”目录从原始包放入源目录

  • 使用“ dch”更新软件包的版本

  • 使用”debuild”构建软件包

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8463.html,未经允许,请勿转载。