02 – Augeas

Bienvenidos al segundo episodio de deployando.me, el podcast de tecnología para sysadmins y devops. Soy Rodolfo Pilas y estoy grabando el 2 de noviembre de 2016.

Estoy contento por la recepción que ha tenido el primer episodio en el que vimos Let’s Encrypt. Este podcast es emergente y yo mismo estoy generando habilidades en el podcasting, por lo que los comentarios en twitter en @deployando o en el blog son muy bienvenidos.

Entre los comentarios que recibimos quiero destacar el de Pablo Astigarraga, más conocido por Pote o @poteland en twitter, que también conduce otro podcast uruguayo: Piso 13, sobre tecnología y open source, que desde ya les recomiendo. Pote nos comentaba que en la nube de Amazon hay un servicio llamado Amazon Certificate Manager que es una autoridad de certificación integrada con el servicio de nube de Amazon y, obviamente, es gratis para sus clientes; lo que la convierte la opción a elegir, por sobre Let’s Encrypt, cuando estás alojando los servicios en la nube de Amazon.

Por favor, les pido me sigan haciendo llegar sus comentarios, saben que cualquier cosa que me digan o puedan aportar va a ser de beneficio para todos.

Para este episodio quiero hablar una herramienta que nos permite modificar todos los archivos de configuración de nuestros sistemas Linux de una forma homogénea y bastante simple.

Me refiero a Augeas cuyo sitio web es http://augeas.net/

Como administradores de sistemas sabemos que los sistemas Linux tienen una variedad de formatos y sintaxis en sus archivos de configuración.

Haciendo una rápida revisión de los archivos que nos podemos encontrar en la carpeta /etc vemos que tenemos archivos de configuración en formato clave-valor que, a su vez, pueden tener sintaxis clave-igual-valor (como en la sub-carpeta default) o clave-espacio-valor (como en el servicio samba). Pero también hay archivos en formato INI (como la configuración del servicio openssl), o con sintaxis de llaves (como en el /etc/named.conf o el /etc/logrotate), o contextos semejante a xml (como en el servicio apache), o directamente XML.

Y las diferencias entre archivos de configuración no terminan allí: tenemos valor-dos_puntos-lista en el /etc/aliases,

O sintaxis totalmente propias como el /etc/crontab /etc/fstab /etc/hosts y un montón de particularidades más de los archivos de configuración.

! Tenemos que reconocer que son muchas las personalidades propias de cada uno de los archivos con los que hay que lidiar para administrar nuestros sistemas !

Concordarán conmigo en que estaría muy interesante poder tener un único formato para todos ellos. Un formato que sea fácil de leer y también fácil de “parsear” por nuestros scripts.

Y eso es lo que precisamente hace augeas, nos muestra los archivos estándar de configuración de nuestro sistema en un único formato coherente.

Augeas es una herramienta de edición de archivos de configuración que a partir del formato concreto o nativo de cada archivo, lo transforma en una vista abstracta de árbol de datos.

O sea, que todos los archivos de configuración, mediante augeas, pasan a tener un único formato que podemos manipular mediante ramas y hojas. Podemos hacer consultas, podemos modificar, agregar datos y, en esos casos, Augeas se encargará revertir la transformación al formato propio de la configuración de cada archivo.

Sin duda que tenemos que saber que las palabras o las directivas dentro de los archivos son distintas, esas augeas no las va a unificar. La directiva VirtualHost, dentro de los archivos de Apache seguirá siendo VirtualHost. Pero si, lo que hará augeas es mostrarnos la estructura de los archivos de forma homogénea.

¿Y cómo hace augeas esta magia?

Lo que hace es utilizar un conjunto de programas llamados “lentes” que permiten una visión bidirectional de los archivos de configuración.

En una dirección, cuando los lentes se usan para leer los archivos, los veremos como un árbol de datos, parecido a cómo vemos las carpetas y los archivos del filesystem cuando ejecutamos el comando `find`.

$ augtool print /files/etc/fstab
/files/etc/fstab
/files/etc/fstab/1
/files/etc/fstab/1/spec = "LABEL=cloudimg-rootfs"
/files/etc/fstab/1/file = "/"
/files/etc/fstab/1/vfstype = "ext4"
/files/etc/fstab/1/opt = "defaults"
/files/etc/fstab/1/dump = "0"
/files/etc/fstab/1/passno = "0"

En la otra dirección, cuando los lentes se utilizan para escribir, es posible pasar datos en formato abstracto de árbol y escribirlos en los formatos nativos de configuración. En ese caso, augias respetará las sintaxis, reemplazando cuando es necesario y sin interferir ni desordenar los eventuales comentarios estén en los archivos.

#!/usr/bin/augtool -sf
# Agregar server01.dominio.com al final del /etc/hosts

set /files/etc/hosts/01/ipaddr 192.168.0.1
set /files/etc/hosts/01/canonical server01.dominio.com
set /files/etc/hosts/01/alias[1] server01
set /files/etc/hosts/01/alias[2] app01

O sea: magia!

Es la solución a muchos de los problemas que enfrentamos para mantener nuestras configuraciones.

La instalación de augeas requerirá siempre del paquete de lentes. Estos programas lentes son evolutivos, es decir, que permiten trabajar con un grupo finito y definidos de archivos de configuración, no con cualquiera. Sugiero entrar al sitio de augeas, a la sección lentes, para ver cuáles son los archivos soportados. A medida que los desarrolladores incorporen más y más lentes, augeas se hará cada vez más universal en el manejo de archivos de configuración.

Y si ya coincides conmigo de que augeas es una especie de cosa maravillosa ¿qué necesitamos para instalarlo?

Bueno, ya vimos que los lentes son obligatorios, pero luego dependerá de cómo se usará augeas.

Si vamos a utilizar scripting de bash, debemos instalar la utilidad augtool, que nos permitirá usar augeas por línea de comandos.

Si vamos a programar nuestros script hay toda una serie de bibliotecas para ruby, perl, python, haskell, java, php, lua, node.js, go y otros.

Si vamos a codificar en lenguaje C disponemos del API con la biblioteca augeas.h.

Por eso, las opciones de uso e instalación son variadas.

Obviamente augeas es un gran aliado a la hora de automatizar nuestras configuraciones, ayudándonos a evitar errores y ha hacer ajustes muy específicos dentro se los archivos de configuración.

Augeas es un proyecto de software libre de RedHat que está alojado en GitHub. Se distribuye bajo licencia LGPL por lo cual es posible incorporarlo también en programas privativos.

Espero haberte contagiado del entusiasmo que sentí el día que conocí, instalé y utilicé augeas por primera vez, te invito a probarlo y a seguir los simples tutorial es que se disponen en el sitio web oficial.

Soy Rodolfo Pilas, en twitter me siguen por @pilasguru y les dejo un saludo a todos, confiando en que este podcast les haya aportado para mejorar y, como siempre, espero sus inquietudes y sugerencias comentando en deployando.me