Grupo Linuxero del Bajío

Automatizar la instalación de sistemas con GAR

Víctor Manuel Jáquez Leal

Llega un momento en nuestra vida como fanáticos de la computación, donde nos damos cuenta que ninguna distribución GNU/Linux traerá lo que queremos, de la manera como lo queremos: No traerá el servicio de correo de nuestros sueños, no instalará el Gnome con el que hemos fantaseado, no será el Linux embebido que quepa en nuestro PDA.

Pero sabemos que eso no puede detenernos, ya que no dependemos ni de RedHat, ni de Debian, ni de la chiquillada, simplemente por la razón de que tenemos los fuentes y con eso basta. Nada ni nadie puede limitar nuestra capacidad de reinventar, modificar, mejorar. Podemos sentarnos frente a nuestro monitor y seguir la rutina de leer/bajar/satisfacer-dependencias/parchar/compilar/instalar/probar hasta que finalmente todo el heterogéneo software que ofrece la red embone de acuerdo a nuestras expectativas.

Una vez que avanzamos en nuestra empresa, nos percatamos de que queremos repetir el mismo proceso en otras computadoras, para otras otras personas y ser capaces de hacer mejoras y ajustes con respecto obtenemos experiencia. Obviamente para lograr esto necesitamos de herramientas que nos ayuden a automatizar la construcción de nuestros sueños. Sólo los tontos y los huevones hacen los mismo una y otra vez.

Desde 1994 el proyecto FreeBSD presentó su sistema de Ports, el cual, visto de una manera simplista, es una colección de archivos diseñados para automatizar el proceso de compilar e instalar una aplicación a partir de su código fuente. Posteriormente otras otras distribuciones de BSD y Linux (como mi muy querida Gentoo) se han inspirado con esta manera de manejar los paquetes de software.

La utilización del sistema de ports se reduce a buscar el paquete requerido en el árbol de directorios que almacenan a los ports, compilar e instalar:

cd /ports_dir/category/packagemake install

Este proceso original de FreeBSD se basa en la utilización de pmake, el cual es una versión de la utilería make que viene en los BSD. La utilería make es un programa que lee archivos llamados Makefile, los cuales describen las relaciones entre los archivos fuentes para convertirlos en archivos objetos, ejecutables, etc. Podemos imaginar al make como un lenguaje diseñado para automatizar la compilación de software, que además ofrece muchas facilidades para expresar reglas de construcción y dependencias.

La distribución de software por medio de un árbol de ports tienes un importante número de ventajas sobre la distribución de paquetes precompilados:

En 1998, Nick Moffit, pensó que era buena idea tener un sistema de ports que utilizara el make de la GNU e implementarlo en su proyecto: el LNX-BBC, que es una mini distribución GNU basada en Linux, lo suficientemente pequeña para caber en un CDROM cortado, impreso o moldeado al tamaño y forma de una tarjeta de presentación. Y a este sistema lo bautizó como GAR.

La arquitectura del GAR es similar a los ports BSD: un grupo de directorios que contienen archivos Makefile y otros archivos de registro, como listas checksum y manifiestos de instalación.

Esta forma de distribuir software esta haciendo eco en la comunidad linuxera, y GAR esta tomando su lugar como herramienta para hacer esto, ya que funciona bajo cualquier distribución GNU/Linux y su implementación es muy limpia y sencilla. Muestra de esto es la aparición de GARNOME, una distribuición de Gnome, que contiene el último chillido del código gnomero .

Cada paquete que se instala a través de GAR pasa una serie de etapas secuenciales intalterables:

Algunas de ellas pueden no estar definidas y no hacer nada por defecto, pero aún así GAR las invocará.

A continuación un ejemplo de un archivo Makefile que utiliza a GAR para compilar e instalar el qmail-conf:

# $Id: Makefile,v 1.1 2003/01/10 04:33:05 ceyusa Exp $GARNAME = qmail-confGARVERSION = 0.60CATEGORIES = sysutilsMASTER_SITES = http://www.din.or.jp/~ushijima/qmail-conf/DISTFILES = $(DISTNAME).tar.gzDESCRIPTION = qmail-confdefine BLURBqmail-conf is a collection of tools for setting up various qmail services.endefDEPENDS = net/djbdnsMANTAINER = Víctor Manuel Jáquez Leal -ceyusa@coral.com.mxCONFIGURE_SCRIPTS = $(WORKSRC)/Makefile.iniBUILD_SCRIPTS = $(WORKSRC)/MakefileINSTALL_SCRIPTS = $(WORKSRC)/MakefileBUILD_ARGS = itINSTALL_ARGS = setup checkinclude ../../gar.mkpre-configure:        @echo "${CC} ${CFLAGS}" > ${WORKSRC}/conf-cc        @echo "${CC} ${LDFLAGS}" > ${WORKSRC}/conf-ldconfigure-$(WORKSRC)/Makefile.ini:        make -C $(WORKSRC) -f Makefile.ini djbdns=../../../../net/djbdns/work/djbdns-1.05

La variable GARNAME almacena el nombre del paquete a procesar; GARVERSION, la versión; CATEGORIES, la categoría a la que pertenece; MASTER_SITES, la URL de donde descargará el paquete; DISTFILES el nombre del archivo a bajar del MASTER_SITES; DESCRIPTION es una línea con la descripción del paquete, y el BLURB una descripción más completa. En DEPENDS se asignan los paquetes que deben compilarse previamente a la compilación del actual paquete.

CONFIGURE_SCRIPTS, BUILD_SCRIPTS e INSTALL_SCRIPTS designan los scripts que se encargan de realizar dichos pasos; CONFIGURE_ARGS, BUILD_ARGS e INSTALL_ARGS son los argumentos que se les pasarán a los scripts mencionados.

Conclusión:

GAR Rulez!

Y creo que veremos que muchos integradores de software desarrollarán y distribuirán sus soluciones GNU/Linux personalizadas utilizando GAR; el sector de software embebido verá con buenos ojos esta tendencia y el mundo será un mejor lugar para vivir si todos tenemos acceso al código fuente.

Y también creo que, si bien las distribuciones GNU/Linux basadas en binarios no están perdiendo su segmento de mercado, hay una explosión en la utilización de distribuciones que siguen el camino de los BSD y por ende hay más BSDeros en este planeta al que llamamos Tierra.