
Ich habe einen Snap, den ich für mehrere Architekturen erstellen möchte. Im Moment snapcraft.yaml
definiere ich in der Datei einen Wrapper als auszuführende Binärdatei, der die für die Ausführung der App erforderlichen Umgebungsvariablen einrichtet.
Ein Teil des darin enthaltenen Skriptcodes ist der folgende:
#!/bin/sh
ARCH='x86_64-linux-gnu'
export LD_LIBRARY_PATH=$SNAP/usr/lib/$ARCH:$LD_LIBRARY_PATH
Offensichtlich ARCH
ist Hardcoding nicht optimal, da Nicht-AMD64-Builds nicht richtig funktionieren. Allerdings dpkg-architecture
funktioniert die Arch-Erkennung bei Verwendung von Snapcraft nicht.
Wie kann ich die Architektur des Hosts in meinem Wrapper dynamisch erkennen, um beim Erstellen des Snaps mit Snapcraft die richtigen Bibliothekspfade festzulegen?
Code ist verfügbar als Teil derBeispiele für Snappy-Desktops.
Antwort1
Die binären Wrapper (und Servicedateien) definieren die SNAP_ARCH
Umgebungsvariable für Sie. Leider keine ideale Lösung, da es sich nicht um Drillinge handelt, aber es sollten genug Informationen sein, damit Sie mit einer Case-Anweisung oder etwas Ähnlichem dorthin gelangen.
Antwort2
Der Vollständigkeit halber habe ich letztendlich das folgende Shell-Snippet verwendet:
#!/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
Da der Wrapper jedoch immer komplizierter wird, schaue ich mir lieberErstellen eines Snapcraft-Pluginsstattdessen.