マルチアーチスナップの構築方法

マルチアーチスナップの構築方法

複数のアーキテクチャ用にビルドしたいスナップがあります。現在、snapcraft.yamlファイル内で、実行するバイナリとしてラッパーを定義し、アプリの実行に必要な環境変数を設定しています。

そこに含まれるスクリプト コードの一部は次のとおりです。

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

明らかに、ハードコーディングはARCH最適ではありません。amd64 以外のビルドは正しく動作しないからです。ただし、dpkg-architectureSnapcraft を使用する場合、アーキテクチャ検出は機能しません。

Snapcraft を使用してスナップをビルドするときに、ラッパー内でホストのアーキテクチャを動的に検出して正しいライブラリ パスを設定するにはどうすればよいでしょうか?

コードは、スナップデスクトップの例

答え1

バイナリ ラッパー (およびサービス ファイル) は、SNAP_ARCH環境変数を定義します。残念ながら、これらはトリプレットではないため理想的なソリューションではありませんが、case ステートメントなどでそこに到達するには十分な情報であるはずです。

答え2

完全性を期すために、次のシェル スニペットを使用しました。

#!/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プラグインの作成その代わり。

関連情報