Flashcards: 206.1 - Compilar E Instalar Desde Fuentes

41 tarjetas de repaso. Usa el sistema de repeticion espaciada para memorizar.

P: ¿Cual es el directorio de instalacion por defecto cuando se ejecuta ./configure sin la opcion --prefix?

R: c) /usr/local. El directorio por defecto para la instalacion de software compilado desde fuentes es /usr/local. Este directorio esta reservado para software que el administrador instala manualmente, separandolo del software gestionado por el sistema de paquetes.


P: ¿Que comando se utiliza para regenerar todos los archivos de autotools de una sola vez?

R: b) autoreconf -i. El comando autoreconf -i ejecuta automaticamente aclocal, autoheader, automake --add-missing y autoconf en el orden correcto, regenerando todos los archivos necesarios del sistema autotools.


P: ¿Que archivo genera autoconf a partir de configure.ac?

R: c) configure. autoconf lee el archivo configure.ac (o el antiguo configure.in) y genera el script configure. Este script es el que se ejecuta para detectar las caracteristicas del sistema y generar el Makefile final.


P: Despues de instalar una nueva biblioteca compartida en /opt/custom/lib, ¿cual es la forma correcta y permanente de hacerla accesible al sistema?

R: b) Crear un archivo en /etc/ld.so.conf.d/ con la ruta y ejecutar ldconfig. La forma correcta y permanente es crear un archivo .conf en /etc/ld.so.conf.d/ que contenga la ruta /opt/custom/lib y luego ejecutar sudo ldconfig para actualizar la cache. La opcion a) funciona pero no es la solucion recomendada.


P: ¿Que comando muestra las bibliotecas compartidas que necesita un binario?

R: c) ldd. El comando ldd muestra todas las bibliotecas compartidas (shared libraries) que un binario ejecutable necesita en tiempo de ejecucion, junto con las rutas donde se encuentran. Por ejemplo: ldd /usr/bin/ssh.


P: ¿Que opcion de ./configure se utiliza para habilitar el soporte de un paquete externo como OpenSSL?

R: b) --with-ssl. Las opciones --with-PAQUETE se usan para habilitar soporte para paquetes externos. Las opciones --enable-FEATURE se usan para activar caracteristicas internas del software. Aunque ambas pueden parecer similares, --with hace referencia a dependencias externas y --enable a funcionalidades internas.


P: En un proyecto que utiliza CMake, ¿cual es el procedimiento correcto de compilacion?

R: b) mkdir build && cd build && cmake .. && make. La practica recomendada con CMake es crear un directorio de compilacion separado (out-of-source build), entrar en el, ejecutar cmake apuntando al directorio del codigo fuente (..), y luego ejecutar make. Esto mantiene los archivos generados separados del codigo fuente.


P: ¿Que comando de pkg-config muestra los flags necesarios para enlazar con una biblioteca?

R: c) pkg-config --libs libreria. pkg-config --libs devuelve los flags de enlazado (linker flags) necesarios para compilar contra una biblioteca, como -L/ruta/lib -lnombre. Por otro lado, --cflags devuelve los flags de compilacion como rutas de inclusion de cabeceras (-I/ruta/include).


P: ¿Que hace el comando make -j$(nproc)?

R: b) Compila el proyecto utilizando todos los nucleos disponibles del procesador. La opcion -j de make permite la compilacion en paralelo. $(nproc) es un comando que devuelve el numero de nucleos del procesador. Juntos, make -j$(nproc) aprovecha todos los nucleos disponibles para acelerar la compilacion.


P: ¿Que archivo almacena la cache binaria generada por ldconfig?

R: b) /etc/ld.so.cache. ldconfig lee las rutas configuradas en /etc/ld.so.conf y sus archivos incluidos, y genera una cache binaria en /etc/ld.so.cache. Esta cache es consultada por el enlazador dinamico (ld.so / ld-linux.so) para localizar rapidamente las bibliotecas compartidas en tiempo de ejecucion.


P: ¿Que comando de make elimina los archivos generados tanto por la compilacion como por el script configure, dejando el directorio en su estado original?

R: b) make distclean. El comando make distclean elimina todos los archivos generados, incluyendo los objetos compilados, los binarios Y los archivos generados por ./configure (como Makefile y config.h). A diferencia de make clean, que solo elimina los archivos de compilacion, distclean deja el directorio como estaba antes de ejecutar ./configure.


P: ¿Que variable de entorno se utiliza para especificar temporalmente directorios adicionales donde el enlazador dinamico debe buscar bibliotecas compartidas?

R: b) LD_LIBRARY_PATH. La variable LD_LIBRARY_PATH permite especificar directorios adicionales donde el enlazador dinamico busca bibliotecas compartidas en tiempo de ejecucion. Es una solucion temporal; la forma permanente es agregar la ruta en un archivo en /etc/ld.so.conf.d/ y ejecutar ldconfig. LIBRARY_PATH se usa en tiempo de compilacion, no en ejecucion.


P: ¿Que herramienta de autotools genera el archivo Makefile.in a partir de Makefile.am?

R: b) automake. automake procesa el archivo Makefile.am (escrito por el desarrollador con reglas simplificadas) y genera Makefile.in, que es una plantilla de Makefile. Posteriormente, el script configure procesa Makefile.in sustituyendo las variables detectadas del sistema para producir el Makefile final. autoconf genera configure y aclocal genera macros m4.


P: Al compilar software desde fuentes, ¿que opcion de ./configure se usa para desactivar una caracteristica interna del programa?

R: b) --disable-FEATURE. Las opciones --enable-FEATURE y --disable-FEATURE se usan para activar o desactivar caracteristicas internas del software. Las opciones --with-PAQUETE y --without-PAQUETE se usan para habilitar o deshabilitar el soporte de paquetes o dependencias externas. Esta distincion es importante para el examen.


P: ¿Que comando de pkg-config verifica si una biblioteca esta instalada y disponible en el sistema?

R: b) pkg-config --exists libreria. El comando pkg-config --exists libreria retorna un codigo de salida 0 si la biblioteca esta disponible y un codigo diferente de 0 si no lo esta. Se usa frecuentemente en scripts de compilacion: pkg-config --exists libxml-2.0 && echo "Disponible". La informacion se obtiene de los archivos .pc en los directorios de pkg-config.


P: ¿Que opcion de ./configure se utiliza para especificar la compilacion cruzada para una arquitectura diferente?

R: c) --host=TIPO. La opcion --host=TIPO indica al script configure que el binario resultante se ejecutara en una arquitectura diferente a la del sistema de compilacion. Por ejemplo, --host=arm-linux-gnueabihf compilaria para procesadores ARM desde un sistema x86. Esto es esencial para compilar software para dispositivos embebidos o arquitecturas diferentes.


P: ¿Que extension tienen las bibliotecas estaticas en Linux?

R: b) .a. Las bibliotecas estaticas en Linux tienen la extension .a (archive). Se integran completamente en el binario durante la compilacion, lo que produce ejecutables mas grandes pero independientes. Las bibliotecas compartidas (dinamicas) tienen la extension .so (shared object). .lib y .dll son extensiones utilizadas en sistemas Windows.


P: ¿Que archivo de configuracion de CMake se busca en la raiz del proyecto para definir como compilar el software?

R: b) CMakeLists.txt. El archivo CMakeLists.txt es el archivo de configuracion principal de CMake. Define las reglas de compilacion, dependencias, opciones configurables y targets del proyecto. Se ubica en la raiz del proyecto y puede incluir subdirectorios con sus propios CMakeLists.txt. Es equivalente en proposito al Makefile.am de autotools.


P: Al ejecutar ldconfig -p, ¿que informacion se obtiene?

R: b) El contenido de la cache de bibliotecas compartidas. El comando ldconfig -p (print cache) muestra todas las bibliotecas compartidas registradas en la cache /etc/ld.so.cache, incluyendo el nombre de la biblioteca y la ruta completa donde se encuentra. Es util para verificar si una biblioteca especifica esta disponible: ldconfig -p | grep libssl.


P: Un programa recien instalado desde fuentes falla al ejecutarse con el error “error while loading shared libraries: libfoo.so.1: cannot open shared object file”. ¿Cual es la solucion mas probable?

R: b) Agregar la ruta de la biblioteca en /etc/ld.so.conf.d/ y ejecutar ldconfig. Este error indica que el enlazador dinamico no puede encontrar la biblioteca libfoo.so.1. La solucion es agregar el directorio donde se instalo la biblioteca (normalmente /usr/local/lib) en un archivo en /etc/ld.so.conf.d/ y ejecutar sudo ldconfig para actualizar la cache. Alternativamente, se puede usar LD_LIBRARY_PATH como solucion temporal.


P: Escribe el comando para ver las bibliotecas compartidas que necesita el binario /usr/bin/ssh.

R: ldd /usr/bin/ssh. El comando ldd muestra todas las bibliotecas compartidas que un ejecutable necesita en tiempo de ejecucion y las rutas donde se encuentran. Si alguna biblioteca no se encuentra, mostrara “not found” junto al nombre, indicando un problema de dependencia.


P: Escribe el comando para actualizar la cache del enlazador dinamico despues de instalar nuevas bibliotecas compartidas.

R: ldconfig. El comando ldconfig reconstruye la cache /etc/ld.so.cache leyendo los directorios configurados en /etc/ld.so.conf y /etc/ld.so.conf.d/. Debe ejecutarse (normalmente con sudo) cada vez que se instalan o eliminan bibliotecas compartidas para que el enlazador dinamico pueda encontrarlas.


P: Escribe el comando para compilar un proyecto usando todos los nucleos del procesador disponibles.

R: make -j(nproc)` es un subcomando que devuelve el numero de nucleos disponibles del procesador, maximizando asi la velocidad de compilacion.


P: Escribe el comando para obtener los flags de enlazado (linker flags) de la biblioteca libcurl usando pkg-config.

R: pkg-config —libs libcurl. El comando pkg-config --libs libcurl devuelve los flags necesarios para enlazar con la biblioteca libcurl, como -L/ruta/lib -lcurl. Estos flags se pasan al compilador/enlazador durante la fase de enlazado. Para obtener los flags de compilacion (rutas de cabeceras) se usa --cflags.


P: Escribe el comando para verificar todas las opciones disponibles del script configure de un proyecto.

R: ./configure —help. El comando ./configure --help muestra todas las opciones de configuracion disponibles para el proyecto, incluyendo opciones de directorios (--prefix, --bindir), caracteristicas opcionales (--enable/--disable), dependencias externas (--with/--without) y variables de entorno relevantes. Es fundamental revisarlo antes de compilar.


P: Tip de examen: Recuerda que --prefix cambia el directorio base. Con --prefix=/usr, los bina…

R: Recuerda que --prefix cambia el directorio base. Con --prefix=/usr, los binarios iran a /usr/bin, las librerias a /usr/lib, etc. El valor por defecto es /usr/local.


P: Tip de examen: El comando make sin argumentos ejecuta la primera regla del Makefile (generalm…

R: El comando make sin argumentos ejecuta la primera regla del Makefile (generalmente all). La opcion -j permite compilacion en paralelo.


P: Tip de examen: Conoce la relacion entre configure.ac y configure, y entre Makefile.am y `…

R: Conoce la relacion entre configure.ac y configure, y entre Makefile.am y Makefile.in. El script autoreconf -i regenera todos los archivos necesarios.


P: Tip de examen: ldconfig actualiza el cache /etc/ld.so.cache. Siempre ejecutar ldconfig de…

R: ldconfig actualiza el cache /etc/ld.so.cache. Siempre ejecutar ldconfig despues de instalar nuevas bibliotecas compartidas. LD_LIBRARY_PATH es temporal; /etc/ld.so.conf.d/ es la solucion permanente.


P: Tip de examen: pkg-config es fundamental para resolver dependencias durante la compilacion. R…

R: pkg-config es fundamental para resolver dependencias durante la compilacion. Recuerda la variable PKG_CONFIG_PATH para agregar rutas personalizadas.


P: Que hace el comando --prefix=DIR?

R: Directorio base de instalacion (por defecto /usr/local)


P: Que hace el comando --sysconfdir=DIR?

R: Directorio para archivos de configuracion


P: Que hace el comando --with-PAQUETE?

R: Habilitar soporte para un paquete externo


P: Que hace el comando --without-PAQUETE?

R: Deshabilitar soporte para un paquete externo


P: Que hace el comando --enable-FEATURE?

R: Activar una caracteristica opcional


P: Que es/son Herramientas Autotools?

R: Las autotools son un conjunto de herramientas GNU que automatizan la generacion de scripts de configuracion:


P: Que es/son CMake?

R: CMake es un sistema de compilacion alternativo a autotools, cada vez mas popular:


P: Que es/son pkg-config?

R: pkg-config ayuda a obtener informacion sobre bibliotecas instaladas, facilitando la compilacion:


P: Que es/son Resolucion de problemas comunes?

R: | Problema | Causa probable | Solucion |


P: Que es/son Buenas practicas?

R: - Siempre leer los archivos README, INSTALL y CHANGELOG antes de compilar


P: Que es/son Trampas del examen?

R: > Errores comunes y distinciones criticas que LPI suele evaluar en este subtema: