Linux From Scratch: Versión 5.0 | ||
---|---|---|
Anterior | Capítulo 6. Instalación de los programas del sistema base | Siguiente |
Tiempo estimado de construcción: 12.3 SBU Estimación del espacio necesario en disco: 784 MB |
Glibc es la librería C que proporciona las llamadas al sistema y las funciones básicas, tales como open, malloc, printf, etc. La librería C es utilizada por todos los programas enlazados dinámicamente.
Programas instalados: catchsegv, gencat, getconf, getent, glibcbug, 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], libc_nonshared.a, 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]
Glibc depende de: Bash, Binutils, Coreutils, Diffutils, Gawk, GCC, Gettext, Grep, Make, Perl, Sed, Texinfo.
El sistema de construcción de Glibc está muy bien autocontenido y se instalará perfectamente, incluso aunque nuestros ficheros de especificación 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.
Nota: El banco de pruebas para Glibc en este capítulo se considera crítico. No te lo saltes bajo ninguna circunstáncia.
Antes de comenzar a construir Glibc, recuerda desempaquetar el archivo Glibc-linuxthreads dentro del directorio glibc-2.3.2 y desactivar las variables de entorno que puedan sobreescribir las opciones de optimización por defecto.
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 |
Luego, aplica el mismo parche que utilizamos anteriormente:
patch -Np1 -i ../glibc-2.3.2-sscanf-1.patch |
La documentación de Glibc recomienda construirlo fuera del directorio de las fuentes, en un directorio de contrucción dedicado:
mkdir ../glibc-build cd ../glibc-build |
Ahora prepara Glibc para su compilación:
../glibc-2.3.2/configure --prefix=/usr \ --disable-profile --enable-add-ons \ --libexecdir=/usr/bin --with-headers=/usr/include |
El significado de las nuevas opciones de configure:
--libexecdir=/usr/bin: Esto hará que el programa pt_chown se instale en el directorio /usr/bin.
--with-headers=/usr/include: Esto asegura que se utilicen las cabeceras del núcleo que hay en /usr/include para esta construcción. Si no se le pasa esta opción, entonces se utilizan las cabeceras que hay en /tools/include, lo que, por supuesto, no es ideal (aunque deberían ser idénticas). El uso de esta opción tiene la ventaja de que serás informado inmediátamente si te olvidaste de instalar los ficheros de cabecera del núcleo en /usr/include.
Compila el paquete:
make |
Comprueba los resultados:
make check |
Las notas sobre el banco de pruebas que hay en la sección Instalación de Glibc-2.3.2 del Capítulo 5 son aún más apropiadas aquí. Asegurate de consultarlas si tienes alguna duda.
E 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 |
Una alternativa al comando anterior es instalar sólamente aquellas locales que necesites o desees. Esto puede hacerse usando el comando localedef. Se puede encontrar más información sobre esto en el fichero INSTALL del árbol de glibc-2.3.2. Sin embargo, hay un número de locales que son esenciales para que las comprobaciones de paquetes posteriores se realicen correctamente. En particular, la prueba de libstdc++ en GCC. Las siguientes instrucciones, en vez del comando anterior install-locales, instalarán el conjunto mínimo de locales necesario para que las comprobaciones 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 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 |
Por último, construye las páginas de manual de linuxthreads:
make -C ../glibc-2.3.2/linuxthreads/man |
E instálalas:
make -C ../glibc-2.3.2/linuxthreads/man install |
Necesitamos crear el fichero /etc/nsswitch.conf, porque aunque glibc nos facilta los valores por defecto cuando este fichero no se encuentra o está corrupto, estos valores por defecto no funcionan bien con la conexión de red. Esto se tratará en un capítulo posterior. También tendremos que configurar nuestra 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 publickey: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: db files # Fin de /etc/nsswitch.conf EOF |
Para saber en qué zona horaria estás, ejecuta este 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/Canada/Eastern /etc/localtime |
El significado de la opción:
--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, por ejemplo, se arranca en modo de usuario único.
Por supuesto, reemplaza Canada/Eastern por el nombre de la zona horaria que te dió el guión tzselect.
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 |