Как сделать многоарочные защелки

Как сделать многоарочные защелки

У меня есть 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вместо.

Связанный контент