Está en la página 1de 29

INTRODUCCIÓN

1. Pasos para construir e instalar programas desde código fuente


A diferencia de otros sistemas operativos, como pueden ser Windows o Mac, con Linux, a la hora
de instalar aplicaciones, tienes la posibilidad de hacer una instalación como se haría en estos
sistemas operativos o descargarte el código fuente de la aplicación, modificarlo si así lo deseas,
compilarlo y luego instalarlo en tu sistema. Esta opción, junto con el uso de herramientas de
desempaquetado y “descarga” de código fuente, es lo que estudiarás en esta unidad.
• Aprender el uso de la herramienta de desempaquetado como tar.
• Descubrir que, además de la descarga de un fichero que contenga el código fuente de la
aplicación, existen otros medios de acceder a la descarga del código fuente como Git.
• Aprender a compilar el código fuente de una aplicación y a instalarlo en tu sistema.
• Saber cómo desinstalar posteriormente esa aplicación que acabas de instalar.
Iconos
En este curso se incluyen recursos didácticos que refuerzan la explicación teórica y te ayudarán
a fijar conocimientos y asimilar conceptos. Con estos recursos categorizados, completarás tu
proceso de aprendizaje.
Terminología

Este tipo de instalaciones no serán las que realices con más frecuencia en tu día a día. Sin
embargo, puede que en algún momento necesites hacer una instalación a partir del código
fuente, bien porque no encuentres el archivo desde el que hacer la instalación y sí solamente su
código fuente, o bien porque antes quieras modificar el código y así personalizar el programa a
tu gusto para después instalarlo.

Los pasos a seguir para realizar una instalación desde el código fuente son los siguientes:

• Descargar el código fuente, descarga que puedes hacer de un archivo empaquetado o


descarga que puedes hacer directamente de su código fuente a través de Git.

• Descompresión del archivo que te hayas descargado del paso anterior, si es que has
descargado un archivo y no su código a través de Git.

• Configuración de los archivos que te permitirán luego compilar el programa.

• Compilación del programa.

• Instalación del programa.

Puedes saber qué significa compilar si accedes a la sección Glosario de esta unidad. Además, si
estás interesado en profundizar sobre qué es compilar y un compilador puedes visitar el vínculo
denominado ¿Qué es compilar? en Enlaces de interés.
Tar

Tar es la herramienta de empaquetado y desempaquetado de archivos que viene instalada por


defecto en tu instalación. Con ellas podrás desempaquetar o crear archivos con formato tar,
gzip o bzip. De todos estos formatos el más utilizado es tar.

El modo de empleo de la herramienta tar es: tar [opción] [fichero]

Con este comando, como con todos los de Linux, siempre podrás conocer todos sus usos a
través de la consulta: tar –-help. No obstante, a continuación vas a conocer las opciones más
usadas con este comando:

• -c: crea un archivo comprimido.


• -v: muestra el progreso de la acción que se está realizando.
• -x: extrae de un archivo comprimido.
• -f: nombre del archivo.
• -t: visualización del contenido de un archivo.
• -j: filtra el archivo a un archivo con formato bzip2.
• -z: filtra el archivo a un archivo con formato gzip.
• -r: añade o actualiza ficheros o directorios en un archive empaquetado ya existente.
Tar: uso

Tar puede manejar archivos con extensiones: tar, tar.gz, tgz, tar.bz2, tar.tbz o tar.tb2 donde las
extensiones tar.gz y tgz son similares y las extensiones tar.bz2, tar.tbz y tar.tb2 también son
similares entre ellas.

Para conocer los usos más comunes que podrás hacer con la herramienta tar para archivos
comprimidos o que vayas a comprimir con los formatos anteriormente indicados, deberás leer
los siguientes puntos:

• Creación de un archivo comprimido: Para empaquetar distintos archivos en uno


ejecutarás uno de los siguientes archivos en función de si quieres crear un archivo tar,
tar.gz o tar.bz2

o tar: tar –cvf nombre_archivo.tar ruta_archivos


o tar.gz: tar –cvzf nombre_archivo.tar.gz ruta_archivos o tar –cvzf
nombre_archivo.tgz ruta_archivos
o tar.bz2: tar –cvjf nombre_archivo.tar.bz2 ruta_archivos o tar –cvjf
nombre_archivo.tar.tbz ruta_archivos o tar –cvjf nombre_archivo.tar.tb2
ruta_archivos.

• Desempaquetar varios archivos de un archivo comprimido: para desempaquetar


varios archivos la acción a realizar será muy parecida a la anterior, pero indicando los
distintos archivos a extraer:

o tar: tar -xvf nombre_archivo.tar “nombre_archivo_a_extraer1”


“nombre_archivo_a_extraer2” “nombre_archivo_a_extraer3”
o tar.gz: tar -zxvf nombre_archivo.tar “nombre_archivo_a_extraer1”
“nombre_archivo_a_extraer2” “nombre_archivo_a_extraer3”
o tar.bz2: tar -jxvf nombre_archivo.tar “nombre_archivo_a_extraer1”
“nombre_archivo_a_extraer2” “nombre_archivo_a_extraer3”

Si en lugar de indicar el nombre de los archivos quieres extraer un grupo de archivos a


partir de su extensión, por ejemplo *.php, lo podrás hacer de la siguiente manera:

o tar: tar -xvf nombre_archivo.tar --wildcards *.php


o tar.gz: tar -zxvf nombre_archivo.tar --wildcards *.php
o tar.bz2: tar -jxvf nombre_archivo.tar --wildcards *.php

• Descompresión de un archivo: para realizar la descomprensión de un archivo podrás


usar el comando tar de la siguiente manera:

o tar: tar –xvf nombre_archivo.tar –C ruta_de_descompresión


o tar.gz: tar –xvf nombre_archivo.tar.gz –C ruta_de_descompresión
o tar.bz2: tar –xvf nombre_archivo.tar.bz2 –C ruta_de_descompresión

Con el uso de –C estás indicando posteriormente en qué directorio quieres


desempaquetar los archivos. Si lo quisieras desempaquetar en el mismo que estás,
bastaría con omitir dicha opción, quedando el comando de la siguiente manera: tar –xvf
nombre_archivo.tar

• Añadir archivos o directorios a un archivo comprimido: podrás añadir archivos o


directorios a un archivo comprimido ya existente de la siguiente manera:

o tar: tar -rvf nombre_archivo.tar nombre_archivo_a_añadir o tar -rvf


nombre_archivo.tar nombre_directorio_a_añadir
o tar.gz: Tar no tienen ninguna opción para poder añadir archivos o directorios a
ficheros con este formato. Si intentas añadirlo te dará un error.
o tar.bz2: Tar no tienen ninguna opción para poder añadir archivos o directorios a
ficheros con este formato. Si intentas añadirlo te dará un error.

• Listar contenido de un archivo: para listar el contenido de un archivo comprimido lo


harás de la siguiente manera:

o tar: tar –tvf nombre_archivo.tar


o tar.gz: tar –tvf nombre_archivo.tar.gz
o tar.bz2: tar –tvf nombre_archivo.tar.bz2

• Comprobar el tamaño de un archivo comprimido: para consultar el tamaño de un


archivo comprimido lo podrás hacer de la siguiente manera:

o tar: tar -czf – nombre_archivo.tar | wc -c


o tar.gz: tar -czf – nombre_archivo.tar.gz | wc -c
o tar.bz2: tar -czf – nombre_archivo.tar.bz2 | wc -c

El tamaño del archivo lo obtendrás en Kylobytes (KB).


• Desempaquetar solo un archivo de un archivo comprimido: para desempaquetar
solamente un archivo de un archivo comprimido lo harás de la siguiente manera:

o tar: tar -xvf nombre_archivo.tar nombre_archivo_a_extraer


o tar.gz: tar -zxvf nombre_archivo.tar nombre_archivo_a_extraer
o tar.bz2: tar -jxvf nombre_archivo.tar nombre_archivo_a_extraer
Git: instalación
Git es una herramienta que te permitirá acceder a repositorios de código desde los que poder
descargar el código que te interese en cada momento. Esta herramienta no está por defecto en
la instalación que hiciste de Linux, por lo que deberás proceder a su instalación en Debian y en
Red Hat o en su equivalente gratuito CentOS:

• Debian: sudo apt install git


• CentOS: sudo yum install git

Ahora, por ejemplo, quieres instalar node.js pero no la versión actual sino una anterior, por
ejemplo la versión 8.2.0. Para ello, accede a GitHub y allí haz los pasos indicados en la imagen.
1. Haz clic sobre el botón “Branch”, ahí se desplegará una ventana. Crea un archivo
comprimido.
2. En la ventana que se te ha desplegado haz clic sobre la pestaña “Tags”.
3. Ahora tienes acceso a todas las versiones de node.js. Entonces, buscas la versión que te
interesa y haz clic sobre ella, recuerda que es la versión 8.2.0

Al hacer clic sobre la versión, se recarga la página y en la url de tu navegador aparecerá la


siguiente url:

Como ves, ahora estás viendo el código que hace referencia a esa versión y que a continuación
irás a descargar.

Git: descarga de código


Tan solo te queda descargar el código. Primero harás clic en el botón que tiene como nombre
“Clon or download”, tal y como puedes ver en la imagen, de manera que al hacer clic te ofrecen
dos alternativas para descargar el código. Una de ellas es descargarte el archivo empaquetado
zip a través del enlace “Download ZIP”. La otra consiste en hacer clic en el icono marcado en la
imagen y descargarte el código a través de la opción clone de git, que es la vas a usar a
continuación con el siguiente comando:
git clone --depth 1 --branch v8.2.0 https://github.com/nodejs/node.git

Tan solo te queda descargar el código. Primero harás clic en el botón que tiene como nombre
“Clon or download”, tal y como puedes ver en la imagen, de manera que al hacer clic te ofrecen
dos alternativas para descargar el código. Una de ellas es descargarte el archivo empaquetado
zip a través del enlace “Download ZIP”. La otra consiste en hacer clic en el icono marcado en la
imagen y descargarte el código a través de la opción clone de git, que es la vas a usar a
continuación con el siguiente comando:
git clone --depth 1 --branch v8.2.0 https://github.com/nodejs/node.git
Una vez descargado el código, por ejemplo en tu directorio de usuario, te creará un directorio
con el nombre de node donde tendrás todo el código necesario para posteriormente compilarlo
y crear tu ejecutable.
Caso práctico: uso de la herramienta tar

Para el siguiente caso práctico, crea en tu directorio de usuario cinco archivos con extensión .txt,
otros cinco archivos con extensión .jpg y otros cinco archivos con extensión .php, no importa
que no contengan nada.

A continuación realiza las siguientes tareas:

1. Crea un archivo comprimido tar, con nombre todos.tar, con todos los archivos creados
en el paso anterior.
2. Crea un archivo comprimido tar , con nombre archivo_a.tar, con solo los archivos que
tienen extensión .txt
3. Crea un archivo comprimido tar , con nombre archivo_b.tar, con solo los archivos que
tienen la extensión .jpg
4. Crea un archivo comprimido tar , con nombre archivo_c.tar, con solo los archivos que
tienen la extensión .php
5. Dentro del archivo todos.tar, introduce archivo_a.tar, archivo_b.tar y archivo_c.tar
6. Consulta el listado de archivos que contiene ahora el archivo todos.tar y podrás ver que
dentro tienes los archivos con extensión .txt, .jpg, .php y .tar
7. Extrae de todos.tar todos los archivos con extensión *.txt, *.jpg y *.php y guárdalos en
un directorio que se llame salida que se encuentre dentro de tu directorio de usuario.

Para poder conocer las soluciones a todas estas tareas, continúa leyendo.

Solución

1. tar –cvf todos.tar *.*


2. tar –cvf archivo_a.tar *.txt
3. tar –cvf archivo_b.tar *.jpg
4. tar –cvf archivo_c.tar *.php
5. tar –rvf todos.tar archivo*.tar
6. tar –tvf todos.tar
7. Primero creas el directorio con: mkdir salida y después desempaquetas lo solicitado con:
tar –xvf todos.tar –C ./salida *.txt *.jpg *.php
Contenido del código descargado

Hasta ahora lo que has hecho es desempaquetar el archivo donde está el código fuente de la
aplicación que quieres instalar o te has descargado directamente el código fuente tal y como has
hecho.

Nodejs, a la hora de crear los paquetes de instalación, utiliza GNU Build System o Autotools por
lo que te deberás fijar o buscar entre todos los archivos descargados los siguientes dos archivos:

• configure
• Makefile

El archivo configure es un archivo ejecutable y es el responsable


de comprobar la configuración del sistema de destino donde se
va a hacer la instalación del software si lo tiene todo o si le falta
algo. En caso de faltarle algo te lo hará saber mediante un
mensaje, al igual que si el sistema dispone de todas las librerías
necesarias para la instalación también te lo hará saber.

Además, es el archivo responsable de crear el archivo Makefile final. El archivo Makefile será el
que contenga todas las instrucciones necesarias para construir el instalable.
Si lo deseas, puedes saber más sobre GNU Build System accediendo a la sección de Enlaces de
interés donde encontrarás un enlace con dicho nombre.
Obteniendo ayuda del archivo configure

Para ejecutar el archivo configure lo harás de la siguiente manera para así tener acceso a todas
las opciones que te permite:

./configure –help

Como puedes ver el número de opciones es enorme y en determinadas ocasiones hay que
profundizar mucho para hacer la instalación a partir del código, pero en este caso, te vas a
centrar solamente en la opción –prefix.

Con esta opción le dices a configure dónde quieres que instale tu aplicación. Por defecto lo haría
en /usr/local, pero ahí acabaría mezclándose con el código de otras aplicaciones y, como esta
instalación la estás haciendo a partir de código fuente, mejor hacerla en /opt, otra buena
ubicación para la instalación.

Además, dentro de ese directorio no hay nada y siempre tendrás claro que lo que hay ahí lo has
creado a partir de código fuente.

Por lo tanto, ahora solamente necesitas crear un directorio donde se vaya a instalar la aplicación
que llamarás por ejemplo node-v8.2.0 dentro de /opt con permisos de superusuario.
Ejecución del archivo configure

Ahora ya estás en disposición de ejecutar el archivo configure indicándole la ruta donde quieres
que esté instalada la aplicación y validar que todo lo necesario para realizar la instalación está
disponible en el sistema. Para ello, deberás ejecutar la siguiente instrucción:

./configure --prefix=/opt/node-v8.2.0

Recuerda que el archivo configure se encuentra en /home/tu_nombre_usuario/node y que


deberás volver a esta ubicación después de haber creado el directorio node-v8.2.0 en /opt

Como puedes ver, empiezas a obtener los primeros mensajes de herramientas que te faltan. En
este caso, te falta el compilador de C++

Haz la instalación del compilador con el siguiente comando: sudo apt install g++ para Debian y
sudo yum install gcc-c++ para CentOS. Una vez instalado, lo llamas y ves que te da un error
porque le faltan los archivos para compilar, lo que te dirá que la instalación ha sido correcta
porque se ha ejecutado y ha encontrado dicha deficiencia.
Ejecución del archivo configure y compilación el código

Ahora vuelve a ejecutar el archivo configure: ./configure --prefix=/opt/node-v8.2.0

Ya no obtienes ningún mensaje de error, por lo que estás en disposición de compilar el código
fuente. El proceso de compilación del código fuente puede durar desde unos minutos hasta
horas, todo depende de la capacidad de procesamiento del sistema, de la complejidad del
código, etc.

Durante dicho proceso aparecerán multitud de mensajes a través de la consola con todo lo que
está haciendo el compilador. En caso de error se detendrá dicho proceso. Aunque lo normal es
que esto no ocurra una vez ejecutado el archivo ./configure.

Para iniciar la compilación no es necesario que tengas permisos de superusuario y lo harás a


partir del siguiente comando en la ruta donde se encuentra el código fuente:

make && echo ok

Posiblemente en Debian te encuentres con que el sistema no reconoce el comando make


porque no lo tiene instalado. Deberás proceder a su instalación:

sudo apt install make

Pasados unos minutos obtienes el OK final al proceso de compilación, momento en el que ya


podrás realizar la instalación ejecutando la siguiente instrucción con permisos de superusuario y
desde el directorio donde has descargado el código:

sudo make install


Instalación de la aplicación

¿Cómo reducir el tiempo de compilación? Has de saber que la instrucción make tiene una opción
–j(N+1) donde N es el número de núcleos que tiene el procesador donde se vaya a realizar la
compilación que te ayudará a reducir el tiempo de espera. Por lo que si tu procesador tuviera
cuatro núcleos, la instrucción de compilación habría quedado de la siguiente manera: sudo
make –j5 && echo ok.

Una vez compilada la aplicación, ya podrás realizar la instalación ejecutando la siguiente


instrucción con permisos de superusuario y desde el directorio donde hemos descargado el
código:

sudo make install

Una vez hecha la instalación, si vas al directorio donde has dicho que quieres realizar la
instalación podrás ver que dentro de él se encuentra la aplicación instalada:

Ahora, dentro del directorio /bin tienes el archivo ejecutable “node”. Para llamarlo, estés donde
estés, deberás indicar toda la ruta de acceso a él ./bin/node –version, pero esto es bastante
engorroso y seguro que te estás preguntando cómo poder acceder directamente al ejecutable
sin necesidad de poner la ruta, como por ejemplo puedes acceder a los comandos "ls" o "cd" o
"mkdir“ sin indicar la ruta completa. Para ello, deberás avanzar a la siguiente pantalla, que es
donde aprenderás a saber cómo acceder directamente a “node”.
Configuración de la variable $PATH

Por si no lo sabías, lo que permite acceder a los comandos directamente es que su ruta debe
estar configurada en la variable $PATH. Esta configuración está hecha para comandos como “ls”,
“mkdir” o “cp”, por ejemplo, pero para la instalación que acabas de hacer no lo está, y es lo que
ahora mismo aprenderás a hacer.

Antes de nada, para saber qué rutas hay en tu variable $PATH puedes hacer la consulta con el
comando echo $PATH como se muestra en la imagen:

Como puedes ver, ahora mismo ahí no se encuentra la ruta que te llevaría al ejecutable de
“node”, que sería /opt/node-v8.2.0/bin. Debes añadirla con el siguiente comando:

export PATH="/opt/node-v8.2.0/bin:${PATH}“

Una vez hayas ejecutado el comando anterior, puedes comprobar cómo ahora sí está la ruta en
la variable $PATH y puedes acceder a node sin indicar la ruta completa. Simplemente con el
comando: node –version verás que te muestra la versión de node instalada.

Ahora pensarás que todo está solucionado y que siempre que entres podrás acceder a node sin
problemas. Pero no, no es así. Esta solución es válida mientras no salgas del terminal, si sales y
vuelves a entrar y consultas el valor de la variable PATH verás que ya no está configurada la ruta
de acceso a node.
Configuración de la variable $PATH: permanente

Si al hacer los siguientes pasos te equivocas y al volver a entrar dejas de tener acceso a los
comandos de siempre (por ejemplo “ls”, “cd” o “mv”), no te preocupes. Sal y vuelve a entrar, pero
esta vez con el usuario root y arregla los errores que hayas podido realizar de lo que ahora
deberás hacer para que la configuración de la variable PATH tenga el acceso a node de manera
permanente.

Para poder tener configurada la ruta de acceso al ejecutable de


node de manera permanente lo puedes hacer configurando la
variable PATH en el archivo .bashrc que tienes en la raíz de tu
directorio de usuario y que podrás ver con el comando ls –la.

Edita este archivo con nano .bashrc y al final del archivo


configura la variable PATH donde, además de añadir la ruta al
ejecutable node, añadirás todas las rutas ya existentes porque
si no lo haces así, te quedarás sin acceso a los comandos como
“ls”, “cd”, etc.

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/node-v8.2.0/bin"

export PATH

Esta configuración, también la podrías hacer en el archivo .profile. También se encuentra en la


raíz de tu directorio de usuario y podrás verlo con el comando ls –la.
Desinstalación de la aplicación instalada

Para desinstalar lo instalado (lo habías hecho en /opt porque no querías que la instalación se
mezclara con otras instalaciones), podrás hacerlo con el siguiente comando:

sudo rm –rf /opt/node-v8.2.0/

Para terminar, debes eliminar la configuración de la ruta a node que has hecho anteriormente
en el archivo .bashrc o .profile

Una vez eliminadas estas dos líneas, sales de la sesión en la que te encuentras con el
comando exit y vuelves a identificarte para posteriormente comprobar el contenido de la
variable PATH y que tienes acceso a los comandos “ls”, “cd” o a “nano” por ejemplo.

Si es así, todo estará correcto y habrás terminado todas las tareas a realizar.
RECAPITULACIÓN

En esta unidad has aprendido a descargar código desde un repositorio, qué es un repositorio de
código, cómo puedes desempaquetar o empaquetar archivos con tar, compilar, instalar,
configurar la variable de entorno PATH así como desinstalar lo instalado.

Además, lo has hecho en un directorio correcto y sin mezclar tu instalación con instalaciones de
otros programas. Digamos que has evitado compartir directorios comunes con otras
aplicaciones que a la hora de desinstalar la aplicación lo hace todo más complicado.
BIBLIOGRAFÍA

A continuación, podrás consultar todas las referencias bibliográficas utilizadas a lo largo de la


unidad:

• Christine Bresnahan, Richard Blum. LPIC-1. Linux Professional Institute Certification. ANAYA
MULTIMEDIA; Edición: edición (22 de octubre de 2015).
• Sébastien Rohaut. Linux - dominar la administración del sistema. Eni (13 de abril de 2017).
• Tobias Günther. Learn Version Control with Git: A step-by-step course for the complete
beginner. Independently published (9 de marzo de 2017).
• Samuel Dauzon. GIT. Controle la gestión de sus versiones. Conceptos, utilización y casos
prácticos. Eni (18 de mayo de 2018).
GLOSARIO

• A
o Compilar
Es la acción de traducir código fuente en código objeto de manera que, a partir
de él, se pueda generar posteriormente un ejecutable que podamos instalar.
ENLACES DE INTERÉS

• ¿Qué es compilar?
https://tecnologia-facil.com/que-es/que-es-compilar/
• Otras herramientas de empaquetado y desempaquetado de archivos.
https://computernewage.com/2015/11/18/como-comprimir-y-descomprimir-archivos-en-
linux-desde-la-terminal/
• Git.
https://git-scm.com/
http://rogerdudler.github.io/git-guide/index.es.html
https://desarrolloweb.com/articulos/introduccion-git-github.html
• GNU Build System.
https://es.wikipedia.org/wiki/GNU_build_system
PREGUNTAS FRECUENTES

• ¿Qué es un repositorio de código?


Es un lugar que se puede encontrar en la nube o que bien puedes montar tú en tus
servidores, desde el que cualquier usuario con acceso a él puede descargarse el código
que desee a partir de una url que facilita dicho repositorio de código. El más conocido y
de mayor uso entre los programadores es GitHub.

• ¿Qué controladores de versiones de código existen?


Además del ya visto, Git, cuyo repositorio de código en la nube es GitHub tienes otros
controladores de versiones como por ejemplo:

• Subversion (https://subversion.apache.org/)
• Mercurial (https://www.mercurial-scm.org/)
• CVS (http://www.nongnu.org/cvs/)
• Etc.

También podría gustarte