Yog*_*evi 7 package-management apt dpkg multiarch
我们有一个产品想要安装在基于 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
...
Run Code Online (Sandbox Code Playgroud)
因此,我创建了一个 deb 包并尝试将其安装在目标服务器上。
然而,我意识到我的包没有被apt包管理器识别。我想这是因为 deb 包使用的通配符不在dpkg. 所以我尝试使用以下dpkg命令添加架构通配符:
# add foreign architectures
dpkg --add-architecture all
Run Code Online (Sandbox Code Playgroud)
然而,这给了我一个错误(请参阅 针对 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'
Run Code Online (Sandbox Code Playgroud)
因此,我现在不确定如何创建针对多种架构的软件包以及如何将这些软件包安装在运行 AMD64 和 ARM64 处理器系列的 Ubuntu 服务器上
欢迎任何建议。
我的 PPA ( ppa:mafoelffen/system-info ) 中有一个 Multi-Arch 包。sudodus是我的贡献者之一。他让我来这里回答一下我为此做了什么。
参与测试此包中我的脚本的人员确保它在 amd64、arm64、armhf、ppc64el、powerpc、riscv64、s390x 上测试良好。
这就是我所做的(参考:https ://www.debian.org/doc/debian-policy/ch-controlfields.html#architecture ):
dpkg-architecture -L
Run Code Online (Sandbox Code Playgroud)
对于 Debian 软件包,在./PackageName-VersionNumber/debian folder/control文件中,我有以下内容:
Architecture: all
Run Code Online (Sandbox Code Playgroud)
这就是控制文件中所需要的全部内容。在本地构建它,将创建一个ProjectName-VersionNumber_all.deb文件。我在将源码包上传到 PPA 之前在本地测试了这个包。
在 PPA“更改详细信息”页面中,对于“处理器”,我选择了所有拱门,这将让我以自助服务的方式进行操作。(除了riskv64之外的所有。说来话长。)
当它第一次上传到 PPA 时,在 PPA“查看包详细信息”页面中,它最初会显示其构建所在架构的状态。对我来说这是“amd64”。发布后,该状态将更改为绿色复选标记。如果我查看包的详细信息,它有system-info_02.00.07_all.deb,然后我从那里在所有目标拱门上进行测试。“riscv64”是另一个讨论,但由于我的没有上游代码(我是“上游”)作为依赖项,所以它也是为此构建的。如果有,那将是另一个包含更多细节的故事。
PPA 页面上没有任何内容显示有关架构/包详细信息的任何其他内容。我不得不去其他地方调查才发现......
Risc-V 64 对我来说是一个问题,因为我想包含该架构目标,但它不允许我自己选择该选项。我知道这不是你的目标拱门,但我发现的细节会回答这个问题。我访问了由构建创建的 PPA 存储库,使用 PPA 的人将从以下位置获取包:REPO。如果您检查那里,构建后它会创建不同的拱门,名称为binary-<arch>。如果您沿着目录树的分支找到每个架构的发布文件,它会告诉您它是为哪个架构构建的。这就是我确认它是为每个拱门建造的方式。
然后,我通过(从具有该拱门的机器)添加 PPA、在每个拱门上安装和测试来测试每个拱门。
请注意,如果您要创建 Debian 软件包的本地构建 ( .deb),Architecture控制文件中的该行将决定***_arch***.deb软件包的部分,指示目标架构。对于只有两个拱门,就像您指出的那样,然后在一个控制文件中执行“amd64”,构建.deb包,然后执行“arm64”,然后再次构建它。这将创建PackageName_VersionNumber_amd64.deb并PackageName_VersionNumber_arm64.deb打包。每个拱门一个。
我用它来构建要上传到 PPA 的源代码:
debuild -us -uc -i -I -S -sa
Run Code Online (Sandbox Code Playgroud)
我使用它在本地构建软件包以创建 Debian.deb来测试软件包:
debuild -us -uc
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |