J'essaie d'empaqueter mon application pour pouvoir l'installer à l'aide de snap. L'application est déjà compilée en tant qu'exécutable et possède un fichier de configuration et un fichier de certificat que j'emballe dans le composant logiciel enfichable.
Une fois l'installation terminée, je peux tout voir dans /snap/myapp/x1
mais comme la partie x1 changera après les mises à jour, j'aimerais retirer les fichiers de ressources et les placer à un emplacement plus pratique.
À des fins de test, j'ai lié les fichiers de ressources à extraire du même dossier où mon application est en cours d'exécution et j'ai découvert que je devais les mettre dans /var/lib/snapd/void
dossier pour que l'application fonctionne. Cela ne semble pas être un bon endroit pour commencer.
Comme l'utilisateur pourra modifier les fichiers de configuration, je voudrais les garder à dire $SNAP_COMMON
donc ce serait génial si je pouvais en quelque sorte faire déplacer ces fichiers vers cet emplacement pendant l'installation. Des pensées?
Aux fins de cette réponse, je vais supposer que l'application contenue dans votre composant logiciel enfichable a command: my-binary
.
Vous avez vraiment deux options:
Enveloppez votre application dans un script qui garantit que le fichier de configuration a été migré avant de s'exécuter. Par exemple, si vous avez écrit un script appelé run-my-binary
qui ressemble à ceci:
#!/bin/sh
# Migrate config if necessary
if [ ! -d $SNAP_COMMON/my.config ]; then
cp $SNAP/conf/default.conf $SNAP_COMMON/my.config
fi
my-binary
Modifiez votre snapcraft.yaml pour installer ce script et changez votre application en command: run-my-binary
.
configure
hook , qui s'exécute lors de l'installation initiale (entre autres). Cela peut être un script Shell qui ressemble beaucoup à l'encapsuleur.Notez que bien que je veuille répondre à la question que vous avez posée, je ne recommande pas vraiment de mettre des fichiers de configuration dans $SNAP_COMMON
car il est spécifiquement non versionné - il ne sera pas sauvegardé lors de la mise à niveau/restauration. Je recommande d'utiliser $SNAP_DATA
au lieu. Pour plus d'informations voir cette réponse .