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

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

Hay que resaltar que compilar Glibc de forma diferente a como el libro sugiere pone la estabilidad de tu sistema en grave riesgo.

Hay dos pruebas de Glibc que fallan cuando el núcleo en ejecución es un 2.6.11 o superior. Se ha determinado que el problema se encuentra en las propias pruebas, no en la librería C o en el núcleo. Si piensas ejecutar el banco de pruebas, aplica este parche:

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 -v ../glibc-build
cd ../glibc-build

Prepara Glibc para su compilación:

../glibc-2.3.4/configure --prefix=/tools \
    --disable-profile --enable-add-ons \
    --enable-kernel=2.6.0 --with-binutils=/tools/bin \
    --without-gd --with-headers=/tools/include \
    --without-selinux

Significado de las opciones de configure:

--disable-profile

Esto construye las librerías sin información de perfiles. Omite esta opción si planeas usar perfiles en las herramientas temporales.

--enable-add-ons

Esto le indica a Glibc que utilice el añadido NPTL como su librería de hilos.

--enable-kernel=2.6.0

Esto le indica a Glibc que compile la librería con soporte para núcleos Linux 2.6.x.

--with-binutils=/tools/bin

Aunque no es necesario, esta opción nos asegura que no haya equívocos sobre qué programas de Binutils se utilizarán durante la construcción de Glibc.

--without-gd

Esto evita la construcción del programa memusagestat, el cual insiste en enlazarse contra las librerías del sistema anfitrión (libgd, libpng, libz y demás).

--with-headers=/tools/include

Esto le indica a Glibc que se compile contra las cabeceras recién instaladas en el directorio de herramientas, para que conozca exactamente las características que tiene el núcleo y pueda optimizarse correctamente.

--without-selinux

Cuando se construye a partir de un anfitrión que utiliza la funcionalidad de SELinux (como Fedora Core 3), Glibc se construirá con soporte para SELinux. Como las herramientas del entorno LFS no contienen soporte para SELinux, una Glibc compilada con dicho soporte no funcionará correctamente.

Durante esta fase puede que veas el siguiente mensaje de aviso:

configure: WARNING:
*** These auxiliary programs are missing or
*** incompatible versions: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

configure: AVISO:
*** Versión incompatible o ausente de estos
*** programas auxiliares: msgfmt
*** algunas características serán desactivadas.
*** Comprueba en el fichero INSTALL las versiones requeridas.

Normalmente, la ausencia o incompatibilidad del programa msgfmt es inofensiva, pero se cree que en ocasiones puede causar problemas al ejecutar el banco de pruebas. El programa msgfmt es parte del paquete Gettext y debería proporcionarlo el sistema anfitrión. Si msgfmt está presente pero es incompatible, actualiza el paquete Gettext del sistema anfitrión o continúa sin él y observa si los bancos de pruebas se ejecutan sin problemas.

Compila el paquete:

make

La compilación está completa. Como se mencionó antes, no es obligatorio ejecutar los bancos de pruebas de las herramientas temporales en este capítulo. Si de todas formas deseas ejecutar el banco de pruebas de Glibc, hazlo con el siguiente comando:

make check

Consulta en la Sección 6.11, “Glibc-2.3.4”, la explicación de los fallos de las pruebas que tienen una particular importancia.

En este capítulo algunas pruebas pueden verse afectadas adversamente por las herramientas existentes o el entorno del sistema anfitrión. En resumen, no te preocupes demasiado si ves fallos en el banco de pruebas de Glibc en este capítulo. La Glibc del Capítulo 6 es la que acabaremos usando al final, por lo que es la que necesitamos que pase la mayoría de las pruebas (incluso en el Capítulo 6 es posible que todavía ocurran algunos fallos, la prueba math por ejemplo).

Cuando aparezca un fallo, anótalo y continua ejecutando de nuevo make check. El banco de pruebas debería continuar a partir de donde se quedó. Puedes evitar esta secuencia de inicio-parada ejecutando make -k check. Si utilizas esta opción, asegúrate de registrar la salida para que más tarde puedas revisar el fichero de registro en búsqueda de errores.

La fase de instalación de Glibc mostrará un aviso inofensivo sobre la ausencia del fichero /tools/etc/ld.so.conf. Evita este confuso aviso con:

mkdir -v /tools/etc
touch /tools/etc/ld.so.conf

Instala el paquete:

make install

Diferentes países y culturas tienen diferentes convenciones sobre cómo comunicarse. Estas convenciones van desde las más simples, como el formato para representar fechas y horas, a las más complejas, como el lenguaje hablado. La “internacionalización” de los programas GNU funciona mediante el uso de locales.

[Nota]

Nota

Si no estás ejecutando los bancos de pruebas en este capítulo, como recomendamos, no hay razón para instalar ahora las locales. Las instalaremos en el siguiente capítulo.

Si de todas formas quieres instalar las locales de Glibc, hazlo con el siguiente comando:

make localedata/install-locales

Para ahorrar tiempo, una alternativa al comando anterior (que genera e instala todas las locale 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 -pv /tools/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

Los detalles sobre este paquete se encuentran en la Sección 6.11.4, “Contenido de Glibc”.