Instalando Glibc-2.2.5

Estimación del tiempo de construcción:      14.71 SBU
Estimación del espacio de disco requerido:  369 MB

Instalación de Glibc

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.

Explicación de los comandos

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).

Contenido de Glibc

Última versión comprobada: 2.2.5.

Descripciones

Descripciones

Dependencias de instalación de Glibc

Ú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