Nedávno jsem začal balit nějaký svůj software a publikovat ho na Launchpadu. Instalace a odstranění funguje dobře, ale upgrade balíčku z jedné verze na další je problematický.
Problém je v tom, že existují některé skripty, které je třeba spustit pouze při první instalaci balíčku. Tyto skripty naplňují DB, vytvářejí uživatele atd. Momentálně se nazývají v package.postinst configure)
sekce. To však vede k tomu, že jsou volány během upgradu, stejně jako jsou zobrazeny v diagramu.
Existuje způsob, jak zahrnout skript pro údržbu do balíčku .deb, který se spustí pouze během první instalace balíčku a ne během upgradu? Nebo jaký by byl elegantní způsob, jak zahrnout některé skripty počátečního nastavení do balíčku .deb?
Přijatá odpověď:
S debian/preinst
můžete provádět akce při instalaci, ale ne upgradovat.
#!/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
Ačkoli jak název napovídá, toto se spustí před instalací vašeho balíčku. Takže zde možná nebudete moci dělat to, co potřebujete. Většina balíčků jednoduše testuje ve fázi konfigurace postinst
pokud byl uživatel již vytvořen. Zde je 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