Ich habe kürzlich begonnen, einige meiner Software zu packen und auf Launchpad zu veröffentlichen. Die Installation und Deinstallation funktioniert einwandfrei, aber ein Upgrade des Pakets von einer Version auf die nächste ist problematisch.
Das Problem ist, dass es einige Skripte gibt, die nur während der ersten Installation des Pakets ausgeführt werden müssen. Diese Skripte füllen die Datenbank, erstellen einen Benutzer usw. Sie werden derzeit im configure)
Abschnitt package.postinst aufgerufen . Dies führt jedoch dazu, dass sie während eines Upgrades aufgerufen werden und im Diagramm angezeigt werden .
Gibt es eine Möglichkeit, ein Betreuerskript in ein .deb-Paket aufzunehmen, das nur während der ersten Installation des Pakets und nicht während eines Upgrades ausgeführt wird? Oder was wäre ein eleganter Weg, um einige anfängliche Setup-Skripte in ein .deb-Paket aufzunehmen?
quelle
Möglicherweise können Sie ein debian / preinst-Skript in Kombination mit postinst verwenden.
Suchen Sie im Skript vor der Installation nach einer Datei, die Ihr pkg definitiv installiert. Wenn es vorhanden ist, führen Sie nichts aus (da Ihr Paket zuvor installiert wurde), andernfalls führen Sie Ihre Setup-Schritte aus.
Wenn Ihre Installationsschritte erfordern, dass Ihr pkg installiert ist (in diesem Fall funktioniert das oben Genannte nicht, da preinst vor der Installation ausgeführt wird), könnte Ihr preinst-Skript eine Datei schreiben, zum Beispiel: / tmp / setupmypkg. Ihr Postinst-Skript könnte einfach testen, ob diese Datei vorhanden ist, und wenn ja, zwei Dinge tun:
quelle
Ich habe festgestellt, dass das Testen von $ 2 in Ihrem "postinst configure" -Skript nicht richtig funktioniert, wenn Sie Ihr Paket bereits einmal installiert, dann deinstalliert (aber ohne zu löschen) und dann erneut versucht haben, es erneut zu installieren. In diesem Fall erhält das postinst-Skript weiterhin ein Versionsargument für den Schritt "postinst configure".
Wenn Sie das Paket jedoch zuvor installiert haben, es dann entfernen UND bereinigen und erneut installieren, erhält das Skript "postinst configure" KEIN Versionsargument in $ 2
quelle
Ich glaube nicht, aber Sie können die Skripte vor und nach der Installation einfach ändern, um zu überprüfen, ob das Paket zum ersten Mal installiert wird, und Standardmaßnahmen ergreifen.
Kann so etwas sein,
in preinst.
in postinst,
Bearbeiten
Hmm, kann sein, dass Sie dies alles direkt in postinst überprüfen können, da ich denke, dass dpkg den Status des Pakets vor der Ausführung von postinst nicht als installiert festlegen würde, aber ich bin nicht sicher. So könnte das Obige kommen,
in postinst,
Mit is_package_installed können Sie den Installationsstatus ermitteln. Kann so etwas wie 'dpkg --status packagename' sein
ODER
Prüfen Sie einfach, ob die gewünschten Änderungen bereits vorhanden sind, und fahren Sie fort, wenn dies nicht der Fall ist.
quelle