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