web-dev-qa-db-fra.com

Comment déplacer des fichiers de configuration pendant l'installation instantanée

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?

1
Jasko

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:

  1. 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.

  2. Utilisez le 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 .

3
Kyle