Capítulo 16. Compilando e instalando software libre

Tabla de contenidos
16.1. Introducción
16.1.1. Requisitos
16.1.2. Compilación
16.1.3. La estructura de una distribución
16.2. Descompresión
16.2.1. Archivado tar.gz
16.2.2. Utilización GNU TAR
16.2.3. bzip2
16.2.4. ¡Simplemente hágalo!
16.3. Configuración
16.3.1. autoconf
16.3.2. Imake
16.3.3. Varios scripts del shell
16.3.4. Alternativas
16.4. Compilación
16.4.1. make
16.4.2. Reglas
16.4.3. Go, go, go!
16.4.4. Explicaciones
16.4.5. ¿Qué pasa si... no funciona?
16.5. Instalación
16.5.1. Con make
16.5.2. Problemas
16.6. Soporte
16.6.1. Documentación
16.6.2. Soporte técnico
16.6.3. Como encontrar software libre
16.7. Agradecimientos

Frecuentemente se me pregunta como instalar software libre desde los fuentes. Compilar software uno mismo es relativamente fácil debido a que la mayoría de los pasos a seguir son los mismos sin importar cual es el software a instalar. El propósito de este documento es guiar al principiante paso a paso y explicarle el significado de cada movimiento. Presumimos que el lector tiene un conocimiento mínimo de Unix (del tipo de ls o mkdir por ejemplo).

Esta guía no es más que una guía, no es un manual de referencia. Es por esto que al final se dan varios vínculos para poder responder las preguntas que queden. Probablemente se pueda mejorar esta guía, por lo que recibiremos con agradecimiento cualquier comentario o corrección sobre su contenido.

16.1. Introducción

Lo que hace la diferencia entre el software libre y el software propietario es el acceso al código fuente del software libre.[1]. Eso significa que el software libre se distribuye como archivados de archivos fuente. Esto puede resultarle poco familiar a los principiantes, porque los usuarios de software libre deben compilar ellos mismos los fuentes antes de poder usar el software.

Hay versiones compiladas de la mayoría del software libre existente. El usuario apurado no tiene más que instalar estos binarios pre-compilados. Sin embargo, algún software libre no se distribuye bajo esta forma, o las versiones más recientes todavía no se distribuyen en forma binaria. Más aun, si usa un sistema operativo exótico o una arquitectura exótica, un montón de software no va a estar ya compilado para Ud. Es más, compilar el software uno mismo permite conservar sólo las opciones interesantes o extender las funcionalidades del mismo agregando extensiones para obtener un software que responde perfectamente a sus necesidades.

16.1.1. Requisitos

Para compilar software, necesitará:

  • una computadora con un sistema operativo funcionando,

  • conocimiento general del sistema operativo que Ud. usa,

  • algo de espacio en su disco rígido,

  • un compilador (generalmente para el lenguaje C) y un archivador (tar),

  • algo de comer (en los casos difíciles, puede durar un tiempo largo). Un verdadero hacker come pizza, no tornillos.

  • algo de beber (por las mismas razones). Un verdadero hacker bebe cola con gas - por la cafeína.

  • el número de teléfono de su "gurú" tecnológico, ese que recompila el núcleo todas las semanas,

  • pero por sobre todo, paciencia, ¡y mucha!.

Compilar desde el código fuente generalmente no presenta muchos problemas, pero si Ud. no está acostumbrado, el menor tropiezo lo puede poner en una posición dificultosa o puede hacer que desista. El propósito de este documento es precisamente mostrarle como escapar de tal situación.

16.1.2. Compilación

16.1.2.1. Los principios

Para poder traducir un código fuente a un archivo binario, es necesario efectuar una compilación. Esta se hace generalmente sobre programas escritos en lenguaje C o C++ (que son los lenguajes más usados en la comunidad de software libre, notablemente en el mundo Unix). Ciertos software libres están escritos en lenguajes que no necesitan compilación (por ejemplo Perl o el shell), pero aún así, estos necesitan algo de configuración.

Lógicamente, la compilación C está hecha por un compilador C que por lo general es gcc, el compilador libre escrito por el proyecto GNU. La compilación de todo un paquete de software es una tarea compleja, que pasa por la compilación satisfactoria de archivos fuente diferentes (para el programador es más fácil poner las diferentes partes de su trabajo en archivos separados, por varios motivos). Para hacer más fácil esta tarea, estas operaciones repetitivas son efectuadas por un utilitario denominado make.

16.1.2.2. Las cuatro fases de la compilación

Para comprender bien como funciona la compilación (y por lo tanto, poder resolver posibles problemas), uno tiene que conocer sus cuatro fases. Su objetivo es convertir poco a poco un texto escrito en un lenguaje comprensible por un ser humano entrenado (por ejemplo, el lenguaje C), a un lenguaje comprensible por una máquina (o por un ser humano muy entrenado, aunque sólo en casos raros). gcc ejecuta cuatro programas uno tras otro, cada uno de los cuales se encarga de una etapa:

  1. cpp: la primera etapa consiste en reemplazar las directivas (pre-procesadores) por instrucciones C puras. Típicamente, esto significa insertar un archivo de encabezado o header (#include), o definir una función macro (#define). Al final de esta fase, se genera código C puro.

  2. cc1: esta fase consiste en convertir el C en lenguaje ensamblador. El código generado depende de la arquitectura de destino.

  3. as: esta fase consiste en generar el código objeto (o código binario) a partir del lenguaje ensamblador. Al final de esta fase, se generará un archivo con extensión .o.

  4. ld: la última fase (la "edición de vínculos", en inglés linkage) ensambla (o vincula) todos los archivos objeto (.o) y las bibliotecas asociadas, y produce un archivo ejecutable.

16.1.3. La estructura de una distribución

Una distribución de software libre correctamente estructurado siempre tiene la misma organización:

  • Un archivo denominado INSTALL, que describe el proceso de instalación.

  • Un archivo denominado README, que contiene información general relacionada con el programa (descripción breve, autor, la URL desde donde se puede bajar, documentación relacionada, vínculos útiles, etc). Si falta el archivo INSTALL, generalmente el archivo README contiene una descripción breve del procedimiento de instalación.

  • Un archivo denominado COPYING, que contiene la licencia o describe las condiciones de distribución del software. A veces lo reemplaza un archivo denominado LICENCE.

  • Un archivo denominado CONTRIB o CREDITS que contiene una lista de las personas relacionadas con el software (participación activa, comentarios pertinentes, programas de terceros, etc.).

  • Un archivo denominado CHANGES (o, con menor frecuencia, NEWS, que contiene las mejoras y las correcciones de los bugs (errores en el software).

  • Un archivo denominado Makefile (ver la sección make), que permite compilar el software (es un archivo que necesita make). Generalmente este archivo no existe al principio y se genera durante el proceso de configuración.

  • Bastante seguido, un archivo configure o Imakefile, que permitirá generar un archivo Makefile nuevo.

  • Un directorio que contendrá los fuentes, y donde generalmente se almacena el archivo binario al final de la compilación. Por lo general, este directorio se denomina src,

  • Un directorio que contiene la documentación relacionada con el programa (generalmente en formato man o en formato Texinfo), cuyo nombre es, por lo general, doc,

  • Eventualmente, un directorio que contiene los datos propios del programa (típicamente, los archivos de configuración, los ejemplos de los datos producidos, o archivos de recursos).

Notas

[1]

En realidad esto no es cierto, porque algunos software propietarios también ofrecen su código fuente. Pero, al contrario de lo que ocurre con el software libre, el usuario final no puede usar el código fuente de la manera que él desee.


Tux sobre Estrella por MandrakeSoft Linux es una marca registrada de Linus Torvalds. Todas las otras marcas registradas y copyrights son la propiedad de sus respectivos dueños.
A menos que se diga lo contrario, todo el contenido de estas páginas y todas las imágenes tienen Copyright de MandrakeSoft S.A. y de MandrakeSoft Inc. 2000.
http://www.linux-mandrake.com/