2009-11-18 5 views
3

Je distribue une de mes applications à l'aide d'un paquet .deb, mais un problème lié à l'un des fichiers. La distribution inclut un fichier de base de données qui est constamment mis à jour par l'application, sur une nouvelle installation Je veux que l'installateur copie un nouveau fichier db vide sur le système de l'utilisateur, mais lors d'une mise à niveau je veux que l'installateur quitte copie existante en place (l'écrasement entraînerait la perte de toutes les données des utilisateurs)..deb Conffiles problème

Actuellement, j'ai inclus le fichier dans le fichier « » conffiles, de sorte que le programme d'installation demande toujours à l'utilisateur si vous souhaitez remplacer le fichier existant ou non, mais ce n'est pas le comportement que je veux - est d'écraser le fichier jamais la bonne chose à faire et je suis préoccupé par le fait qu'un utilisateur peut choisir la mauvaise option lors d'une mise à niveau et arroser leurs données.

Est-il possible de dire que le programme d'installation si le fichier db existe déjà le laisser seul et ne demande pas l'utilisateur quoi faire?

Répondre

4

Oui, utiliser un script preinst/postinst. La méthode habituelle consiste à nommer le fichier dans le package avec un nom spécial se termine par dpkg nouveau, par exemple /var/lib/myapp/mydb.data.dpkg-new. Ensuite, écrire un script « postinst » à mettre dans le répertoire DEBIAN de votre colis pour vérifier l'existence de la base de données, et renommer ou supprimer le fichier dpkg nouveau en conséquence, quelque chose comme:

#!/bin/bash 

if [ -f /var/lib/myapp/mydb.data ]; then 
    rm /var/lib/myapp/mydb.data.dpkg-new 
else 
    mv /var/lib/myapp/mydb.data.dpkg-new /var/lib/myapp/mydb.data 
fi 
+1

Merci - Je suppose que je devrais enlever aussi le fichier db de conffiles, à moins qu'il y ait d'autres conséquences à cela? – codebox

+1

Oui, si le fichier n'est pas présent dans le package, il ne doit pas figurer dans les fichiers de configuration. – wazoox

Questions connexes