En esta sección vamos a instalar Glibc, aunque previamente debemos tener otro software instalado en el sistema LFS. Todos estos programas se van a enlazar estáticamente. Esto implica bastante trabajo extra porque después de instalar Glibc y los compiladores CC de GNU habremos de reinstalarlos otra vez para que sean enlazados dinámicamente. Si alguien conoce una forma más práctica de hacer esta parte, sin tener que enlazar previamente de forma estática, por favor hacérmelo saber.
Soy consciente de otra opción, que sería instalar Glibc utilizando programas precompilados. Lamentablemente esto va en contra de lo que intentamos hacer aquí (montarlo todo desde cero). Por lo tanto, esta opción no nos vale.
Todos programas que van a ser instalados en esta sección serán compilados en nuestro sistema Linux normal, y a continuación copiados al sistema LFS.
La instalación de estos programas es, en la mayoría de los casos, muy sencilla. Por lo tanto, no me extenderé mucho en ello y tampoco comentaré para qué sirve cada uno de ellos. Son programas triviales, si quieres más información sobre ellos lo mejor será que leas el correspondiente fichero README o cualquier otra documentación.
configuremake LDFLAGS=-staticmake a $LFS/usr/bin
configuremake LDFLAGS=-staticsed/sed a $LFS/usr/bin
configuremake LDFLAGS=-staticdate echo false pwd sleep stty su true unamechroot
configuremake LDFLAGS=-staticchgrp chmod chown cp dd
df dir dircolors du ln ls mkdir mkfifo mknod rm rmdir sync touch vdirginstall$LFS/usr/bin/ginstall como $LFS/usr/bin/install
configuremakemake
LDFLAGS=-staticlosetup mount swapon umount$LFS/sbin/swapoff a $LFS/sbin/swapon
configuremake LDFLAGS=-staticcatcksum comm csplit cut expand fmt fold head join md5sum nl od paste pr sort
split sum tac tail tr unexpand uniq wc
configuremake LDFLAGS=-staticDespués de compilar el contenido del directorio src tendrás dos programas: tar y rmt. Tar es un programa de uso muy conocido, mientras que Rmt es el acrónimo de ReMote Tapeserver (servidor de cintas remoto). Si no necesitas este programa (por ejemplo, si no tienes una unidad de cinta en tu equipo o red) no hace falta que lo copies.
src/tar a $LFS/binsrc/rmt a $LFS/bin (Si lo necesitas)
configuremake LDFLAGS=-staticYo utilizo la versión 1.2.4 y durante el proceso de compilación me aparece el siguiente error: "conflicting types for basename" (tipos conflictivos para el nombre base). Si a ti también te ocurre, aquí tienes como solucionarlo:
Recompila el paquete (ejecutando make LDFLAGS=-static nuevamente). El error ya no debería aparecer.
¿Cuál fue el problema? En mi sistema había una función llamada 'basename' en uno de los ficheros de cabecera (creo que era en el string.h, pero no estoy del todo seguro). El programa Gzip tiene a su vez una función llamada también 'basename'. Estas dos funciones provocaron el conflicto de tipos. Para solventar este problema hemos cambiado de nombre la función del Gzip por 'basename2'.
gzexe.in zdiff.in zforce.in
zgrep.in zmore.in znew.ingunzip gzexe gzip zcat zdiff
zforce zgrep zmore znew
configuremake LDFLAGS=-all-staticas-new gasp-new$LFS/usr/bin/as y $LFS/usr/bin/gaspld-new$LFS/usr/bin/ldaddr2line ar c++filt nm-new objcopy objdump ranlib size strings strip-new$LFS/usr/bin/nm$LFS/usr/bin/strip
configuremake LDFLAGS=-staticegrep fgrep grep
configuremake LDFLAGS=-staticbisonbison.hairy bison.simple
configuremake CFLAGS="-O -static"mawk$LFS/usr/bin/awk con $LFS/usr/bin/mawk
configuremake LDFLAGS=-staticYo uso la versión 4.1 y durante el proceso de compilación me aparece el siguiente error. A pesar de ser un error fatal, el proceso de compilación no se detiene, haciendo difícil detectarlo. Observa todos los mensajes durante el proceso por si te surge el mensaje: defs.h:304: conflicting types por 'basename'
Si te sale a ti también, aquí tienes como solucionarlo:
find/Makefile y busca la variable: CFLAGSfind/defs.h y busa la línea: char *basename P_((char *fname));find/util.c y encuentra la línea: char *basename (fname)Esta línea está dividida en dos ("char *" está en la primera y "basename (fname)" en la segunda).
No hace falta dejar la línea partida en dos, ponlo como gustes.
Recompila el paquete (ejecutando make LDFLAGS=-static otra vez). Ahora debería compilar correctamente.
find
configuremake LDFLAGS=-staticdiff diff3 sdiff
make lddmake ldconfig$LFS/bin: ldd$LFS/sbin: ldconfig
ConfigureMarca la respuesta por defecto en todas las preguntas que se te hagan, excepto en las siguientes:
Cuando te pregunte What is the file extension used for shared libraries? [so]
Responde con: none
Cuando te pregunte Any additional ld flags (NOT including libraries)? [-L/usr/local/lib]
Responde con: -L/usr/local/lib -static
Cuando te pregunte Do you wish to use dynamic loading? [y]
Responde con: n
makeperl
configuremake LDFLAGS=-staticm4
configuremake LDFLAGS=-staticmakeinfo
configureautomake aclocal$LFS/usr/share/automakeconfig.guess
config.sub install-sh mdate-sh missing mkinstalldirs elisp-comp ylwrap acinstall*.am$LFS/usr/share/aclocal*.m4
configuremakeautoconf autoheader autoreconf
autoscan autoupdate ifnames$LFS/usr/share/autoconf*.m4*
(Esto incluye los ficheros *.m4 y los *.m4f)acconfig.h
acfunctions acheaders acidentifiers acprograms acmakevarsVamos a instalar la versión 2.0.7pre6 en lugar de la última, que es la 2.1.2. La razón es que glibc 2.1.2 necesita como mínimo gcc 2.8 (o egcs 1.1). Mi sistema tiene gcc 2.7.2.3, por lo que no puedo compilar la librería 2.1.2. Además no quiero actualizar mi Linux a gcc 2.95.2 (que es la última versión en el momento de escribir este documento) porque no es algo sencillo, y no quiero estropear mi sistema ahora que funciona bien.
Bien, instalaremos pues glibc 2.0.7pre6. De todas formas vamos a instalar el compilador gcc 2.95.2. Necesitamos también instalar la versión 2.7.2.3 porque algunos programas no pueden ser compilados con la 2.95.2 (debido a unos bugs que, si bien no son tales, el gcc 2.95.2 define así. Esto no es un bug del compilador, sino cambios en el estándar de C (si lo he entendido bien)).
Un detalle en el paquete glibc-crypt. Lo que viene a continuación está sacado del fichero glibc-crypt-README que está en ftp://ftp.gnu.org/gnu/glibc:
Nota del traductor: lógicamente el contenido de este fichero está en inglés, pero lo he traducido también porque creo que así será más útil.
-*-*-*-*-*- Este add-on no está incluido en la distribución principal de la librería C de GNU debido a que algunos gobiernos, principalmente los de Francia, Rusia y los Estados Unidos, tienen unas normas muy restrictivas respecto al uso y distribución de software encriptado. Por favor, lee la sección "Problemas legales" en el manual para más detalles. En particular, los Estados Unidos no permite exportar este programa sin una licencia, ni siquiera por Internet. Por lo que, por favor, no lo descargues desde el sitio ftp.gnu.org si estás fuera de los Estados Unidos. Este programa fue completamente desarrollado fuera de los Estados Unidos. -*-*-*-*-*-
"Este programa" hace referencia al paquete glibc-crypt sito en ftp://ftp.gwdg.de/pub/linux/glibc/2.0.7pre6/. Esta ley sólo afecta a la gente que no vive en los EEUU. No está prohibido importar software DES, por lo que si vives en los EEUU puedes descargarlo desde este sitio, que es alemán.
configure
--with-gnu-binutils --enable-shared --enable-add-ons=linuxthreads,cryptconfigparms con lo siguiente:
# Begin configparms prefix=/usr slibdir=/lib sysconfdir=/etc # End configparms
make/usr/lib/gcc-lib con el directorio
usr/lib/gcc-lib en tu sistema Linux normal.make install/usr/lib/gcc-libPara comprobar que la librería de C de GNU funciona bien, prueba a ejecutar
cualquier programa enlazado dinámicamente que use esta librería (casi cualquiera).
Por ejemplo, ejecuta el programa ls que está en el directorio bin dentro
de tu partición normal de Linux. Si no aparece ningún error, la librería se habrá
instalado correctamente.