Autotools Report - csrg

Transcripción

Autotools Report - csrg
Autotools Report
Marcelo Zúñiga Lorenzetti
[email protected]
September, 2007
1
What is Autotools?
Autotools es un conjunto de herramientas GNU diseñados para hacer del
código fuente de una aplicación portable entre sistemas tipo Unix.
Muchas de las aplicaciones open source de hoy en dı́a utilizan estas herramientas en su desarrollo dada su alta confiabilidad de portabilidad, simpleza en su configuración e intuitiva instalación.
1.1
Main tools of the autotools
Las principales herramientas que provee las autotools son autoconf, automake y libtool.
Autoconf es una herramienta para la autocofiguración de nuestro paquete
de software. es capaz de descriminar, según el tipo de sistema que se este
utilizando, que tipo de header o libreria utilizar e incluso en que ruta puede
ser localizado este archivo. Es la principal herramienta que da portabilidad
a nuestro código, ya que el desarrollador puede especificar donde buscar los
archivos necesarios para su compilación o dejar abierta la posibilidad de que
el usuario final de la aplicación pueda indicar donde buscar estos archivos
para tenerlos encuenta en el proceso de compilación.
Automake es una herramienta para generar de forma automática los
archivos Makefiles necesarios para la compilación de la aplicación y generar
las reglas estándares para la posterior instalación o desintalación del producto.
Libtool ayuda a la creación de librerias estáticas y dinámicas independientemente del tipo de sistema Unix en el cual se desea instalar la aplicación.
1
1.2
Closer look of Autotools
La utilización de estas herramientas pueden parecer un proceso complejo,
pero en realidad es muy sencillo cuando se sabe que se esta haciendo.
La implementación de autotools en una aplicación tiene un proceso lógico
sencillo que si es seguido paso a paso se deberı́a esperar resultados satisfactorios. El objetivo final de cada uno de estos pasos es conseguir un script
llamado configure el cual va a realizar todas las comprobaciones previas a
la compilación de la aplicación y terminar de generar los archivos para la
compilación e instalación de la aplicación.
Lo primero que es construido es una plantilla para nuestra aplicación,
es decir un archivo denominado configure.ac. Este archivo es el principal
de todas las plantillas y que va a ser utilizado por varias herramientas en
el primer proceso para conseguir el script final. Este archivo contiene una
serie reglas para automake y autoconf, y comprobaciones para el momento de
configuración que son posteriormente revisadas por tres herramientas, siendo
la primera de ellas aclocal el cual genera un archivo con todas las reglas
para automake encontradas, este archivo es aclocal.m4 que posteriormente
será utilizado por autoconf. La segunda herramienta es autoheader el cual
crea una plantilla con una seguidilla de directivas #define que pueden ser
utilizadas desde archivos fuentes para programas para C o C++. este archivo
comunmente es denominado config.h.in. La tercera herramienta y final que
procesa esta plantilla es autoconf el cual procesa el archivo plantilla y luego
el archivo aclocal.m4 generando finalmente el script configure. Automake
por su lado genera una plantilla llamada Makefile.in a partir del archivo
Makefile.am el cual es un archivo muy sencillo en el que se indica que se
va a construir y cuales son las fuentes para ello y automake se encarga de
definir cada una de reglas para la compilación e instalación entre otras, en
la plantilla Makefile.in.
En el proceso de la instalación de la aplicación el usuario final debera
ejecutar el script configure el cual realizará las comprobaciones de dependencias y terminará de generar el o los archivos Makefiles y el archivo config.h
(si es necesario) para la posterior compilación e instalación de la aplicación.
Como se ve no es un proceso muy complicado y la unica intervención
humana en este proceso es la generaración de dos plantillas configure.ac y
los Makefile.am.
Como último comentario acerca del funcionamiento de las autotools,
en el proceso final, es decir, cuando la aplicación va a ser instalada por el
usuario final no es necesario que este tenga en su sistema instalado automake
o autoconf ya que estas ya fueron utilizadas en el proceso de desarrollo,
2
pero la única herramienta que si debe estar presente es libtool ya que esta
herramienta es utilizada en el proceso postcompilación del codigo fuente de
la aplicación para la creación de las librerias ya sean estáticas o dinámicas,
y por este motivo debe ser comprobada su existencia en el script configure.
2
Why Autotools in ACS?
El sistema de construcción actual de ALMA Common Software es un proceso
complejo, incluso para personas con ciertos conocimientos en programación.
Es por eso que necesita ser revisado y reconstruido este sistema para que
pueda ser un proceso sencillo, intuitivo y lo que sea independiente del sistema
Unix en el cual quiera ser instalado. Autotool proporciona las herramientas
para cubrir estos requisitos.
2.1
ACS build system
Como se mencionó el sistema de construcción de ACS es un proceso complejo, porque debe tener una previa configuración de variables de entorno y
solucionar posibles requisitos o dependencias de forma manual, es decir, en
tiempo de compilación, pero esto es solo lo previo a su construcción, ya que
una vez resuelto todos los pasos previos, su compilación es bastante larga y
poco amigable, ya que no te deja opciones de que es lo que uno desea instalar, sino al contrario el sistema de construcción instala toda la distribución
de ACS tanto herramientas para su ejecución, programas que provee, como
tambien, herramientas para el desarrollo de nuevas aplicaciones basadas en
ACS, independientemente si serán ocupadas todas sus capacidades o no.
Esto último puede ser molesto para personas que cuentan con maquinas
con recursos limitados, ya que no podrán ejecutar algun programa de ACS,
aunque esta aplicación pueda ser perfectamente soportado por la máquina e
incluso, este sistema como bloque, genera la necesidad de tener una máquina
con grandes cantidades de recursos, solo para realizar una pequeña tarea,
cada cierto periodo de tiempo, lo que es totalmente ineficiente.
Con respecto a la portabilidad de este sistema, no es portable, es dependiente de muchas herramientas que actualmente no proveen todas las distribuciones tipo Unix, solo es soportado por las distribuciones Linux en las
cuales a sido desarrollado, y que son versiones Linux que utilizan versiones
de herramientas inferirores a las herramientas distribuidas actualmente en
cualquier sistema tipo Unix.
3
2.2
The big Makefile
Uno de los archivos más conflictivos de la distribución de ACS es el enorme
Makefile que contiene. Este gran Makefile es genrado a partir de varias plantillas, siendo la mas conocida entre los amantes de ACS el acsMakefile. Este
archivo contiene una serie de reglas para construir ACS en su totalidad, es
asistido por varias plantillas que este incluye a medida que son necesarias
y dependiente del compilador que se necesita usar en un determinado momento. Las más famosas son: idlMakefile el cual incluye las reglas para
la compilación de idls, pythonMakefile encargada de los scripts python y
javaMakefile el cual incluye reglas para la compilación de los archivos Java.
Además de estas plantillas, cada módulo de ACS incluye se propio Makefile
el cual es conciderado por el big Makefile para saber que hacer con este
módulo.
Este sistema de makefiles puede ser muy llamativo, pero sin duda su
construcción debe haber sido un proceso largo y de arduo trabajo, y modificarlo para adecuarlo a nuevas necesidas puede llegar a ser un trabajo tedioso,
¿Cómo podemos modificar este sistema para que puedan ser instaladas solo
las herramientas que necesitamos?, es muy difı́cil responder a esta pregunta
si queremos reutilizar el mismo sistema de construcción.
2.3
The new build system
Muchas de las deficienciencias mencionadas, pueden ser cubiertas por la implementación de autotool en ACS. Como se mencionó al comenzar este informe Autotool permite una mayor portabilidad para nuestras aplicaciones,
y posee una interfaz simple de configuración antes de su compilación e instalación lo cual nos permite tener un mayor control de lo que realmente
queremos instalar y que nos falta para poder realizarlo.
2.3.1
Breaking the brick
Una de las principales ventajas de la implementación de autotool en ACS,
es que nos permite romper el actual ladrillo de construcción, para crear
paquetes de software afines a partir de ACS, es decir, podemos hacer que
solo se instalen las herramientas necesarias para una tarea en particular.
Con esta solución podemos comenzar a pensar en pequeñas distribuciones de
ACS para máquinas dedicadas a una sola tarea y que posee escasos recursos,
abaratando costos de maquinaria y desempeño de las aplicaciones.
4
2.3.2
Portable ACS
No solo vamos a poder dividir ACS en paquetes de software, sino que tambien
podemos mejorar su portabilidad en distintos sistemas tipo Unix, con su capacidad de autoconfiguración podremos instalar ACS en cualquier máquina,
independientemente de la ubicación de las aplicaciones necesarias y si es
necesario instalar alguna herramienta previamente a su compilación, este
sistema nos avisará de forma oportuna. También para el proceso de compilación los archivos Makefiles serán generados según en la arquitectura que se
este intentando instalar ACS o módulos de este, y su instalación se realizará
limpiamente en las rutas estándares del sistema sin tener que definir enlaces
o scripts para ejecutar las aplicaciones que provee e incluso si se desea otra
ubicación para la aplicación tambien será soportado.
2.3.3
Future applications
Además de tener muchas ventajas con respecto a la construcción de ACS,
también es posible que a partir de una distribución de ACS con autotools
crear distintos tipos de distribuciones de ACS, es decir, podemos generar
paquetes RPM para sistemas basados en Red Hat o paquetes Deb para
sistemas Debian, e incluso podemos distribuir para estos sistemas paquetes
de código fuentes o ya precompilados o binarios, para esos sistemas de forma
muy sencilla. También se puede obtener solo los paquetes necesarios para
sistemas embebidos que utilicen un sistema operativo tipo Unix.
3
Final Words
Como se puede apreciar al leer este documento, la implentación de autotools en ACS parece ser una idea poco descabellada, ya que son muchos los
beneficios que este proceso conlleva. Algunos de los usuarios de ACS han
demostrado temor al pasar de una versión a otra, ya que por su bajo manejo
con las herramientas de software temen volver a pasar por el complejo trabajo de configuración y construcción, se espera que una vez que el sistema
sea reconstruido, este temor desaparesca, para que puedan beneficiarse de
las nuevas ventajas y potenciabilidades que los desarrolladores de ACS crean
para facilitar el trabajo a los usuarios de ALMA Common Software.
5

Documentos relacionados