为不同的架构构建快照

问题描述 投票:0回答:1

我目前正在为 Apache IoTDB 创建一个 snap,它应该适用于 arm64 和 amd64 架构。

现在我知道这应该是可能的,但我遇到的问题是,如果我使用“stage-packages”,则在列出管理单元的内容时,其中一个包是“openjdk-11-jre-headless”这两种情况我只能看到“squashfs-root/usr/lib/jvm/java-11-openjdk-arm64”

我正在构建一个“core22”图像并为架构定义它:

architectures:
 - build-on: [arm64, amd64]
   build-for: [arm64]
 - build-on: [arm64, amd64]
   build-for: [amd64]

我应该提到我正在 M2 Mac 上的 Ubuntu 22.04 VM 上构建。

cross-platform snapcraft snap
1个回答
0
投票

1、您可以在 snapcraft.yaml 中使用如下语法指定特定于架构的阶段包:

architectures:
  - build-on: [amd64]
    build-for: [amd64]
  - build-on: [arm64]
    build-for: [arm64]

parts:
  mypart:
    plugin: nil
    stage-packages:
      - on amd64: [openjdk-11-jre-headless:amd64]
      - on arm64: [openjdk-11-jre-headless:arm64]

2、查看并验证快照内容: 构建快照后,您可以使用 unsquashfs 工具检查内容以列出文件并检查每个架构是否存在正确的 Java 版本:

unsquashfs -l <your-snap-name>.snap

3、在原生架构上单独构建: 如果可行,请考虑在本机架构环境上单独构建快照(即,使用 AMD64 环境进行 AMD64 构建,使用 ARM64 环境进行 ARM64 构建)。这有时可以帮助避免交叉编译问题,并且是确保正确处理每个架构的好方法。

© www.soinside.com 2019 - 2024. All rights reserved.