Recientemente comencé a empaquetar parte de mi software y a 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 pueblan la base de datos, crean un usuario, etc. Actualmente se los llama en la configure)
sección package.postinst . Sin embargo, esto hace que se les llame durante una actualización, como se muestra en el diagrama .
¿Hay alguna manera de incluir un script de mantenedor 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?
fuente
Es posible que pueda utilizar un script debian / preinst en combinación con postinst.
En el script preinst, verifique si hay un archivo que su paquete definitivamente instala. Si está presente, no haga nada (porque su paquete se instaló previamente), de lo contrario, siga los pasos de configuración.
Si sus pasos de configuración requieren que su paquete esté instalado (en cuyo caso lo anterior no funcionará porque preinst se ejecuta antes de la instalación), entonces su script de preinst podría escribir un archivo, por ejemplo: / tmp / setupmypkg. Su secuencia de comandos postinst podría simplemente probar si ese archivo está presente y, de ser así, hacer dos cosas:
fuente
Descubrí que la prueba de $ 2 en su secuencia de comandos "postinst configure" no funciona correctamente si ya instaló su paquete una vez antes, luego lo desinstaló (pero sin purgarlo), luego intente reinstalarlo nuevamente. En este caso, el script postinst todavía obtiene un argumento de versión para el paso "configurar postinst".
Sin embargo, si ha instalado el paquete anteriormente, luego retírelo y purguelo, luego vuelva a instalarlo, el script "postinst configure" NO obtendrá un argumento de versión en $ 2
fuente
No lo creo, pero puede modificar fácilmente los scripts preinst / postinst para verificar si el paquete se está instalando por primera vez y tomar medidas estándar.
Puede ser algo como esto
en preinst.
en postinst,
Editar
Hmm, puede ser que puedas verificar todo esto directamente en postinst porque creo que dpkg no establecería el estado del paquete como instalado antes de ejecutar postinst, pero no estoy seguro. Entonces lo anterior podría venir,
en postinst,
Donde, is_package_installed puede funcionar para detectar el estado de la instalación. Puede ser algo así como 'dpkg --status packagename'
O
¿Por qué no simplemente verificar si los cambios que desea realizar ya están allí y continuar si no lo están?
fuente