J'ai un cliché que j'aimerais construire pour plusieurs architectures. À l'heure actuelle, dans le fichier snapcraft.yaml
, je définis un wrapper comme étant le binaire à exécuter, qui configure les variables d'environnement requises pour l'exécution de l'application.
Un élément de code de script qu'il contient est le suivant:
#!/bin/sh
Arch='x86_64-linux-gnu'
export LD_LIBRARY_PATH=$SNAP/usr/lib/$Arch:$LD_LIBRARY_PATH
De toute évidence, le codage en dur Arch
n’est pas optimal, car les versions non-AMD64 ne fonctionneront pas correctement. Cependant, la détection Arch utilisant dpkg-architecture
ne fonctionnera pas avec Snapcraft.
Comment détecter dynamiquement l'architecture de l'hôte dans mon wrapper pour définir les chemins de bibliothèque corrects lors de la création de la capture avec Snapcraft?
Le code est disponible dans le cadre de exemples de bureau rapides .
Les wrappers binaires (et les fichiers de service) définissent pour vous la variable d’environnement SNAP_Arch
. Malheureusement, ce n’est pas une solution idéale car ce ne sont pas des triplés, mais vous devriez y trouver suffisamment d’informations pour que vous puissiez y arriver avec une déclaration de cas ou quelque chose du genre.
Par souci d’exhaustivité, j’ai utilisé l’extrait de shell suivant:
#!/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
Cependant, lorsque le wrapper commence à devenir compliqué, je me tourne plutôt vers création d'un plugin Snapcraft .