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...
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 -xf ../glibc-libidn-2.3.6.tar.bz2
Aplica el siguiente parche para corregir errores de construcción en paquetes que incluyen linux/types.h depues de sys/kd.h:
patch -Np1 -i ../glibc-2.3.6-linux_types-1.patch
Añade una cabecera que define las funciones de llamadas al sistema para la característica inotify disponible en los nuevos núcleos Linux:
patch -Np1 -i ../glibc-2.3.6-inotify-1.patch
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
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.6/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:
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
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:
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
Instala la cabecera inotify en la localización de las cabeceras del sistema:
cp -v ../glibc-2.3.6/sysdeps/unix/sysv/linux/inotify.h \ /usr/include/sys
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.3.6/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.3.6/localedata/SUPPORTED en el improbable caso de que las necesites.
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:
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.
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