dpkg-maintscript-helper(1)

NOMBRE
dpkg-maintscript-helper - Solución alternativa a las limitaciones de dpkg en scripts de mantenedor

SINOPSIS
dpkg-maintscript-helper orden [parámetro...] -- parámetro-script-mantenedor...

ÓRDENES Y PARÁMETROS

rm_conffile conffile [última-versión [paquete]]

mv_conffile conffile-antiguo conffile-nuevo [última-versión [paquete]]

DESCRIPCIÓN

Este programa está diseñado para su uso dentro de scripts de mantenedor para realizar tareas que dpkg no puede (por ahora) gestionar de forma nativa, bien por decisiones de diseño o limitaciones actuales.

Muchas de estas tareas requieren la ejecución coordinada de varios scripts de mantenedor (preinst, postinst, prerm, postrm). Para evitar errores sólo tiene que insertar la misma ejecución en todos los scripts, y el programa adaptará automáticamente su comportamiento en base a la variable de entorno DPKG_MAINTSCRIPT_NAME y a los argumentos de los scripts del mantenedor, que se deben introducir después de un guión doble.

TAREAS CON FICHEROS DE CONFIGURACIÓN «CONFFILES»

Al actualizar un paquete, dpkg no eliminará automáticamente un fichero de configuración (un fichero de configuración con cambios del usuario que dpkg debería preservar) si no está presente en la versión más reciente. Existen dos razones principales para esto: la primera es que puede que el fichero de configuración «conffile» haya desaparecido accidentalmente, con lo que la siguiente versión la restauraría. Los usuarios no querrían ver desparecer los cambios hechos. La segunda es permitir a los paquetes una transición de un fichero de configuración «conffile» mantenido por dpkg a un fichero mantenido por los scripts de mantenedor del paquete, habitualmente con una herramienta como debconf o ucf.

Esto significa que si un paquete pretende renombrar o eliminar un fichero de configuración, debe hacerlo de forma explícita. dpkg-maintscript-helper se puede utilizar para implementar con sencillez dentro de los scripts del mantenedor la eliminación y el desplazamiento de ficheros de configuración «conffile».

  ELIMINAR UN FICHERO DE CONFIGURACIÓN «CONFFILE»

Si se elimina un fichero de configuración «conffile» por completo, se debería eliminar del disco a menos que un usuario lo haya modificado. Se deberían preservar modificaciones locales en caso de existir. Si se cancela la actualización del paquete, el fichero de configuración «conffile» declarado como obsoleto no debería desaparecer.

Esto se puede integrar introduciendo el siguiente texto de consola en los scripts de mantenedor preinst, postinst y postrm:

    dpkg-maintscript-helper rm_conffile \
        conffile última-versión paquete -- "$@"

conffile es el nombre del fichero de configuración «conffile» a eliminar.

última-versión define la última versión de un paquete cuya actualización inicia una eliminación. Se debe definir la última-versión de forma correcta para una eliminación correcta de los ficheros de configuración, incluso si el usuario reconstruye el paquete con una versión local. Por ejemplo, para un fichero que se elimina en la versión 2.0-1 de un paquete, la última-versión debe ser 2.0-1~. Esto provoca la eliminación del fichero de configuración incluso si la última versión es 1.0-1 como 1.0-1local1.

Si el fichero de configuración no se distribuye por diversos motivos, y modifica los scripts del mantenedor para eliminar el fichero obsoleto, la última-versión se debe basar en la versión del paquete que está preparando, y no sobre la primera versión del paquete que no distribuye el fichero de configuración.

paquete es el nombre del paquete. Si está vació o se omite, se utiliza la variable de entorno «DPKG_MAINTSCRIPT_PACKAGE» (como define dpkg).

Todos los parámetros de los scripts del responsable se deben introducir al programa a continuación de «--».

Implementación actual: en el script preinst, comprueba si se ha modificado el fichero de configuración y lo renombra bien como conffile.dpkg-remove (si no se ha modificado), o como conffile.dpkg-backup (si se ha modificado). En el script postinst, el segundo fichero se renombra a conffile.dpkg-bak y se guarda como referencia ya que contiene modificaciones del usuario, mientras que el primer script se elimina. Si se interrumpe la actualización del paquete, el script postrm reinstalará el fichero de configuración «conffile» original. Durante el purgado, el script postrm borrará también el fichero .dpkg-bak mantenido hasta ahora.

  RENOMBRAR UN FICHERO DE CONFIGURACIÓN «CONFFILE»

Si se ha cambiado la ubicación de un fichero de configuración «conffile» debe asegurarse de que también migra los cambios hechos por el usuario. Esto puede parecer en principio como un sencillo cambio en el script preinst, aunque resultará en un diálogo de dpkg para confirmar la edición del fichero «conffile» incluso si no son responsables de ellos.

Puede integrar renombrar con sencillez insertando el siguiente texto de consola en los scripts de mantenedor preinst, postinst y postrm.

    dpkg-maintscript-helper mv_conffile \
        conffile-antiguo conffile-nuevo última-versión paquete -- "$@"

conffile-antiguo y conffile-nuevo son el nombre antiguo y nuevo del fichero de configuración «conffile» a renombrar.

última-versión define la última del paquete cuya actualización inicia la modificación del nombre del fichero de configuración (para el valor correcto, consulte las notas relativas a rm_conffile. Si la última-versión se omita o está vacía, se intenta la operación en cada actualización (nota: se recomienda definir la versión y que la operación se ejecuta una sola vez).

paquete es el nombre del paquete. Si está vació o se omite, se utiliza la variable de entorno «DPKG_MAINTSCRIPT_PACKAGE» (como define dpkg).

Todos los parámetros de los scripts del responsable se deben introducir al programa a continuación de «--».

Implementación actual: el script preinst comprueba si se ha modificado el fichero de configuración «conffile», preservándolo en su lugar si es así, o renombrándolo como conffile-antiguo.dpkg-remove en caso contrario. Durante la configuración, el script postinst elimina conffile-antiguo.dpkg-remove y renombra conffile-antiguo como conffile-nuevo si el primero aún está disponible. Durante la cancelación de una instalación o actualización el script postrm renombra conffile-antiguo.dpkg-remove nuevamente como conffile-antiguo de ser necesario.

INTEGRACIÓN EN PAQUETES

Debido a que dpkg-maintscript-helper se utiliza en el script preinst, usarlo incondicionalmente requiere una predependencia para asegurar que la versión requerida de dpkg se ha desempaquetado con anterioridad. La versión requerida depende de la orden usada, 1.15.7.2 para rm_conffile y mv_conffile:

    Pre-Depends: dpkg (>= 1.15.7.2)

Aún así, en muchos casos la operación efectuada por el programa no es crítica para el paquete, y en lugar de utilizar un pre-dependencia puede ejecutar el programa sólo si sabemos que la orden requerida es compatible con la versión de dpkg actualmente instalada:

    if dpkg-maintscript-helper supports orden; then
        dpkg-maintscript-helper orden ...
    fi

TRADUCTOR
Rudy Godoy <rudy@kernel-panik.org>, Rubén Porras <nahoo@inicia.es>, Bruno Barrera C. <bruno.barrera@igloo.cl>, Carlos Izquierdo <gheesh@ertis.net>, Esteban Manchado y NOK. Debian L10n Spanish <debian-l10n-spanish@lists.debian.org>.
Revisiones por Santiago Vila <sanvila@unex.es>, Javier Fernández-Sanguino, Rubén Porras, Luis Uribe y Omar Campagne.