6.11. Glibc-2.3.4

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: 12.3 SBU
Espacio requerido en disco: 476 MB
Para su instalación depende de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed y Texinfo

6.11.1. Instalación de Glibc

Se sabe que este programa se comporta mal si se cambian sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Si tienes definida cualquier variable de entorno que altere las optimizaciones por defecto, como CFLAGS o CXXFLAGS, desactívala cuando construyas Glibc.

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 linuxthreads contiene las páginas de manual para las librerías de hilos instaladas por Glibc. Desempaquetalo dentro del directorio de las fuentes de Glibc:

tar -xjvf /sources/glibc-linuxthreads-2.3.4.tar.bz2

Hay dos pruebas de Glibc que fallan cuando el núcleo en ejecución es un 2.6.11.x. Se ha determinado que el problema se encuentra en las propias pruebas, no en libc o en el núcleo. Este parche corrige el problema:

patch -Np1 -i ../glibc-2.3.4-fix_test-1.patch

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

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

Prepara Glibc para su compilación:

../glibc-2.3.4/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 check

El banco de pruebas de Glibc depende en gran medida de ciertas funciones de tu sistema anfitrión, en particular del núcleo. En general, se espera que el banco de pruebas de Glibc pase siempre con éxito. Sin embargo, bajo ciertas circunstancias algunos fallos son inevitables. Aquí hay una lista con los problemas más comunes:

  • La prueba math falla en ocasiones cuando se ejecuta en sistemas donde la CPU no es una Intel genuina o una AMD genuina relativamente nueva. Es sabido que ciertos ajustes de optimización también afectan.

  • La prueba gettext falla en ocasiones debido a problemas del sistema anfitrión. La razón exacta aún no está clara.

  • 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, varias 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 tu sistema responda en un idioma diferente no se instalaron con el comando anterior. Hazlo con este:

make localedata/install-locales

Para ahorrar tiempo, una alternativa al comando anterior (que genera e instala todas las locales que Glibc conoce) 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

Algunas de las locales instaladas por el anterior comando make localedata/install-locales no están correctamente soportadas por algunas de las aplicaciones que hay en los libros LFS y BLFS. Debido a los diversos problemas provocados por presunciones de los programadores, que rompen dichas locales, LFS no debería utilizarse con locales que utilicen conjuntos de caracteres multibyte (incluido UTF-8) o escritura de derecha a izquierda. Se requieren numerosos parches no oficiales e inestables para corregir estos problemas y el equipo de desarrolladores de LFS ha decidido no soportar ese tipo de locales complejas. Esto se aplica también a las locales ja_JA y fa_IR, que se han instalado sólo para pasar las pruebas de GCC y Gettext, y el programa watch (que es parte del paquete Procps) no fuciona correctamente en ellas. Varios intentos para evitar estas restricciones están documentados en las recetas relacionadas con internacionalización.

Construye las páginas de manual de linuxthreads, que son una gran referencia sobre la API de hilos (aplicable también a NPTL):

make -C ../glibc-2.3.4/linuxthreads/man

Instala dichas páginas:

make -C ../glibc-2.3.4/linuxthreads/man install

6.11.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"
# 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 determinar la zona horaria local, ejecuta 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, algo como EST5EDT o Canada/Eastern. Crea entonces el fichero /etc/localtime ejecutando:

cp --remove-destination /usr/share/zoneinfo/[xxx] \
    /etc/localtime

Sustituye [xxx] con el nombre de la zona horaria facilitado por tzselect (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.11.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"
# Inicio de /etc/ld.so.conf

/usr/local/lib
/opt/lib

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

6.11.4. Contenido de Glibc

Programas instalados: catchsegv, gencat, getconf, getent, 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], 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 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

Le dice al compilador que active o desactive el uso de las locales POSIX para operaciones integradas.

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.

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

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 por programas como Mozilla para resolver locales rotas.

libSegFault

El manejador de señales de violación de segmento.

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.

libcrypt

La librería criptográfica.

libdl

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

libg

Una librería en tiempo de ejecución para g++.

libieee

La librería de punto flotante del IEEE.

libm

La librería matemática.

libmcheck

Contiene código ejecutado en el arranque.

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.