Instalación de Glibc-2.3.1

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

Contenido de Glibc

Ú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:

 

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

 

Instalación de Glibc

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:

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:

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

 

Configuración de Glibc

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.

 

Configuración del cargador dinámico

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