6.9. Glibc-2.6.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, búsqueda de directorios, abrir y cerrar ficheros, leerlos y escribirlos, manejo de cadenas, coincidencia de patrones, aritmética, etc...

Tiempo estimado de construcción: 19.5 SBU testsuite included
Espacio requerido en disco: 556 MB testsuite included

6.9.1. Instalación de Glibc

[Nota]

Nota

Algunos paquetes externos a LFS suguienren la instalación de GNU libiconv para poder traducir datos de una codificación a otra. La página del proyecto (http://www.gnu.org/software/libiconv/) dice “Esta librería proporciona una implementación iconv() para usarla en sistemas que no tienen una, o cuya implementación no puede convertir de/a Unicode”. Glibc proporciona una implementación iconv() y puede convertir de/a Unicode, por tanto libiconv no es necesaria en un sistema LFS.

El sistema de construcción de Glibc está muy bien autocontenido y se instalará perfectamente, incluso aunque nuestro fichero de especificaciones 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.

El paquete glibc-libidn añade a Glibc soporte para nombres de dominio internacionalizados (IDN). Muchos programas que soportan IDN requieren la librería libidn completa (mira http://www.linuxfromscratch.org/blfs/view/svn/general/libidn.html), no este añadido. Desempaquetalo desde dentro del directorio de las fuentes de Glibc:

tar -xvf ../glibc-libidn-2.6.1.tar.gz
mv glibc-libidn-2.6.1 libidn

En la locale vi_VN.TCVN, bash entra en un bucle infinito al inicio. Se desconoce si esto es un fallo de bash o un problema de Glibc. Desactiva la instalación de dicha locale para evitar el problema:

sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED

Cuando se ejecuta make install, un guión llamado test-installation.plrealiza un pequeña prueba de sanidad de nuestra recién instalada Glibc. Sin embargo, debido a que nuestras herramientas principales todavía apuntan al directorio /tools, la prueba de sanidad podría efectuarse sobre la Glibc equivocada. Podemos forzar que el guión compruebe la Glibc recién instalada con lo siguiente:

sed -i \
's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|' \
        scripts/test-installation.pl

El guión ldd contiene sintaxis específica de Bash. Canbia su programa intérprete a /bin/bash por si decides instalar un /bin/sh diferente como se describe en el capítulo Shells del libro BLFS:

sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in

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

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

Añade de nuevo a CFLAGS la opción de compilación necesaria:

echo "CFLAGS += -march=i486" > configparms

Prepara Glibc para su compilación:

../glibc-2.6.1/configure --prefix=/usr \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc

Significado de la nueva opción de configure:

--libexecdir=/usr/lib/glibc

Esto cambia la localización del programa pt_chown de su ubicación por defecto /usr/libexec a /usr/lib/glibc.

Compila el paquete:

make
[Importante]

Importante

En esta sección, el banco de pruebas para Glibc se considera crítico. No te lo saltes bajo ninguna circunstancia.

Comprueba los resultados:

make -k check 2>&1 | tee glibc-check-log
grep Error glibc-check-log

Posiblemente veas un fallo esperado (ignorado) en la prueba posix/annexc. Adicionalmente, el banco de pruebas de Glibc depende en parte del sistem anfitrión. Aquí hay una lista con los problemas más comunes:

  • La prueba nptl/tst-cancel1 falla cuando se usa la serie 4.1 de GCC.

  • Las pruebas nptl/tst-clock2 y tst-attr3 fallan a veces. La razón no se entiende por completo, pero hay indicios de q2ue una alta carga del sistema puede probocarlos.

  • Las pruebas math fallan en ocasiones cuando se ejecutan en sistemas donde la CPU no es una Intel o AMD genuina relativamente nueva.

  • Si has montado la partición LFS con la opción noatime, la prueba atime fallará. Como se mencionó en Sección 2.4, “Montar la nueva partición”, no utilices la opción noatime cuando construyas un LFS.

  • Cuando se ejecutan en hardware antiguo y lento, o en sistemas bajo carga, algunas pruebas pueden fallar debido a que se excede el tiempo estimado.

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

Instala el paquete:

make install

Las locales que hacen que el sistema responda en un idioma diferente no se instalaron con el comando anterior. Ninguna locale es requerida, pero si no se encuentran algunas de ellas los bancos de pruebas de paquetes posteriores podrían saltarse pruebas importantes.

Locales individuales pueden instalarse usando el prtograma localedef. Por ejemplo, el primer comando localedef mostrado a continuación combina la definición de locale independiente del frupo de caractéres /usr/share/i18n/locales/de_DE con la definición de mapa de caractéres /usr/share/i18n/charmaps/ISO-8859-1.gz y añade el resultado al fichero /usr/lib/locale/locale-archive. Las siguientes instrucciones instalarán el conjunto mínimo de locales necesario para una correcta cobertura de las pruebas:

mkdir -pv /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 en_US -f UTF-8 en_US.UTF-8
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 fr_FR -f UTF-8 fr_FR.UTF-8
localedef -i it_IT -f ISO-8859-1 it_IT
localedef -i ja_JP -f EUC-JP ja_JP

Adicionalmente, instala la locale para tu propio país, idioma y conjunto de caractéres.

Alternatívamente, instala todas las locales listadas en el fichero glibc-2.6.1/localedata/SUPPORTED (incluye todas las locales listadas arriba y muchas mas) con el siguiente comando, el cual tarda bastante tiempo en finalizar:

make localedata/install-locales

Entoces usa el comando localedef para crear e instalar las locales no listadas en el fichero glibc-2.6.1/localedata/SUPPORTED en el improbable caso de que las necesites.

6.9.2. 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 en un entorno de red. También hay que configurar la zona horaria.

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

cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

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

# End /etc/nsswitch.conf
EOF

Una forma de determinar la zona horaria local es ejecutar el siguiente 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 (por ejemplo America/Edmonton). Otras zonas locales posibles, como Canada/Eastern or EST5EDT, que no son identificadas por el guión pero que pueden usarse, se encuentran listadas en /usr/share/zoneinfo.

Crea entonces el fichero /etc/localtime ejecutando:

cp -v --remove-destination /usr/share/zoneinfo/<xxx> \
    /etc/localtime

Sustituye <xxx> con el nombre de la zona horaria seleccionada (por ejemplo, Europe/Madrid).

Significado de la opción de cp:

--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 se arranca en modo de usuario único.

6.9.3. 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"
# Begin /etc/ld.so.conf

/usr/local/lib
/opt/lib

# End /etc/ld.so.conf
EOF

6.9.4. Contenido de Glibc

Programas instalados: catchsegv, gencat, getconf, getent, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump, and zic
Librerías instaladas: ld.so, libBrokenLocale.{a,so}, libSegFault.so, libanl.{a,so}, libbsd-compat.a, libc.{a,so}, libcidn.so, libcrypt.{a,so}, libdl.{a,so}, libg.a, libieee.a, libm.{a,so}, libmcheck.a, libmemusage.so, libnsl.{a,so}, 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 específicas del sistema de ficheros.

getent

Obtiene entradas de una base de datos administrativa.

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 especificados.

lddlibc4

Asiste a ldd con los ficheros objeto.

locale

Mustra información diversa sobre la locale actual.

localedef

Compila las especificaciones de locales.

mtrace

Lee e interpreta un fichero de traza de memoria y muestra un sumario en formato legible.

nscd

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

pcprofiledump

Vuelca la información generada por un perfil de PC.

pt_chown

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 a un servidor RPC.

sln

Un programa ln enlazado estáticamente.

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

El visualizador de la zona horaria.

zic

El compilador de la zona horaria.

ld.so

El programa de ayuda para las librerías compartidas ejecutables.

libBrokenLocale

Usada internamente por Glibc como un gran apaño para hacer que programas rotois (por ejemplo algunas aplicaciones Motif) funcionen. Para mas información, mira los comentarios en glibc-2.6.1/locale/broken_cur_max.c.

libSegFault

El manejador de señales de violación de segmento, usado por catchsegv.

libanl

Una librería de búsqueda de nombres asíncrona.

libbsd-compat

Proporciona la portabilidad necesaria para ejecutar ciertos programas BSD en Linux.

libc

La librería principal de C.

libcidn

Usada internamente por Glibc para manejar nombres de dominio internacionalizados en la función getaddrinfo().

libcrypt

La librería criptográfica.

libdl

La librería de interfaz del enlazado dinámico.

libg

Librería vacía que no contiene funciones. Anteriormente era una librería en tiempo de ejecución para g++.

libieee

Al enlazar contra este módulo se fuerzan las reglas de manejo de errores para funciones matemáticas según se define por el Instituto de Ingenieros Electricos y Electrónicos (IEEE). Por defecto se usa manejo de errores POSIX.1.

libm

La librería matemática.

libmcheck

Activa la comprobación de ocupación de memoria cuando se enlaza contra ella.

libmemusage

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

libnsl

La librería de servicios de red.

libnss

Las librerías Name Service Switch (Interruptor del Servicio de Nombres). Contienen funciones para resolver nombres de sistemas, usuarios, grupos, alias, servicios, protocolos y similares.

libpcprofile

Contiene funciones de perfiles utilizadas para observar la cantidad de tiempo de CPU utilizado por líneas concretas del código fuente.

libpthread

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.