如何构建多架构 snap 包

如何构建多架构 snap 包

我有一个要为多种架构构建的 snap。现在,snapcraft.yaml我在文件中定义了一个包装器作为要执行的二进制文件,它设置了应用程序运行所需的环境变量。

其中包含的一段脚本代码如下:

#!/bin/sh
ARCH='x86_64-linux-gnu'
export LD_LIBRARY_PATH=$SNAP/usr/lib/$ARCH:$LD_LIBRARY_PATH

显然,硬编码ARCH不是最佳选择,因为非 amd64 版本将无法正常工作。但是,dpkg-architecture使用 Snapcraft 时,arch 检测将不起作用。

如何在使用 Snapcraft 构建 snap 时动态检测包装器中的主机架构以设置正确的库路径?

代码可作为snappy 桌面示例

答案1

二进制包装器(和服务文件)SNAP_ARCH为您定义环境变量。不幸的是,这不是一个理想的解决方案,因为它们不是三元组,但它应该足以让您使用 case 语句或其他东西来实现这一点。

答案2

为了完整起见,我最终使用了以下 shell 代码片段:

#!/bin/sh

case "$SNAP_ARCH" in
    "amd64") ARCH='x86_64-linux-gnu'
    ;;
    "i386") ARCH='i386-linux-gnu'
    ;;
    *)
        echo "Unsupported architecture for this clock app build"
        exit 1
    ;;
esac

然而,随着包装开始变得复杂,我更愿意考虑创建 Snapcraft 插件反而。

相关内容