为 ARM 和 AMD64 创建 deb 包会返回错误:“跳过获取已配置的文件”

为 ARM 和 AMD64 创建 deb 包会返回错误:“跳过获取已配置的文件”

我们有一个产品,想要安装在基于 AMD64/x86 的 Ubuntu 服务器和基于 ARM 的 Ubuntu 服务器上。我们将产品打包为 deb 包。所以我需要创建一个可以安装在 AMD64 和 ARM64 上的 deb 包。我确实参考了https://wiki.ubuntu.com/MultiarchSpec

我开始Architecture在我的包(all" ...)控制文件中使用通配符(我也尝试过any):

Package: my-package 
Version: X.Y.Z
Architecture: all
... 

因此我创建了一个 deb 包并尝试将其安装在目标服务器上。

但是,我发现apt包管理器无法识别我的包。我猜这是因为 deb 包使用的通配符不在 的“外部架构”列表中dpkg。因此,我尝试使用以下dpkg命令添加架构通配符:

# add foreign architectures 
dpkg --add-architecture all
 

然而这给了我一个错误(参见 另一个具体问题已发布对于 dpkg --add-architecture 错误) - 但基本上我放弃了

出于绝望,我添加了“ALL”,我可以成功添加。然而,这(正如预期的那样)给了我一个错误,因为通配符“ALL”无效,不等于“all”。我得到的错误如下

 # apt update 
 ...
 N: Skipping acquire of configured file 
'restricted/binary-ALL/Packages' as repository 
'http://ports.ubuntu.com/ubuntu-ports focal- 
 updates InRelease' doesn't support architecture 
'ALL'
N: Skipping acquire of configured file 
'restricted/binary-linux-any/Packages' as 
repository 'http://ports.ubuntu.com/ubuntu-ports 
focal-updates InRelease' doesn't support 
architecture 'linux-any'

所以我现在不确定如何创建针对多种架构的软件包,以及如何在运行 AMD64 和 ARM64 处理器系列的 Ubuntu 服务器上安装这些软件包

欢迎任何建议。

答案1

我的 PPA 中有一个包(ppa:mafoelffen/系统信息),即 Multi-Arch。苏多杜斯是我的一位贡献者。他请我来这里回答我为此做了什么。

参与测试此包中我的脚本的人员确保它在 amd64、arm64、armhf、ppc64el、powerpc、riscv64、s390x 上测试良好。

这是我所做的(参考:https://www.debian.org/doc/debian-policy/ch-controlfields.html#architecture):

dpkg-architecture -L

对于 Debian 包,在./PackageName-VersionNumber/debian folder/control文件中,我有以下内容:

Architecture: all

这就是控制文件中所需的全部内容。在本地构建它将创建一个ProjectName-VersionNumber_all.deb文件。在将源包上传到 PPA 之前,我会在本地测试此包。

在 PPA“更改详细信息”页面中,对于“处理器”,我已选择允许我以自助方式执行的所有架构。(riskv64 除外。说来话长。)

当它首次上传到 PPA 时,在 PPA“查看软件包详细信息”页面中,它最初会显示其构建所基于的架构的状态。对我来说,这是“amd64”。发布后,该状态将变为绿色复选标记。如果我查看软件包详细信息,它有system-info_02.00.07_all.deb,然后我在所有目标架构上对其进行了测试。“riscv64”是另一个讨论,但由于我的没有上游代码(我是“上游”)作为依赖项,因此它也是为此构建的。如果有,那将是另一个故事,有更多细节。

PPA 页面上没有显示有关 arch/package 详细信息的任何内容。我不得不在其他地方进行调查才发现...

Risc-V 64 对我来说是个问题,因为我想包含该 arch 目标,但它不允许我自己选择该选项。我知道这不是你的目标 arch,但我发现的细节会回答这个问题。我去了由构建创建的 PPA 存储库,使用 PPA 的人会从以下位置获取软件包:回购协议。如果您在那里检查,构建后它会创建不同的 arches,命名为binary-<arch>。如果您沿着目录树的分支向下找到每个 arch 的发布文件,它会告诉您它是为哪个 arch 构建的。这就是我确认它是为每个 arch 构建的。

然后我通过(从具有该架构的机器)添加 PPA、在每个架构上进行安装和测试来测试每个架构。

请注意,如果您正在创建 Debian 软件包的本地构建(.deb),则Architecture控制文件中的该行将确定***_arch***.deb软件包的部分,指示目标架构。对于只有两个架构的软件包,如您所指出的,然后在一个控制文件中执行“amd64”,构建软件包.deb,然后执行“arm64”,然后再次构建它。这将创建PackageName_VersionNumber_amd64.debPackageName_VersionNumber_arm64.deb软件包。每个架构一个。

我使用它来构建要上传到 PPA 的源:

debuild -us -uc -i -I -S -sa

我使用它在本地构建软件包来创建.deb要测试的 Debian 软件包:

debuild -us -uc

相关内容