##############################################################
# Ejercicio con CFEngine (Ubuntu)
# Talleres WALC (Gestión de Redes)
#
# Carlos Vicente
# Servicios de Red - Universidad de Oregon
##############################################################
* Objetivos:
----------------
- Utilizar el servidor del laboratorio como repositorio de configuraciones
- Iniciar un repositorio en Subversion con:
- Configuraciones para cfengine
- Configuraciones para servicios
- Gestionar la configuración de los siguientes servicios:
- ntp
- aliases
* Requisitos:
----------------
- Paquete cfengine2 instalado (apt-get install cfengine2)
- Paquete subversion instalado (apt-get install subversion)
* Ubicación de Archivos:
-----------------------
http://server/track4/presentaciones/Ejercicio_cfengine/
***************************************************************************************
* Instrucciones
***************************************************************************************
En el servidor:
- Ir al directorio /etc/cfengine (/var/lib/cfengine2/inputs)
- Crear los siguientes archivos incluídos en este ejercicio:
cfservd.conf
update.conf
cf.common
cf.aliases
cfagent.conf
En los clientes:
*) Solamente es necesario tener una copia del archivo update.conf en /var/lib/cfengine2/inputs
*) Copiar la llave pública del cliente en el servidor:
cd /var/lib/cfengine2/ppkeys
scp localhost.pub root@server:/var/lib/cfengine2/ppkeys/root-<su-direccion-IP>.pub
*) cfagent -Kqv
***************************************************************************************
* Integración con Subversion (Control de Versiones)
***************************************************************************************
Repaso de comandos principales de Subversion (SVN):
svn checkout - Hacer una copia del repositorio en el directorio local
svn update - Actualizar al copia local
svn status - Revisar el estatus de los archivos locales
svn diff - Revisar las diferencias entre el repositorio y la copia local
svn commit - Actualizar el repositorio con los cambios realizados localmente
Instrucciones.
-------------------
En el servidor:
*) Crear un repositorio Subversion:
mkdir /usr/local/svn
svnadmin create /usr/local/svn/cfengine
*) Crear directorios temporales para importar el repositorio:
mkdir -p /tmp/master/cfengine/inputs
mkdir -p /tmp/master/services/aliases
*) Copiar las configuraciones de cfengine:
cp /etc/cfengine/* /tmp/master/cfengine/inputs
*) Importar el directorio temporal en el repositorio Subversion
svn import /tmp/master file:///usr/local/svn/cfengine
( abrirá un editor para escribir una nota explicatoria. Se puede Ignorar. )
*) Crear una copia del repositorio donde se van a ir bajando las actualizaciones
svn checkout file:///usr/local/svn/cfengine/ /var/lib/cfengine2/master
*) Crear un cron job para mantener la copia del repositorio actualizada
vi /etc/cron.d/cfengine
* * * * * root /usr/bin/svn update --quiet /var/lib/cfengine2/master
En el servidor y los clientes:
*) Ejecutar el agente manualmente para verificar su operación
cfagent -Kqv
*) Verificar que el archivo /etc/aliases es ahora el que queríamos
*) Activar los "daemons" de cfengine
vi /etc/default/cfengine2
RUN_CFSERVD=1
RUN_CFEXECD=1
RUN_CFENVD=1
/etc/init.d/cfengine2 start
*) Es posible configurar Subversion para permitir actualizaciones remotas (vía https con Apache).
Así, el administrador puede elaborar sus cambios en su estación de trabajo, y luego hacer un
"check-in" de sus cambios, con lo cual el servidor actualizará su copia cada minuto, y éstos
cambios se reflejarán en las máquinas cliente.
En el servidor:
*) Instalar la biblioteca de Subversion para Apache:
apt-get install libapache2-svn
*) Actualizar el archivo /etc/apache2/httpd.conf con el siguiente bloque:
(ojo: preferiblemente hacerlo sobre SSL)
<Location /cfengine>
DAV svn
SVNPath /usr/local/svn/cfengine
AuthType Basic
AuthName "Autenticacion Subversion"
AuthUserFile /etc/apache2/passwords
require valid-user
</Location>
*) Crear el usuario y password para proteger el repositorio:
htpasswd -c /etc/apache2/passwords walc
*) Ajustar los permisos del repositorio para que el usuario de Apache pueda escribir:
sudo chown -R www-data:root /usr/local/svn/cfengine/
En el cliente:
cd /home/walc
svn checkout http://server/cfengine configuraciones
Crear un archivo de aliases válido:
(copiar y editar el /etc/aliases actual para agregar un alias)
cp /etc/aliases /home/walc/configuraciones/services/aliases/aliases
vi /home/walc/configuraciones/services/aliases/aliases
ej: agregar una línea con:
su-nombre: walc
Luego:
cd /home/walc/configuraciones
svn update (para asegurarse de que está trabajando con la copia más reciente)
OJO: Si el update marca conflicto "C":
Editar el archivo para arreglar el conflicto
Borrar las líneas con "<<<<<<" y "========" y ">>>>>>>>"
svn resolved services/aliases/aliases
svn commit -m "Agregando nombre"
(esperar un minuto para que la copia del servidor se actualice)
cfagent -Kqv
Por último, verificar que los cambios se han efectuado en su máquina
* Conclusiones:
-----------------------
Este ejercicio muestra un caso muy sencillo pero poderoso que permite desarrollar una instalación más completa. Utilizando el archivo aliases como ejemplo puede extenderse la misma funcionalidad a tantos servicios y archivos como sea necesario.
Buena suerte!