Linux From Scratch: Versión 3.3 | ||
---|---|---|
Anterior | Capítulo 6. Instalando los programas del sistema base | Siguiente |
Estimación del tiempo de construcción: 46 minutos Estimación del espacio de disco requerido: 350 MB |
Antes de instalar glibc, debes entrar al directorio glibc-2.2.5 y desempaquetar glibc-linuxthreads dentro del directorio glibc-2.2.5, no en /usr/src como normalmente debe hacerse.
Se sabe que este programa se comporta mal si cambias sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Es mejor dejar a Glibc tal como está, así que te recomendamos borrar CFLAGS, CXXFLAGS y otras variables/parámetros como éstos que podrían cambiar la optimización con la que viene por defecto. Igualmente, no le pases la opción --enable-kernel al guión ./configure. Se sabe que causa violaciones de segmento cuando otros paquetes como fileutils, make y tar son enlazados de nuevo con ella.
Básicamente, compilar Glibc de forma diferente a como el libro sugiere pone tu sistema en grave riesgo.
Instala Glibc ejecutando los siguientes comandos:
mknod -m 0666 /dev/null c 1 3 && touch /etc/ld.so.conf && cp malloc/Makefile malloc/Makefile.backup && sed 's%\$(PERL)%/usr/bin/perl%' malloc/Makefile.backup > malloc/Makefile && cp login/Makefile login/Makefile.backup && sed 's/root/0/' login/Makefile.backup > login/Makefile && mkdir ../glibc-build && cd ../glibc-build && ../glibc-2.2.5/configure --prefix=/usr \ --enable-add-ons --libexecdir=/usr/bin && echo "cross-compiling = no" > configparms && make && make install && make localedata/install-locales && exec /bin/bash --login |
Una alternativa a make localedata/install-locales es instalar solamente aquellos 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.2.5.
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.
mknod -m 0666 /dev/null c 1 3: Glibc necesita un dispositivo nulo para compilar correctamente. Todos los demás dispositivos se crearán en la siguiente sección.
touch /etc/ld.so.conf Uno de los pasos finales en la instalación de Glibc es lanzar ldconfig para actualizar la caché del cargador dinámico. Si este fichero no existe, la instalación se abortará con el error de que no puede leerlo; así que, simplemente, creamos un fichero vacío (el fichero vacío hará que Glibc por defecto use /lib y /usr/lib que es suficiente).
sed 's%\$(PERL)%/usr/bin/perl%' malloc/Makefile.backup > malloc/Makefile: Este comando de sed busca a través de malloc/Makefile.backup y convierte todas las ocurrencias de $(PERL) en /usr/bin/perl. La salida es entonces escrita en el original malloc/Makefile.in que es usado durante la configuración. Esto se hace porque Glibc no puede autodetectar perl debido a que no ha sido instalado todavía.
sed 's/root/0' login/Makefile.backup > login/Makefile: Este comando de sed reemplaza todas las ocurrencias de root en login/Makefile.backup con 0. Esto es porque todavía no tenemos Glibc en el sistema, así que los nombres de usuario no pueden ser resueltos a su identificador. Por tanto, reemplazamos el nombre de usuario root con su identificador de usuario 0.
--enable-add-ons: Esto activa los añadidos que hemos instalado con Glibc: linuxthreads
--libexecdir=/usr/bin: Esto causará que el programa pt_chown sea instalado en el directorio /usr/bin.
echo "cross-compiling = no" > configparms: Hacemos esto porque solamente estamos compilando para nuestro sistema. La compilación cruzada se usa, por ejemplo, para construir un paquete para Apple Power PC en un sistema Intel. La razón por la que Glibc piensa que hacemos compilación cruzada es porque no puede compilar un programa de prueba para determinarlo, así que automáticamente pasa por defecto a compilación cruzada. La compilación del programa de prueba falla porque Glibc no se ha instalado aún.
exec /bin/bash: Este comando lanzará una nueva instancia de bash que reemplazará al intérprete de comandos actual. Esto se hace para quitar el mensaje "I have no name!" del indicador de entrada de comandos, que estaba causado por la imposibilidad de bash de resolver un identificador de usuario a su nombre de usuario (que, a su vez, se debía a que no se encontraba instalada Glibc).
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
glibcbug crea un informe de fallos sobre glibc y lo envía a la dirección de correo electrónico de errores.
ldd muestra las librerías compartidas requeridas por cada programa o librería especificada en la línea de comandos.
nscd es un demonio que suministra una caché para las peticiones más comunes al servidor de nombres.
pt_chown establece el propietario, grupo y permisos de acceso del pseudo-terminal esclavo correspondiente al pseudo-terminal maestro apuntado por el descriptor de ficheros "3". Este es el programa de ayuda para la función `grantpt'. No está pensado para ejecutarse directamente desde la línea de comandos.
sln enlaza simbólicamente un destino a una fuente. Está enlazado estáticamente, no necesitando enlazado dinámico. Por tanto, sln es útil para crear enlaces simbólicos a librerías dinámicas si, por alguna razón, el enlazador dinámico del sistema no funciona.
ld.so, libBrokenLocale.[a,so], libBrokenLocale_p.a, libSegFault.so, libanl.[a,so], libanl_p.a, libbsd-compat.a, libc.[a,so], libc_nonshared.a, libc_p.a, libcrypt.[a,so], libcrypt_p.a, libdl.[a,so], libdl_p.a, libg.a, libieee.a, libm.[a,so], libm_p.a, libmcheck.a, libmemusage.so, libnsl.a, libnsl_p.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libpthread_p.a, libresolv.[a,so], libresolv_p.a, librpcsvc.a, librpcsvc_p.a, librt.[a,so], librt_p.a, libthread_db.so, libutil.[a,so] y libutil_p.a
Estos ficheros constituyen la librería C principal. La librería C es una colección de funciones usadas frecuentemente en programas. De esta forma un programador no necesita crear sus propias funciones para cada tarea individual. Las cosas más comunes, como mostrar una cadena en pantalla, están presentes y a disposición del programador.
La librería C (en realidad, casi todas las librerías) viene en dos formas: dinámica y estática. En resumen, cuando un programa usa una librería C estática, se copia el código de la librería C dentro del ejecutable. Cuando un programa usa una librería dinámica, el ejecutable no contiene el código de la librería pero, en su lugar, tiene una rutina que carga las funciones desde esa librería en el momento en el que se ejecuta. De esta forma disminuye de forma significativa el tamaño del programa. La documentación que acompaña a la librería C describe esto con más detalle, pues es demasiado complicado explicarlo aquí en dos o tres líneas.
Para instalar Glibc-2.2.5 se necesita lo siguiente:
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