Introducción
En este laboratorio, aprenderás el proceso fundamental para compilar e instalar software a partir de su código fuente en un sistema Linux. Esta es una habilidad crucial para gestionar aplicaciones que no están disponibles en el gestor de paquetes de tu distribución o cuando necesitas habilitar funciones personalizadas específicas. Trabajarás con un ejemplo real, el servidor Pure-FTPd, para comprender cada etapa del flujo de trabajo de instalación basado en código fuente.
Comenzarás extrayendo el código fuente de un archivo comprimido, comúnmente conocido como tarball, utilizando el comando tar. A continuación, prepararás el entorno de compilación ejecutando el script ./configure y luego compilarás el código fuente en programas ejecutables con el comando make. Tras una compilación exitosa, instalarás el software en todo el sistema utilizando make install. Finalmente, aprenderás cómo desinstalar correctamente el software y limpiar los archivos fuente, completando así todo el ciclo de vida de una instalación desde el código fuente.
Extraer el código fuente con tar
En este paso, aprenderás a extraer un archivo de código fuente, comúnmente conocido como "tarball", utilizando el comando tar. El código fuente del software a menudo se distribuye en archivos comprimidos como .tar.gz para agrupar todos los archivos necesarios y reducir el tamaño total.
Primero, confirmemos que el archivo de código fuente esté disponible en nuestro directorio de trabajo actual, ~/project. Usa el comando ls -l para listar los archivos y sus detalles.
ls -l
Deberías ver el archivo pure-ftpd-1.0.53.tar.gz en la salida.
total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz
Ahora, utilizaremos el comando tar para extraer el contenido de este archivo. Las opciones que usaremos son:
-x: para extraer archivos de un archivo comprimido.-z: para descomprimir el archivo usando gzip, lo cual se indica por la extensión.gz.-v: para una salida verbosa, que lista todos los archivos a medida que se extraen.-f: para especificar el filename (nombre del archivo) que se va a procesar.
Ejecuta el siguiente comando en tu terminal para extraer el archivo:
tar -zxvf pure-ftpd-1.0.53.tar.gz
La opción -v hará que tar imprima el nombre de cada archivo que extrae. La salida será bastante larga, pero debería verse similar al ejemplo siguiente, mostrando la estructura de directorios y los archivos creados.
pure-ftpd-1.0.53/
pure-ftpd-1.0.53/AUTHORS
pure-ftpd-1.0.53/README
pure-ftpd-1.0.53/README.LDAP
pure-ftpd-1.0.53/README.MySQL
pure-ftpd-1.0.53/README.PGSQL
...
pure-ftpd-1.0.53/src/puredb_p.h
pure-ftpd-1.0.53/src/pure-quotacheck.c
pure-ftpd-1.0.53/src/pure-uploadscript.c
Una vez que el comando termine, se habrá creado un nuevo directorio que contiene el código fuente. Usemos ls -l nuevamente para ver este nuevo directorio.
ls -l
Ahora deberías ver el directorio pure-ftpd-1.0.53 junto al tarball original.
total 752
drwxr-xr-x 10 labex labex 4096 Nov 10 12:05 pure-ftpd-1.0.53
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz
Has extraído con éxito el código fuente del archivo. En el siguiente paso, navegaremos a este nuevo directorio y comenzaremos el proceso de configuración y compilación.
Configurar y compilar el software con ./configure y make
En este paso, configurarás el código fuente para tu sistema específico y luego lo compilarás en programas ejecutables. Este es un proceso estándar de dos partes para compilar software desde el código fuente en sistemas Linux.
Primero, debes cambiar tu ubicación actual al directorio que se creó en el paso anterior. Usa el comando cd para navegar al directorio pure-ftpd-1.0.53.
cd ~/project/pure-ftpd-1.0.53
Ahora que estás dentro del directorio del código fuente, la primera parte del proceso es ejecutar el script configure. Este script verifica en tu sistema todas las herramientas, bibliotecas y dependencias necesarias para compilar el software. Luego, genera un Makefile, que contiene las instrucciones para el proceso de compilación.
Para ejecutar el script, debes escribir ./ antes de su nombre. Esto le indica al shell que busque el script configure en el directorio actual.
./configure
El script ejecutará una serie de comprobaciones y verás mucha información desplazándose por la pantalla. Esto es normal. Una ejecución exitosa terminará con un resumen, similar al siguiente.
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
...
checking for OpenSSL... no
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating man/Makefile
...
config.status: executing depfiles commands
Pure-FTPd has been configured.
Observa las líneas config.status: creating Makefile. Esto confirma que el Makefile se ha creado correctamente.
La segunda parte del proceso es compilar el código. El comando make lee el Makefile y ejecuta el compilador (como gcc) con las opciones correctas para convertir el código fuente legible por humanos (archivos .c) en archivos binarios ejecutables por la máquina.
Ahora, ejecuta el comando make.
make
Este proceso puede tardar unos instantes. Verás muchas líneas de salida a medida que make invoca al compilador para cada archivo fuente. Esto es la compilación en acción.
(CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/labex/project/pure-ftpd-1.0.53/config/missing automake-1.15 --gnu src/Makefile)
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -c pure-ftpd.c
...
gcc -g -O2 -Wall -W -Wshadow -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Winline -o pure-ftpd pure_ftpd-pure-ftpd.o pure_ftpd-log.o ...
...
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
Una vez que el comando make se completa sin errores, el software se ha compilado con éxito. Los archivos binarios ya están listos para ser instalados en el sistema, lo cual harás en el siguiente paso.
Instalar el software con make install
En este paso, instalarás el software compilado en tu sistema. Después de compilar el código fuente con make, los archivos binarios resultantes y otros componentes necesarios (como la documentación y los archivos de configuración) todavía están dentro del directorio del código fuente. El comando make install copia estos archivos a las ubicaciones estándar de todo el sistema para que el software pueda ejecutarse desde cualquier lugar.
Asegúrate de seguir estando en el directorio ~/project/pure-ftpd-1.0.53.
El proceso de instalación normalmente requiere escribir archivos en directorios como /usr/local/bin y /usr/local/sbin, los cuales son propiedad del usuario root. Por lo tanto, debes usar el comando sudo para ejecutar make install con privilegios administrativos.
Ejecuta el siguiente comando para instalar Pure-FTPd:
sudo make install
El comando make install leerá el Makefile y ejecutará las instrucciones de instalación. Verás una salida que muestra cómo se crean y copian los archivos en los directorios del sistema.
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53/src'
/usr/bin/mkdir -p '/usr/local/sbin'
/usr/bin/install -c pure-ftpd pure-pw pure-pwconvert pure-authd pure-certd pure-uploadscript pure-quotacheck '/usr/local/sbin'
/usr/bin/mkdir -p '/usr/local/share/man/man8'
/usr/bin/install -c -m 644 ../man/pure-ftpd.8 ../man/pure-pw.8 ../man/pure-pwconvert.8 ../man/pure-authd.8 ../man/pure-certd.8 '/usr/local/share/man/man8'
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53'
/usr/bin/mkdir -p '/usr/local/etc'
/usr/bin/install -c -m 644 pure-ftpd.conf '/usr/local/etc'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53'
El software ya está instalado. Una forma sencilla de verificar esto es usar el comando which, que busca en el PATH del sistema un ejecutable e imprime su ruta completa.
which pure-ftpd
Si la instalación fue exitosa, deberías ver la siguiente salida, lo que indica que el ejecutable pure-ftpd ahora se encuentra en un directorio estándar del sistema.
/usr/local/sbin/pure-ftpd
Con el software instalado, técnicamente está listo para su configuración y uso. Sin embargo, para este ejercicio, el siguiente paso te guiará a través del proceso de desinstalación.
Desinstalar el software y limpiar con make uninstall y rm
En este paso final, aprenderás cómo desinstalar correctamente el software que instalaste desde el código fuente y limpiar los archivos de compilación, devolviendo tu sistema a su estado original. Esta es una parte importante de la gestión manual de software.
La mayoría de los paquetes de código fuente bien escritos que utilizan un Makefile proporcionan un objetivo uninstall. Este objetivo está diseñado para revertir las acciones de make install, eliminando todos los archivos que se copiaron en los directorios del sistema.
Primero, asegúrate de seguir estando en el directorio ~/project/pure-ftpd-1.0.53. Al igual que el proceso de instalación requería privilegios administrativos, la desinstalación también los requiere. Usa sudo con el comando make uninstall.
sudo make uninstall
Verás una salida que indica que los archivos se están eliminando de los directorios del sistema donde se instalaron.
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53/src'
rm -f /usr/local/sbin/pure-ftpd /usr/local/sbin/pure-pw /usr/local/sbin/pure-pwconvert /usr/local/sbin/pure-authd /usr/local/sbin/pure-certd /usr/local/sbin/pure-uploadscript /usr/local/sbin/pure-quotacheck
rm -f /usr/local/share/man/man8/pure-ftpd.8 /usr/local/share/man/man8/pure-pw.8 /usr/local/share/man/man8/pure-pwconvert.8 /usr/local/share/man/man8/pure-authd.8 /usr/local/share/man/man8/pure-certd.8
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53/src'
make[1]: Entering directory '/home/labex/project/pure-ftpd-1.0.53'
rm -f /usr/local/etc/pure-ftpd.conf
make[1]: Leaving directory '/home/labex/project/pure-ftpd-1.0.53'
Para confirmar que el software se ha eliminado, puedes usar el comando which nuevamente.
which pure-ftpd
Esta vez, el comando no debería producir ninguna salida, porque el ejecutable pure-ftpd ha sido eliminado de /usr/local/sbin y ya no se puede encontrar en el PATH del sistema.
Ahora que el software está desinstalado, el último paso es eliminar el directorio del código fuente. No puedes eliminar un directorio mientras estás dentro de él, así que primero, navega de regreso al directorio raíz de tu proyecto.
cd ~/project
Ahora, usa el comando rm con la opción -r (recursiva) para eliminar el directorio pure-ftpd-1.0.53 y todo su contenido.
rm -r pure-ftpd-1.0.53
Este comando no producirá ninguna salida si tiene éxito. Puedes verificar su eliminación listando el contenido del directorio ~/project.
ls -l
El directorio pure-ftpd-1.0.53 ya no existe y solo queda el tarball original.
total 748
-rw-r--r-- 1 labex labex 765432 Nov 10 12:00 pure-ftpd-1.0.53.tar.gz
¡Felicidades! Has completado con éxito todo el proceso de compilación de software desde el código fuente: extracción, configuración, compilación, instalación y, finalmente, desinstalación y limpieza.
Resumen
En este laboratorio, aprendiste el procedimiento estándar para compilar e instalar software a partir de su código fuente en un sistema Linux. Comenzaste extrayendo un archivo de código fuente comprimido, también conocido como tarball (.tar.gz), utilizando el comando tar. Tras la extracción, navegaste al directorio fuente para ejecutar el script ./configure, que prepara el software para la compilación verificando las dependencias del sistema y creando un Makefile. Finalmente, utilizaste el comando make para compilar el código fuente en binarios ejecutables y make install para copiar el software a los directorios apropiados del sistema.
Además, practicaste el método adecuado para eliminar el software y limpiar el entorno de compilación. Aprendiste a usar el comando make uninstall para eliminar los archivos instalados del sistema. Para completar el proceso de limpieza, eliminaste el directorio original del código fuente usando el comando rm, asegurando que el sistema volviera a su estado anterior.



