J'ai récemment commencé à emballer certains de mes logiciels et à les publier sur Launchpad. L'installation et la suppression fonctionnent correctement, mais la mise à niveau du package d'une version vers la version suivante est problématique.
Le problème est qu'il existe certains scripts qui n'ont besoin d'être exécutés que lors de la première installation du package. Ces scripts remplissent la base de données, créent un utilisateur, etc. Ils sont actuellement appelés dans la configure)
section package.postinst . Cependant, cela entraîne leur appel lors d'une mise à niveau ainsi que le montre le diagramme .
Existe-t-il un moyen d'inclure un script de responsable dans un package .deb qui ne s'exécute que lors de la première installation du package et non lors d'une mise à niveau? Ou quelle serait une manière élégante d'inclure des scripts de configuration initiale dans un package .deb?
la source
Vous pourrez peut-être utiliser un script debian / preinst en combinaison avec postinst.
Dans le script preinst, recherchez un fichier que votre paquet installe définitivement. S'il est présent, ne faites rien (car votre package a été installé précédemment), sinon, effectuez vos étapes de configuration.
Si vos étapes de configuration nécessitent l'installation de votre package (dans ce cas, ce qui précède ne fonctionnera pas car la pré-exécution s'exécute avant l'installation), votre script de pré-installation peut écrire un fichier, par exemple: / tmp / setupmypkg. Votre script postinst pourrait simplement tester si ce fichier est présent et si c'est le cas, faites deux choses:
la source
J'ai trouvé que le test de 2 $ dans votre script "postinst configure" ne fonctionne pas correctement si vous avez déjà installé votre package une fois auparavant, puis l'a désinstallé (mais sans purger), puis essayez de réinstaller à nouveau. Dans ce cas, le script postinst obtient toujours un argument de version pour l'étape "postinst configure".
Cependant, si vous avez déjà installé le package, puis supprimez ET purgez-le, puis réinstallez-le à nouveau, le script "postinst configure" n'obtiendra PAS d'argument de version dans $ 2
la source
Je ne pense pas, mais vous pouvez facilement modifier les scripts preinst / postinst pour vérifier si le package est installé pour la première fois et prendre des mesures standard.
Peut être quelque chose comme ça,
en préinst.
en postinst,
Éditer
Hmm, peut-être que vous pouvez simplement vérifier tout cela directement dans postinst parce que je pense que dpkg ne définirait pas le statut du paquet tel qu'installé avant d'exécuter postinst mais je ne suis pas sûr. Donc, ce qui précède pourrait venir,
en postinst,
Où, is_package_installed peut être votre fonction pour détecter l'état de l'installation. Peut être quelque chose comme «dpkg --status packagename»
OU
Pourquoi ne pas simplement vérifier si les modifications que vous souhaitez apporter sont déjà là et ne procéder que si elles ne le sont pas.
la source