我正在运行 Ubuntu 12.04 LTS 服务器。目前我遇到一个问题,我使用的一个软件包有一个烦人的错误。我不想删除它并从源代码构建它,而是想将其集成到 Ubuntus/Debians 软件包管理中。
来自 ArchLinux 我们通过复制原始的 PKGBUILD 并对其进行更改来实现这一点,以便编译新的包。这是一个非常简单的过程,但它会将此包的信息通知包管理器,即使它不在本地存储库中。
Ubuntu/Debian 有类似的方法吗?我可以轻松地基于过时的 Ubuntu 版本来构建我的软件包,并安装此软件包而不是原始存储库软件包吗?
笔记:涉及的软件是 libvirt(我至少需要 0.9.13,12.04 运行 0.9.8),虽然我希望在评论中提供针对这个特定软件包的解决方案,但我正在寻找一种更通用的解决方案,以防将来出现此类问题。
与问题相反我怎样才能“以困难的方式”手动组装我自己的包裹?和什么是最简单的 Debian 打包指南?我对创建新的包,而是使用现有资源并将其更新为较新的版本。
答案1
我将首先下载 Ubuntu 版本的源代码和构建依赖项:
apt-get install dpkg-dev
apt-get build-dep <package>
apt-get source <package>
Ubuntu 版本所基于的未修改的上游源代码将位于名为 <pkg>_<ver>.orig.tar.gz 的文件中(压缩方案可能有所不同) - 我会将其解压到一个目录(我们称之为“dir A”),然后将源代码下载到错误修复版本到另一个目录(“dir B”),然后针对所做的更改生成补丁:
diff -Nur <dirA> <dirB> >/tmp/upgrade.patch
然后切换到 apt-get source 解压修改后的 Ubuntu 版本的目录,并应用补丁
patch -p1 </tmp/upgrade.patch
假设两个上游版本之间没有太多变化,并且它们不与 Ubuntu 打包程序的任何更改冲突,那么这应该可以工作。然后编辑 Ubuntu 包中的 debian/changelog 以为其提供新的版本号,dpkg-buildpackage 应该会为您构建一个自定义版本。
答案2
只是为了吹嘘我自己,我已经为这种情况创建了一个解决方案。 您只需 2 或 3 个命令即可下载、解压、构建和重新安装 Debian 软件包。
这是一个 shell 脚本债务工具并可通过上述链接在 GitHub 上获取。
从源代码构建 Debian 软件包可能很麻烦,特别是在日常使用中,您不一定想与众多的构建依赖项等混淆。
假设虚拟器可通过来源获得,运行以下命令:
debtool --download --unpack libvirt
上面的命令只是下载了libvirt_0.9.8_all.deb文件并将其解压到目录中libvirt_0.9.8_all。
或者,你可以解压版本虚拟器当前安装在您的系统上:
debtool --unpack libvirt
此时,您应该对目录中的文件进行所有更改。您可能还想提高位于./libvirt_0.9.8_all/DEBIAN/控制。
现在通过运行以下命令来构建包:
debtool --build ./libvirt_0.9.8_all
您的完成的软件包现在位于当前目录中libvirt_0.9.8-custom1_all.deb。
您可以通过运行快速重新安装此包debtool --reinst ./libvirt_0.9.8-custom1_all.deb
,或者也debtool --build --reinst ./libvirt_0.9.8_all
可以一举构建并重新安装。
等等
您可以使用以下方法执行其他相关任务债务工具也一样。
显示可用版本
如果存储库中有多个版本的软件包可用,您可以按如下方式列出它们:
debtool --show zsh
上述命令将返回以下内容:
zsh 5.0.5-4ubuntu1~ubuntu14.04.1 amd64
zsh 5.0.2-3ubuntu6 amd64
如果您想手动下载软件包,那么您可以使用该--show-format
选项。
debtool --show --show-format zsh
将返回以下内容:
apt-get download zsh=5.0.5-4ubuntu1~ubuntu14.04.1 -a=amd64
apt-get download zsh=5.0.2-3ubuntu6 -a=amd64
下载 Debian 档案
您可以按照如下方式下载最新版本的软件包:
debtool --download zsh
您可以按如下方式下载特定版本:
debtool --download zsh=5.0.2-3ubuntu6
解包
您可以解压硬盘上的软件包:
debtool --unpack package.deb
您还可以解压当前安装在您的系统上的软件包:
debtool --unpack package
如果您对任何已安装的文件进行了更改,它们也将被合并。如果您想要使用不再从源中提供的软件包,或者想要将预先存在的修复合并到“修补”的 deb 中,这非常完美。