So erstellen Sie Multi-Arch-Snaps

So erstellen Sie Multi-Arch-Snaps

Ich habe einen Snap, den ich für mehrere Architekturen erstellen möchte. Im Moment snapcraft.yamldefiniere 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 ARCHist Hardcoding nicht optimal, da Nicht-AMD64-Builds nicht richtig funktionieren. Allerdings dpkg-architecturefunktioniert 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_ARCHUmgebungsvariable 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.

verwandte Informationen