Obtener, compilar e instalar código fuente en Debian
Aunque la mayoría de los usuarios utilizamos para instalar software los paquetes «.deb» en Debian y derivados, o «.rpm» en Red Hat Enterprise Linux y derivados, como CentOS y Fedora, entre otros, siempre que se trate de Software Libre, podremos obtener, compilar e instalar el código fuente del programa.
En todos los blogs con temática Linux, como este, se menciona muy frecuentemente el código fuente a la hora de instalar software. Este código debe estar disponible, cuando hablamos de software libre y «open source», para poder usarlo, estudiarlo, distribuirlo y modificarlo. Estas son las cuatro garantías del Software Libre.
En este artículo vemos como obtenerlo, compilarlo e instalarlo, tanto desde los repositorios oficiales, como el código fuente obtenido desde la página oficial del software en cuestión.
Sumario
- Consideraciones previas
- Obtener el código fuente desde «debian.org»
- Obtener el código fuente con el gestor de paquetes apt
- Obtener el código fuente desde la pagina del desarrollador
- Compilar e instalar
Consideraciones previas
Cuando un desarrollador de software, escribe el código de un programa, lo hace en texto plano. No son más que lineas de instrucciones con los pasos a seguir por el ordenador para ejecutar el programa en cuestión. Este texto esta escrito en algún lenguaje de programación que resulta legible para los humanos.
Como los ordenadores solo leen ceros y unos, es necesario «traducir» el código fuente a un lenguaje que el ordenador entienda. Esto es lo que se llama código binario, código objeto o lenguaje máquina, que puede ser leído y ejecutado por el equipo informático.
Para realizar esta conversión se utilizan herramientas específicas como son los compiladores, ensambladores e interpretes, entre otros. Dependiendo del lenguaje de programación utilizado será necesario compilar el código antes de utilizarlo, como ocurre con C, C++, Rust, Go, etc… Otros utilizan el interprete de comandos, o «shell», para la ejecución sin necesidad de compilación, como en Shellscripting, Python, PHP, Ruby o Javascript.
El caso de Java es algo diferente, porque el código fuente es compilado a un lenguaje intermedio llamado «bytecode», que después es interpretado por la Máquina Virtual Java «JRE» (Java Runtime Environment), pero además necesitarás «JDK» (Java Development Kit) que incluye el compilador.
También se llama código fuente a los ficheros que construyen una página web, ya sean en html, css, javascript, etc…
Hechas estas aclaraciones, vamos con el objeto de esta publicación, obtener, compilar e instalar el código fuente.
Obtener el código fuente desde debian.org
Las distribuciones GNU/Linux, tienen unos repositorios de paquetes de software donde encontramos casi todos los programas que necesitemos. Estos los podremos instalar con «apt install», pero si quieres el código fuente para compilarlo, también lo tienes disponible. En el caso de Debian puedes descargarlo desde su página oficial.
Lógicamente, el paquete a instalar tiene que estar en los repositorios, aunque también podremos instalar software de otras procedencias, como luego veremos.
Una vez estamos en la página de Debian mencionada, solo tenemos que buscar el paquete que queramos y descargarlo. Vamos a instalar un servidor NFS con su código fuente.
Aquí buscamos el paquete que queramos instalar y, para descargar el código fuente, nos fijamos en la parte derecha de la pantalla en «Download Source Packages» y clicamos en «nfs-utils_2.6.2.orig.tar.xz». Otra opción es marcar «Nombres de paquetes fuente» en las opciones de búsqueda.
Si haces «scroll», verás que te indica las dependencias necesarias, paquetes recomendados, sugeridos y mejoras.
Una vez descargado el código lo podremos editar, consultar, modificar y compilar sin ninguna restricción. Ten en cuenta que si modificas algo, y no sabes muy bien lo que haces, es más que posible que luego no funcione. De todas formas, rompiendo cosas es como más se aprende y siempre tienes la posibilidad de utilizar una máquina virtual y no afectar a tu sistema base.
Para extraerlo nos hará falta la herramienta «xz». Normalmente ya la tendrás instalada, pero si no es el caso, la instalas con
sudo apt-get install xz-utils
Para compilarlo e instalarlo, primero desempaquetamos el código fuente. En las opciones del comando la «J» es mayúscula.
tar -Jxvf nfs-utils_2.6.2.orig.tar.xz
Nos crea un directorio llamado nfs-utils-2.6.2. Nos desplazamos al nuevo directorio con «cd nfs-utils-2.6.2» y ejecutamos los siguientes comandos,
./configure
Este script revisa el hardware y software para la compilación. Si te dice que te falta algún paquete, lo instalas con «sudo apt install Nombre_paquete». Vuelves a ejecutar «./configure» y cuando termine ejecutas
make
Este comando crea los binarios. Para instalar los binarios y la documentación, ejecuta
make install
Y con esto tendremos el software compilado e instalado. Más adelante veremos como hacerlo con software descargado de la página oficial de un desarrollador.
En el fichero «README», encontrarás toda la información que necesites.
Obtener el código fuente con el gestor de paquetes apt
Con el gestor de paquetes «apt», también tenemos la posibilidad de descargar el código fuente de forma muy sencilla. Para hacerlo primero nos tenemos que asegurar de tener el repositorio, que contiene el paquete, habilitado en nuestro «sources.list».
Para comprobarlo editamos el fichero «/etc/apt/sources.list».
sudo nano /etc/apt/sources.list
Aquí veremos las fuentes de los repositorios.
Tienes que tener descomentado (sin el simbolo #) el repositorio que contiene «deb-src», que es el que permite la descarga del código fuente. Si no lo tienes lo tendrás que agregar.
Y ya podemos iniciar el proceso. Ejecutamos el comando con la siguiente sintaxis: «apt source nombre_del paquete». En mi caso
apt source nfs-kernel-server
Y obtenemos la siguiente salida
Nos dice que descarga «nfs-utils» en vez de «nfs-kernel-server» ya que este se mantiene en el sistema de control de versiones para posteriores actualizaciones. Extrae y desempaqueta el software. Solo te queda ejecutar los comandos anteriormente vistos.
Obtener el código fuente desde la pagina del desarrollador
Puede que alguna vez nos encontremos con que queremos instalar un software que no está disponible en los repositorios de nuestra distribución. Aquí hay dos opciones. Que podamos descargar el código fuente desde la página oficial, o que lo tengamos que hacer desde «Github».
Desde la página oficial
Vamos a instalar, en este caso un programa de vectores, llamado Inkscape muy utilizado por ser multiplataforma. Desde la pagina oficial , tenemos disponible la descarga para Linux, Windows, macOS y el código fuente «Source Archive» en un «xz tarball».
Pinchando en el botón «Source Archive» iniciará la descarga.
Nos ofrece un «sha256» para comprobar la integridad de la descarga. Para ello ejecuta el comando con la sintaxis «sha256sum /ruta-al-fichero descargado». En mi caso
sha256sum ~/Descargas/Inkscape-1.2.2.tar.xz
Si coincide el «hash» que te sale, con el que te ofrece la página de descarga, todo está bien y ya lo podremos instalar.
Desde Github
Si el Código está en «Github», el procedimiento difiere un poco.
Primero tendrás que instalar las dependencias que requiere el software que quieras instalar. El segundo paso será clonar el repositorio de «Git» con el comando «git clone htpps://gitlab.com/ruta_al_paquete». Te desplazas con «cd» al directorio de descarga y ejecutas «make install». Si falta alguna dependencia te la pedirá, la instalas y vuelves a ejecutar «make install».
En un artículo anterior vimos, «Nala, un gestor de paquetes», tienes un ejemplo de instalación del código fuente desde «git».
Compilar e instalar
Para la mayoría de usuarios, el tener que compilar el código, parece una tarea complicada, pero no lo es tanto. Solo son un par de comandos, pero según el software que vayas a instalar, puedes tener problemas con las dependencias.
Cuando nos encontramos con que el software no está en los repositorios, queremos una versión específica o queremos probar un software en desarrollo que su autor, todavía no ofrece empaquetado en un «.deb», no tendremos más remedio que hacerlo.
Vamos a ello. Nos desplazamos con «cd» al directorio de descarga. Te recomiendo crear un directorio y mover el fichero descargado a él. Lo puedes hacer también con el entorno gráfico y, con el botón secundario del ratón sobre el fichero, extraer. Pero vamos con la terminal. Ejecuta los siguientes comandos uno por uno.
cd /Descargas mkdir ~/Inkscape mv ~/Descargas/Inkscape-1.2.2.tar.xz ~/Inkscape/Inkscape-1.2.2.tar.xz cd ~/Inkscape
Para extraerlo nos hará falta la herramienta «xz», que ya hemos utilizado antes. Normalmente ya la tendrás instalada, pero si no es el caso, la instalas con
sudo apt-get install xz-utils
Y lo extraemos. En las opciones del comando pon la «J» mayúscula o no funcionará.
tar -Jxvf Inkscape-1.2.2.tar.xz
Y ya tenemos los ficheros descomprimidos en el directorio «~/Inkscape».
Nos crea un nuevo directorio «inkscape-1.2.2_2022-12-01_b0a8486541», donde tenemos el código
Solemos hablar de «compilar las fuentes», pero la compilación es solo una de las fases necesarias para tener un software funcional a partir de su fuente. Un sistema de compilación es un conjunto de herramientas «configure» y «make», que se utilizan para construir completamente el software con solo ejecutar esos comandos.
Con «configure», verificamos el hardware para el que vamos a compilar el código y garantizamos que se podrá construir el fichero «Makefile», que contiene las instrucciones necesarias para la instalación.
La herramienta «make» es una herramienta POSIX, disponible en todos los sistemas UNIX, que leerá el fichero «Makefile» y realizará todas las operaciones necesarias para construir el programa e instalarlo.
En muchos, si no todos los casos, encontrarás un fichero llamado «README», en el que se nos detalla el proceso que debemos seguir. En este caso nos dice que leamos, para instalarlo, el fichero «INSTALL.md».
Necesitaremos tener instaladas algunas dependencias.
sudo apt-get install build-essential cmake
Revisando la documentación, recomienda descargar más dependencias que nos harán falta, con el siguiente comando
wget -v https://gitlab.com/inkscape/inkscape-ci-docker/-/raw/master/install_dependencies.sh -O install_dependencies.sh
E instalar las dependencias recomendadas con
bash install_dependencies.sh --recommended
Instala un buen montón de paquetes. Tarda un poco en instalarlos. También tardará bastante al ejecutar el comando «make». Siguiendo las instrucciones para la instalación que encontramos en el fichero «INSTALL.md», ejecutamos uno a uno,
mkdir build cd build cmake .. make sudo make install
Vemos las salidas de los comandos anteriores
Y ya tenemos el software instalado y en funcionamiento. Para ejecutarlo con la terminal introduce
inkscape
También encontraras un lanzador en el «dash».
Como ves, tiene sus complicaciones, si necesita muchas dependencias que no encontramos en la distribución. Pero siempre está acompañado por su documentación. Con un poco de paciencia, no es tan complicado.
Si lo quieres desinstalar en el fichero «cmake_uninstall.cmake», tienes las ordenes y en «install_manifest.txt» tienes la lista de todos los ficheros de Inkscape instalados en el sistema, creada tras la instalación con «sudo make install».
No obstante, te recomiendo instalar los paquetes desde los repositorios de la distribución, siempre que sea posible. Todo lo que hemos hecho, lo tendremos con solo ejecutar,
sudo apt install inkscape
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en pie de la página o desde aquí mismo.