Compilar e instalar paquetes en Ubuntu desde el código fuente

Sobre compilaciones de en escribo constantemente por aca o por SWL-X, pero hoy quiero dar algunos detalles o trucos prácticos y útiles que les harán más fácil la compilación de paquetes fuentes y su posterior manejo (instalación/desinstalación) en Ubuntu (aunque esto puede ser extrapolable a cualquier distro descendiente de Debian). Si bien la mayoría de los usuarios de estas distros prefiere centrarse en los paquetes disponibles en repositorios, hoy veremos que también podemos gestionar nuestros paquetes desde las fuentes e instalarlos y dejarlos disponibles vía dpkg para una fácil desinstalación o actualización.

Centraré mis explicaciones en Ubuntu porque es la distribución que utilizo, pero estos pasos deberían servir para cualquier distribución derivada de Debian. También me centraré en paquetes fuentes que usan la vía inicial del ./configure pero aclaro que no siempre es así.

Preparando lo necesario para desde las fuentes

Ubuntu no trae preinstalados los paquetes necesarios para la compilación o construcción de paquetes, pero esto no implica ninguna molestia ya que desde los repositorios oficiales podremos instalar los paquetes build-essential y checkinstall con lo cual podremos compilar e instalar programas desde el código fuente de forma exitosa, y lo más interesante, podremos listarlos vía dpkg ya que veremos en el último paso que se nos generarán los paquetes DEB de lo que hayamos compilado. En fin, en este paso todo se reduce a:

sudo apt-get install build-essential checkinstall

Aunque los que usan repositorios alojados en servidores internos de la Intranet cubana no lo sepan, es justo aclarar que los repositorios de Ubuntu (incluidos los PPA) traen junto a cada paquete DEB (con todas las arquitecturas soportadas) también el código fuente en un tarball listo para ser acomodado a nuestras necesidades. Si tu versionitis es extrema es muy probable que necesites descargar archivos fuentes de proyectos que no cuentan con una versión de lanzamiento oficial directamente desde los servidores que los almacenan, en ese caso las siguientes herramientas te serán útiles (obviamente, si eres un cubano sin acceso a Internet desde tu ordenador, mejor ignora este paso):

sudo apt-get install cvs subversion git-core mercurial

Dicen los que saben que es recomendable tener un directorio especifico para construir todos los paquetes a instalar, sin embargo, puedes utilizar cualquier directorio disponible en tu disco duro.  En caso que desees tener un directorio particular para estos menesteres, Ubuntu recomienda utilizar el directorio /usr/local/src y puedes dejarlo listo mediante la ejecución de los siguientes comandos:

sudo chown $USER /usr/local/src
sudo chmod u+rwx /usr/local/src

Recuerda reemplazar la palabra $USER con tu nombre de usuario. En mi caso personal, por vagancia,  yo siempre lanzo y descomprimo los tarballs con las fuentes en mi escritorio :) (eso sí, al terminar limpio el reguero).

Obteniendo el software que quieres

Normalmente el software descargado en forma de código fuente viene en paquetes llamados tarballs, los cuales no son más que los archivos de la aplicación con todo el código escrito por los desarrolladores comprimidos en formatos .tar.gz , .tar.bz2. Si has descargado un archivo de este tipo, primero muévelo al directorio que has creado en el paso anterior (recuerda que los vagos como yo hacemos el trabajo en cualquier carpeta) y desempaquétalo haciendo clic derecho sobre el archivo y eligiendo la opción “Extraer aquí” desde tu administrador de archivos o bien ejecutando alguno de los siguientes comandos.

Para archivos .gz

tar -xzvf nombredeltarball.tar.gz

Para archivos .bz2

tar -xjvf nombredeltarball.tar.bz2

Al desempaquetar los archivos descargados, generalmente se creará un nuevo directorio con el nombre y la versión de la aplicación que deseamos instalar, podemos entonces ubicarnos en este directorio para comenzar con el proceso de construcción del paquete. En muchos casos los desarrolladores incluyen una lista de procedimientos a realizar para instalar programas desde el código fuente de forma exitosa contenidos en el archivo README, INSTALL o algún otro archivo de texto plano, así que es altamente recomendable que leas este archivo antes de comenzar con la construcción, pues los procedimientos pueden variar con cada aplicación, no seas autosuficiente ni altanero:

… si hay algo que leer, léelo …

La mayoría de las aplicaciones que usamos cotidianamente tienen sus proyectos alojados en Sourceforge o Github y desde ahí podemos descargar las fuentes en forma de tarballs. Otra opción para conseguir tarballs de fuentes bastante actualizados es desde los repositorios de distribuciones Rolling Release (recuerden que les aclaré que los repositorios oficiales siempre incluyen las fuentes, los alojados en Cuba, para ahorrar espacio y suplir una que otra carencia, no los incluyen). Pero la manera más efectiva es conocer la Web oficial de la aplicación que necesitas instalar y desde ahí ubicar el paquete con las fuentes y descargarlo.

Si no tienes acceso a Internet, es decir si eres uno de los clásicos cubanos embebidos dentro de la Intranet cubana puedes descargar fuentes de aplicaciones medianamente actualizadas desde los repositorio de OpenSUSE, siempre entrando a las carpetas nombradas src dentro de la rama Packman. Cuando me quedo sin acceso a Internet, me nutro mucho de esa vía usando los repositorios de Joven Club (que por alguna razón desde Junio no actualizan Packman) o desde los Repositorios del MES.

Resolviendo el lío de las jodidas dependencias

Esta es la parte que más asusta y desespera a los novatos, principalmente a aquellos que se volaron el paso de buscar si en algún archivo de texto plano nos avisaban de las dependencias. Un problema común cuando de instalar programas desde el código fuente se trata es que no contamos con todas las dependencias necesarias para construir los paquetes de la aplicación que queremos instalar, podemos darnos cuenta de esto al momento de ejecutar el comando ./configure dentro del directorio de la aplicación o programa que hemos descargado.

Para hacernos la vida un poco más sencilla al momento de instalar programas desde el código fuente en Ubuntu contamos con una aplicación llamada apt-file, aplicación que nos permite conocer cuales son los paquetes que contienen los archivos o dependencias necesarias para construir correctamente el paquete e instalar programas desde el código fuente sin inconvenientes.

Para usar apt-file primero debemos instalarlo y actualizar su base de datos mediante la ejecución del siguiente comando:

sudo apt-get install apt-file && sudo apt-file update

Para que funcione apt-file debes estar usando repositorios completos que cuenten con los ficheros Contents-#arch.gz. Como en mi ordenador de casa a lo único que estoy conectado es a la electricidad y los repositorios que uso son réplicas que copio (donde me hagan el favor) de los repositorios de JCCE, es obvio pensar que no uso apt-file para saber las dependencias, sino que las busco en las recomendaciones de los desarrolladores y de no estar incluidas estas, lo voy dilucidando de lo que me va devolviendo el ./configure (o el cmake .. cuando compilo por esta vía) y así resuelvo sin problemas. Pero si puedes usar apt-file vas a gastar menos tiempo.

Por esta causa no puedo usar apt-file

Por esta causa no puedo usar apt-file

Ten en cuenta que la actualización de la base de datos no devuelve ningún tipo de texto en la terminal, así que no canceles el proceso pensando que esta bloqueado o que no funcionó.

Si ya tenemos apt-file instalado, vamos a continuar con el proceso de construcción mediante la ejecución del siguiente comando estando ubicados dentro del directorio principal de la aplicación descargada:

./configure

Este comando ejecutará la verificación del sistema para garantizar la correcta instalación de la aplicación en cuestión y nos informará si existe algún archivo o dependencia no cumplida para la correcta construcción del paquete.

En caso de que esto ocurra, haremos uso de la aplicación apt-file de la siguiente manera para encontrar el paquete que nos hace falta para la correcta construcción de la aplicación:

apt-file search nombredelpaquete.extensión

Este comando nos permitirá conocer cual es el paquete que necesitamos para luego instalarlo por medio de apt-get install (o apt install para versiones de apt posteriores a la 1.0) antes de poder comenzar a instalar programas desde el código fuente.

sudo apt-get install paqueterequerido

Después de instalar las dependencias, ejecutamos nuevamente el comando ./configure para verificar si todo está bien o aún faltan dependencias. Es importante que comprendas que el comando ./configure configurará la aplicación con los valores predeterminados que esta trae, sin embargo, la mayoría de aplicaciones ofrecen a sus usuarios la posibilidad de configurar aspectos importantes de la misma a través de este comando. Para conocer más acerca de las opciones de configuración que ofrece la aplicación, lee cuidadosamente el archivo README o INSTALL que se encuentra en el directorio principal de la aplicación descargada, o mejor ejecuta ./configure --help para que veas todos los parámetros que puedes configurar antes de comenzar a compilar.

No seas vago y verifica todos los parámetros a configurar y define como quedaría la receta a tu gusto

No seas vago y verifica todos los parámetros a configurar y define como quedaría la receta a tu gusto

¡Y se formó la gozadera, make me lo confirmó! Llegó la hora de construir e instalar tu paquete en Ubuntu :D

Tranquilo, ya te fumaste lo más duro del tabaco. Te va quedando solo la ejecución de un par de comandos y esperar un buen rato dependiendo de la aplicación y la potencia de tu CPU para instalar programas en Ubuntu desde el código fuente de forma exitosa.

El primero de estos comando es el archiconocido y poderosísimo make, el cual comenzará con la compilación del código fuente descargado en tu computadora, así que lo único que tienes que ejecutar en la terminal estando ubicado en el directorio principal de la aplicación es el siguiente comando:

make

Debes ser paciente, si bien hay paquetes que se compilan bastante rápido, te invito a que compiles Google Chromium y me digas cuanto te llevó hacerlo.

Después de un buen rato de espera (y desesperación) dependiendo del tamaño de la aplicación o la velocidad de tu cacharro, llegó el momento de instalar tu paquete. Generalmente la people por ahí usa en este punto sudo make install, pero si quieres poder administrarlo vía dpkg, lo mejor es usar:

sudo checkinstall

Repito, la forma tradicional de instalar programas ya compilados en Linux es haciendo uso del comando sudo make install, sin embargo, el comando sudo checkinstall pone la aplicación en el administrador de paquetes, haciendo su manejo y posterior desinstalación mucho más sencilla.

En caso de que tengas problemas de instalación usando sudo checkinstall, ejecuta el siguiente comando en la terminal el cual debería permitir la correcta instalación de los paquetes compilados:

sudo checkinstall --fstrans=0

Ojo mi gente, mucho ojo con checkinstall, antes de instalar el paquete, checkinstall te pide algunos datos para la configuración de del DEB que se construirá e instalará si así lo deseas. En este punto te dejo de tarea el asunto de las dependencias, reemplazos y rupturas de dependencias. Si no estás muy ducho en esto y no quieres tener posteriores problemas al instalar otros paquetes desde repositorios, entonces lo mejor es que uses sudo make install.

Resumiendo

Para compilar paquetes no siempre se pueden generalizar los métodos. Hay paquetes fuentes  que ni siquiera pueden ser configurados por la vía ./configure. Algunos deben ser compilados usando cmake, o qmake (como Vokoscreen por ejemplo) otros incluyen un archivo ./bootstrap o algún archivo en python (como las últimas versiones de MPV), así que solo la práctica y la experiencia en base a pruebas y errores les enseñarán a llevar la versionitis a otro nivel. Eso sí, vuelvo a recomendarte que:

… si hay algo que leer, léelo …

Si quieres aprender un poco más de la comunidad de Ubuntu puedes visitar https://help.ubuntu.com/community/CompilingEasyHowTo

¿Te resultó interesante? Compártelo ...



Maikel Llamaret Heredia

Publicado por Maikel Llamaret Heredia

https://swlx.info » Facebook » Twitter » Google+ » Linkedin » Forma parte de GUTL desde el 6 diciembre, 2011. Parte de la familia GUTL. Usuario de Tecnologías Libres desde hace varios años. Fiel a GNU/Linux y las filosofías del Software Libre y el Código Abierto. Linux User # 587451. Creador y actual mantenedor del Proyecto SWL-X. Freelancer dedicado al Desarrollo / Diseño Web y Marketing Online. Creador de Web & Media Integrated Solutions

Este artículo tiene un comentario

  1. hello: trate de compilar el codigo fuente que dejaste de qmmp 1.0 pero cuando hago «./configure» dentro de la carpeta me dice que no existe el comando, trate de instalarlo desde el repo( de la universidad de la habana) pero no esta, ademas cuando hago make dentro de la carpeta me dice que no hay ningun target. que puedeo hacer

Los comentarios están cerrados.