¡Esta es una revisión vieja del documento!
Tabla de Contenidos
206.1 Make and install programs from source
Pertenece a LPI Topic 206: System Maintenance
- Weight: 2
- Description: Candidates should be able to build and install an executable program from source. This objective includes being able to unpack a file of sources.
- Key Knowledge Areas:
- Unpack source code using common compression and archive utilities
- Understand basics of invoking make to compile programs
- Apply parameters to a configure script
- Know where sources are stored by default
- Terms and Utilities:
/usr/src/gunzipgzipbzip2xztarconfiguremakeunameinstallpatch
Introducción
Los programas que se utilizan en informática generalmente pertenecen a dos familias:
- Programas interpretados: se escriben en un lenguaje de programación (perl, shell, etc) y son llamados por un interprete cada ejecución.
- Programas compilados: se escriben en un lenguaje de programación (Pascal, C, C++) y a continuación pasa a un compilador. El compilador lee el código del programa y genera un ejecutable.
¿Cuándo hay que compilar? La mayoría de las ocasiones se proporcionan las aplicaciones en forma de paquete ya compilado y listo para su uso.
Sin embargo, otras ocasiones necesita una versión más reciente de una aplicación o configurada con opciones personalizadas. En este caso, debemos compilar e instalar el programa desde el código fuente.
Procedimiento de compilación GNU
Obtención de las fuentes
Descargaremos las fuentes de los ficheros desde el sitio en el que se encuentren.
Generalmente en las webs de los programas obtendremos los enlaces de descarga correspondientes. Con la herramienta wget podemos descargar desde la línea de comandos:
wget http://apache.rediris.es/httpd/httpd-2.2.29.tar.gz
Desempaquetar los codigos fuentes
Las fuentes de los programas suelen venir empaquetadas y compprimidas en diferentes formatos.
Utilizaremos tar o las herramientas especificas de cada formato
GZIP:
tar zxf httpd-2.2.29.tar.gzgunzip httpd-2.2.29.tar.gz
Bzip2:
tar jxf httpd-2.2.29.tar.bz2bunzip2 httpd-2.2.29.tar.bz2
XZ:
tar Jxf httpd-2.2.29.tar.bz2unxz httpd-2.2.29.tar.bz2
El archivo resultante lo desempaquetamos con tar:
tar xf httpd-2.2.29.tar
Configuración de la compilación
La compilación tiene una serie de requisitos:
- Existencia de un compilador.
- Presencia de las bibliotecas necesarias.
- Haber generado el archivo
Makefile.
El archivo Makefile suele estar disponible en la carpeta de las fuentes.
El procedimiento habitual tiene los siguientes pasos:
tar zxvf snow-2.0.3.tar.gzcd snow-2.0.3./configuremakesumake install
El paquete build-essential incluye los programas y bibliotecas básicos para realizar la compilación de programas en Linux. No viene instalado por defecto.
.configure lo que hace es chequear las dependencias y adapta el código fuente a la arquitectura de la máquina. Nos instalará el programa en la ubicación definida por defecto (normalmente /usr/local/).
./configure –prefix=/usr/local/httpd nos permite definir otra ruta de instalación.
./configure –help nos muestra todos los posibles argumentos de configuración.
Compilación
make utiiliza los archivos Makefile creados por .configure para hacer la instalación
Instalación de binarios
make install
Necesario ejecutar el comando de instalación con permisos de administrador.
Desinstalación de binarios:
make uninstall
Limpieza de elementos compilados:
make clean
Limpieza de elementos compilados y archivos de configuración (Makefile):
make mrproper
Aplicación de parches
diff
diff: comando que compara 2 archivos y muestra las diferencias entre ellos. Podemos utilizar dicho
comando para generar un parche.
diff programa1.c programa2.c > patch-x.y.z
patch
Comando que nos permite aplicar o retirar un parche, sobre un código fuente.
Aplicar parche:
patch –pnum < path-x.y.z
Retiramos parche:
path –pnum –R < path-x.y.z
-pnum: se utiliza cuando hay parches en directorios diferentes, sirve para omitir las / y la ruta superior.
Ejemplo nmap
Obtenemos las fuentes de https://nmap.org/download.html
wget https://nmap.org/dist/nmap-7.91.tar.bz2
Descomprimimos:
tar xjvf nmap-7.91.tar.bz2
Obtenemos una carpeta llamada nmap-7.70
Entramos en la carpeta y ejecutamos el script configure:
./configure
Esto revisará las dependencias y generará el archivo Makefile. Si falta algo para poder realizar la configuración, dará un error indicando el problema.
Realizamos la compilación:
make
Nos convertimos en usuario con privilegios:
su
Finalmente realizamos la instalación en el sistema:
make install
Tests
Which command would you use to apply a diff file to an original?
patch > diff-filepatch < diff-file(Solución)patch << diff-filecat diff-file » kernelcat diff-file « kernel
If the current directory is /root and the kernel source is located in /usr/src/linux, which of the following commands should be used to apply the patch /tmp/foopatch?
cat /tmp/foopatch | patch -p0cd /usr/src/linux; cat/tmp/foopatch | patch -p0cd /usr/src/linux; cat/tmp/foopatch | patchcd /usr/src/linux; patch -p1 </tmp/foopatch(Solución)cd /usr/src/linux; patch -p1 >/tmp/foopatch
