
複数のアーキテクチャ用にビルドしたいスナップがあります。現在、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 を使用する場合、アーキテクチャ検出は機能しません。
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プラグインの作成その代わり。