Gestión de configuración distribuída para la plataforma de Canaima
1. VI Cayapa Canaima Barinas 2012
Gestión de configuración distribuída para la
plataforma de Canaima
Ernesto Crespo
@_seraph1
2. Agenda
● Control de versiones centralizado vs distribuido
● ¿Qué es Etckeeper?
● ¿Qué es Mercurial?
● Comandos básicos de mercurial
● Etckeeper
● Instalación y configuración
● Iniciar etckeeper
● Primer commit
● Estatus y log
● Modificar archivo y reflejar cambios en el mercurial
● Ver diferencias de archivos, revisiones,revertir cambios.
● Subir a un repositorio central
4. Sistemas de control de versiones
● Centralizado
● CVS
● Subversion
● Distribuido
● Mercurial
● Git
● Bazaar
● Darcs
5. Etckeeper
● Colección de herramientas que permiten almacenar el directorio /etc
en un repositorio de Control de versiones distribuído.
● Refleja cambios automaticamente al final del proceso de instalación
o actualización de paquetes por medio de dpkg,apt, rpm o yum.
● Página del proyecto: http://kitenet.net/~joey/code/etckeeper/
● Mantiene historicos de los archivos guardados en /etc para:
● Documentación: Los mensajes de log son adjuntados a los
cambios de los archivos de configuración como documentación.
● Resolución de problemas: Permite recuperar configuraciones
en /etc que se han borrado por error o dañado la configuración de
un servicio.
6. Etckeeper
● Mantiene historicos de los archivos guardados en /etc para:
● Documentación de la configuración: Los mensajes de log
son adjuntados a los cambios de los archivos de
configuración como documentación.
● Resolución de problemas: Permite recuperar
configuraciones en /etc que se han borrado por error o
dañado la configuración de un servicio.
7. Etckeeper
● Maneja varios sistemas de control de versiones distribuídos
como:
● Git
● Mercurial
● Bazaar
● Darcs
● En la presentación se usa el sistema de control de versiones
Mercurial
8. Mercurial
● Sistema de control de versiones distribuido y
multiplataforma, para desarrolladores de software.
● Implementado principalmente en python.
● Para acceder a repositorios usa ssh y/o http.
● Se puede usar para controlar versiones de documentos,
empaquetar para Debian, controlar versiones de archivos de
configuración y desarrollo.
9. Comandos básicos de Mercurial
● Listar comandos: hg
● Clonar un repo: hg clone http://bitbucket.org/ecrespo/pyloro/
● Ver log: hg log
● Estatus del repositorio: hg status
● Actualizar un repositorio: hg update
● Commit: hg commit -m “Cambio de fecha”
● Aplicar cambios: hg push http://bitbucket.org/ecrespo/pyloro/
10. Instalación y configuración
● Instalación de etckeeper y mercurial
apt-get install etckeeper mercurial
● Configuración
● Modificar archivo /etc/etckeeper/etckeeper.conf
– Descomentar VCS="hg"
– Comentar el resto de los VCS.
– Agregar la opción del usuario:
HG_COMMIT_OPTIONS="-u ecrespo@gmail.com"
● Configurar Mercurial: Editar /etc/mercurial/hgrc
– Agregar: [ui]
username = ecrespo@gmail.com
11. Iniciar etckeeper
● Borrar cualquier registro inicial de control de versiones anterior sobre el directorio /etc
etckeeper uninit
● Inicializar el control de versiones con mercurial para etckeeper
etckeeper init
adding xdg/xfce4/panel/systray-4.rc
adding xdg/xfce4/panel/xfce4-menu-5.rc
adding xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
adding xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml
adding xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
adding xdg/xfce4/xinitrc
adding xml/catalog
adding xml/docbook-xml.xml
adding xml/docbook-xsl.xml
adding xml/rarian-compat.xml
adding xml/sgml-data.xml
adding xml/xml-core.xml
12. Primer commit
etckeeper commit "Inicializacion del control de versiones"
● Instalar un paquete Debian:
apt-get install lighttpd
adding lighttpd/conf-available/15-fastcgi-php.conf
adding lighttpd/conf-available/90-debian-doc.conf
adding lighttpd/conf-available/README
adding lighttpd/lighttpd.conf
adding logrotate.d/lighttpd
adding rc0.d/K01lighttpd
adding rc1.d/K01lighttpd
adding rc2.d/S20lighttpd
adding rc3.d/S20lighttpd
adding rc4.d/S20lighttpd
adding rc5.d/S20lighttpd
adding rc6.d/K01lighttpd
13. Estatus y log
● Estatus del directorio /etc/
hg status /etc/
M ../etc/.etckeeper
● Log del directorio /etc/
hg log /etc/
changeset: 1:ba22869a3179
tag: tip
user: ecrespo@gmail.com
date: Wed Jul 27 22:02:27 2011 -0430
summary: committing changes in /etc after apt run
changeset: 0:f2a3f337ecc0
user: ecrespo@gmail.com
date: Wed Jul 27 21:54:21 2011 -0430
summary: Inicializacion del control de versiones
14. Modificar un archivo y reflejar cambio en el scv
● Modificar archivo /etc/hosts, agregar un host:
● Hacer commit:
etckeeper commit "Se elimina el dominio del host jewel en /etc/hosts" /etc/hosts
● Revisar log:
hg log /etc/
changeset: 2:6efc1189bd8b
tag: tip
user: ecrespo@gmail.com
date: Wed Jul 27 22:08:25 2011 -0430
summary: Se elimina el dominio del host jewel en /etc/hosts
changeset: 1:ba22869a3179
user: ecrespo@gmail.com
date: Wed Jul 27 22:02:27 2011 -0430
summary: committing changes in /etc after apt run
changeset: 0:f2a3f337ecc0
user: ecrespo@gmail.com
date: Wed Jul 27 21:54:21 2011 -0430
summary: Inicializacion del control de versiones
15. Ver diferencias en archivos
● Diferencias en archivos del directorio /etc/:
hg diff /etc/
diff -r 6efc1189bd8b hosts
--- a/hosts Wed Jul 27 22:08:25 2011 -0430
+++ b/hosts Wed Jul 27 22:13:41 2011 -0430
@@ -1,6 +1,6 @@
127.0.0.1 localhost
127.0.1.1 jewel jewel
-
+127.0.0.1 sofia sofia
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
● Al ejecutar el commit y volver a hacer el diff ya no se muestran cambios por que se subieron al
repositorio:
etckeeper commit "Agregado el nombre sofia al host 127.0.0.1 en el archivo /etc/hosts"
/etc/hosts
16. Revisar log
● Al ejecutar la visualización del log aparece el cambio del host:
hg log /etc/
changeset: 3:452065708a7e
tag: tip
user: ecrespo@gmail.com
date: Wed Jul 27 22:16:13 2011 -0430
summary: Agregado el nombre sofia al host 127.0.0.1 en el archivo /etc/hosts
changeset: 2:6efc1189bd8b
user: ecrespo@gmail.com
date: Wed Jul 27 22:08:25 2011 -0430
summary: Se elimina pdvsa.com del host jewel en /etc/hosts
changeset: 1:ba22869a3179
user: ecrespo@gmail.com
date: Wed Jul 27 22:02:27 2011 -0430
summary: committing changes in /etc after apt run
changeset: 0:f2a3f337ecc0
user: ecrespo@gmail.com
date: Wed Jul 27 21:54:21 2011 -0430
summary: Inicializacion del control de versiones
17. Ver cambios entre revisiones
● Ver cambios entre la revisión 1 y 2 de /etc/hosts:
hg diff -r 1 -r 2 /etc/hosts
diff -r ba22869a3179 -r 6efc1189bd8b hosts
--- a/hosts Wed Jul 27 22:02:27 2011 -0430
+++ b/hosts Wed Jul 27 22:08:25 2011 -0430
@@ -1,5 +1,5 @@
127.0.0.1 localhost
-127.0.1.1 jewel.dst.pdvsa.com jewel
+127.0.1.1 jewel jewel
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
18. Revertir cambios
● Revertir cambio de la versión 3 a la 2:
hg revert -r 2 /etc/hosts
● Archivo /etc/hosts final:
127.0.0.1 localhost
127.0.1.1 jewel jewel
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
19. Subir el repositorio de /etc a servidor central
público (Bitbucket)
● Subir a bitbucket:
hg push https://bitbucket.org/ecrespo/configuracion-jewel
http authorization required
realm: Bitbucket.org HTTP
user: ecrespo
password:
pushing to https://bitbucket.org/ecrespo/configuracion-jewel
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 4 changesets with 5764 changes to 5759 files
remote: bb/acl: ecrespo is allowed. accepted payload.
22. Subir el repositorio a un servidor Centralizado
de Mercurial por ssh
● Es necesario instalar en el equipo servidor central: etckeeper,
mercurial y ssh
apt-get install etckeeper mercurial openssh-server
● Configurar etckeeper y mercurial como se ha explicado
● Iniciarlizar etckeeper:
etckeeper init
● Se realiza el primer commit:
etckeeper commit “Inicialización del control de versiones”
● Se crea la clave ssh y se copiará al servidor ssh:
ssh-keygen -t rsa -C “ecrespo@gmail.com” -f ernesto-identity
23. Subir el repositorio a un servidor Centralizado
de Mercurial por ssh
● Se copia la clave pública al servidor ssh:
scp hg-ernesto-identity.pub ernesto@IP-servidor:.ssh
● Se accede al servidor
● Se agrega la clave pública al archivo authorized_keys:
cd .ssh
cat hg-ernesto-identity.pub >> authorized_keys
● En el equipo que accederá al servidor, se crea el archivo .ssh/config,
se agrega el host, el usuario y la clave privada que se va a usar para
la conexión ssh:
host IP-servidor
user ernesto
IdentityFile ~/.ssh/hg-ernesto-identity
24. Subir el repositorio a un servidor Centralizado
de Mercurial por ssh
● Se verifica que se accede al servidor usando la llave pública:
ssh IP-servidor -i ~/.ssh/hg-ernesto-identity -l ernesto
● Se clona el directorio /etc al home del usuario (equipo del servidor):
hg clone /etc/ conf-equipo-servidor
● Se cambia el dueño y el grupo del repositorio recien clonado:
chown -R ernesto.ernesto conf-equipo-servidor
● Ahora se clona la configuración del servidor en el equipo cliente:
hg clone ssh://ernesto@IP-servidor/repo/conf-equipo-servidor/
● Las actualizaciones de los repositorios locales y remotos se pueden realizar de
forma periódica por medio de cron
25. Propuesta
● Tener un servidor de configuraciones centralizado con git,
mercurial o bazaar.
● Cada MV del proyecto tenga que usar etckeeper.
● Crear una clave RSA para ssh y subir la clave pública al
servidor.
● Colocar los scripts al cron para automatizar las
actualizaciones de los repositorios al servidor principal.
● Es necesario también conocer que servicios maneja cada
MV y sus datos críticos para tenerlos respaldados, y así
poder recuperar un equipo o clonarlo de la forma más rápida
y fácil posible.
26. Referencias:
● Etckeeper con git:
http://sysadmin.vazqueznanini.com.ar/herramientas/etckeeper
● Etckeeper con bazaar:
http://www.howtoforge.com/using-version-control-for-your-etc-directory-with-etckeeper-and-
bazaar-on-debian-squeeze
● Etckeeper con mercurial:
http://ernesto-ecrespo.blogspot.com/2011/07/gestionar-los-archivos-de-configuracion.html
● Tutorial de mercurial:
http://ernesto-ecrespo.blogspot.com/2009/04/control-de-versiones-con-mercurial.html
● Compartir repositorios mercurial:
http://ernesto-ecrespo.blogspot.com/2011/12/compartir-repositorios-mercurial-por.html