У меня есть оснастка, которую я хотел бы построить для нескольких архитектур. Прямо сейчас в файле 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?
Код доступен как часть примеров быстрого рабочего стола .
Двоичные обертки (и сервисные файлы) определяют SNAP_ARCH
переменная среды для Вас. К сожалению, не идеальное решение, так как они не триплеты, но это должно быть достаточно информации для Вас для получения там с оператором выбора или чем-то.
Ради полноты я закончил тем, что использовал следующий отрывок оболочки:
#!/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 вместо этого.
Error! Your kernel headers for kernel 3.13.0-113-generic cannot be found.
, который I' ve, пытаясь зафиксировать с помощью askubuntu.com/questions/334136/… , но это дает мне список битых ссылок. – LOlliffe 26 August 2017 в 12:59