jueves, 8 de octubre de 2020

Como compilar e instalar un programa desde el código fuente en Ubuntu


Hola amigos del software libre.

En este artículo os voy a mostrar cual es la metodología para poder instalar un programa desde las fuentes, es decir compilarlo e instalarlo partiendo del código fuente del mismo.

Aunque una de las muchas ventajas del Sistema Operativo GNU/Linux y por ende de sus distribuciones es el administrador de paquetes ("apt" en Ubuntu) y el repositorio de software asociado a la misma. Ya que con dichos administradores de paquetes tienes todas las herramientas y recursos necesarios para descargar e instalar software en tu computadora de forma automatizada y sin complicaciones.

A pesar de ello, los mantenedores de paquetes no pueden manejar todas y cada una de las diferentes versiones de software disponible, ni empaquetarlos. Por lo tanto, todavía hay situaciones en las que tendrás que compilar e instalar software tu mismo.

Hay varias razones por la que se tiene que compilar algún software, ya sea porque no se encuentra en los repositorios, o cuando se necesita ejecutar una versión muy específica, muy nueva o una versión anterior que se quiera testear, ni el desarrollador os la ofrece empaquetada mediante paquetes ".deb", por poner un ejemplo.

Para la gran mayoría de usuarios no experimentados de Linux, compilar e instalar software a partir del código fuente por primera vez puede ser engorroso o trágico, pero el lobo no es tan feroz como lo pintan.

Así que para mostraros los por menores del proceso, que mejor que compilar e instalar un programa desde las fuentes.

Para ello he elegido instalar desde las fuentes el IDE geany. En este caso dicho programa está empaquetado en su última versión y disponible en los repositorios de Ubuntu, que es la distro que usaré para este ejemplo, en concreto Ubuntu 20.04.

Así que vamos a empezar.

1.- Descargar el código fuente.

Para obtener el código fuente del programa Geany, hay dos opciones:

1.A.-  Desde su web oficial:


En este caso nos descargaremos el archivo comprimido "geany-1.36.tar.gz" o bien el archivo comprimido "geany-1.36.tar.bz2", son dos archivos comprimidos donde el .tar.bz2 tiene mejor compresión por tanto ocupará menos.
Elegid el que queráis descargaros, yo en particular he decidido descargarme el "geany-1.36.tar.gz".

Una vez descargado por defecto se almacena en nuestro directorio "/home/$USER/Descargas/"

Podemos visualizarlo con nuestro explorador de archivos llamado Nautilus:


Y podemos irnos al apartado 2.

1.B.- O desde GitHub.



Con la salvedad que desde GitHub podremos descargarnos el código fuente de versiones anteriores. Si queremos descargarnos el proyecto desde la rama principal y por tanto en su última versión, daremos click sobre el botón verde con la etiqueta de "Code" y al desplegarse el menú pulsaremos en "Download ZIP". Y empezará la descarga del archivo "geany-master.zip".

Una vez descargado por defecto se almacena en nuestro directorio "/home/$USER/Descargas/"

Podemos visualizarlo con nuestro explorador de archivos llamado Nautilus:


Y seguimos en el apartado 2.

2.- Extraer los archivos comprimidos del archivo contenedor.

Ahora es el momento de descomprimir los archivos que contiene. Podemos hacerlo mediante el terminal de comandos o mediante la aplicación GUI llamada "Gestor de archivadores".

2.A.- Mediante la aplicación "Gestor de Archivadores"

Ya sea que nos hayamos descargado el archivo comprimido en ZIP desde GitHub, como uno de los dos archivos comprimidos TAR desde la web oficial, podemos extraer los archivos contenidos con la citada aplicación.
Dando doble click encima del archivo comprimido, ya sea el ZIP como el TAR, se nos abrirá la aplicación mostrándonos la carpeta que hay en su interior. Como se aprecia en las siguientes imágenes:





Pulsando sobre el botón "Extraer", le diremos en que directorio queremos extraer la carpeta. Yo personalmente he extraído el contenido del archivo "geany-1.36.tar.gz" en la carpeta principal del usuario.


Si habéis hecho la operativa con el archivo "geany-master.zip", exactamente igual.


Ya podemos irnos al apartado 3.

2.B.- Mediante el emulador de terminal:

Abrimos nuestro emulador de terminal desde el explorador de archivos "Nautilus", pulsando el botón derecho del mouse sobre una zona sin archivos, y cuando aparezca el menú pulsamos en la opción "Abrir en una terminal".




Una vez tenemos abierto el emulador de terminal en el mismo directorio "/home/$USER/Descargas/" escribiremos el siguiente comando si nuestro archivo a descomprimir es un .zip:

$ unzip geany-master.zip -d /home/$USER/


Vemos como se ha creado el nuevo directorio en nuestra carpeta principal y se han incluido todos los archivos en él:




O en mi caso que el archivo descargado es un tar.gz, para descomprimirlo escribiré:

$ tar -xzvf geany-1.36.tar.gz -C /home/$USER/



Y ya tenemos los archivos y subdirectorios descomprimidos en la nueva carpeta "/home/$USER/geany-1.36/".


Pasamos al apartado 3.

3.- Preparar la configuración para la compilación.

A partir de ahora trabajaremos con el emulador de terminal todo el rato hasta la finalización de la instalación del programa Geany.

Nos ubicamos en el directorio donde tenemos el código fuente descomprimido:

$ cd ../geany-1.36/



Por lo general, hablamos de "compilar las fuentes", pero la compilación es solo una de las fases necesarias para producir un software funcional a partir de su fuente. Un sistema de compilación es un conjunto de herramientas y prácticas que se utilizan para automatizar y articular esas diferentes tareas con el fin de construir completamente el software con solo emitir algunos comandos que os mostraré a continuación.

De hecho cada compilación puede ser un poco diferente, dependiendo de los distintos proyectos o lenguajes de programación que pueden tener diferentes requisitos. O por los gustos del programador. O las plataformas compatibles, etc. Hay muchas razones para elegir o crear otro sistema de construcción diferente.

Geany usa un sistema de construcción de estilo GNU , es una opción popular en la comunidad de código abierto.

Escribir y ajustar un sistema de compilación es una tarea bastante compleja, pero los sistemas de compilación al estilo GNU facilitan la tarea mediante el uso de dos herramientas: "configure" y "make".

El archivo "configure" es un script específico del proyecto que verificará la configuración del sistema de destino y la función disponible para garantizar que el proyecto se pueda construir, eventualmente tratando con las especificaciones de la plataforma actual.

Una parte importante del trabajo típico del script "configure" es construir el archivo "Makefile". Este es el archivo que contiene las instrucciones necesarias para construir eficazmente el proyecto.

La herramienta "make", por otro lado, es una herramienta POSIX disponible en cualquier sistema similar del tipo Unix.

La herramienta "make" leerá el proyecto específico en el archivo "Makefile" y realizará las operaciones necesarias para construir e instalar el programa.

En nuestro caso podemos leer el archivo README y ver que pasos nos detalla el desarrollador para la completa instalación del programa, escribiremos:

$ cat README





Vemos que los pasos que nos detalla son los habituales y los nombrados anteriormente: configure --> make-->make install

Con la salvedad de que nos insta a mirar las opciones del script configure, para mas opciones de configuración. Así pues, escribiremos en el terminal:

$ ./configure --help


Podéis observar que en la opción "--prefix=PREFIX", nos comenta que durante la instalación del programa geany, por defecto se instalarán los diferentes archivos en el directorio "/usr/local/".

En dicho directorio se instalan todos los programas, que hemos instalado mediante otros métodos, como por ejemplo, mediante el gestor de paquetes "apt" y que mediante dicho gestor se pueden desinstalar sin problemas.

Pero el programa que nosotros compilemos e instalemos, si en el futuro queremos desisntalarlo y eliminarlo, tendremos problemas en encontrar todos los archivos que estarán mezclados conjuntamente con los de los demás programas.

Para evitar este embrollo os aconsejo que estos programas que instaléis desde las fuentes los almacenéis o guardéis en el directorio "/opt". Mediante la creación de una subcarpeta.

Yo voy a crear la subcarpeta con el nombre del programa y versión, así que me desplazaré a la carpeta /opt:

$ cd /opt

Y crearé una nueva subcarpeta o subdirectorio:

$ sudo mkdir geany-1.36/



Llegados a este punto ya podemos ejecutar el script "configure", nos volvemos a la carpeta donde tenemos los archivos fuente:

$ cd /home/$USER/geany-1.36/

Y ejecutaremos el script configure con el prefijo. Lo que hará dicho script es verificar el sistema en busca del software requerido para construir el programa y decirle donde se ubicarán los archivos compilados, así que ejecutaremos:

$ /.configure --prefix=/opt/geany-1.36/


Y empieza a chequear que esté instalado todo el software que necesitará para la compilación posterior.



Si durante este proceso no os da error, podéis pasar a la compilación en el apartado 4.

En mi caso me ha dado un error de configuración, y es que necesita tener instalado en el sistema el compilador g++.


Pues nada, tendré que instalarlo...

Me he dado cuenta que no lo tengo instalado, por tanto lo instalaré mediante el gestor de paquetes apt:

$ sudo apt install g++


Una vez instalado, volvemos a iniciar la ejecución del script "configure":

$ /.configure --prefix=/opt/geany-1.36/

Y vuelve a aparecerme otro error, en este caso necesito una serie de paquetes:


En este caso me pide los paquetes: 

gtk+-2.0 como mínimo la versión 2.24
glib-2.0 como mínimo la versión 2.32
gio-2.0 como mínimo la versión 2.32
gmodule-no-export-2.0

Estos paquetes forman parte de la librería libgtk2.0-dev (developers) para desarrolladores. Me preguntaréis como se y como he encontrado que librería era la necesaria. Básicamente, buscando información por la red y por la descripción de los paquetes en la web de Ubuntu aquí.

También cabe mencionar que si queremos terminar de un plumazo con todos los paquetes necesarios para la compilación, podemos instalarlos de un plumazo con apt, con la siguiente sintaxis:

$ sudo apt build-dep geany

Además de tener que descomentar las URI "deb-src" del archivo "/etc/apt/sources-list" que son los paquetes fuentes de los repositorios.

Yo no lo ejecutaré en este artículo-tutorial. Iremos paso a paso viendo todos los contratiempos que vayan apareciendo.

Vamos a mirar que librerías tengo instaladas:

$ dpkg --get-selections | grep libgtk


Pues no la tengo instalada, voy a instalarla mediante el gestor de paquetes "apt":

$ sudo apt install libgtk2.0-dev




Como veis se instalarán un porrón de paquetes.

Una vez instalados, volvemos a ejecutar el script, como podéis comprobar no es tan difícil, simplemente es ir proporcionando los paquetes de software que necesite el script para la posterior compilación:

$ /.configure --prefix=/opt/geany-1.36/

Esta vez necesita este paquete: "intltool"


Vamos a instalarlo: 

$ sudo apt install intltool


Una vez instalado volvemos a ejecutar "configure":

$ /.configure --prefix=/opt/geany-1.36/


Y Eurekaaaa!!!!, la configuración está terminada.

Ya podemos pasar a la compilación en el siguiente apartado 4.

4.- Compilación.

Para iniciar la compilación vamos a ejecutar el comando "make":

$ make


Este proceso demora un tiempo, dependiendo del tamaño de cada programa.



Una vez terminada la compilación sin ningún error, ya podemos instalar nuestro software compilado.

5.- Instalación.

Para iniciar la instalación del programa compilado escribiremos en el terminal:

$ sudo make install


Perfecto, ya está terminada la instalación:


Nuestro ejecutable se encuentra en "/opt/geany-1.36/bin/", como se lo hemos pedido en la opción "--prefix" del script "configure", si nos desplazamos a dicho directorio: 

$ cd /opt/geany-1.36/bin/


Y lo ejecutamos:

$ geany


Y aquí lo tenemos:



Como última operación deberíamos de poder ejecutar el programa desde cualquier directorio y no estando ubicados en el suyo.

Lo podemos conseguir de dos maneras diferentes:

A.- Añadir a la variable de entorno PATH la ruta donde se encuentra instalado el programa geany, para que sea ejecutable desde cualquier directorio. Con la siguiente sintaxis:

$ export PATH="/opt/geany-1.36/bin:${PATH}"



Y comprobamos que se haya añadido en la variable:

$ echo $PATH


Ahora ya podemos ejecutar el programa desde cualquier ubicación, pero si cerramos la sesión del usuario o reiniciamos la computadora, los cambios en la variable PATH se perderán, y no podremos ejecutar nuestro programa desde las demás ubicaciones.

Para que esta variable nos recuerde en cada inicio de sesión nuestras rutas donde hay los archivos ejecutables lo que haremos será añadirla al archivo oculto de nuestro usuario "/home/$USER/.bashrc".

Mediante el editor nano modificaremos el citado archivo anterior:

$ nano /home/$USER/.bashrc



Y al final del archivo añadiremos estas dos líneas:

PATH=/opt/geany-1.36/bin:/home/belinux/platform-tools:/home/belinux/.local/bin:/home/belinux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

export PATH


Con la combinación del teclado "Ctrl" "x" guardaremos los cambios y saldremos del editor nano.


B.- Si no queremos modificar el contenido de la variable PATH, la otra opción es mediante la creación de un enlace simbólico en el directorio "/usr/local/bin" donde se encuentran los demás programas:

$ sudo ln -sT /opt/geany-1.36/bin/geany /usr/local/bin/geany



Además, para no tener que ir ejecutando el programa desde el emulador de terminal, podemos crear un lanzador y añadirle un icono. En este artículo muestro como crear lanzadores.

Bien, ya tenemos nuestro programa funcionando. Pero y si ya no lo necesitamos y queremos eliminarlo, pues nos vamos a nuestro último apartado el 6.

6.- DESINSTALAR EL PROGRAMA

Si en el futuro queremos desinstalar el programa es tan sencillo como eliminar la carpeta "/opt/geany-1.36/" con todo su contenido.

$ sudo rm -rf /opt/geany-1.36/



Eliminar el enlace simbólico si lo hubiéramos creado.

$ sudo rm /usr/local/bin/geany



Eliminar o comentar con una almohadilla "#" las líneas añadidas en el archivo "/home/$USER/.bashrc", mediante el editor nano:

PATH=/opt/geany-1.36/bin:/home/belinux/platform-tools:/home/belinux/.local/bin:/home/belinux/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

export PATH


Pulsar la combinación de teclado "Ctrl" "x" para guardar y salir del editor nano.

Y como última opción eliminar todas las librerías y software de desarrollador que instalamos anteriormente:

$ sudo apt purge --remove libgtk2.0-dev g++ intltool


Eliminar los paquetes dependientes no necesarios:

$ sudo apt autoremove



Eliminar los paquetes de la caché los paquetes no útiles.

$ sudo apt autoclean


Eliminar la carpeta con el código fuente que extraímos del archivo comprimido, ya sea el ZIP o el TAR.GZ:

$ sudo rm -rf /home/$USER/geany-1.36/


Y por último eliminar si queréis el archivo comprimido que descargamos y que se encuentra ubicado en la carpeta "/home/$USER/Descargas/".


Y llegó a su fin este artículo. Espero os sirva de guía de ejemplo en cualquier instalación desde las fuentes.

Es posible que me haya dejado algún detalle en este tutorial, como por ejemplo la comprobación de las firmas cuando os descargáis el archivo comprimido del código fuente desde un sitio web, para que no os den gato por liebre. No descarto ir modificándolo en el futuro.

Saludos y hasta el próximo artículo.

7 comentarios:

Gracias por participar en este blog.