Di recente ho iniziato a impacchettare parte del mio software e pubblicarlo su Launchpad. L'installazione e la rimozione funzionano correttamente, ma l'aggiornamento del pacchetto da una versione alla versione successiva è problematico.
Il problema è che ci sono alcuni script che devono essere eseguiti solo durante la prima installazione del pacchetto. Questi script popolano il DB, creano un utente, ecc. Attualmente sono chiamati in package.postinst configure)
sezione. Tuttavia, ciò comporta la loro chiamata durante un aggiornamento così come mostrato nel diagramma.
C'è un modo per includere uno script di manutenzione in un pacchetto .deb che viene eseguito solo durante la prima installazione del pacchetto e non durante un aggiornamento? O quale sarebbe un modo elegante per includere alcuni script di configurazione iniziale in un pacchetto .deb?
Risposta accettata:
Con un debian/preinst
è possibile eseguire azioni durante l'installazione ma non l'aggiornamento.
#!/bin/sh
set -e
case "$1" in
install)
# do some magic
;;
upgrade|abort-upgrade)
;;
*)
echo "postinst called with unknown argument `$1'" >&2
exit 0
;;
esac
#DEBHELPER#
exit 0
Anche se, come suggerisce il nome, viene eseguito prima dell'installazione del pacchetto. Quindi potresti non essere in grado di fare ciò di cui hai bisogno qui. La maggior parte dei pacchetti testa semplicemente nella fase di configurazione di postinst
se l'utente è già stato creato. Ecco colord
$ cat /var/lib/dpkg/info/colord.postinst
#!/bin/sh
set -e
case "$1" in
configure)
# create colord group if it isn't already there
if ! getent group colord >/dev/null; then
addgroup --quiet --system colord
fi
# create the scanner group if it isn't already there
if ! getent group scanner >/dev/null; then
addgroup --quiet --system scanner
fi
# create colord user if it isn't already there
if ! getent passwd colord >/dev/null; then
adduser --system --ingroup colord --home /var/lib/colord colord
--gecos "colord colour management daemon"
# Add colord user to scanner group
adduser --quiet colord scanner
fi
# ensure /var/lib/colord has appropriate permissions
chown -R colord:colord /var/lib/colord
;;
esac
exit 0