Linux From Scratch: Versión 4.0 | ||
---|---|---|
Anterior | Capítulo 6. Instalando los programas del sistema base | Siguiente |
Estimación del tiempo de construcción: 14.71 SBU Estimación del espacio de disco requerido: 369 MB |
Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.
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 harías.
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á. 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 o modifiques antes de construir Glibc. Estás avisado.
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:
patch -Np1 -i ../glibc-2.2.5-2.patch && touch /etc/ld.so.conf && mkdir ../glibc-build && cd ../glibc-build && ../glibc-2.2.5/configure --prefix=/usr --disable-profile \ --enable-add-ons --libexecdir=/usr/bin && echo "cross-compiling = no" > configparms && make && make install && make localedata/install-locales && exec /static/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. Algo a tener en cuenta es que el programa localedef asume que existe el directorio /usr/lib/locale, por lo que necesitas crearlo primero.
Las páginas de manual de los hilos (threads) de Linux no se instalarán en este punto debido a que necesitan una instalación funcional de Perl. Instalaremos Perl más tarde en este capítulo, así que retomaremos la instalación de las páginas de manual de los hilos de Linux posteriormente.
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.
patch -Np1 -i ../glibc-2.2.5-2.patch: Este parche convierte todas las coincidencias de $(PERL) a /usr/bin/perl en el fichero malloc/Makefile. Esto se hace debido a que Glibc no puede autodetectar la localización de perl porque todavía no ha sido instalado. El parche también reemplaza todas las ocurrencias de root en el fichero login/Makefile con 0. Esto se hace porque Glibc no se ha instalado todavía y, por tanto, no funciona aún la resolución del nombre de usuario a su identificador de usuario (ID), así que un chown root fichero fallará, mientras que funcionará bien si usas directamente los identificadores de usuario.
El parche contiene también varias correciones de errores y de seguridad. En particular contiene las correcciones "errlist", "dns resolver", "xdr_array", "calloc", "thread exit", "udivdi3", "math test", "restrict_arr" y "divbyzero" documentadas en http://www.zipworld.com.au/~gschafer/lfs-tweaks.html
touch /etc/ld.so.conf: Uno de los pasos finales en la instalación de Glibc es ejecutar 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 cual hará que Glibc por defecto use /lib y /usr/lib, que es suficiente por ahora).
--disable-profile: Esto desactiva la construcción de librerías con información para perfiles (profiling). Este comando puede omitirse si tienes intención de crear perfiles.
--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 /static/bin/bash --login: 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 símbolo del sistema, 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 la ausencia de Glibc).
Última versión comprobada: 2.2.5.
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
catchsegv puede usarse para crear una traza de la pila cuando un programa termina con una violación de segmento.
getconf muestra los valores de configuración del sistema para variables especificas del sistema de ficheros.
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.
locale es un programa Perl que le dice al compilador si debe activar (o desactivar) el uso de las locales POSIX para operaciones integradas.
mtrace imprime la ruta de multidifusión (multicast) de una fuente a un receptor (una consulta del rastro de una IP).
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
libSegFault es un manejador de señales de violación de segmento. Intenta capturar estas señales.
libbsd-compat proporciona la portabilidad necesaria para ejecutar ciertos programas en Linux.
Estos ficheros constituyen la librería C principal, que 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.
libmemusage es usada por memusage para ayudar a recoger información sobre el uso de memoria de un programa.
La idea básica es poner en módulos separados la implementación de los diferentes servicios ofrecidos para acceder a las bases de datos. Esto tiene algunas ventajas:
los colaboradores pueden añadir nuevos servicios sin tener que añadirlos a la librería C de GNU,
los módulos pueden actualizarse separadamente,
la imagen de la librería C es más pequeña.
Código usado por el núcleo para rastrear el tiempo de CPU gastado en funciones, líneas de código fuente e instrucciones.
Esta librería proporciona funciones para la creación, envío e interpretación de paquetes de datos a servidores de nombres de dominio de Internet.
Esta librería proporciona funciones para muchas de las interfaces especificadas por el POSIX.1b Realtime Extension (Extensiones en Tiempo Real POSIX.1b).
Ú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