
У меня есть 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.
Как мне динамически определить архитектуру хоста в моей оболочке, чтобы задать правильные пути к библиотекам при сборке snap-пакета с помощью 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вместо.