Glibc-2.3.3-lfs-5.1

El paquete Glibc contiene la librería C principal. Esta librería proporciona todas las rutinas básicas para la ubicación de memoria, busqueda de directorios, abrir y cerrar ficheros, leerlos y escribirlos, manejo de cadenas, coincidencia de patrones, aritmética, etc...

Tiempo estimado de construcción:  12.3 SBU
Espacio requerido en disco:       784 MB

La instalación de Glibc depende de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.

Instalación de Glibc

El sistema de construcción de Glibc está muy bien autocontenido y se instalará perfectamente, incluso aunque nuestros ficheros de especificación del compilador y los guiones del enlazador todavía apunten a /tools. No podemos ajustar las especificaciones y el enlazador antes de instalar Glibc, porque entonces las comprobaciones del autoconf de Glibc darían resultados erróneos y esto arruinaría nuestro objetivo de conseguir una construcción limpia.

Antes de comenzar a construir Glibc, recuerda desactivar las variables de entorno que puedan sobreescribir las opciones de optimización por defecto.

La documentación de Glibc recomienda construirlo fuera del directorio de las fuentes, en un directorio de construcción dedicado:

mkdir ../glibc-build
cd ../glibc-build

Ahora prepara Glibc para su compilación:

../glibc-2.3.3-lfs-5.1/configure --prefix=/usr \
    --disable-profile --enable-add-ons=linuxthreads \
    --libexecdir=/usr/lib --with-headers=/usr/include \
    --without-cvs

El significado de las nuevas opciones de configure:

  • --libexecdir=/usr/lib: Esto cambia la localización del programa pt_chown de su ubicación por defecto /usr/libexec a /usr/lib. El uso de libexec no se considera acorde con el FHS pues el FHS ni siquiera lo menciona.

  • --with-headers=/usr/include: Esto asegura que se utilicen las cabeceras del núcleo que hay en /usr/include para esta construcción. Si no se le pasa esta opción, entonces se utilizan las cabeceras que hay en /tools/include, lo que, por supuesto, no es ideal (aunque deberían ser idénticas). El uso de esta opción tiene la ventaja de que serás informado inmediatamente si te olvidaste de instalar los ficheros de cabecera del núcleo en /usr/include.

Compila el paquete:

make
[Importante]

Importante

El banco de pruebas para Glibc en este capítulo se considera crítico. No te lo saltes bajo ninguna circunstancia.

Comprueba los resultados:

make check

Las notas sobre el banco de pruebas que hay en “Glibc-2.3.3-lfs-5.1” son aún más apropiadas aquí. Asegúrate de consultarlas si tienes alguna duda.

Aunque se trata de un mensaje inofensivo, la fase de instalación de Glibc se quejará de la ausencia de /etc/ld.so.conf. Evita este molesto aviso con:

touch /etc/ld.so.conf

E instala el paquete:

make install

Las locales que hacen que tu sistema responda en un idioma diferente no se instalaron con el comando anterior. Hazlo con este:

make localedata/install-locales

Una alternativa al comando anterior es instalar solamente aquellas locales que necesites o desees. Esto puede hacerse usando el comando localedef. Puedes encontrar más información sobre esto en el fichero INSTALL de las fuentes de Glibc. Sin embargo, hay un número de locales que son esenciales para que las comprobaciones de paquetes posteriores se realicen. En particular, la prueba de libstdc++ en GCC. Las siguientes instrucciones, en vez del objetivo anterior install-locales, instalarán el conjunto mínimo de locales necesario para que las pruebas se ejecuten correctamente:

mkdir -p /usr/lib/locale
localedef -i de_DE -f ISO-8859-1 de_DE
localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro
localedef -i en_HK -f ISO-8859-1 en_HK
localedef -i en_PH -f ISO-8859-1 en_PH
localedef -i en_US -f ISO-8859-1 en_US
localedef -i es_MX -f ISO-8859-1 es_MX
localedef -i fa_IR -f UTF-8 fa_IR
localedef -i fr_FR -f ISO-8859-1 fr_FR
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP

Por último, construye las páginas de manual de linuxthreads:

make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man

E instálalas:

make -C ../glibc-2.3.3-lfs-5.1/linuxthreads/man install

Configuración de Glibc

Necesitamos crear el fichero /etc/nsswitch.conf, porque aunque glibc nos facilita los valores por defecto cuando este fichero no se encuentra o está corrupto, estos valores por defecto no funcionan bien con la conexión de red. Esto se tratará en un capítulo posterior. También tendremos que configurar nuestra zona horaria.

Crea un nuevo fichero /etc/nsswitch.conf ejecutando lo siguiente:

cat > /etc/nsswitch.conf << "EOF"
# Inicio de /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# Fin de /etc/nsswitch.conf
EOF

Para saber en qué zona horaria estás, ejecuta este guión:

tzselect

Después de contestar unas preguntas referentes a tu localización, el guión te mostrará el nombre de tu zona horaria, algo como EST5EDT o Canada/Eastern. Crea entonces el fichero /etc/localtime ejecutando:

cp --remove-destination /usr/share/zoneinfo/Canada/Eastern /etc/localtime

El significado de la opción:

  • --remove-destination: Esto es necesario para forzar la eliminación del enlace simbólico que ya existe. La razón por la que copiamos en lugar de enlazar es para cubrir el caso en el que /usr está en otra partición. Esto puede ser importante cuando, por ejemplo, se arranca en modo de usuario único.

Por supuesto, reemplaza Canada/Eastern por el nombre de la zona horaria que te dió el guión tzselect.

Configuración del cargador dinámico

Por defecto, el cargador dinámico (/lib/ld-linux.so.2) busca en /lib y /usr/lib las librerías dinámicas que necesitan los programas cuando los ejecutas. No obstante, si hay librerías en otros directorios que no sean /lib y /usr/lib, necesitas añadirlos al fichero de configuración /etc/ld.so.conf para que el cargador dinámico pueda encontrarlas. Dos directorios típicos que contienen librerías adicionales son /usr/local/lib y /opt/lib, así que añadimos estos directorios a la ruta de búsqueda del cargador dinámico.

Crea un nuevo fichero /etc/ld.so.conf ejecutando lo siguiente:

cat > /etc/ld.so.conf << "EOF"
# Inicio de /etc/ld.so.conf

/usr/local/lib
/opt/lib

# Fin de /etc/ld.so.conf
EOF

Contenido de Glibc

Programas instalados: catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump y zic

Librerías instaladas: ld.so, libBrokenLocale.[a,so], libSegFault.so, libanl.[a,so], libbsd-compat.a, libc.[a,so], libc_nonshared.a, libcrypt.[a,so], libdl.[a,so], libg.a, libieee.a, libm.[a,so], libmcheck.a, libmemusage.so, libnsl.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libresolv.[a,so], librpcsvc.a, librt.[a,so], libthread_db.so y libutil.[a,so]

Descripciones cortas

catchsegv puede usarse para crear una traza de la pila cuando un programa termina con una violación de segmento.

gencat genera catálogos de mensajes.

getconf muestra los valores de configuración del sistema para variables especificas del sistema de ficheros.

getent obtiene entradas de una base de datos administrativa.

glibcbug crea un informe de fallos y lo envía a la dirección de correo electrónico de errores.

iconv realiza conversiones de juego de caracteres.

iconvconfig crea un fichero de configuración para la carga rápida del módulo iconv.

ldconfig configura las asociaciones en tiempo de ejecución para el enlazador dinámico.

ldd muestra las librerías compartidas requeridas por cada programa o librería especificada.

lddlibc4 asiste a ld con los ficheros objeto.

locale es un programa Perl que le dice al compilador si debe activar (o desactivar) el uso de las locales POSIX para operaciones integradas.

localedef compila las especificaciones para locale.

mtrace ...

nscd es un demonio que suministra una caché para las peticiones más comunes al servidor de nombres.

nscd_nischeck comprueba si es necesario o no un modo seguro para búsquedas NIS+.

pcprofiledump vuelca la información generada por un perfil de PC.

pt_chown es un programa de ayuda para grantpt que establece el propietario, grupo y permisos de acceso para un pseudo-terminal esclavo.

rpcgen genera código C para implementar el protocolo RPC.

rpcinfo hace una llamada RPC en un servidor RPC.

sln se usa para hacer enlaces simbólicos. Está enlazado estáticamente, por lo que es útil para crear enlaces simbólicos a librerías dinámicas si, por alguna razón, el enlazador dinámico del sistema no funciona.

sprof lee y muestra los datos del perfil de los objetos compartidos.

tzselect pregunta al usuario información sobre la localización actual y muestra la descripción de la zona horaria correspondiente.

xtrace traza la ejecución de un programa mostrando la función actualmente ejecutada.

zdump es el visualizador de la zona horaria.

zic es el compilador de la zona horaria.

ld.so es el programa de ayuda para las librerías compartidas ejecutables.

libBrokenLocale es usada por programas como Mozilla para resolver locales rotas.

libSegFault es un manejador de señales de violación de segmento. Intenta capturar estas señales.

libanl es una librería de búsqueda de nombres asíncrona.

libbsd-compat proporciona la portabilidad necesaria para ejecutar ciertos programas BSD en Linux.

libc es la librería principal de C, una colección de funciones usadas frecuentemente.

libcrypt es la librería criptográfica.

libdl es la librería de interfaz del enlazado dinámico.

libg es una librería en tiempo de ejecución de g++.

libieee es la librería de punto flotante IEEE.

libm es la librería matemática.

libmcheck contiene código ejecutado en el arranque.

libmemusage es usada por memusage para ayudar a recoger información sobre el uso de memoria de un programa.

libnsl es la librería de servicios de red.

libnss* son las librerías Name Service Switch (Interruptor del Servicio de Nombres). Contienen funciones para resolver el nombre de sistemas, de usuarios, de grupos, alias, servicios, protocolos y similares.

libpcprofile Código usado por el núcleo para rastrear el tiempo de CPU gastado en funciones, líneas de código fuente e instrucciones.

libpthread es la librería de hilos POSIX.

libresolv proporciona funciones para la creación, envío e interpretación de paquetes de datos a servidores de nombres de dominio de Internet.

librpcsvc proporciona funciones para una miscelánea de servicios RPC.

librt proporciona funciones para muchas de las interfaces especificadas por el POSIX.1b Realtime Extension (Extensiones en Tiempo Real POSIX.1b).

libthread_db contiene funciones útiles para construir depuradores para programas multihilo.

libutil contiene código para funciones "estándar" usadas en diferentes utilidades Unix.