Instalar desde código fuente

De Wiki de la Comunidad Mandriva

Instalando programas desde su código fuente en Mandriva Linux
Instalar programas construyéndolos desde el código fuente en bruto es el método menos recomendable de instalación en Mandriva Linux, y sólo deberá hacerse si usted no consigue encontrar el programa que necesita en ninguno de los repositorios oficiales o de terceros de Mandriva (para más detalles sobre otros métodos de instalación, consulte ésta página). A veces, sin embargo, es inevitable. Ésta página contiene una descripción del método general para instalar programas en Mandriva Linux compilándolos desde el código fuente.


Contenido

Antes de empezar

Antes de empezar, es mejor entender de forma genérica lo que implica instalar programas desde código fuente, y hacer algunas preparaciones.

Qué ocurrirá

Cuando se instala un programa desde código fuente, usualmente se han de seguir tres pasos. En el primero, un script analizará su sistema, verificando que están instalados todos los programas necesarios para el éxito de la compilación, y a veces para configurar algunas facetas opcionales del proceso de compilación. En el segundo, el código fuente se compila realmente. En el tercero, la aplicación compilada, las librerías y otros ficheros auxiliares serán copiados a los directorios apropiados de su sistema para que todos los usuarios puedan acceder a ellos. En el caso de programas muy simples, el primer paso puede no ser necesario; algunas otras aplicaciones están diseñadas para que usted pueda hacerlas funcionar sin necesidad de ejecutar el tercer paso.

Preparación

Es importante mantener el código fuente disponible aún despues de que usted haya instalado la aplicación con éxito, porque sin ese código será muy difícil desinstalarla. Por lo tanto, seguro que usted querrá mantener sus códigos fuente organizados con claridad. Probablemente es una buena idea crear un directorio llamado source o src en su directorio home , y mantener el código fuente de cualquier aplicación que usted compile guardado en subdirectorios dentro de éste directorio. Tambien necesitará asegurarse de que tiene instaladas algunas aplicaciones básicas, necesarias para cualquier compilación de programas. Instale el paquete gcc, si no está ya instalado. Antes de intentar compilar cualquier aplicación, lea siempre cualquier fichero de documentación incluido en el archivo. Casi siempre hay un fichero llamado INSTALL que contiene instrucciones específicas de instalación e información de la aplicación.

Privilegios: Para los pasos 1 y 2, usted debería trabajar con los privilegios de su propio usuario; el paso 3 (instalación) deberá realizarlo con privilegios de usuario root.

Paso 1

Para la mayoría de aplicaciones, el paso 1 se lleva a cabo ejecutando el comando ./configure en el directorio de más alto nivel del árbol de directorios creado por la extracción del código fuente. Si el proceso de configuración termina con éxito, éste script terminará ya sea sin mensajes de error, ya sea con un resumen de cómo se compilará el programa, qué opciones serán habilitadas y posiblemente dónde será instalado. Programas más maduros y complejos tendrán usualmente varios parámetros opcionales para el comando ./configure que pueden ser usados para habilitar o deshabilitar funcionalidades del programa. Puede usar el comando ./configure --help para obtener un listado de éstos parámetros opcionales y ver si alguno puede serle útil. En la mayoría de los casos, usted no debería usar las opciones --prefix, --sysconfdir o --localstatedir.

Variantes

Como se ha mencionado más arriba, para algunas aplicaciones simples el paso ./configure es omitido. En éste caso, vaya directamente al #Paso 2. En algunos otros casos - usualmente con programas inmaduros o snapshots inestables - necesitará ejecutar otro comando antes que ./configure: ./autogen.sh. Éste crea el script configure y los ficheros que necesita para crear Makefiles (que son los scripts que controlan el proceso real de compilación). Más inusualmente, existen aplicaciones que usan un sistema de compilación completamente diferente del tradicional aquí detallado. En éste caso, casi con certeza estará documentado en un fichero README o INSTALL incluido con el código fuente.

Problemas

No es inusual que éste paso falle, particularmente durante los primeros intentos de instalar algo desde código fuente. El script configure terminará con algún error sugiriendo que un paquete o librería no está instalado. A menudo, se encontrará con que el paquete del que se queja sí que está instalado.

¡Que no cunda el pánico!. Esto se debe a la convención de empaquetado de Mandriva. En Mandriva Linux, las librerías compartidas - colecciones de funciones que están guardadas en directorios comunes y que pueden ser potencialmente usadas por más de una aplicación - se empaquetan por separado de las aplicaciones. Los paquetes de librerías son posteriormente divididos. Algunas librerías son sólo útiles en caso de compilaciones: nunca se usan en la ejecución de los programas. En Mandriva Linux, las librerías necesarias para ejecutar aplicaciones estan contenidas en un paquete, y las librerías necesarias sólo para compilar están en otro paquete. Así que para la típica situación de una aplicación con una librería asociada, Mandriva Linux contendrá usualmente tres paquetes. Si la aplicación se llamase 'ejemplo', éstos tres paquetes se llamarían de forma parecida a ésta:

ejemplo

libejemplo

libejemplo-devel

Puede haber números de versión en uno, en dos o en los tres paquetes, pero usualmente se seguirá éste patrón básico. El paquete 'ejemplo' contiene la aplicación real, los ficheros de configuración, entradas de menú, y datos asociados como sonidos, gráficos, traducciones y así. El paquete 'libejemplo' contiene los ficheros de librería, asociados a la aplicación, que son útiles para el funcionamiento de la aplicación (y cualquier otra que necesite utilizar la misma librería). El paquete 'libejemplo-devel' contiene los ficheros de librerías asociadas a la aplicación que sólo son útiles para compilar aplicaciones que usen la librería.

Si usted está intentando compilar algo desde código fuente, y el script configure estuviese terminando con un error de que 'ejemplo' no está instalado, entonces lo más probable es que el paquete que realmente necesita es 'libejemplo-devel'.

Frecuentemente (más frecuentemente las primeras veces que usted intente compilar algo desde código fuente) habrá varios paquetes -devel necesarios que usted no habrá instalado, así que cuando instale usted uno y vuelva a ordenar configure, éste volverá a fallar, ésta vez quejandose de que falta otro paquete. Persevere e instale todos los paquetes -devel que necesite, llegará un momento en que éste paso será superado con éxito.

Paso 2

Una vez que haya completado con éxito el Paso 1, es el momento de ir al Paso 2. Usualmente ésto se lleva a cabo ejecutando el programa make en el mismo directorio donde se haya ejecutado configure. Con aplicaciones bien escritas, si el script configure se completó con éxito, ésta etapa debería completarse sin problemas. En éste caso el proceso se ejecutará durante un intervalo de tiempo (dependiendo de la complejidad de la aplicación que se compila y de la velocidad de su ordenador, puede tardar desde algunos segundos hasta varias horas) y entonces terminará con un breve mensaje de completado: si no se muestra ningún error, el proceso habrá tenido éxito.

Problemas

Muchas aplicaciones no están perfectamente codificadas, y los autores olvidarán escribir una verificación en el script configure para una librería que es necesaria para la compilación. En éste caso, el proceso de compilación fallará repentinamente y mostrará varios mensajes de error. Para descubrir qué ha ido mal, normalmente usted tendrá que observar el primer mensaje de error. A menudo éste error se quejará de que -lALGO no se encuentra. Ésto significa que una librería de desarrollo requerida no está instalada, tal como se comentó en el Paso 1. Usualmente el nombre ALGO tendrá algún parecido al nombre del paquete necesario, pero algunas veces puede ser difícil averiguar cuál es el paquete. Si no puede llegar a averiguarlo, puede intentar usar Google para buscar el mensaje de error, o puede escribir una petición de ayuda en un foro de ayuda de Mandriva (como el foro Mandriva (en inglés), o Blogdrake, foro oficial de Mandriva para el idioma español) o en el sitio original de la aplicación que está tratando de compilar. Debería tambien revisar los ficheros README e INSTALL que figuran junto al código fuente, puesto que podrían tener una relación de los paquetes necesarios. Instale el paquete relevante, luego vuelva a ejecutar el comando make, que debería continuar más o menos por donde falló. No es necesario volver a empezar con el Paso 1.

Si el proceso de compilación falla con algún otro tipo de error, usted tendrá que pedir ayuda de un experto en el foro de ayuda de Mandriva o en el sitio de la aplicación que intenta instalar.

Variantes

Las variantes de esta etapa del procedimiento son raras, pero ocasionalmente usted necesitará ejecutar el comando make con algunos parámetros extra para compilar partes opcionales de la aplicación, o ejecutar el comando de nuevo en un subdirectorio del árbol del código fuente. Tales variantes deberían estar destacadas en los ficheros README o INSTALL.

Paso 3

Si usted ha completado el Paso 2, puede optar por instalar la aplicación. Esto implica copiar los ficheros compilados a directorios donde estarán disponibles a todos los usuarios, y (si es apropiado) los ficheros compartidos estarán disponibles para otras aplicaciones. Este paso se realiza usualmente ejecutando el comando make install con privilegios de usuario root (para convertirse en root, ejecute el comando su y facilite la contraseña cuando se le pida: recuerde ejecutar exit tras completar make install).

En muchos casos la aplicación se instalará en el directorio /usr/local . El(los) ejecutable(s) se ubicarán en /usr/local/bin ; las librerías, en /usr/local/lib ; los ficheros de configuración se copiarán en /usr/local/etc y otros ficheros de datos se copiarán en /usr/local/share . Ésta es una valiosa convención: Mandriva Linux (ni las otras distribuciones) nunca instalará algo en /usr/local ni tocará nada que esté en ese directorio, así que puede confiar en que cualquier fichero que haya en ese directorio es el resultado de algo que usted haya compilado e instalado desde código fuente, o es el resultado de un comando que usted haya ejecutado manualmente. Si usted sigue ésta convención, nada de lo que usted instale desde código fuente se enredará inextricablemente con partes de su sistema que hayan sido instaladas por las herramientas de Mandriva.

Una alternativa a make install es usar checkinstall (necesitará instalar el paquete checkinstall). Esta acción generará automáticamente un paquete .rpm, que podría ser instalado usando rpm -i. Desde ese momento, usted podrá usar el administrador de paquetes para controlar su instalación o desinstalación.

Variantes

Ocasionalmente usted puede encontrarse con una aplicación que intente instalarse de forma predeterminada en los directorios de sistema: ejecutables en /usr/bin , librerías en /usr/lib , ficheros de configuración en /etc , y así. Este es un comportamiento extremadamente malo, dado que las aplicaciones compiladas se mezclarán y confundirán con aplicaciones instaladas por herramientas de Mandriva, y éste comportamiento debe ser considerado un serio error de la aplicación, más aún si para su funcionamiento exije instalarse en directorios de sistema. Este comportamiento debería ser informado como un error a los desarrolladores de la aplicación.

Problemas

Es bastante inusual encontrarse con problemas durante la ejecución de este paso: si los tuviera, necesitará pedir ayuda a expertos. Es más común descubrir que no puede ejecutar la aplicación tras su instalación. Esto es debido a que el entorno predeterminado de Mandriva Linux no tiene en cuenta a las aplicaciones instaladas en el directorio /usr/local .

command not found (comando no encontrado)

Si intentando ejecutar la aplicación con el comando correcto se obtiene un error 'command not found', intente primero ejecutar el comando hash -r, y vuelva a intentarlo. Si ésto no resuelve el problema, puede que el directorio /usr/local/lib no conste en su PATH. PATH es una variable de entorno que tiene una lista de los directorios que contienen ficheros ejecutables. Cualquier ejecutable que esté en un directorio listado en PATH puede ser ejecutado con sólo escribir su nombre. Para añadir /usr/local/bin a su PATH temporalmente, ejecute el comando exportPATH=$PATH:/usr/local/bin. Para asegurarse de que /usr/local/bin se añada a su PATH cada vez que arranque su sistema, edite el fichero ~/.bash_profile . Dentro existe una línea parecida a la siguiente:

PATH=$PATH:$HOME/bin

añada /usr/local/bin al final, como se indica debajo:

PATH=$PATH:$HOME/bin:/usr/local/bin

Si no hay tal línea, añada estas dos:

PATH=$PATH:/usr/local/bin
export PATH

Tras hacer cualquier cambio a PATH, ejecute el comando hash -r.

libraries not found (librerías no encontradas)

Si puede ejecutar la aplicación, per ésta falla y se queja de que no puede encontrar ficheros de librerías, necesitará añadir el directorio /usr/local/lib a la lista de directorios donde el sistema buscará librerías compartidas. Para hacer ésto, edite el fichero /etc/ld.so.conf - necesitará privilegios de usuario root - y añada la siguiente línea al final:

/usr/local/lib

Guarde los cambios y ejecute ldconfig, tambien con privilegios de root. Sólo tendrá que hacer ésto una vez.

problemas de pkgconfig

Hay un problema aún más oscuro con el que puede encontrarse. Algunas aplicaciones - usualmente aplicaciones de GNOME - usan un sistema llamado pkgconfig. Es usado cuando se compilan aplicaciones como una forma estandar de comprobar si las librerías de desarrollo necesarias de otra aplicación están presentes. Si usted instala una aplicación o librería desde código fuente que usa el sistema pkgconfig para darse a conocer a las otras aplicaciones, instalará un fichero llamado nombredelprograma.pc en el directorio /usr/local/lib/pkgconfig . Si intenta construir otra aplicación que dependa de que la primera esté presente, se quejará de que la primera aplicación no existe. Esto se debe a que el directorio /usr/local/lib/pkgconfig no es tomado en consideración por pkgconfig al buscar librerías disponibles. Para resolver este problema temporalmente, ejecute el siguiente comando: export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig. Para resolverlo permanentemente, añada las siguientes dos líneas en el fichero ~/.bash_profile :

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

Desinstalando

Desinstalar un programa que usted ha compilado, e instalado, desde código fuente es habitualmente tan simple como ejecutar el comando make uninstall (con privilegios de usuario root) en el mismo directorio del código fuente en el que ejecutó make install. Muy ocasionalmente, tendrá la mala suerte de encontrarse un programa que implemente make install pero no make uninstall. Este es un comportamiento extremadamente inapropiado y debe ser informado al encargado de mantenimiento del programa como un error con la más alta prioridad posible. En éste caso, la única forma de desinstalar el programa es localizar a mano todos los ficheros que instaló y borrarlos. Como se comentó antes, es muy probable que se encuentre en el árbol /usr/local .

Si usted ha instalado desde el código fuente, ha perdido o borrado el código fuente, y ahora desea desinstalarlo, tiene dos opciones. Puede localizar y borrar a mano los ficheros, de la misma forma que con las aplicaciones que no implementan make uninstall. Sin embargo, hay un truco útil que le sacará del apuro en la mayoría de los casos. Usted puede simplemente volver a descargar la misma versión del código fuente, repetir los pasos 1 y 2 de la misma forma que hizo cuando instaló la aplicación la primera vez, y entonces ejecutar make uninstall con privilegios de root.

Temas avanzados: instalar en directorios de sistema

Ocasionalmente habrá alguna aplicación que no funcionará correctamente a menos que sea instalada en los directorios de sistema - esto es, no puede ser instalada en /usr/local y trabajar correctamente. Esto se hará constar en el fichero INSTALL o README. En éste caso, usted deberá usar algunos parámetros en el script ./configure para indicarle donde instalar los ficheros de la aplicación. En este caso, deberá extremar las precauciones para que la versión de la aplicación no se confunda con la misma aplicación instalada desde un paquete de Mandriva. Si quiere instalar una aplicación desde código fuente de esta forma, primero asegúrese de quitar cualquier versión empaquetada de la aplicación, y no instale ninguna versión empaquetada tras instalar desde el código fuente hasta asegurarse de haber desinstalado completamente la versión compilada. Casi nunca es buena idea instalar de esta manera una versión actualizada de una librería comúnmente usada, porque otros programas podrían dejar de funcionar con esa versión de la librería.

Para hacer que una aplicación se instale en directorios de sistema, use el siguiente comando configure: ./configure --prefix=usr --sysconfdir=/etc --localstatedir=/var.

Temas avanzados: construyendo paquetes RPM

Si se encuentra a sí mismo compilando un montón de programas desde código fuente, podría desear convertirlos en paquetes RPM, en lugar de instalarlos directamente, ya sea por su propia conveniencia en instalarlos, desinstalarlos y hacerles seguimiento, o ya sea para contribuir a los repositorios Mandriva. Si está interesado en ello, consulte la documentación disponible en éste wiki sobre construcción de paquetes RPM. Un buen sitio para empezar es Como construir RPMs.

Herramientas personales
Otros idiomas