En Posts anteriores les he hablado de mi pasión por compilar yo mismo la mayoría de las aplicaciones que utilizo en aras de tener mi sistema operativo Ubuntu lo más actualizado posible (A pesar del rumbo de Canonical, me considero fiel a esta distro, así que si quieren quémenme en la hoguera y échenme al río 🙂 ). Hace unos días @Hyuuga_Neji me invitaba a escribir alguna guía sobre como compilar y crear paquetes deb para Debian y derivados.
Escribir un artículo o guía que enseñe a compilar aplicaciones y crear paquetes deb es algo complicado ya que cada aplicación suele traer sus métodos diferentes; cómo mismo dicen que cada maestro tiene su librito, cada aplicación trae su método de compilación, que aunque en su mayoría suelen seguir secuencias de comandos similares, siempre hay que tomar en cuenta las particularidades. En este pequeño artículo que les dejo hoy tomando como referencia algo escrito por David Gomez en la web emsLinux, no veremos como crear paquetes deb, solo nos detendremos a aclarar pasos generales a la hora de compilar e instalar directamente los paquetes fuentes que nos descarguemos de la web oficial de cada proyecto que necesitemos.
Instalar programas nuevos en Ubuntu es actualmente una de las tareas mas sencillas que podemos llevar a cabo en un sistema operativo GNU/Linux, gracias a herramientas como el Centro de Software de Ubuntu, Synaptic, Muon, Gdebi y otros frontends de APT.
Una historia bien diferente es cuando por algún motivo queremos o necesitamos utilizar el sistema tradicional de instalación de paquetes en Linux que usa las fuentes o código fuente de la aplicación que necesitamos, disponible generalmente en los sitios web oficiales de cada proyecto, ya sea porque no podemos encontrarla en los repositorios oficiales o simplemente porque queremos instalar una versión más reciente o de desarrollo de la aplicación en cuestión.
A continuación aprenderemos en cuatro sencillos pasos cómo instalar programas en Debian y derivados directamente desde el código fuente provisto por los desarrolladores de estos programas.
Preparar el sistema para la construcción de paquetes
Debian y familia generalmente no traen de forma predeterminada los paquetes necesarios para la compilación o construcción de paquetes, por lo que es necesario instalar los paquetes build-essential
y checkinstall
para poder comenzar a instalar programas desde el código fuente de forma exitosa.
Estos paquetes podemos instalarlos directamente desde los repositorios oficiales por medio del siguiente comando:
sudo apt-get install build-essential checkinstall
Probablemente 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:
sudo apt-get install cvs subversion git-core mercurial
Por motivos de organización, es recomendable tener un directorio especifico donde construir todos los paquetes a instalar, sin embargo, puedes utilizar cualquier directorio disponible en tu disco duro.
En caso de querer tener un directorio particular para estos menesteres, Debian y sus múltiples hijos recomiendan 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.
Ya estamos listos entonces para comenzar a descargar los paquetes necesarios e instalar programas en Debian o cualquiera de sus descendientes desde el código fuente.
Conseguir 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 archivos comprimidos en formatos .tar.gz
o .tar.bz2
.
Si has descargado un archivo de este tipo, primero muévelo al directorio que hemos creado en el paso anterior y desempaquétalo haciendo clic derecho sobre el archivo y eligiendo la opción “Extraer aquí” 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.
Normalmente 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
, 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 (¿Recuerdan que al inicio les decía que cada maestro tiene su librito?).
Resolviendo 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 Debian y su prole 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
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 vayas a cancelar 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 antes de poder comenzar a instalar programas desde el código fuente.
sudo apt-get install paqueterequerido
Después de instalar la dependencia, corremos de nuevo el comando ./configure para verificar de nuevo que todo este bien.
Es importante entender 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.
Construir e instalar programas en Debian y distribuciones derivadas (bueno, prácticamente en cualquier distro)
En este punto ya hemos pasado por lo más difícil, ahora solo queda ejecutar un par de comandos y esperar un buen rato dependiendo de la aplicación y tu computadora para instalar programas en nuestro sistema GNU/Linux desde el código fuente de forma exitosa.
El primero de estos comando es 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
Después de un buen rato de espera dependiendo del tamaño de la aplicación o la velocidad de tu computadora, podemos continuar con el siguiente comando, el cual nos permitirá finalmente instalar programas en tu Debian o derivado después de haberlos compilado o construido correctamente:
sudo checkinstall
En caso de que tengas problemas de instalación usando 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
Eso es todo, si los pasos descritos anteriormente han finalizado sin problema alguno, ya puedes ejecutar la aplicación y comenzar a utilizarla.
Consideraciones finales
Desgraciadamente no todas las aplicaciones se compilan por la vía fácil ./configure … make … make install, pero si quieres ir introduciéndote poco a poco en el arte de armar tu propio muñeco GNU/Linux, deberías comenzar por compilar paquetes de este tipo.
Casualmente, mientras termino de escribir este artículo, acabo de compilar una versión actualizada de Unetbootin, herramienta sin la cual me sería imposible probar mis ISOs engendrados en casa sin necesidad de gastar unos cuantos CUC en CDs o DVDs. Nada de ./configure make make install, me tuve que leer el archivo README:
Anímate, compilar no muerde [ Yo sí 🙂 ]
Fuente:
Saludos @Maikel, fuera de tema Ubuntu 12.04.3 TLS fué lanzada ayer … estoy descargando…
bueno, la gente que den un apt-get update y luego apt-get upgrade y listo :), para que descargar el iso??????????????????????
Usted tiene razón, eso lo hago yo también, pero siempre es bueno tener el ISO, para los amigos o futuras instalaciones, así ahorramos tiempo a la hora de instalar es menos paquetes que actualizar.
Saludos, y gracias por tu aporte a la comunidad.
Excelente guía, Maikel, solo añadir que en Debian padre tampoco viene instalado por defecto el kit de compilación (paquetes: make y gcc), ni los headers del kernel, si lo que van a instalar son módulos nuevos (de drivers, por ejemplo). Así que tienen que verificar primero si los trae instalado. Esto solo, repito, es para Debian padre, el resto de las distribuciones que mencionas de ejemplo, sí los trae. 😉
Maikel:
Guía intuitiva y explícita. Así es cómo debe ofrecerse la luz a los que buscan el camino, al menos esa es mi opinión.
Bien por nuestra fémina al hacer la aclaración pertinente y completar el tutorial.
Un saludo cordial.
Además, y con permiso de mi amigo Llamaret, yo recomendaría en la parte que se refiere a la preparación previa del sistema y luego a la resolución de las dependencias, hacer ante todo una actualización del sistema, sobre todo si se quiere instalar una aplicación muy reciente. ¿Por qué? Porque a veces no solo nos faltan las dependencias, sino que a lo mejor las tenemos instaladas pero en una versión más atrasada de la que necesita X aplicación que se va a compilar, así que si no tienes el sistema actualizado, por más que le pidas a «apt-get» (o aptitude/synaptic) instalar tal o más cual dependencia, no va a instalarte la más actualizada. Así que sugiero en primer lugar:
«apt-get update»
y si es posible «apt-get upgrade»,
y luego,
«apt-get install xdependencia»
Chao. 😉
+5 muy cierto esto que dices
Un truco, al instalar con «checkinstall -D» para algunos paquetes puede dar error la primera vez, lo que hago es hacer make install normal y luego checkinstall para crear el paquete, así tengo rekonq 2.2 en Wheezy.
Muy bueno este articulo. Siempre se agradece la publicación de articulos de este corte. Sigue asi Maikito 😉
WTF!!!!
Excelente articulo, quisiera acotar algo:
0- buscar los fichero «readme» o «install» y leerlos detenidamente (generalmente en ellos los desarrolladores hacen una explicación sobre el proceso de compilación e instalación del software).
1- la orden «./configure» solo es posible si el src tiene el script con ese nombre.
2- tener conocimiento del lenguaje en que se desarrollo el software; pues en ocasiones uno de los lenguajes mas comunes «C++» su compilador G++ no está instalado de forma predeterminada como es el caso de Debian.
3- la orden «make install» solo es posible si el fichero «makefile» tiene esa regla, pueden abrir el makefile con el editor que más les guste y verificar si está o no esta opción, incluso pueden crearla si es necesario, al igual que la orden «make uninstall».
4- una vez creado el vinario (proceso de compilación) una alternativa para optener sus dependencias es la orden «ldd ruta_al_fichero_ejecutable/fichero_ejecutable».
5- no está de más verificar que los script que acompañan el src tengan permiso de ejecución.
Off Topic:
Crear USB-Live sin necesidad de utilizar Unetbooting a partir de ISOS de GNU/Linux que utilicen «isolinux»:
0- instalar el paquete syslinux.
ej: «apt-get install syslinux»
1- extraer el iso en la raíz del USB.
2- copiar y renombrar el fichero isolinux.cfg a la raiz del USB.
ej : «cp /media/USB/isolinux/isolinux.cfg /media/USB/syslinux.cfg»
3- ejecutar desde un emulador de terminal la siguiente orden:
syslinux –install /dev/dispositivo_usb
4- reiniciar el pc y probar el USB-Live.
Nota:
Para Debian editar el fichero «syslinux.cfg» cambiar la linea «include menu.cfg» por «include /isolinux/menu.cfg»
Saludos.