Dispatch-conf

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Dispatch-conf and the translation is 98% complete.
Other languages:
Resources
This article has some todo items:
  • 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.

Importante
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)

Advertencia
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:

ARCHIVO /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:

ARCHIVO /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:

ARCHIVO /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:

ARCHIVO /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:

ARCHIVO /etc/dispatch-conf.conf
merge="nvim -d -c'saveas %s' -c next -c'setlocal noma readonly' -c prev %s %s"
Nota
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:

ARCHIVO /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