Linux From Scratch: Versión 4.1 | ||
---|---|---|
Anterior | Capítulo 6. Instalación de los programas del sistema base | Siguiente |
Estimación del tiempo de construcción: 14.71 SBU Estimación del espacio necesario en disco: 369 MB |
Última versión comprobada: 2.2.5.
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.
Glibc instala lo siguiente:
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
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]
Última versión comprobada: 2.2.5.
Bash: sh
Binutils: ar, as, ld, ranlib, readelf
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mknod, mv, mkdir, rm, touch
Gcc: cc, cc1, collect2, cpp, gcc
Grep: egrep, grep
Gzip: gzip
Make: make
Gawk: gawk
Sed: sed
Sh-utils: date, expr, hostname, pwd, uname
Texinfo: install-info, makeinfo
Textutils: cat, cut, sort, tr
Antes de instalar glibc, debes entrar al directorio glibc-2.3.1 usando el comando cd y desempaquetar Glibc-linuxthreads dentro de este directorio, no en /usr/src como normalmente harías.
Se sabe que este programa se comporta mal si cambias sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Por tanto, si tienes definida cualquier variable de entorno que pueda sobreescribir las optimizaciones por defecto, como CFLAGS y CXXFLAGS, te recomendamos que las desactives antes de construir Glibc.
Básicamente, compilar Glibc de forma diferente a como el libro sugiere pone tu sistema en grave riesgo.
Comenzaremos aplicando un parche que hace lo siguiente:
Convierte todas las apariciones de $(PERL) a /usr/bin/perl en el fichero malloc/Makefile. Se hace esto porque Glibc no puede autodetectar la localización de perl, pues el paquete Perl no se ha instalado todavía. Y si Glibc piensa que Perl no está instalado, el programa perl mtrace no será instalado.
Sustituye todas la apariciones de root con 0 en el fichero login/Makefile. Esto se hace porque la propia Glibc no se ha instalado aún y, por tanto, todavía no funciona la resolución de los nombres de usuario a su identificador, así que un chown root fichero fallará. Si usamos el identificador numérico (como chown 0 fichero) funciona perfectamente.
patch -Np1 -i ../glibc-2.3.1-root-perl.patch |
Hay un problema potencial que causa que fallen los binarios enlazados estáticamente contra una librería Glibc-2.2 o anterior. Aunque los binarios estáticos tienen incorporadas todas las partes necesarias de Glibc, todavía se apoyan en un conjunto de librerías externas: las librerías NSS de Glibc. Estas librerías, entre otras cosas, indican a los programas dónde se encuentra la base de datos con las contraseñas del sistema (en /etc/password, NIS, o cualquier otro sistema que se haya configurado).
Glibc ha sufrido algunos cambios desde la versión 2.2.x y el nuevo código NSS es incompatible con el antiguo. Así que cuando se instale Glibc se instalarán las nuevas librerías NSS, los programas estáticos cargarán estas nuevas librerías NSS y abortarán con segmentation fault (violación de segmento). Este parche deshace algunos de los cambios para evitar el problema.
Si construiste los programas del capítulo 5 en un sistema anfitrión que utilizase Glibc-2.2.x o anterior, debes aplicar el siguiente parche. Instalaremos Glibc otra vez al final de este capítulo para eliminar este parche, con lo que tendrás una Glibc púra tal y como sugieren los desarrolladores.
patch -Np1 -i ../glibc-2.3.1-libnss.patch |
Glibc comprobará el fichero /etc/ld.so.conf y abortará con un error si no lo encuentra, así que debemos crearlo:
touch /etc/ld.so.conf |
La documentación de instalación de Glibc recomienda construir Glibc en un directorio aparte, y no en el directorio de las fuentes:
mkdir ../glibc-build && cd ../glibc-build |
A continuación, prepara Glibc para su compilación:
../glibc-2.3.1/configure --prefix=/usr \ --disable-profile --enable-add-ons \ --libexecdir=/usr/bin |
El significado de las opciones de configure es:
--disable-profile: Esto desactiva la construcción de librerías con información de perfiles. Este comando puede omitirse si planeas usar perfiles.
--enable-add-ons: Esto activa el añadido que se instalará con Glibc, en nuestro caso linuxthreads
--libexecdir=/usr/bin: Esto hará que el programa pt_chown se instale en el directorio /usr/bin.
Durante la fase de configuración verás los siguientes mensajes de aviso:
configure: warning: *** These auxiliary programs are missing or too old: msgfmt *** some features will be disabled. *** Check the INSTALL file for required versions. configure: aviso: *** Este programa auxiliar no se ha encontrado o es demasiado antiguo: msgfmt *** algunas características serán desactivadas. *** Compruebe en el fichero INSTALL la versión requerida.
Que no se encuentre msgfmt (incluido en el paquete Gettext que será instalado más adelante en este capítulo) no causa ningún problema. Se usa msgfmt para generar los ficheros binarios traducidos que se usan para hacer que el sistema "hable" en un idioma diferente. Como estos ficheros de traducción ya han sido generados para ti, no es necesario msgfmt. Solamente necesitas msgfmt si cambias los ficheros fuente de traducción (los ficheros *.po del subdirectorio po) lo cual requerirá regenerar los ficheros binarios.
Debido a que Glibc aún no ha sido instalada, una de las pruebas lanzadas por el guión configure fallará. Esta prueba se supone que comprueba gcc para determinar si hay o no instalado un compilador para plataforma cruzada. Sin embargo, hace falte tener instalada Glibc para lanzar esta prueba. Puesto que la prueba falla, el guión configure asume automáticamente que hacemos compilación cruzada. Tenemos que evitar esta asunción indicandole explícitamente a Glibc que no queremos una compilación cruzada. No hacer esto prococa efectos indeseables, como que no se instalen los ficheros de las zonas horarias.
echo "cross-compiling = no" > configparms |
Continúa compilando el paquete:
make |
Continuaremos instalando el paquete. Las páginas de manual de Linuxthreads no van a instalarse en este punto debido a que necesitan una instalación funcional de Perl. Instalaremos Perl más tarde en este capítulo, y las páginas de manual serán instaladas cuando se instale Glibc por segunda vez, al final de este capítulo.
make install |
Las locales (utilizadas por la Glibc para hacer que el sistema "hable" en un idioma diferente) no se instalan cuando lanzas make install, por lo que tendremos que hacerlo nosotros ahora:
make localedata/install-locales |
Una alternativa al comando anterior es instalar solamente 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.1.
Para finalizar la instalación recargaremos Bash para que utilice los nuevos ficheros libnss_*. Esto también nos librará del mensaje I have no name! de la línea de comandos:
exec /static/bin/bash --login |
Necesitamos crear el fichero /etc/nsswitch.conf. Aunque glibc debería faciltarnos 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 cuál zona horaria estás, ejecuta este guión:
tzselect |
Luego de contestar unas preguntas referentes a tu localización, el guión te mostrará el nombre del fichero con tu zona horaria, algo como EST5EDT o Canada/Eastern. Crea entonces el enlace simbólico /etc/localtime ejecutando:
ln -sf ../usr/share/zoneinfo/Canada/Eastern /etc/localtime |
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 en el 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 |