Dispatch-conf
emerge — configuration — ebuild repository — dispatch-conf
world file — USE flags — ebuilds — profiles
upgrades — using testing packages — binary packages
tools — gentoolkit — eselect
Portage FAQ — cheat sheet — FAQ
all articles
- how to revert a change
- how backups are made
- is archive-dir still an option ? it isn't in the config file by default
dispatch-conf es una herramienta incluida en Portage que sirve para gestionar de manera segura y conveniente los cambios en archivos de configuración tras actualizar paquetes. Es una utilidad importante para hacerle frente a la transición de configuraciones entre versiones de paquetes, sin la necesidad de intervención manual del usuario.
dispatch-conf permite a un/a administradora de sistemas revisar los cambios en archivos de configuración hechos por Portage, gestionar los cambios en la estructura de configuraciones de un paquete actualizado, de una manera estandarizada. Portage indicará cuándo se necesitan actualizar los archivos de configuración, y ejecutar dispatch-conf propondrá el uso de la nueva configuración, rechazar los cambios, o fusionar los cambios de manera interactiva. dispatch-conf actualizará automáticamente cualquier archivo de configuración que el/la usuario/a jamás haya modificado o que únicamente difieran de la versión actual en comentarios, espacios en blanco o el CVS.
dispatch-conf mantiene un historial de cambios y permite volver a versiones anteriores, de tal modo que cualquier error puede ser revertido. Los cambios hechos en archivos de configuración serán guardados en el directorio de archivo. Alternativamente, puede integrarse con rcs para permitir una configuración de gestión de archivos por control de versión.
dispatch-conf revisará los cambios en todos los directorios declarados en la variable del entorno CONFIG_PROTECT. Cualquier archivo de configuración encontrado en rutas declaradas en la variable del entorno CONFIG_PROTECT_MASK no se verán protegidas y serán automáticamente sobrescritas.
Antes de ejecutar dispatch-conf por primera vez, se deberían configurar los ajustes en /etc/dispatch-conf.conf, y el directorio de archivado especificado en /etc/dispatch-conf.conf tendrá que ser creado (siendo este /etc/config-archive por defecto).
El problema de la gestión de configuraciones con actualizaciones
La migración de configuraciones es un problema común durante el proceso de actualización de cualquier pieza de software: algunos cambios en la versión modificarán su comportamiento de tal manera que los parámetros de configuración anteriores ya no sean pertinentes en la nueva versión. Quizá se añadan nuevas opciones de configuración, se eliminen, cambie su significado o los nombres o el formato de cada directiva cambien.
Cada proyecto de software gestiona esto a su propia manera. Algunos proyectos tienen un rastreador de versiones de configuración robusto y pueden transferir las configuraciones de una versión a otra sin problemas. Puede que otros proyectos tengan problemas entre versiones mayores o cuando se actualiza desde una versión muy vieja. Para algunos proyectos, actualizarse manteniendo configuraciones anteriores podría causar problemas o ser directamente imposible.
Hay una convención establecida en Unix de usar archivos de texto plano, a menudo con una sintaxis semi estándar, para almacenar la configuración. Una actualización mayor podría requerir la migración manual de estos archivos, o tener que tomar el riesgo de que se vuelvan obsoletas. Esta situación puede parecer aparatosa, pero sigue siendo una manera muy robusta de gestionar la configuración y evita la ambigüedad en cuanto a cómo las directivas de configuración cambian entre versiones, lo cual es importante para servicios importantes (o incluso indispensables), como los servidores de Internet.
Configuración
Archivos
El archivo de configuración de dispatch-conf es /etc/dispatch-conf.conf. El directorio que referencia la variable archive-dir podría tener que ser creada.
Integración con RCS (sistema de control de revisiones)
Al configurarse para usar RCS, los permisos de lectura y ejecución de los ficheros archivados podrían ser heredados de la primera comprobación del fichero. Si los permisos del fichero en uso han cambiado desde entonces, los permisos de la primera comprobación podrían mantenerse. Esto podría causar problemas de seguridad. El acceso a los archivos RCS puede ser controlado si se configuran los permisos del directorio padre.
Cuando dispatch-conf está configurado para integrarse con rcs, almacenará todos los cambios en /etc/config-archive.
Instale el sistema de control de revisiones:
root #
emerge --ask dev-vcs/rcs
Este proceso de configuración es tan simple como editar el archivo de configuración para que incluya lo siguiente:
/etc/dispatch-conf.conf
use-rcs=yes
Un/a administrador/a puede entonces comprobar las diferencias usando herramientas de rcs como rlog o revertir cambios usando co. Las herramientas rcs funciona bloqueando el propio fichero, así que, en el momento que se necesite para tareas administrativas, se debe entender que:
- dispatch-conf solo almacena los cambios hechos cuando el paquete sugiere alterar el fichero. Los cambios hechos más tarde no se registran todavía
- al revisar un fichero, rcs tratará de escribir el fichero en el sistema de archivos para asegurarse de crear copias de respaldo de los ficheros existentes primero, o trabajará con output estándar (véase más tarde)
- para revisar un archivo, primero se tiene que configurar un bloqueo del mismo. Además, asegúrese de no eliminar el fichero con el que se está trabajando
Para ver el historial de commits en /etc/conf.d/udev:
user $
rlog /etc/config-archive/etc/conf.d/udev,v
RCS file: /etc/config-archive/etc/conf.d/udev,v Working file: udev head: 1.1 branch: locks: strict access list: symbolic names: keyword substitution: kv total revisions: 2; selected revisions: 2 description: Archived config file. ---------------------------- revision 1.1 date: 2011/06/15 18:14:59; author: root; state: Exp; branches: 1.1.1; dispatch-conf update. ---------------------------- revision 1.1.1.1 date: 2011/06/15 18:14:59; author: root; state: Exp; lines: +3 -2 dispatch-conf update. =============================================================================
Si se busca restaurar una versión concreta, una forma simple de hacerlo es revisar una versión anterior:
root #
cp udev udev.orig
root #
co -p -r1.1.1.1 /etc/config-archive/etc/conf.d/udev,v > udev
etc/config-archive/etc/conf.d/udev,v --> standard output revision 1.1.1.
Tras hacer los cambios finales (es posibles usar el udev.orig de respaldo para fusionar cualquier cambio hecho más tarde), revise el archivo de nuevo:
root #
co -p -l /etc/config-archive/etc/conf.d/udev,v
Edite el fichero y finalmente revise los cambios:
root #
ci -l /etc/config-archive/etc/conf.d/udev,v
/etc/config-archive/etc/conf.d/udev,v <-- udev new revision: 1.2; previous revision: 1.1 enter log message, terminated with single '.' or end of file: >> Merged changes for persistant rules >> . done
Cambiar herramientas de diferenciado o fusionado
Output de diferencias coloreado
Leer todos los cambios en texto gris puede ser un poco molesto. Afortunadamente, las versiones modernas de sys-apps/diffutils tienen una opción --color
, la cual mostrará los diferentes tipos de cambios en colores distintos. La configuración es simple; cambie la línea de diferencias en el archivo de configuración a:
/etc/dispatch-conf.conf
diff="diff --color=always -Nu '%s' '%s'"
De manera alternativa, el paquete app-misc/colordiff puede ser usado. Instale colordiff con:
root #
emerge --ask app-misc/colordiff
Cambie entonces la configuración para usarlo:
/etc/dispatch-conf.conf
diff="colordiff -Nu '%s' '%s'"
Usar (g)vimdiff para fusionar cambios
Es posible utilizar vimdiff/gvimdiff en vez del método predeterminado de fusionar ficheros. Para hacerlo, modifique el archivo de configuración /etc/dispatch-conf.conf y cambie la línea de fusionado:
/etc/dispatch-conf.conf
merge="vimdiff -c'saveas %s' -c next -c'setlocal noma readonly' -c prev %s %s"
vimdiff (para gvimdiff use la opción -f
) puede ser usado también para fusionar cambios.
Y para neovim:
/etc/dispatch-conf.conf
merge="nvim -d -c'saveas %s' -c next -c'setlocal noma readonly' -c prev %s %s"
El panel izquierdo mantendrá el archivo de configuración original guardado como el output de fusionado, así que genere los cambios en el panel izquierdo y guarde el mismo. Para ayudar a recordar esto, el panel a la derecha (que contiene el nuevo archivo de configuración) se marcará como inmodificable y de solo lectura.
Algunos comandos útiles con respecto al fusionado con vimdiff:
"]c" : jump to next change "[c" : jump to previous change "CTRL-W <Right>" or "CTRL-W <Left>" : go to the other window "do" (diff obtain): get the text of the highlighted block from the other window "dp" (diff put) : put the text of the highlighted block to the other window "zo" : open fold under the cursor "zc" : close fold under the cursor "zr" : open all folds ":wqa" : write and exit
Vea la documentación de Vim para más ayuda.
Usar imediff para fusionar cambios
Otra alternativa de fusionado es dev-util/imediff. Esta simple herramienta permite usar solo unas pocas teclas para ejecutar sus funciones. Principalmente, se usa con las teclas a o b. Además, la tecla e abrirá el editor favorito del usuario (establecido por la variable EDITOR) para realizar fusionados manuales.
Para usarlo con dispatch-conf, primero debe instalarlo:
root #
emerge --ask dev-util/imediff
Configure entonces /etc/dispatch-conf.conf:
/etc/dispatch-conf.conf
# imediff-1.X
merge="imediff2 -c -N --output='%s' '%s' '%s'"
# imediff-3.X
merge="imediff --output='%s' '%s' '%s'"
Uso
Ejecución
dispatch-conf debe ser ejecutado como usuario root, ya que los archivos de configuración le pertenecen a él:
root #
dispatch-conf
El Manual AMD64 y la página del manual dispatch-conf(1) contienen más información en cuanto al uso:
user $
man 1 dispatch-conf
Consejos
Mantener los cambios de configuración en un repositorio git
Al instalarlo, etckeeper se unirá a dispatch-conf para crear respaldos de archivos de configuración en cada ejecución.
Véase también
- etc-update (Manual AMD64)
- cfg-update — a utility used on Gentoo to manage configuration file updates.