Recientemente comencé a empaquetar parte de mi software y publicarlo en Launchpad. La instalación y eliminación funciona bien, pero actualizar el paquete de una versión a la siguiente es problemático.
El problema es que hay algunos scripts que solo necesitan ejecutarse durante la primera instalación del paquete. Estos scripts llenan la base de datos, crean un usuario, etc. Actualmente se les llama en el paquete.postinst configure)
sección. Sin embargo, esto hace que se les llame durante una actualización, como se muestra en el diagrama.
¿Hay alguna forma de incluir un script de mantenimiento en un paquete .deb que solo se ejecute durante la primera instalación del paquete y no durante una actualización? ¿O cuál sería una forma elegante de incluir algunos scripts de configuración inicial en un paquete .deb?
Respuesta aceptada:
Con un debian/preinst
puede realizar acciones en la instalación pero no en la actualización.
#!/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
Aunque como su nombre lo indica, esto se ejecuta antes de que se instale su paquete. Por lo tanto, es posible que no pueda hacer lo que necesita aquí. La mayoría de los paquetes simplemente prueban en la etapa de configuración del postinst
si el usuario ya ha sido creado. Aquí está 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