J'ai fait un entre autres choses, le script Il semble que le script j'ai vérifié que Pourquoi le script .deb code> de mon application à l'aide de FPM :
postinst code> est censé créer un utilisateur pour l'application: p>
postinst code> est appelé avec
configurer code>, mais pas avec
installer code>, et j'essaie de comprendre pourquoi. Dans
/var/log/dpkg.log code>, je vois les lignes que je voudrais attendre: p>
/ etc / par défaut / myApp code> n'existe pas. Le fichier
/var/lib/dpkg/info/myapp.postinst est existez code>, et si je l'exécute manuellement avec
Installez code> comme premier paramètre, cela fonctionne comme prévu. p>
postinst code> n'est-il pas exécuté avec
Installer code>? Que puis-je faire pour déboguer cela plus loin? P> p>
3 Réponses :
Je pense que l'exemple de script que vous avez copié est tout simplement faux. Je n'ai pas la confiance totale dans ma réponse, parce que votre mauvais exemple
est toujours sur Debian.org et il est difficile de croire qu'un tel bogue pourrait glisser
à travers. p> postinst code> n'est pas
censé être appelé avec tout
installer code> ou
mise à niveau code> argument, toujours.
La définition faisant autorité du format DPKG est la politique de Debian
Manuel. La version actuelle décrit
postinst code> dans
6
et seulement répertorie
configure code>,
abort-mise à niveau code>,
avortez-supprimer code>,
Abort-Supprimer Code> et
Abort-Deconfigure Code> Atel possible d'abord arguments. P>
Ah, selon la section 6.5 dans le manuel de politique de Debian, il semble que c'est Preinst i> qui est exécuté avec Configurer code> et
Installez code>. Le manuel de succession de Debian parle en fait de " Preinst i> ou postinst i>", donc leur exemple doit être destiné à Preinst i>. Je vais essayer de réorganiser.
Aha! Cela a du sens maintenant. Faites-le à Preinst s'il y a autre chose que vous faites déjà dans la préinstance qui dépend de l'utilisateur créé. Sinon, 1 $ après la branche de configuration de Postinst. C'est là que la plupart des colis semblent le faire selon ma numérisation rapide de /var/lib/dpkg/info/*.postinst
Peut-être que quelque chose a changé depuis 2012, mais je pense que postinst code> s est exécuté après l'installation, peut-être juste dans des cas spécifiques. J'installisiez PHPMYADMIN sur un serveur Debian et l'installation, bien que la provision réussie, échouait à la suite de son script
postinst code>. Ce voyant
apt-get code> pour penser qu'il n'était pas installé correctement. Une fois que j'ai modifié
/var/lib/dpkg/info/phpmyadmin.postinst code> Ça a fonctionné. En outre, mon système a 277
postinst code> S et seulement 75
Preinst code> s et exécutant un script après l'installation semble plus susceptible d'être populaire que après supprimer I>. Peut-être que c'est juste un paquet mal entretenu.
Je crois que la réponse fournie par Alan Curry est incorrecte, au moins à partir de 2015 et au-delà. pour l'enregistrement Les niveaux de débogage sont les suivants: P>
Il doit y avoir une faute de la manière dont votre colis est construit ou une erreur dans le fichier postinst code> qui cause votre problème.
Vous pouvez déboguer votre installation en ajoutant l'option -d code> (débogage) à votre ligne de commande, c'est-à-dire:
-d2 code> devrait trier Ce type de problème p>
1. Extract the control files of the new package.
2. If another version of the same package was installed before
the new installation, execute prerm script of the old package.
3. Run preinst script, if provided by the package.
4. Unpack the new files, and at the same time back up the old
files, so that if something goes wrong, they can be restored.
5. If another version of the same package was installed before
the new installation, execute the postrm script of the old packâ
age. Note that this script is executed after the preinst script
of the new package, because new files are written at the same
time old files are removed.
6. Configure the package.
Configuring consists of the following steps:
1. Unpack the conffiles, and at the same time back up the old
conffiles, so that they can be restored if something goes wrong.
2. Run postinst script, if provided by the package.
Ce n'est pas totalement clair pour moi ce que vous dites ici à propos de "la commande installer code>", mais si cela aide à clarifier les éléments pour quiconque,
dpkg code> n'appelera jamais un script postinst avec $ 1 =
Installez code> ou
Mettez à niveau code>. Rien ne vous empêche de soutenir des actions supplémentaires dans votre postinst si vous le souhaitez, mais DPKG ne les utilisera pas. Le script publié dans la question initiale ne fonctionne pas car il s'attend à être appelé l'un de ceux-ci. Peut-être que c'est la faute du fpm? Je ne sais pas.
@thepaul je pensais que j'étais clair. La commande d'installation appelle l'option Configurer code>. Spécifiquement, il appellera le script
postinst code> avec
configurer code> et la version
code> du package E.G.
configure 6.4.0 code> (dans mon expérience, d'emballage mon propre logiciel)
C'est une ancienne question qui a été résolue, mais il me semble que la solution acceptée n'est pas totalement correcte et je pense qu'il est nécessaire de fournir des informations à ceux qui, comme moi, ont le même problème. < / p>
Chapitre 6.5 Détails tous les paramètres avec lesquels Les fichiers Preinst et postinst sont appelés p>
à https://wiki.debian.org/maintainerscripts Le flux d'installation et de désinstallation est détaillé . p>
Regardez ce qui se passe dans le cas suivant: p>
package d'installation apt-get
- Il fonctionne apt-get supprimer le paquet
- Exécuter POSTRM Supprimer et le package sera défini sur " Pour que le colis soit réellement dans l'état " Package de purge APT-GET P>
C'est la seule façon de pouvoir exécuter