Manuales para la línea de comandos

Man » Manual de ucf en línea: documentación detallada en línea para la página de manual de ucf

🌍
ucf - Actualizar archivo de configuración: preservar los cambios del usuario en los archivos de configuración

SINTAXIS

ucf [opciones] <Archivo nuevo> <Destino>

ucf [opciones] --purge <Destino>

DESCRIPCIÓN

Esta utilidad proporciona un medio para preguntar al usuario si desea o no aceptar las nuevas versiones de los archivos de configuración proporcionados por el mantenedor del paquete, con varios heurísticos diseñados para minimizar el tiempo de interacción. Utiliza debconf para interactuar con el usuario, según la política de Debian. En la SINTAXIS anterior, Archivo nuevo es el archivo de configuración proporcionado por el paquete (ya sea incluido con el paquete o generado por los scripts del mantenedor sobre la marcha) y Destino es la ubicación (normalmente en /etc) donde reside el archivo de configuración real y que puede haber sido modificado por el usuario final. Dado que los archivos editados serían archivos reales y no enlaces simbólicos, ucf sigue y resuelve los enlaces simbólicos antes de actuar. En la medida de lo posible, ucf intenta preservar la propiedad y los permisos del Archivo nuevo al copiarlo a la nueva ubicación.

Este script intenta proporcionar un manejo similar a conffile para los archivos instalados en /etc que no se envían en un paquete de Debian, sino que se gestionan mediante el script postinst. La política de Debian establece que los archivos en /etc que son archivos de configuración deben preservar los cambios del usuario, y esto se aplica también a los archivos gestionados por los scripts del mantenedor. Mediante el uso de ucf, se pueden enviar un conjunto de archivos de configuración predeterminados en algún lugar de /usr (/usr/share/<paquete> es una buena ubicación) y mantener los archivos en /etc, preservando los cambios del usuario y, en general, ofreciendo las mismas funciones que dpkg proporciona normalmente para los "archivos conffile".

Además, este script proporciona funciones para hacer que un archivo que no tenía protección similar a conffile pase a tenerla, e intenta minimizar las preguntas que se hacen en el momento de la instalación. De hecho, la función de transición es mejor que la que ofrece dpkg al hacer la transición de un archivo de un estado no conffile a un estado conffile. La segunda forma en la SINTAXIS anterior es para purgar la información sobre el archivo de configuración cuando se purga el paquete, y es fundamental para permitir una reinstalación fluida.

Durante el curso de las operaciones, al trabajar con los archivos de configuración, ucf crea opcionalmente copias de las versiones del archivo de configuración en cuestión. Por ejemplo, un archivo con el sufijo ucf-old contiene la versión anterior de un archivo de configuración que es reemplazado por ucf. También se pueden crear copias del archivo de configuración con los sufijos ucf-new y ucf-dist, y los scripts del mantenedor deben considerar la posibilidad de purgar las copias del archivo de configuración con estas extensiones durante la purga.


OPCIONES

-h, --help

Imprime un breve mensaje de uso

-n, --no-action

Ejecución de prueba. Imprime las acciones que se realizarían si se invoca el script, pero no realiza ninguna acción.

-d[n], --debug=[n]

Establece el nivel de depuración en el nivel n (opcional; n tiene un valor predeterminado de 1). Tenga en cuenta que no debe haber espacios antes del dígito opcional n. Esto activa una gran cantidad de información de depuración.

-p, --purge

Elimina todos los rastros del archivo del archivo hash de estado. Esto es necesario para permitir que un paquete se vuelva a instalar después de que se haya eliminado; ya que de lo contrario, el archivo de configuración real se elimina, pero permanece en el archivo hash; y al reinstalar, no se realiza ninguna acción, ya que la suma md5 del nuevo archivo coincide con la del archivo hash. En resumen, recuerde utilizar esta opción en el postrm para cada archivo de configuración administrado por ucf cuando se esté eliminando el paquete (asumiendo que el propio ucf existe). Nota: ucf no toca realmente el archivo en el disco en esta operación, por lo que cualquier eliminación de archivos sigue siendo responsabilidad del paquete que llama.

-v, --verbose

Hace que el script sea muy detallado al configurar las variables internas.

-P foo, --package foo

No siga las desviaciones de dpkg-divert del paquete foo al actualizar los archivos de configuración.

-s foo, --src-dir foo

Establece el directorio de origen (se espera que las sumas md5 históricas se encuentren en los archivos y subdirectorios de este directorio) en foo. Por defecto, se asume que el directorio donde se encuentra el nuevo_archivo es el directorio de origen. Establecer esta opción anula la configuración de la variable de entorno UCF_SOURCE_DIR y de la variable de configuración conf_source_dir.

--sum-file foo

Fuerza a que las sumas md5 históricas se lean de este archivo, en lugar de que se encuentren por defecto en el directorio de origen. Establecer esta opción anula la configuración de la variable de entorno UCF_OLD_MDSUM_FILE y de la variable de configuración conf_old_mdsum_file.

--three-way

Esto activa la opción, durante la instalación, de que se ofrezca al usuario la posibilidad de ver una combinación de los cambios entre la versión anterior del desarrollador y la nueva versión del desarrollador en la copia local del archivo de configuración. Si al usuario le gusta lo que ve, puede solicitar que estos cambios se combinen. Esto permite obtener nuevos cambios ascendentes combinados, incluso conservando las modificaciones locales del archivo de configuración. Esto se logra guardando el archivo de configuración y almacenándolo en un área de caché durante el registro, y utilizando diff3 durante la instalación (el nombre del archivo almacenado en caché es una versión modificada de la ruta completa del archivo de configuración para evitar conflictos de espacio de nombres).

--debconf-ok

Indica que está bien que ucf utilice una instancia de debconf que ya se está ejecutando para solicitar información (siempre ha estado bien utilizar ucf cuando debconf no se está ejecutando; invocará debconf según sea necesario).


--debconf-template foo
Indica a ucf que utilice la plantilla debconf multiselect con el nombre especificado en lugar de la plantilla debconf proporcionada por ucf. El llamante es responsable de asegurarse de que la plantilla con el nombre especificado existe y tiene una lista de opciones que coinciden con las de la plantilla ucf predeterminada, y debe establecer Choices-C: ${CHOICES} para garantizar que los valores devueltos coincidan con los de la plantilla predeterminada. Tenga en cuenta que las opciones deben ser diferentes según si también se establece la opción --three-way.

--state-dir /path/to/dir
Establece el directorio de estado en /path/to/dir en lugar del directorio predeterminado /var/lib/ucf. Se utiliza principalmente para pruebas.

-Z Establece el contexto de seguridad SELinux del archivo de destino al tipo predeterminado.

USO

El caso de uso más común es bastante sencillo: una única invocación en el script postinst en configure, y otra única línea en el script postrm para indicarle a ucf que olvide el archivo de configuración al realizar la desinstalación (utilizando la opción --purge) es todo lo que se necesita (asumiendo que ucf todavía está en el sistema).

Se recomienda también registrar cualquier archivo gestionado por ucf en el registro ucf; esto asocia el archivo de configuración con el paquete al que pertenece. Esto se hace con una simple llamada a ucfr. Los usuarios pueden entonces consultar la asociación entre un archivo de configuración y el paquete utilizando la herramienta ucfq. Consulte las páginas de manual correspondientes para obtener más detalles.

Los paquetes que utilizan debhelper pueden simplificar la creación de los fragmentos de script de mantenimiento necesarios utilizando el ayudante dh_ucf.

Si un archivo mantenido por scripts de mantenimiento se está pasando de un estado no protegido a la protección que proporciona el script, el mantenedor puede ayudar a facilitar la transición reduciendo las preguntas que puedan hacerse en el momento de la instalación. Específicamente, no se deben hacer preguntas si el archivo en cuestión es una versión no modificada que se envió en una versión anterior de este paquete; y el mantenedor puede ayudar indicando al script los md5sums históricos que contenían las versiones publicadas de este archivo.

La forma de hacerlo es crear un archivo llamado <Nuevo archivo>.md5sum, con un md5sum en cada línea (los nombres de los archivos que se utilizan no son importantes, excepto para la entrada denominada default), o crear un directorio, llamado <Nuevo archivo>.md5sum.d, que debe contener cualquier número de archivos, cada uno de los cuales contiene una sola línea, a saber, el md5sum de una versión anterior de <Nuevo archivo>. Los nombres de estos archivos no son importantes, con una excepción: el archivo llamado default se trata de forma especial. Por ejemplo, el autor utiliza personalmente números de versión del paquete o nombres de código de lanzamiento, como 7.6.3 o potato. Si ninguno de los md5sums históricos coincide, es casi seguro que o bien el registro histórico de md5sums no está completo, o el usuario ha cambiado el archivo de configuración.

El md5sum histórico predeterminado

La excepción a la regla sobre los nombres mencionada anteriormente es que si no coinciden los md5sums, y si el archivo <Nuevo archivo>.md5sum.d/default existe, o si hay una línea correspondiente a un archivo default en <Nuevo archivo>.md5sum, se utilizará como el md5sum predeterminado de la versión anterior del paquete que se supone que está instalado en esta máquina. Como puede ver, a menos que haya un número limitado de paquetes lanzados previamente (como solo uno), el mantenedor también está haciendo una suposición informada, pero se proporciona la opción al mantenedor.

Si el archivo <Nuevo archivo>.md5sum, o el directorio <Nuevo archivo>.md5sum.d no existe, o ninguno de los md5sums coincide, probamos el archivo instalado <Destino> para ver si es el mismo que <Nuevo archivo>. Si no lo es, preguntamos al usuario si desea que lo reemplacemos.

También se ofrece una función adicional: opcionalmente, ucf puede almacenar una versión antigua de la copia del archivo de configuración del mantenedor y, al actualizar, calcular los cambios realizados en la versión del mantenedor del archivo de configuración y aplicar ese parche a la versión local del archivo (a petición del usuario, por supuesto). También existe una función de vista previa donde el usuario puede inspeccionar los resultados de dicha combinación antes de solicitar que se realice la acción.

VARIABLES DE ENTORNO

La variable UCF_FORCE_CONFFNEW, si está establecida, obliga a que el nuevo archivo siempre sobrescriba el archivo de destino instalado, mientras que la variable UCF_FORCE_CONFFOLD, si está establecida, conserva silenciosamente el archivo instalado. UCF_FORCE_CONFFMISS solo es aplicable cuando el archivo de destino instalado no existe (posiblemente debido a que el usuario lo eliminó) y obliga a ucf a recrear el archivo faltante (el comportamiento predeterminado es respetar los deseos del usuario y no recrear el archivo eliminado localmente). Además, cuando ucf crea un shell inferior, rellena las variables UCF_CONFFILE_NEW y UCF_CONFFILE_OLD, que son útiles para inspeccionar los cambios.

También se admiten las marcas confmiss, confnew, confold, confdef y confask de la variable DPKG_FORCE. Consulte dpkg(1) para obtener más información.

ARCHIVOS

Este script crea el archivo new_file.md5sum y puede copiar el archivo (presumiblemente incluido con el paquete) <Nuevo archivo> a su destino, <Destino>.

/var/lib/ucf/hashfile, y /var/lib/ucf/hashfile.X, donde X es un pequeño número entero, donde se almacenan las versiones anteriores del archivo hash.

/etc/ucf.conf

EJEMPLOS

Si el paquete foo desea utilizar ucf para gestionar la interacción del usuario para el archivo de configuración foo.conf, una versión del cual se proporciona en el paquete como /usr/share/foo/configuration, una simple invocación de ucf en el archivo post inst es todo lo que se necesita:

ucf /usr/share/foo/configuration /etc/foo.conf

Al eliminar, se debe indicar a ucf que olvide el archivo (consulte los ejemplos detallados en /usr/share/doc/ucf/examples):

ucf --purge /etc/foo.conf Tenga en cuenta que purge también se puede utilizar para que ucf olvide el estado anterior de los archivos y, cuando se vuelva a instalar o actualizar el paquete, ucf le pedirá al usuario que reemplace el archivo de configuración actual. Haga esto si desea cambiar su decisión de no actualizar a una versión proporcionada por el mantenedor del archivo de configuración.

La motivación para este script fue proporcionar un manejo similar al de los archivos de configuración para los archivos de inicio de los paquetes Lisp de Emacs (por ejemplo, /etc/emacs21/site-start.d/50psgml-init.el). Estos archivos de inicio no se incluyen con el paquete; en cambio, se instalan durante la fase de configuración posterior a la instalación mediante el script /usr/lib/emacsen-common/emacs-package-install $package_name.

Este script está diseñado para ser invocado por el script de instalación de paquetes en /usr/lib/emacsen-common/packages/install/$package_name para cada versión instalada de Emacs, llamándolo con los valores apropiados para el archivo nuevo (/usr/share/emacs/site-lisp/<pkg>/<pkg-init.el) y el archivo de destino (/etc/emacs21/site-start.d/50<pkg-init.el), y debería encargarse del resto.

VÉASE TAMBIÉN

ucf.conf(5), ucfr(1), ucfq(1), dpkg(1), dh_ucf(1), diff3(1).

La política de Emacs de Debian, que se incluye con el paquete emacsen-common.

AUTOR

Esta página de manual fue escrita por Manoj Srivastava <_>, para el sistema Debian GNU/Linux.