我如何创建多架构 deb?

我如何创建多架构 deb?

我正在尝试制作一个可以在 1386 和 amd64 上的 Ubuntu 12.04 - 13.* 上安装的软件包。我发现在 amd64 上,唯一的区别是我需要安装 32 位库。当系统有 ia32-libs 时,依赖 ia32-libs 可以工作(尽管有点过头了),但 13.* 甚至没有这个软件包。因此,我尝试通过 ':i386' 扩展进行安装。当我这样做时,sudo apt-get install blah:i386 ...etc它工作正常。

以下控制文件在 12.04 上产生消息:“依赖项无法满足:libgcc1:i386”。

软件包:foo
版本:1.0-1
部分: 基础
优先级:可选
维护者:[电子邮件保护]
建筑:全部
依赖:libgcc1:i386、gcc-4.6-base:i386、libstdc++5:i386、libstdc++6:i386、libsasl2-2:i386、libgstreamermm-0.10-2:i386、libfreetype6:i386,
 libfontconfig1:i386、libX11-6:i386、libXrender1:i386、libice6:i386、libxext6:i386、libsm6:i386
描述:foo 很棒
 Foo 真的很棒
安装尺寸:71140

因此,按照其他几个地方的说法,我制作了以下控制文件:

软件包:foo-amd64
版本:1.0-1
部分: 基础
优先级:可选
维护者:[电子邮件保护]
架构:amd64
依赖:foo、libgcc1:i386、gcc-4.6-base:i386、libstdc++5:i386、libstdc++6:i386、libsasl2-2:i386、libgstreamermm-0.10-2:i386、libfreetype6:i386,
 libfontconfig1:i386、libX11-6:i386、libXrender1:i386、libice6:i386、libxext6:i386、libsm6:i386
描述:foo 很棒
 Foo 真的很棒
安装尺寸:71140

软件包:foo
版本:1.0-1
部分: 基础
优先级:可选
维护者:[电子邮件保护]
架构:i386
取决于:gksu
Multi-Arch:外国
描述:foo 很棒
 Foo 真的很棒
安装尺寸:71140

这个控制文件甚至无法编译,因为我收到以下错误消息:dpkg-deb: error: parsing file 'foo/DEBIAN/control' near line 25 package 'foo': several package info entries found, only one allowed。我该如何正确地做到这一点?

编辑:此软件包不附带源代码。它附带已编译的 32 位二进制文​​件,因此需要依赖 32 位版本的库。

答案1

您不需要创建单独的包名称来获得多架构。只需输入:

Package: foo-amd64
Version: 1.0-1
Section: base
Priority: optional
Maintainer: [email protected]
Architecture: any
Multi-Arch: same
Depends: foo, libgcc1, gcc-4.6-base, libstdc++5, libstdc++6, libsasl2-2, libgstreamermm-0.10-2, libfreetype6,
 libfontconfig1, libX11-6, libXrender1, libice6, libxext6, libsm6
Description: foo is awesome
 Foo is really awesome
Installed-Size: 71140

这应该会构建 amd64 和 i386 软件包,具体取决于您的构建环境变量。如果您使用食谱

dh(1) 和 autotools

最简单的转换包是在 Debian 打包中使用 autoconf upper 和 dh(1) 的包。

  1. 构建依赖于 debhelper (>= 9)。
  2. 将预依赖项:${misc:Pre-Depends} 添加到 debian/control 中列出的任何提供共享库的包。
  3. 将 debian/compat 更新到‘9’。
  4. /usr/lib/将中的 替换debian/*.install/usr/lib/*/
  5. 如果/usr/lib(或子目录) 在 中被列为安装目标debian/*.install,或 中的链接目标debian/*.links,则需要将 $(DEB_HOST_MULTIARCH) 的值替换到此文件中。请参阅下面的“动态 debian/* 文件”。
  6. debian/rules 中出现的任何 /usr/lib 都应替换为 /usr/lib/$(DEB_HOST_MULTIARCH)。
  7. 如果您需要在前两个步骤中的任一步骤中使用 debian/rules 中的 $(DEB_HOST_MULTIARCH),请通过调用以下命令在 debian/rules 中设置 DEB_HOST_MULTIARCH:DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)。
  8. 一旦您构建了软件包并验证了共享库包仅包含预期的文件,并且您的 -dev 包仍然有效,请在 debian/control 中将此共享库包标记为 Multi-Arch:相同。
  9. 如果共享库包可能需要它,则在 debian/control 中将通用包(即“全部”)标记为 Multi-Arch: foreign。

如果您已经在 debian/rules 中覆盖了 debhelper 命令,尽管在其余的构建中使用了 dh(1),您可能仍需要按照以下说明使用经典 debhelper 来修改覆盖规则所使用的 mv、cp 或 rm 命令。

Debian 打包实施指南中有更多示例https://wiki.debian.org/Multiarch/Implementation。您还可以使用 lithian 来确保您的包裹完全符合要求。

相关内容