# [Guia] Hacer mas cómodo etc-update

## RadikalQ3

Guia para mejorar el etc-update

Tras emerger algun paquete, si éste 'propone' una configuración diferente a la nuestra, emerge no sabe cual de los dos ficheros de configuración seguir utilizando, y es por este motivo por el cual nos da el coñazo, haciendo que seamos nosotros quienes evaluemos que cambios hay que hacer con esos nuevos ficheros de configuración.

Esto está bien, salvo en unos cuantos casos, en los que se nos pregunta por ficheros con cambios triviales, o bien ficheros que tu no has tocado nunca.

Trasteando por los foros, he encontrado un apañito para esto, y pongo aqui unas pequeñas instrucciones  de cómo instalar todo el invento para hacernos las actualizaciones 'un poco' más cómodas.

En primer lugar, vamos a instalar el paquete rcs:

```

*  app-text/rcs

      Latest version available: 5.7-r2

      Latest version installed: 5.7-r2

      Size of downloaded files: 275 kB

      Homepage:    http://www.gnu.org/software/rcs/

      Description: Revision Control System

      License:     GPL-2

```

que no es mas que un controlador de revisiones, para lo cual haremos un:

```

emerge rcs

```

y tambien el paquete colordiff, que es un substituto del diff que muestra las diferencias entre dos ficheros usando colores:

```

*  app-misc/colordiff

      Latest version available: 1.0.4

      Latest version installed: 1.0.4

      Size of downloaded files: 12 kB

      Homepage:    http://colordiff.sourceforge.net/

      Description: Colorizes output of diff

      License:     GPL-2

```

lo cual haremos con:

```
emerge colordiff
```

tras esto, necesitamos crear el directorio que usará el rcs para guardar las diferentes versiones de las configuraciones que vaya manejando.

En concreto, basta con que hagamos:

```

mkdir /etc/config-archive

```

en cualquier consola.

Ahora, configuraremos el fichero /etc/dispatch-conf.conf

Os pongo aqui el mío, para que veais las diferencias respecto al vuestro:

```
#

# dispatch-conf.conf

#

# Directory to archive replaced configs

archive-dir=/etc/config-archive

# Use rcs for storing files in the archive directory?

# (yes or no)

use-rcs=yes

# Diff for display

diff="colordiff -Nau %s %s"

# Pager for diff display

pager="less -R --no-init --QUIT-AT-EOF"

# Automerge files comprising only CVS interpolations (e.g. Header or Id)

# (yes or no)

replace-cvs=yes

# Automerge files comprising only whitespace and/or comments

# (yes or no)

replace-wscomments=yes

# Automerge files that the user hasn't modified

# (yes or no)

replace-unmodified=yes
```

Con todo esto, ya teneis el invento configurado.

Para usarlo, en lugar de hacer etc-update, sólo teneis que hacer un: dispatch-conf

El rcs se encargará de evitar darnos el coñazo con cambios triviales en ficheros de configuración, por ejemplo, cuando sólo cambien su cabecera, o cuando las diferencias sólo consistan en unos cuantos espacios en blanco, etc.

Además, el rcs es un 'gestor' de ficheros, y el tio va guardando las diferentes versiones de las configuraciones que hayamos tenido, lo cual hace dejándolas en el directorio /etc/config-files

Para el resto de ficheros, se nos mostrará tal como hace el etc-update una ristra con las diferencias entre los dos ficheros, pero, gracias al colordiff, en dos colores.

Tras ver las diferencias (lo cual se hace con un less, asi que si quieres salir de él, solo hay que pulsar la q) tendremos opcion de o bien usar la nueva version del fichero, o bien la vieja.

Al principio es un poco raro el cambio de manejo respecto al del etc-update, pero, lo bueno de este método es que no invalida el etc-update... es decir, podemos dar la primera pasada haciendo un dispatch-conf y quitandonos así los cambios triviales, y luego hacer un etc-update para hacerlo como hasta ahora.

Al respecto... podemos tambien 'colorear' la salida del etc-update, simplemente cambiando un poquito su configuracion, en el fichero /etc/etc-update.conf:

```

# edit the lines below to your liking

# $Header: /home/cvsroot/gentoo-src/portage/cnf/etc-update.conf,v 1.5 2003/04/28 10:19:46 carpaski Exp $

# mode - 0 for text, 1 for menu (support incomplete)

# note that you need dev-util/dialog installed

mode="0"

# Whether trivial/comment changes should be automerged

eu_automerge="yes"

# arguments used whenever rm is called

rm_opts="-i"

# arguments used whenever mv is called

mv_opts="-i"

# arguments used whenever cp is called

cp_opts="-i"

# pager for use with diff commands (see NOTE_2)

pager="less -R"

#pager=""

# vim-users: you CAN use vimdiff for diff_command. (see NOTE_1)

diff_command="colordiff -uN %file1 %file2"

using_editor=0

#diff_command="vim -d %file1 %file2"

#using_editor=1

# vim-users: don't use vimdiff for merging (see NOTE_1)

merge_command="sdiff -s -o %merged %orig %new"

```

y tendreis un etc-update con salida a color. 

Para redondear esto, lo mejor sería poder usar un editor de texto específico para ver/editar diferencias entre dos ficheros.

Tal como nos indica [Stolz], podemos usar el kompare, que es un programa para mostrar las diferencias entre dos ficheros de forma gráfica.

Aqui teneis una captura del programa.

Para utilizarlo, primero hay que emergerlo, con:

```
emerge kde-base/kdesdk
```

y luego, hacer que el dispatch-conf lo use para mostrar las diferencia, lo cual se consigue editando el fichero /etc/dispatch-conf y cambiando el diff (o el colordiff) por Kompare, tal que así:

```
# Diff for display

#diff="colordiff -Nau %s %s"

diff="kompare %s %s"
```

La pega de este sistema es que sólo nos vale para ejecutar el dispatch-conf en una consola dentro de un servidor X... es decir, que necesitamos las X para que tire el kompare...

Me gustaría hacer un cambio en el script del dispatch-conf para que ejecutase o bien el colordiff o bien el kompare, en función de si el script se está ejecutando en una consola de texto o en una consola X, pero mis conocimientos del bash no dan para tanto...  :Smile: 

De momento, cuando uso el dispatch-conf desde un ssh remoto, lo uso sólo para que haga los cambios triviales, luego salgo de él y ejecuto el etc-update (en el que sigo con el colordiff en lugar del kompare) y hago los cambios restantes.

----------

## salvapc

Para comodo en lo de mezclar ficheros es utilizar el  gtkdiff

que es para las X y te muestra el resultado final mezclado y el actual y el 

nuevo, vas seleccionando con el raton las lineas que quieres poner.

cambias en el /etc/etc-update.conf el merge_command por esta

```

merge_command="gtkdiff  -o %merged %orig %new"

```

en el usuario que estes en las X le haces 

```

xhost +

```

para aceptar conexiones

Tambien me lo he puesto asi para hacer el etc-update del servidor que tengo que administrar.

Lo que pasa es que para esto me me hice un script intermedio ya que el gtkdiff hay que llamarlo con el parametro de a que ip se tenia que conectar me daba error.

En el servidor lo tengo asi

```

merge_command="/bin/gtkdiff-llamada %merged %orig %new"

```

y el script /bin/gtkdiff-llamada asi

```

#!/bin/bash

echo "llamando a gtkdiff con -o $@"

export DISPLAY=192.168.100.9:0

gtkdiff -g 1152x864  -o $@

```

192.168.100.9 es la ip de mi maquina

----------

## Stolz

Muy util la guía, yo hasta hace poco hacia algo mas simple:

Yo suelo usar Kompare, un prgrama para KDE que muestra en dos columnas , y con distintos colores, los cambios entre ambos archivos. Puedes ver una captura AQUI

Para usarlo, editar /etc/etc-update.conf y hacer la siguiente modificacion:

diff_command="kompare %file1 %file2"

Normalmente, cuando hago un ect-update, estoy en un terminal abierto por un usuario, pero 'logeado' como root, por lo que para que se pueda ejecutar Kompare, antes de logearnos como root deberiamos de haber ejecutado:

```
xhost +localhost
```

Ojo, que para sistemas multiusuario, el uso de xhost puede suponer problemas de seguridad, para mas informacion 

```
man xhost
```

Saludozzzzzz

----------

## RadikalQ3

 *Stolz wrote:*   

> Yo suelo usar Kompare, un prgrama para KDE que muestra en dos columnas 

 

Juer... tiene muy buena pinta... pero veo que no está en portage ¿no?

Lo buscaré  :Smile: 

----------

## episode96

 *RadikalQ3 wrote:*   

>  *Stolz wrote:*   Yo suelo usar Kompare, un prgrama para KDE que muestra en dos columnas  
> 
> Juer... tiene muy buena pinta... pero veo que no está en portage ¿no?
> 
> Lo buscaré 

 

Está incluido en kde-base/kdesdk

----------

## ArsDangor

La herramienta colordiff (o kompare, o la que sea) también se puede usar con etc-update. Basta con editar adecuadamente el fichero /etc/etc-update.conf .

A mí dispatch-conf me gustaba, hasta que un día intentó cargarse mi fstab. La cosa es que yo tengo puestos varios ficheros en la variable CONFIG_PROTECT_MASK en mi make.conf. etc-update me los respeta todos, sin problemas, con lo que casi siempre puedo decirle que reemplace todos los ficheros (opción -5) del tirón. Pero dispatch-conf no hacía caso de esa variable.

¿Sigue siendo esa la conducta de dispatch-conf? ¿Cómo prevenís reemplazar lo que no debéis?

Salu2.

----------

## RadikalQ3

 *ArsDangor wrote:*   

> La herramienta colordiff (o kompare, o la que sea) también se puede usar con etc-update. Basta con editar adecuadamente el fichero /etc/etc-update.conf 

 

Sí, así lo pone en la guia  :Smile: 

 *ArsDangor wrote:*   

> ¿Cómo prevenís reemplazar lo que no debéis? 

 

Hombre... yo no uso el config protect para nada... me gusta que se me indiquen los nuevos cambios en ficheros de configuración, y acabo de recompilar todo el word desde cero y el dispatch config no se ha cargado nada... 

Con el rcs activado, el dispatch config resuelve los cambios triviales sin problemas, y en el resto... por mucho config_protect que uses... quieras o no tendrás que echarle un vistazo si andas metiendo nuevas versiones de paquetes...

----------

## artic

Muy bonito el kompare pero cargante,yo creo dado la naturaleza del etc-update lo mejor son los colores,por lo menos hasta q no sea grafico,pq visto lo visto dentro de poco emergeremos con el navegador o una interfaz gtk.

Salu2

----------

## ArsDangor

 *RadikalQ3 wrote:*   

>  *ArsDangor wrote:*   ¿Cómo prevenís reemplazar lo que no debéis?  
> 
> Hombre... yo no uso el config protect para nada... me gusta que se me indiquen los nuevos cambios en ficheros de configuración, y acabo de recompilar todo el word desde cero y el dispatch config no se ha cargado nada... 

 

Ya. Eso está muy bien, hasta que actualizas un paquete gordo y hay 200 ficheros que cambiar. Y uno de ellos es tu fstab. Y se te cuela.

 *RadikalQ3 wrote:*   

> Con el rcs activado, el dispatch config resuelve los cambios triviales sin problemas, y en el resto... por mucho config_protect que uses... quieras o no tendrás que echarle un vistazo si andas metiendo nuevas versiones de paquetes...

 Sí. Pero hay ficheros que nunca se deben modificar. Por ejemplo, el fstab. O el /etc/services. O el make.conf.

Por eso quiero saber si hay alguna forma de que el dispatch-conf no me intente sobreescribir los ficheros que yo sé que no deben cambiar.

Salu2.

----------

## RadikalQ3

A ver, trozo sacado del script del dispatch-conf:

```

        #

        # Remove new configs identical to current

        #                  and

        # Auto-replace configs a) whose differences are simply CVS interpolations,

        #                  or  b) whose differences are simply ws or comments,

        #                  or  c) in paths now unprotected by CONFIG_PROTECT_MASK,

        #

        def f (conf):

            mrgconf = re.sub(r'\._cfg', '._mrg', conf['new'])

            archive = os.path.join(self.options['archive-dir'], conf['current'].lstrip('/'))

            if self.options['use-rcs'] == 'yes':

                dispatch_conf.rcs_archive(archive, conf['current'], conf['new'], mrgconf)

            else:

                dispatch_conf.file_archive(archive, conf['current'], conf['new'], mrgconf)

```

como ves, tambien hace uso del CONFIG_PROTECT_MASK...

Aunque yo sigo sin hacer uso de el  :Smile:  quien sabe... puede que en un futuro haya cambios en el fstab... no quiero que me pasen desapercibidos.

----------

## artic

Lo del fstab me paso una vez y no fue muy grato q digamos,por eso tengo una copia de seguridad de mis etc mas importantes,q despues con el livecd resuelvo rapidamente,en caso de q estos no me permitan arrankar.

Esta claro q el etc-update es mejorable,pero por mejorar muy rapido = tropezamos.

salu2

----------

## ArsDangor

 *RadikalQ3 wrote:*   

> A ver, trozo sacado del script del dispatch-conf:
> 
> [...]
> 
> como ves, tambien hace uso del CONFIG_PROTECT_MASK...
> ...

 

Oks. Cierto.

En versiones más antiguas, dispatch-conf pasaba olímpicamente de mi CONFIG_PROTECT_MASK. Me alegro de que lo hayan solucionado. Lo probaré estos días, a ver qué tal tira.

Salu2.

----------

## dotinmouth

 *ArsDangor wrote:*   

>  *RadikalQ3 wrote:*   A ver, trozo sacado del script del dispatch-conf:
> 
> [...]
> 
> como ves, tambien hace uso del CONFIG_PROTECT_MASK...
> ...

 

Yo solo cambie diff por colordiff. En color todo se ve mejor  :Wink:  Bye

----------

## queru

Estupendo artículo, aunque creo que donde dices "tribales" (de tribu) quieres decir "triviales" (de trivial). Te ha traicionado el corrector seguramente.

Gracias por regalarnos tu tiempo. Saludos.

----------

## RadikalQ3

 *queru wrote:*   

> Estupendo artículo, aunque creo que donde dices "tribales" (de tribu) quieres decir "triviales" (de trivial). Te ha traicionado el corrector seguramente.

 

Jejeje no, nada de traductor... el artículo no es una traducción... mas bien creo que sería un exceso de cafeína  :Smile: 

----------

## queru

Corrector decía. Pensaba que quizá era el corrector ortográfico el que te había traicionado. Tienes que dejar el café, y seguir escribiendo artículos como este.

Abrazos.

----------

## RadikalQ3

Joooder como ando... hoy no doy pie con bola!

Ah... y tampoco uso corrector... (asi me va)  :Smile: 

----------

