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.
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 ../glibc-linuxthreads-2.3.4.tar.bz2
En ciertas circunstancias raras, Glibc puede fallar cuando los directorios de búsqueda estandar no existen. El siguiente parche evita esto:
patch -Np1 -i ../glibc-2.3.4-rtld_search_dirs-1.patch
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
Aplica el siguiente parche para corregir un error en Glibc que impide la ejecución de ciertos programas (como OpenOffice.org):
patch -Np1 -i ../glibc-2.3.4-tls_assert-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=/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 >glibc-check-log 2>&1 grep Error glibc-check-log
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 listadas en el fichero glibc-2.3.4/localedata/SUPPORTED) 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 /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 por ahora. Esto se aplica también a las locales ja_JP 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
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 -v --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:
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" # Inicio de /etc/ld.so.conf /usr/local/lib /opt/lib # Fin de /etc/ld.so.conf EOF