Linux From Scratch

Versión 3.3

Gerard Beekmans

Traducido por el proyecto LFS-ES http://www.escomposlinux.org/lfs-es

Versión de la traducción: FINAL del 4 de Julio del 2002



Dedicatoria

Este libro está dedicado a la querida esposa de Gerard Beekmans, Beverly Beekmans.

Tabla de contenidos
Prólogo
Prefacio
Quién puede querer leer este libro
A quién puede que no le interese leer el libro
Organización
Parte I - Introducción
Parte II - Instalación del sistema LFS
Part III - Apéndices
I. Parte I - Introducción
1. Introducción
Agradecimientos
Lo que vamos a hacer
Convenciones utilizadas en este libro
Versión del libro
Servidores alternativos
Historial de modificaciones
Listas de correo y archivos
Servidores de noticias
FAQ
Información de contacto
2. Información importante
Sobre $LFS
Cómo descargar los programas
Cómo instalar los programas
¿Qué plataforma?
Cómo buscar ayuda
II. Parte II - Instalando el sistema LFS
3. Paquetes que hay que descargar
Introducción
Paquetes que hay que descargar
4. Preparando una nueva partición
Introducción
Creando una nueva partición
Creando un sistema de ficheros en la nueva partición
Montando la nueva partición
5. Preparando el sistema LFS
Introducción
¿Por qué usamos enlazado estático?
Instalando todos los programas como usuario sin privilegios
Creando directorios
Instalando Bash-2.05a
Instalando Binutils-2.12
Instalando Bzip2-1.0.2
Instalando Diffutils-2.8
Instalando Fileutils-4.1
Instalando Gawk-3.1.0
Instalando GCC-2.95.3
Instalando Grep-2.5
Instalando Gzip-1.2.4a
Instalando Linux Kernel-2.4.18
Instalando Make-3.79.1
Instalando Patch-2.5.4
Instalando Sed-3.02
Instalando Sh-utils-2.0
Instalando Tar-1.13
Instalando Texinfo-4.1
Instalando Textutils-2.0
Creando los ficheros de contraseñas y grupos
Copiando los ficheros de la antigua librería NSS
Montando el sistema de ficheros $LFS/proc
6. Instalando los programas del sistema base
Introducción
Sobre los símbolos de depuración
Creando $LFS/root/.bash_profile
Entrando al entorno chroot
Cambiando el propietario de la partición LFS
Creando el enlace simbólico /etc/mtab
Instalando Glibc-2.2.5
Creando los dispositivos (Makedev-1.4)
Instalando Man-pages-1.48
Instalando Findutils-4.1
Instalando Gawk-3.1.0
Instalando Ncurses-5.2
Instalando Vim-6.1
Instalando GCC-2.95.3
Instalando Bison-1.34
Instalando Less-374
Instalando Groff-1.17.2
Instalando Man-1.5j
Instalando Perl-5.6.1
Instalando M4-1.4
Instalando Texinfo-4.1
Instalando Autoconf-2.53
Instalando Automake-1.6
Instalando Bash-2.05a
Instalando Flex-2.5.4a
Instalando File-3.37
Instalando Libtool-1.4.2
Instalando Bin86-0.16.2
Instalando Binutils-2.12
Instalando Bzip2-1.0.2
Instalando Ed-0.2
Instalando Gettext-0.11.1
Instalando Kbd-1.06
Instalando Diffutils-2.8
Instalando E2fsprogs-1.27
Instalando Fileutils-4.1
Instalando Grep-2.5
Instalando Gzip-1.2.4a
Instalando Lilo-22.2
Instalando Make-3.79.1
Instalando Modutils-2.4.15
Instalando Netkit-base-0.17
Instalando Patch-2.5.4
Instalando Procinfo-18
Instalando Procps-2.0.7
Instalando Psmisc-20.2
Instalando Reiserfsprogs-3.x.1b
Instalando Sed-3.02
Instalando Sh-utils-2.0
Instalando Net-tools-1.60
Instalando Shadow-4.0.3
Instalando Sysklogd-1.4.1
Instalando Sysvinit-2.84
Instalando Tar-1.13
Instalando Textutils-2.0
Instalando Util-linux-2.11o
Instalando LFS-Bootscripts-1.9
Borrando los ficheros de la antigua librería NSS
Configurando los programas esenciales
7. Preparando los guiones de arranque
Introducción
¿Cómo hacen estos guiones que funcione el proceso de arranque?
Configurando el guión setclock
¿Necesito el guión loadkeys?
Configurando el guión sysklogd
Configurando el guión localnet
Creando el fichero /etc/hosts
Configurando el guión network
8. Haciendo el sistema LFS arrancable
Introducción
Creando el fichero /etc/fstab
Instalando linux-2.4.18
Haciendo el sistema LFS arrancable
9. El final
El final
Registrarse
Arrancando el sistema
III. Parte III - Apéndices
A. Descripción de paquetes y dependencias
Introducción
Autoconf
Automake
Bash
Bin86
Binutils
Bison
Bzip2
Diffutils
E2fsprogs
Ed
File
Fileutils
Findutils
Flex
Gawk
GCC
Gettext
Glibc
Grep
Groff
Gzip
Kbd
Linux kernel
Less
LFS-Bootscripts
Libtool
Lilo
M4
Make
MAKEDEV
Man
Man-pages
Modutils
Ncurses
Netkit-base
Net-tools
Patch
Perl
Procinfo
Procps
Psmisc
Reiserfsprogs
Sed
Entorno de Contraseñas Ocultas (Shadow Password Suite)
Sh-utils
Sysklogd
Sysvinit
Tar
Texinfo
Textutils
Util Linux
Vim
B. Recursos
Introducción
Libros
COMOs y Guías
Otros

Prólogo


Quién puede querer leer este libro

Existen muchas razones por las que alguien podría querer leer este libro para instalar un sistema LFS. La pregunta que mucha gente podría hacer es "¿Por qué pasar por todo el embrollo de instalar manualmente un sistema desde cero cuando te puedes limitar a descargar una distribución ya existente?". Esta es una pregunta muy válida que espero poder contestar.

La razón más importante de la existencia de LFS es enseñar a la gente cómo trabaja internamente un sistema Linux. Construir el sistema LFS te enseña todo lo que hace a Linux funcionar, cómo trabajan juntas las distintas partes, y cómo unas dependen de otras. Y lo más importante, cómo adaptarlo a tus propios gustos y necesidades.

Uno de los beneficios claves de LFS es que tienes el control de tu sistema sin tener que confiar en la implementación de Linux de nadie. Ahora estás en el asiento del conductor y puedes dictar cada cosa, como la estructura de directorios y la configuración de los guiones de arranque. También sabrás exactamente dónde, por qué y cómo se instalan los programas.

Otro beneficio de LFS es que puedes crear un sistema Linux verdaderamente compacto. Cuando instalas una distribución normal, acabas instalando muchos programas que, probablemente, nunca usarás. Sólo están ahí gastando (precioso) espacio de disco. No es muy difícil conseguir un sistema LFS instalado en tan sólo 100 MB. ¿Todavía te parece demasiado? Algunos de nosotros hemos estado trabajando para crear un sistema LFS embebido realmente pequeño. Hemos instalado un sistema que contiene lo suficiente para ejecutar un servidor web Apache; el espacio total de disco usado fue, aproximadamente, 8 MB. Con un repaso adicional para reducirlo, se podría llegar a 5 MB o menos. Intenta eso con una distribución normal.

Podríamos comparar una distribución de Linux con una hamburguesa que compras en un supermercado o en un restaurante de comida rápida. Acabarías comiéndola sin saber exactamente qué estás comiendo, mientras que LFS te da los ingredientes para hacerte la hamburguesa. Esto te permite inspeccionarla cuidadosamente, quitar los ingredientes no deseados y, al mismo tiempo, te permite añadir los ingredientes que mejoren el sabor de tu hamburguesa. Cuando estés satisfecho con los ingredientes, continúas con el siguiente paso, mezclarlo todo. Ahora tienes la oportunidad de cocinarla a tu gusto: asarla, cocerla, freirla, hacerla a la barbacoa, o comerla cruda.

Otra posible analogía que podemos usar es comparar a LFS con una casa. LFS te dará la estructura de la casa, pero es cosa tuya instalar cañerías, enchufes eléctricos, la cocina, la bañera, el papel pintado, etc.

Otra ventaja de un sistema Linux hecho a la medida es la seguridad añadida. Compilar el sistema entero a partir del código fuente, te permite, si lo deseas, supervisar todo y aplicar todos los parches de seguridad que quieras o necesites. No tienes que esperar a que alguien te provea de un nuevo paquete binario que tape ese agujero de seguridad. Además, no tienes ninguna garantía de que ese nuevo paquete verdaderamente solucione el problema (adecuadamente). Nunca podrás saber realmente si un agujero de seguridad está solucionado a no ser que lo hagas por ti mismo.


Capítulo 1. Introducción


Agradecimientos

Queremos agradecer sus contribuciones al proyecto Linux From Scratch a las siguientes personas y organizaciones:

  • Mark Stone <mstone@linux.com> por donar el servidor linuxfromscratch.org .

  • VA Linux Systems por proveer espacio de rack y ancho de banda al servidor linuxfromscratch.org .

  • Hagen Herrschaft <hrx@hrxnet.de> por mantener los mirrors (servidores alternativos) de linuxfromscratch.org.

  • Mark Hymers <markh@linuxfromscratch.org> por su enorme ayuda en la edición de este libro.

  • Marc Heerdink <marc_heerdink@softhome.net> también por su gran ayuda en la edición de este libro.

  • DREAMWVR.COM por su continuado respaldo donando varios recursos al proyecto LFS y a subproyectos relacionados.

  • Jan Niemann <jan.niemann@tu.bs.de> por mantener el mirror www.de.linuxfromscratch.org.

  • Torsten Westermann <westermann@linux-provider.net> por mantener el mirror lfs.linux-provider.net.

  • Ian Chilton <ian@ichilton.co.uk> por mantener los mirrors www.us.linuxfromscratch.org y www.linuxfromscratch.co.uk .

  • Dag Stenstad <dag@stenstad.net> por proveer el mirror www.no.linuxfromscratch.org mirror, y Ian Chilton <ian@ichilton.co.uk> por mantenerlo.

  • Antonin Sprinzl <Antonin.Sprinzl@tuwien.ac.at> por mantener el mirror www.at.linuxfromscratch.org.

  • Jason Andrade <jason@dstc.edu.au> por mantener el mirror www.au.linuxfromscratch.org.

  • Ian Cooper <ian@wpi.edu> por mantener el mirror www.us2.linuxfromscratch.org.

  • VA Linux Systems que, en nombre de Linux.com, donó al proyecto una estación de trabajo VA Linux 420 (anteriormente StartX SP2).

  • Johan Lenglet <johan@linuxfromscratch.org> por gestionar el proyecto de traducción de LFS al francés.

  • Jesse Tie-Ten-Quee <highos@linuxfromscratch.org> por donar una grabadora de CD Yamaha CDRW 8824E.

  • O'Reilly por donar libros sobre SQL y PHP.

  • Robert Briggs por donar los nombres de dominio linuxfromscratch.org y linuxfromscratch.com.

  • Frank Skettino <bkenoah@oswd.org> de OSWD por crear el diseño inicial del sitio web LFS.

  • Garrett LeSage <garrett@linux.com> por crear el banner de LFS.

  • Dean Benson <dean@vipersoft.co.uk> por su ayuda financiera al establecer la organización sin ánimo de lucro LFS.

  • Innumerables otros en varias listas de correo LFS que están haciendo posible este libro aportando sugerencias, leyendo el libro e informando de los errores.


Lo que vamos a hacer

Vamos a construir el sistema LFS utilizando una distribución ya instalada, como Debian, SuSe, Slackware, Mandrake, RedHat, etc. No es necesario ningún tipo de disco de arranque. Vamos a utilizar un sistema Linux existente como base (ya que necesitamos un compilador, enlazador (linker), editor de texto y otras herramientas).

Cuando hayas descargado los paquetes necesarios que componen un sistema LFS, crearás un nueva partición Linux nativa sobre la que se instalará el sistema LFS.

El siguiente paso, el capítulo 5, será la instalación de una serie de paquetes en la partición LFS, enlazados estáticamente. Estos paquetes constituyen un juego básico de herramientas de desarrollo, que se usarán para instalar el sistema propiamente dicho, y también son necesarios para resolver dependencias circulares. Ejemplos de dependencias circulares son: necesitas un compilador para instalar un compilador, necesitas un intérprete de comandos para instalar un intérprete de comandos, etc.

En el capítulo 6 se instala el sistema base real. Usamos el programa chroot para arrancar un nuevo intérprete de comandos cuyo directorio raíz (root) se asignará a la partición LFS. Esto esencialmente equivale a reiniciar haciendo que el núcleo monte la partición LFS como partición raíz. La razón de que utilicemos chroot en lugar de reiniciar es que de este modo puedes seguir usando el sistema anfitrión. Mientras se está instalando el software, puedes simplemente conmutar a otra VC (consola virtual) o escritorio X y continuar usando tu ordenador como lo harías normalmente.

Cuando esté instalado todo el software, en el capítulo 7 configurará los guiones de arranque, en el capítulo 8 configurará el gestor de arranque y en el capítulo 9 hay algunas sugerencias sobre lo que puedes hacer cuando acabes el libro. En ese momento puedes por fin reiniciar tu nuevo sistema LFS, y empezar a usarlo realmente.

En pocas palabras, este es el proceso. Encontrarás información detallada sobre los pasos que has de seguir en cada capítulo, a medida que avances. Si en algún momento hay algo que no veas muy claro, no te preocupes. Lo entenderás perfectamente un poco más adelante.

Por favor, lee con atención el capítulo 2, ya que explica algunas cosas importantes que debes saber antes de comenzar a trabajar en el capítulo 5 y posteriores.


Servidores alternativos

A continuación tienes una lista con los actuales servidores alternativos HTTP y FTP al 7 de Abril del 2002. Es posible que la lista no se encuentre actualizada. La información más reciente se puede encontrar en el servidor web principal: http://www.linuxfromscratch.org.


Historial de modificaciones

3.3 - 7 de Abril del 2002

3.2 - 7 Marzo 2002

  • Actualizado a:

    • lfs-bootscripts-1.6

  • 1 Marzo 2002 [gerard]: Capítulo 05 - Creando directorios: Eliminados/usr/var y /usr/local/var. No están recomendados por el FHS.

  • 27 Febrero 2002 [gerard]: Capítulo 06 - Make: Añadidos comandos para eliminar el bit setgid kmem bit de /usr/bin/make. Esto no es necesario en Linux para manejar la carga del sistema y causa algunos problemas que se solventan eliminando el bit setgid.

  • 26 Febrero 2002 [gerard]: Actualizado a lfs-bootscripts-1.6

  • 17 Febrero 2002 [gerard]: Capítulo 05 - Sh-utils: Añadido de nuevo el comando que mueve $LFS/usr/bin/chroot a $LFS/usr/sbin

  • 17 Febrero 2002 [gerard] Actualizadas las dependencias de todos los paquetes.

  • 15 Febrero 2002 [gerard] Capítulo 01: Añadido un nuevo mirror a la lista de Holanda (www.nl y ftp.nl).

  • 11 Febrero 2002 [markh] Capítulo 05: Sh-utils: Eliminado && adicional del final de las instrucciones de instalación.

  • 10 Febrero 2002 [gerard]: Capítulo 05 - Sh-utils: Eliminado su del comando mv ya que aún no está instalado en el Capítulo 5.

3.2-RC1 - Febrero 10, 2002

  • Se actualizó a:

    • bison-1.31

    • file-3.37

    • glibc-2.2.5

    • lfs-bootscripts-1.5

    • linux-2.4.17

    • man-pages-1.47

    • psmisc-20.2

    • sysvinit-2.84

    • util-linux-2.11n

  • Febrero 10, 2002 [gerard]: Capítulo 6: Se agregó un comando de sed para cambiar la ruta /usr/bin/gzip escrita dentro del código de gzexe por /bin/gzip.

  • Febrero 10, 2002 [gerard]: Capítulo 5 + 6: Se movieron varios programas adicionales que son usados por los guiones de inicio al directorio ($LFS)/bin. Ningún programa usado por los guiones de inicio (excepto los demonios) debe estar en el directorio /usr en caso de que /usr no esté disponible en el proceso de inicio (cuando se monta mediante NFS, por ejemplo).

  • Febrero 6, 2002 [markh]: Apéndice A - Todas las descripciones sincronizadas y actualizadas.

  • Febrero 2, 2002 [gerard]: Capítulo 6 - Cambiando el dueño: Se agregó un "cd /" de manera que la barra principal pueda ser borrada de todos los directorios en los comandos chown. Es mucho más placentero escribir de esta manera.

  • Febrero 2, 2002 [gerard]: Se actualizó a lfs-bootscripts-1.5

  • Febrero 2, 2002 [gerard]: Capítulo 6 - Gzip: Se eliminó el enlace simbólico a compress. Gzip puede descomprimir archivos .Z, pero no puede comprimir en ese formato.

  • Febrero 1, 2002 [gerard]: Se actualizó a lfs-bootscripts-1.3

  • Febrero 1, 2002 [gerard]: Capítulo 6 - Glibc: En vez de usar sed en el archivo config.make, se crea el archivo glibc-build/configparms que contiene "cross-compiling = no".

  • Enero 30, 2002 [marcheerdink]: Capítulo 5: Se cambió el comando para copiar los archivos de cabeceras para soportar versiones de cp menores que la 4.1.

  • Enero 30, 2002 [markh]: Capítulos 5+6: Se agregó CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" al comando configure como parche. Esto arregla la compilación en las plataformas PPC y en m68k y no causa daños en x86.

  • Enero 30, 2002 [gerard]: Capítulo 5 - Montando proc: Se cambió un poco el texto (dejaba implícito que solamente se podía montar el sistema de archivos proc una vez, lo cual no es cierto en la actualidad).

  • Enero 30, 2002 [markh]: Capítulo 5: Se mejoró la explicación del make mrproper.

  • Enero 30, 2002 [marcheerdink]: Capítulos 5+6: Se eliminó --libexecdir de las opciones de configuración de fileutils.

  • Enero 30, 2002 [marcheerdink]: Capítulo 6: Se agregó un enlace simbólico de vipw a vigr después de instalar shadow.

  • Enero 30, 2002 [markh]: Capítulos 5+6: Se cambiaron las instrucciones de instalación de las binutils y de e2fsprogs para que usen directorios separados, como gcc y glibc.

  • Enero 30, 2002 [gerard]: Capítulo 6 - Guiones de inicio: Se agregó un chown root.root después del cp.

  • Enero 30, 2002 [gerard]: Apéndice A - Texinfo: El directorio de trabajo de los programas info es /usr/share/info no /usr/doc/info.

  • Enero 30, 2002 [gerard]: Capítulo 6 - Procps: Corrección tipográfica de la ruta del directorio app-defaults (es /usr/X11R6/lib/X11/app-defaults y no usr/X11R6/lib/app-defaults).

  • Enero 30, 2002 [gerard]: Capítulo 6 - Configurando los programas: Se simplificaron los comandos para crear los archivos utmp, btmp, lastlog y wtmp.

  • Enero 30, 2002 [gerard]: Capítulo 1: Se movieron los Agradecimientos, de modo que aparezcan en la primera página del capítulo 1.

  • Enero 30, 2002 [gerard]: Capítulo 1: Se creó una página separada para listar los servidores alternativos FTP y HTTP.

  • Enero 30, 2002 [gerard]: Capítulo 4 - Creando la partición: Se aumentó el tamaño sugerido de 750MB a 1 GB.

  • Enero 29, 2002 [gerard]: Capítulo 6 - Shadow: Se combinaron los comandos "mv libshadow.a /usr/lib" y "mv libshadow.la /usr/lib" en "mv libshadow.*a /usr/lib"

  • Enero 26, 2002 [gerard]: Se actualizó a lfs-bootscripts-1.2

  • Enero 26, 2002 [marcheerdink]: Capítulo 6: Se eliminó la opción datadir de las opciones de configuración de bison, porque las versiones recientes de bison usan por defecto el directorio correcto.

  • Enero 23, 2002 [markh]: Capítulo 6: Se añadió la sección Creando el enlace simbólico /etc/mtab.

  • Enero 23, 2002 [gerard]: Se eliminó el comando file -C de la instalación de file. Este paquete ejecuta este comando casi al final de la instalación, así que ya no necesitamos hacerlo.

  • Enero 23, 2002 [marcheerdink]: Capítulo 4+5+6: El entorno estático ahora se construye utilizando un usuario no privilegiado, eliminando el riesgo de sobreescribir archivos de la distribución anfitriona.

  • Enero 22, 2002 [markh]: Eliminamos la instalación de las páginas del manual de linuxthreads, ya que no funciona (necesitan perl, y no lo tenemos instalado en ese punto).

  • Enero 21, 2002 [markh]: Se actualizó a glibc-2.2.5. A la vez, se modificó la instalación de glibc de modo que se instalen las páginas de manual de linuxthreads.

  • Enero 21, 2002 [markh]: Se actualizó a bison-1.31, file-3.37, kernel-2.4.17, psmisc-20.2 y sysvinit-2.84.

  • Enero 21, 2002 [markh]: Se actualizó a util-linux-2.11n y se eliminó ADD_RAW=yes ya que no se necesita más.

  • Enero 21, 2002 [markh]: Se actualizó a man-pages-1.47 y se eliminó el parche de man-pages.

  • Enero 15, 2002 [gerard]: Apéndice A: Se agregaron archivos de los guiones de inicio (dependencias, sitio de descarga, descripciones).

  • Enero 15, 2002 [gerard]: Capítulo 6: Se añadió la instalación de los guiones de inicio.

  • Enero 15, 2002 [gerard]: Capítulo 7: Se eliminaron la mayoría de los guiones, sólo quedó parte de algunos pocos donde establecemos los archivos de configuración en /etc/sysconfig.

  • Enero 15, 2002 [gerard]: Capítulo 6 - Configurando Sysvinit: Se cambió el contenido de inittab para que correspondiera a los nuevos guiones.

  • Enero 15, 2002 [marcheerdink]: Capítulo 6 - file: Se cambiaron la instrucciones de instalación, ya que ahora sed ya no es necesario.

  • Enero 14, 2002 [marcheerdink]: Se cambió la instalación de los archivos de cabecera del núcleo en el capítulo 5 de modo que sea un poco más portable.

  • Enero 6, 2002 [gerard]: Se reformateó el listado de dependencias.

  • Enero 1, 2002 [gerard]: ¡Feliz año nuevo LFS!

  • Enero 1, 2002 [markh]: ¡El primer historial de cambios del año! Se actualizó la nota de derechos de propiedad para cubrir el 2002 ;-) OK - Estoy triste...

  • Diciembre 16, 2001 [gerard]: Capítulo 6 - Ed: Se reescribió la explicación de porqué ed es opcional, para eliminar cierta confusión.

  • Diciembre 16, 2001 [gerard]: Capítulo 6 - Texinfo: Se reescribió la explicación de TEXMF para eliminar cierta confusión.

  • Diciembre 15, 2001 [gerard]: Capítulo 4: Se reemplazó la referencia a "Truco para una sola partición" con una referencia a lfs_next_to_existing_systems.txt.

  • Diciembre 15, 2001 [markh]: Fusión de los apéndices finalizada. Todos los viejos apéndices A, B y D ahora están en un (gran) Apéndice A.

  • Diciembre 14, 2001 [markh]: Se fusionaron los apéndices A y B.

  • Diciembre 13, 2001 [markh]: Apéndice B: Se cambió la etiqueta bdhtml para que la página de flex sea creada como flex.html en vez de flex.

  • Diciembre 13, 2001 [markh]: Apéndice D: Se cambiaron las referencias a metalab.unc.edu y ftp.ibiblio.org al URL correcto ibiblio.org.

  • Diciembre 12, 2001 [marcheerdink]: Capítulo 6: Se movió el parche de kbd a las instrucciones de instalación predeterminadas; se actualizó a kbd-1.06-2.patch para arreglar la instalación de algunos programas; se agregaron las descripciones de estos programas; se eliminó la advertencia sobre loadkeys -d que se heredó de los tiempos en que esa opción no se había fijado todavía.

  • Diciembre 11, 2001 [markh]: Capítulo 6: Se agrega la explicación sobre "Por qué se accede a $LFS antes del chroot".

  • Diciembre 10, 2001 [markh]: Capítulo 6: Se agregó un parche de kbd para el funcionamiento de loadkeys -d (parche de Matthias Benkmann; originalmente enviado a la lista lfs-dev).

  • Diciembre 10, 2001 [markh]: Capítulo 6: Fueron recreados los enlaces simbólicos en bash, fileutils y gcc para que las instrucciones del capítulo 6 fueran independientes de las del capítulo 5.

  • Diciembre 10, 2001 [marcheerdink]: Capítulo 5+6: Se eliminaron los comandos de sed para usar el archivo de respaldo que fue creado anteriormente en vez de escribir un archivo intermedio "tmp~".

  • Diciembre 10, 2001 [marcheerdink]: Capítulo 5+6: El comando 'make' para la instalación de las diffutils ha cambiado a 'make PR_PROGRAM=/usr/bin/pr.' Este error fue enviado por Greg Schafer.

  • Diciembre 7, 2001 [gerard]: Capítulo 6: Se cambió el comando de ./Configure -Dprefix=/usr a ./configure.gnu --prefix=/usr. Este último es más consistente con las instrucciones de instalación de otros paquetes, y el resultado es idéntico que de la manera anterior.

  • Diciembre 3, 2001 [markh]: Capítulo 2: Se agregó la sección ¿Qué Plataforma?

3.1 - Diciembre 3, 2001

  • Se agregó:

    • reiserfsprogs-3.x.0j

  • Se actualizó a:

    • MAKEDEV-1.4

    • bash-2.05a

    • e2fsprogs-1.25

    • gettext-0.10.40

    • libtool-1.4.2

    • lilo-22.1

    • linux-2.4.16

    • man-1.5j

    • man-pages-1.43

    • modutils-2.4.12

    • sysvinit-2.83

    • util-linux-2.11m

    • vim-6.0

  • Noviembre 30, 2001 [markh]: Capítulo 6: Se actualizó a man-1.5j. Se eliminó el comando sed que teníamos que usar con la versión anterior ya que la nueva versión detecta el awk correctamente.

  • Noviembre 30, 2001 [markh]: Capítulo 5: Se agregó la explicación sobre librerías estáticas que fue publicada en lfs-apps (cuando todavía existía) por Plasmatic.

  • Noviembre 26, 2001 [markh]: Capítulo 5+6: Se actualizó a kernel-2.4.16 y modutils-2.4.12.

  • Noviembre 26, 2001 [markh]: Capítulo 6: Se agregaron notas de conformidad según FHS a la instalación de findutils.

  • Noviembre 19, 2001 [markh]: Capítulo 5+6: Se actualizó a bash-2.05a, lilo-22.1, MAKEDEV-1.4, man-pages-1.43 y util-linux-2.11m.

  • Noviembre 5, 2001 [markh]: Capítulo 6: Se creó un nuevo guión de lex, en vez de enlazar a los comentarios sobre flex en lfs-dev. (Esto es similar a los que hicimos con bison y yacc).

  • Octubre 27, 2001 [markh]: General: Se hizo un gran arreglo del XML. Esto no debería afectar el texto del libro, o su distribución. Si lo hace, ¡entonces algo ha salido mal!

  • Octubre 27, 2001 [markh]: Capítulo 6: Se agregó reiserfsprogs-3.x.0j y se actualizó a lilo-22.0.2.

  • Octubre 24, 2001 [markh]: General: Se arreglaron varios errores ortográficos que fueron descubiertos.

  • Octubre 12, 2001 [markh]: Capítulo 5 - Núcleo: Se agregó una explicación respecto a el por qué copiamos los archivos de cabecera del núcleo en vez de enlazarlos simbólicamente.

  • Octubre 12, 2001 [markh]: Apéndice A - Gzip: Se agregó uncompress a la descripción de gunzip, ya que faltaba.

  • Octubre 12, 2001 [markh]: Capítulo 6 - Util-linux: Se eliminó la entrada USRGAMES_DIR=/usr/bin ya que no es necesaria con util-linux-2.11l.

  • Octubre 9, 2001 [gerard]: Capítulo 6 - Kbd: Se quitó la opción --datadir, el valor por defecto ya está establecido correctamente.

  • Octubre 7, 2001 [gerard]: Capítulo 6 - Shadow: Se menciona la receta http://hints.linuxfromscratch.org/hints/shadowpasswd_plus.txt

  • Octubre 7, 2001 [gerard]: Capítulo 6 - Vim: Se cambiaron las instrucciones de instalación para arreglar un error en el archivo syntax/sh.vim y se agregó la variable CPPFLAGS para especificar el archivo global vimrc como /etc/vimrc.

  • Octubre 7, 2001 [gerard]: Capítulo 6: Se actualizó a libtool-1.4.2, lilo-22.0, man-pages-1.40, modutils-2.4.10, sysvinit-2.83, util-linux-2.11l y vim-6.0

  • Octubre 2, 2001 [gerard]: Capítulo 9 - El Final: Se agregó una referencia al contador LFS que está en http://linuxfromscratch.org/cgi-bin/lfscounter.cgi

  • Septiembre 26, 2001 [gerard]: Capítulo 1 - Servidor de Noticias (News): Se agregó una referencia al servidor de noticias.

  • Septiembre 26, 2001 [markh]: Capítulo 6 - E2fsprogs: Se cambió --with-root-prefix=/ por with-root-prefix="" en las instrucciones de instalación de e2fsprogs. La razón de este cambio es que el valor / hace que los enlaces simbólicos y las rutas de instalación usen cosas como //lib en vez de solamente /lib. No es un problema fatal, es sólo que no queda bien.

  • Septiembre 26, 2001 [markh]: Capítulo 5+6: Se actualizó a e2fsprogs-1.25, gettext-0.10.40, linux-2.4.10, modutils-2.4.9 y util-linux-2.11i.

  • Septiembre 22, 2001 [markh]: Apéndice A: Se reordenaron las descripciones en orden alfabético.

3.0 - Septiembre 21, 2001

  • Se actualizó a:

    • e2fsprogs-1.24

  • Septiembre 21, 2001 [markh]: Capítulo 1+7: Se cambió la información de las listas de correo para reflejar la nueva estructura. El cambio en el capítulo 7 es que los guiones rc y rcS ahora les dicen a las personas que informen sobre los problemas en lfs-dev en vez de hacerlo a lfs-discuss.

  • Septiembre 18, 2001 [gerard]: Capítulo 5+6 - GCC: Se agregó --enable-threads=posix al capítulo 5, y se cambió --enable-threads por --enable-threads=posix en el capítulo 6. A pesar de que los hilos posix son los predeterminados si no se especifica un tipo de hilo, es más claro así ver qué se habilitó.

  • Septiembre 17, 2001 [gerard]: Capítulo 6 - Psmisc: Se agregaron notas respecto a cómo encargarse del enlace simbólico de pidof de psmisc (en caso de que sysvinit no esté instalado) y su página del manual. También se agregó --exec-prefix=/ al guión de configuración para que los programas fueran instalados en /bin en vez de /usr/bin (Los guiones de inicio tal vez pueden usarlos, así que éstos deben estar en /bin).

  • Septiembre 16, 2001 [markh]: Capítulo 6 - Util-linux: Se agregó USRGAMES_DIR=/usr/bin a la rutina make install para que /usr/games no fuera creado por banner y que éste se instale en /usr/bin.

  • Septiembre 14, 2001 [markh]: Capítulo 6 - E2fsprogs: Se actualizó a la versión 1.24.

  • Septiembre 11, 2001 [gerard]: Capítulo 6 - Man: Se agregaron unos && que le faltaban a 'done' y se cambiaron los permisos del guión configure al modo 755 en vez de 700 (un modo predeterminado para que las personas no tengan que ser el dueño del archivo).


Listas de correo y archivos

El servidor linuxfromscratch.org hospeda las siguientes listas de correo de acceso público:


Otros modos de las listas

Para que el usuario active los distintos modo de uso debe enviar un mensaje a listar@linuxfromscratch.org. Los modos de uso se establecen poniendo el comando apropiado como asunto del mensaje.

Como su nombre implica, el comando Set indica que se activa un modo de uso. El comando Unset indica que se desactiva un modo de uso.

La palabra "nombre_de_la_lista" en los asuntos de ejemplo mostrados a continuación debe reemplazarse con el nombre de la lista a la que se desea aplicar ese modo de uso. Si se necesita activar en un sólo mensaje más de un modo de uso (en la misma lista o en varias listas) puede hacerse dejando el asunto en blanco y escribiendo los comandos en el cuerpo del mensaje.


Información de contacto

Por favor, envía tus mensajes a las listas de correo. En el Capítulo 1 - Listas de correo y archivos tienes información sobre las listas de correo disponibles.

Si necesitas contactar directamente con Gerard Beekmans, manda un mensaje a gerard@linuxfromscratch.org


Capítulo 2. Información importante


Sobre $LFS

Por favor, lee con atención: en este libro la variable $LFS se usará frecuentemente. $LFS en todo momento deberá sustituirse por el directorio en el que se monta la partición que contiene el sistema LFS. Cómo crear y dónde montar la partición se explicará con todo detalle en el capítulo 4. Por ejemplo, supongamos que la partición LFS está montada en /mnt/lfs.

Por ejemplo, si las instrucciones son ejecutar un comando como ./configure --prefix=$LFS , en realidad debes ejecutar ./configure --prefix=/mnt/lfs .

Es importante hacer esto donde quiera que aparezca, ya sea en comandos introducidos en un intérprete de comandos, o al crear o editar un archivo.

Una posible solución es establecer la variable de entorno LFS. De este modo $LFS puede introducirse literalmente, en lugar de substituirlo por /mnt/lfs. Esto se consigue ejecutando:

export LFS=/mnt/lfs

Ahora, cuando las instrucciones sean ejecutar un comando como ./configure --prefix=$LFS puedes introducir eso literalmente. Tu intérprete de comandos substituirá $LFS con /mnt/lfs al procesar la linea de comando (es decir, cuando pulses Enter después de haber tecleado el comando).

Si decides usar $LFS, no olvides establecer la variable $LFS en todo momento. Si la variable no está establecida y se usa en un comando, $LFS se ignorará y se ejecutará el resto. Un comando como echo "root:x:0:0:root:/root:/bin/bash" > $LFS/etc/passwd sin la variable $LFS establecida, recreará el archivo /etc/passwd de tu sistema anfitrión. Es decir: destruirá tu archivo de contraseñas actual.

Una forma de asegurar que $LFS está establecido en todo momento es añadirlo a los archivos /root/.bash_profile y /root/.bashrc, de modo que cada vez que entres como root, o hagas "su" a root, la variable $LFS estará establecida.


Cómo instalar los programas

Antes de que empieces a usar el libro de LFS, debemos señalar que todos los comandos asumen que estás usando el intérprete de comandos bash. Si no es el caso, los comandos pueden funcionar pero no podemos garantizarlo. Si no quieres complicarte la vida, usa bash.

Antes de que puedas empezar a hacer algo con un paquete, debes desempaquetarlo. A menudo los archivos están empaquetados con tar, y comprimidos con gzip o bzip2. No vamos a escribir cada vez cómo desempaquetar un archivo. Vamos a explicarlo una vez, en esta sección.

Para empezar, sitúate en el directorio $LFS/usr/src ejecutando:

cd $LFS/usr/src

Si un archivo está empaquetado con tar y gzip, se desempaqueta con uno de estos comandos, dependiendo del nombre de archivo:

tar xvzf fichero.tar.gz
tar xvzf fichero.tgz

Si un archivo está empaquetado con tar y con bzip2, se descomprime ejecutando:

bzcat fichero.tar.bz2 | tar xv

Algunos programas tar (la mayoría hoy en día, pero no todos) están ligeramente modificados para poder procesar archivos bzip2 directamente, usando el parámetro -I, -y o -j, que funciona de forma similar al parámetro -z para manejar archivos gzip. El comando anterior funciona sea cual sea la forma en que tu sistema parchee bzip2.

Si el archivo sólo está empaquetado con tar, ejecuta:

tar xvf fichero.tar

Cuando se desempaqueta un archivo, se creará un nuevo directorio en el directorio actual (y este libro asume que los archivos se desempaquetan en $LFS/usr/src). Antes de continuar con las instrucciones de instalación, sitúate en ese nuevo directorio. Cada vez que este libro mencione instalar un paquete, previamente debes desempaquetar el archivo fuente y entrar (cd) en el directorio recién creado.

De vez en cuando deberás manejar archivos individuales, como parches. Estos archivos normalmente están comprimidos con gzip o bzip2. Antes de poder usarse, deben descomprimirse.

Si un archivo está comprimido con gzip, descomprímelo con

gunzip fichero.gz

Si un archivo está comprimido con bzip2 descomprímelo con:

bunzip2 fichero.bz2

Después de haber instalado un paquete, pueden hacerse dos cosas con él: se puede eliminar el directorio que contiene las fuentes, o conservarlo. Recomendamos encarecidamente eliminarlo. Si no lo haces, y tratas de reutilizar las mismas fuentes más adelante en el libro (por ejemplo, reutilizando las fuentes del capítulo 5 en el capítulo 6), puede no resultar como esperas. Los fuentes del capítulo 5 tendrán las opciones de tu distribución anfitriona, que no siempre van a ser adecuadas para el sistema LFS cuando entres en el entorno chroot. Incluso ejecutar algo como make clean no garantiza siempre una jerarquía de fuentes limpia.

O sea, evítate problemas y simplemente elimina el directorio fuente inmediatamente después de instalarlo.

Hay una excepción: las fuentes del núcleo. Tenlos a mano ya que vas a necesitarlos más adelante en el libro, cuando construyas un núcleo. Nada va a utilizar la jerarquía de fuentes del núcleo, de modo que no van a interferir. No obstante, si tienes limitado el espacio en disco, puedes eliminar la jerarquía de fuentes del núcleo y desempaquetarlo más tarde cuando sea necesario.


Cómo buscar ayuda

Si tienes algún problema usando este libro, encontrarás que la gente en el Internet Relay Chat (IRC) y en las listas de correo estará dispuesta a ayudarte. Puedes encontrar una relación de las listas de correo de LFS en Capítulo 1 - Listas de correo y archivos. Para facilitarnos la tarea de ayudarte, no obstante, deberías asegurarte de disponer de toda la información relevante que puedas reunir. Esto nos ayudará a diagnosticar y solventar tu problema. Esta parte del libro te guiará a determinar qué tipo de información será de la mayor utilidad.


Problemas de Compilación

Para ayudarnos a determinar la causa del problema, nos va a ser útil tanto la salida del terminal como el contenido de varios archivos. Las salidas al terminal del guión configure y del comando make pueden ser útiles. No incluyas ciegamente todo el contenido pero, por otro lado, no incluyas demasiado poco. Por ejemplo, aquí hay una salida a terminal de make:

gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\" 
-DLOCALEDIR=\"/mnt/lfs/usr/share/locale\" -DLIBDIR=\"/mnt/lfs/usr/lib\" 
-DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I.   
-g -O2 -c getopt1.c
gcc  -g -O2 -static -o make  ar.o arscan.o commands.o dir.o expand.o file.o 
function.o getopt.o implicit.o job.o main.o misc.o read.o remake.o rule.o 
signame.o variable.o vpath.o default.o remote-stub.o version.o opt1.o    
-lutil job.o: In function `load_too_high':
/lfs/tmp/make-3.79.1/job.c:1565: undefined reference to `getloadavg'
collect2: ld returned 1 exit status
make[2]: *** [make] Error 1
make[2]: Leaving directory `/lfs/tmp/make-3.79.1'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/lfs/tmp/make-3.79.1'
make: *** [all-recursive-am] Error 2

En este caso, mucha gente simplemente incluye la sección inferior desde

make [2]: *** [make] Error 1

en adelante. Esto no nos basta para diagnosticar el problema porque sólo nos dice que algo fue mal, no el qué. Lo que se debería incluir para resultar útil es la sección completa tal como se incluye en el ejemplo, ya que incluye el comando que se estaba ejecutando y sus mensajes de error.

Hay un artículo excelente sobre búsqueda de ayuda en Internet en general, de Eric S. Raymond. Está disponible en http://www.tuxedo.org/~esr/faqs/smart-questions.html. Lee y sigue los consejos de este documento y tendrás muchas más posibilidades de obtener una respuesta, y también de que obtengas la ayuda que necesitas.


Capítulo 3. Paquetes que hay que descargar


Introducción

A continuación se dará una lista de todos los paquetes que se necesitan descargar para construir el sistema básico. Los números de versión que los acompañan corresponden a versiones del software que se sabe que funcionan y en los cuales se basa este libro. Si experimentas algún problema que no puedes resolver por ti mismo, descarga, por favor, la versión que aparece en el libro (si es que has descargado una versión posterior).

Todas las URLs que aparecen, apuntan al servidor ftp.linuxfromscratch.org. Tenemos un par de servidores FTP alternativos disponibles desde los que también puedes descargar los ficheros. Las direcciones de esos servidores las puedes encontrar en el Capítulo 1 - Servidores alternativos.

Hemos incluido una lista de los sitios oficiales de descarga de los paquetes en el Apéndice A. El servidor FTP de LFS sólo contiene las versiones de los paquetes que se recomienda usar en este libro. Puedes comprobar si en los sitios oficiales incluidos en el Apéndice A tienes disponible una versión posterior. Si descargas un paquete más nuevo, apreciaríamos que nos informases si has conseguido instalar el paquete utilizando las instrucciones del libro o no.

Por favor, ten en cuenta que todos los archivos descargados del servidor FTP de LFS están comprimidos con bzip2 en lugar de gz. Si no sabes manejar archivos bz2, lee el Capítulo 2 - Cómo instalar los programas.


Paquetes que hay que descargar


Servidor FTP Navegable:
ftp://ftp.linuxfromscratch.org/

Servidor HTTP Navegable:
http://ftp.linuxfromscratch.org/


Puedes descargar un archivo que contiene todos los paquetes usados
para compilar un sistema LFS:


Todos los paquetes de LFS - 87,260 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/lfs-packages-3.3.tar
http://ftp.linuxfromscratch.org/lfs-packages/3.3/lfs-packages-3.3.tar


O descargar individualmente los siguientes paquetes:
 


Bash (2.05a) - 1,400 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/bash-2.05a.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/bash-2.05a.tar.bz2


Binutils (2.12) - 9,312 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/binutils-2.12.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/binutils-2.12.tar.bz2


Bzip2 (1.0.2) - 610 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/bzip2-1.0.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/bzip2-1.0.2.tar.bz2


Diff Utils (2.8) - 640 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/diffutils-2.8.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/diffutils-2.8.tar.bz2


File Utils (4.1) - 1217 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/fileutils-4.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/fileutils-4.1.tar.bz2


GCC (2.95.3) - 9,618 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/gcc-2.95.3.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/gcc-2.95.3.tar.bz2


Parche para GCC (2.95.3-2) - 8 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/gcc-2.95.3-2.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/gcc-2.95.3-2.patch.bz2


Linux Kernel (2.4.18) - 23,595 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/linux-2.4.18.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/linux-2.4.18.tar.bz2


Grep (2.5) - 545 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/grep-2.5.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/grep-2.5.tar.bz2


Gzip (1.2.4a) - 178 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/gzip-1.2.4a.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/gzip-1.2.4a.tar.bz2


Parche para Gzip (1.2.4a) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/gzip-1.2.4a.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/gzip-1.2.4a.patch.bz2


Make (3.79.1) - 794 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/make-3.79.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/make-3.79.1.tar.bz2


Sed (3.02) - 221 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/sed-3.02.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/sed-3.02.tar.bz2


Sh-utils (2.0) - 824 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/sh-utils-2.0.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/sh-utils-2.0.tar.bz2


Parche para Sh-utils (2.0) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/sh-utils-2.0.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/sh-utils-2.0.patch.bz2


Tar (1.13) - 730 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/tar-1.13.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/tar-1.13.tar.bz2


Parche para Tar (1.13) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/tar-1.13.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/tar-1.13.patch.bz2


Text Utils (2.0) - 1,040 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/textutils-2.0.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/textutils-2.0.tar.bz2


Gawk (3.1.0) - 1,286 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/gawk-3.1.0.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/gawk-3.1.0.tar.bz2


Texinfo (4.1) - 1,161 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/texinfo-4.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/texinfo-4.1.tar.bz2


Patch (2.5.4) - 149 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/patch-2.5.4.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/patch-2.5.4.tar.bz2


MAKEDEV (1.4) - 7 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/MAKEDEV-1.4.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/MAKEDEV-1.4.bz2


Glibc (2.2.5) - 12,114 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/glibc-2.2.5.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/glibc-2.2.5.tar.bz2


Glibc-linuxthreads (2.2.5) - 164 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/glibc-linuxthreads-2.2.5.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/glibc-linuxthreads-2.2.5.tar.bz2


Man-pages (1.48) - 537 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/man-pages-1.48.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/man-pages-1.48.tar.bz2


Ed (0.2) - 158 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/ed-0.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/ed-0.2.tar.bz2


Find Utils (4.1) - 226 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/findutils-4.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/findutils-4.1.tar.bz2


Parche para Find Utils (4.1) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/findutils-4.1.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/findutils-4.1.patch.bz2


Ncurses (5.2) - 1,308 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/ncurses-5.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/ncurses-5.2.tar.bz2


Vim (6.1) - 2,890 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/vim-6.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/vim-6.1.tar.bz2


Bison (1.34) - 585 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/bison-1.34.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/bison-1.34.tar.bz2


Less (374) - 189 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/less-374.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/less-374.tar.bz2


Groff (1.17.2) - 1,214 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/groff-1.17.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/groff-1.17.2.tar.bz2


Man (1.5j) - 167 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/man-1.5j.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/man-1.5j.tar.bz2


Perl (5.6.1) - 4,750 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/perl-5.6.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/perl-5.6.1.tar.bz2


M4 (1.4) - 249 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/m4-1.4.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/m4-1.4.tar.bz2


Autoconf (2.53) - 739 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/autoconf-2.53.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/autoconf-2.53.tar.bz2


Automake (1.6) - 451 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/automake-1.6.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/automake-1.6.tar.bz2


Flex (2.5.4a) - 278 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/flex-2.5.4a.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/flex-2.5.4a.tar.bz2


File (3.37) - 140 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/file-3.37.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/file-3.37.tar.bz2



Libtool (1.4.2) - 653 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/libtool-1.4.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/libtool-1.4.2.tar.bz2


Bin86 (0.16.2) - 112 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/bin86-0.16.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/bin86-0.16.2.tar.bz2


Gettext (0.11.1) - 2,039 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/gettext-0.11.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/gettext-0.11.1.tar.bz2


Kbd (1.06) - 559 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/kbd-1.06.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/kbd-1.06.tar.bz2


Parche para Kbd (1.06-2) - 3 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/kbd-1.06-2.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/kbd-1.06-2.patch.bz2


E2fsprogs (1.27) - 1,176 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/e2fsprogs-1.27.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/e2fsprogs-1.27.tar.bz2


Lilo (22.2) - 292 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/lilo-22.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/lilo-22.2.tar.bz2


Modutils (2.4.15) - 211 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/modutils-2.4.15.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/modutils-2.4.15.tar.bz2


Procinfo (18) - 22 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/procinfo-18.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/procinfo-18.tar.bz2


Procps (2.0.7) - 153 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/procps-2.0.7.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/procps-2.0.7.tar.bz2


Psmisc (20.2) - 123 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/psmisc-20.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/psmisc-20.2.tar.bz2


Reiserfsprogs (3.x.1b) - 243 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/reiserfsprogs-3.x.1b.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/reiserfsprogs-3.x.1b.tar.bz2


Shadow Password Suite (4.0.3) - 760 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/shadow-4.0.3.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/shadow-4.0.3.tar.bz2


Sysklogd (1.4.1) - 67 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/sysklogd-1.4.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/sysklogd-1.4.1.tar.bz2


Sysvinit (2.84) - 76 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/sysvinit-2.84.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/sysvinit-2.84.tar.bz2


Util Linux (2.11o) - 1,020 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/util-linux-2.11o.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/util-linux-2.11o.tar.bz2


Netkit-base (0.17) - 49 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/netkit-base-0.17.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/netkit-base-0.17.tar.bz2


Net-tools (1.60) - 194 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/net-tools-1.60.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/net-tools-1.60.tar.bz2


LFS-Bootscripts (1.9) - 26 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/3.3/lfs-bootscripts-1.9.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/3.3/lfs-bootscripts-1.9.tar.bz2



Tamaño total de todos los paquetes: 87,260 KB (85.21 MB)


Capítulo 4. Preparando una nueva partición


Creando una nueva partición

Primero, empecemos comentando que es posible construir un sistema LFS en una sola partición, en la que esté instalada tu distribución original. No se recomienda si es la primera vez que pruebas LFS, aunque podría ser útil si tienes poco disco disponible. Si te sientes valiente, echa un vistazo al consejo Instalando LFS en la misma partición que sistemas existentes (Install LFS next to existing systems on the same partition) que podrás encontrar en http://hints.linuxfromscratch.org/hints/lfs_next_to_existing_systems.txt

Antes de poder construir un nuevo sistema Linux, necesitaremos tener una partición vacía Linux en la cual podamos hacerlo. Recomendamos un tamaño de partición de, aproximadamente, 1 GB. Esto nos da suficiente espacio para almacenar todos los archivos de código fuente y compilar todos los paquetes sin la preocupación de quedarnos sin el espacio temporal en disco necesario. Pero probablemente querrás más espacio si planeas utilizar tu sistema LFS como tu sistema Linux primario. Si ese es tu caso, querrás más espacio para poder instalar programas adicionales. Si ya dispones de una partición Nativa de Linux, puedes saltarte esta sección del libro.

Se debe usar el programa cfdisk (o el programa equivalente a fdisk que prefieras) utilizando como opción el disco duro apropiado (como /dev/hda si se va a crear una nueva partición en el disco maestro del bus IDE primario). Este programa se usa para crear una partición Nativa de Linux y escribir la tabla de particiones. Por favor, consulta la documentación que acompaña al programa fdisk que elijas (las páginas del manual -man- son, a menudo, un buen lugar donde empezar), y lee el procedimiento para crear una nueva partición Nativa de Linux y cómo escribir la tabla de particiones.

Se debe recordar la denominación de las nuevas particiones. Podrá ser algo como hda11. En este libro, nos referiremos a esta nueva partición creada como la partición LFS.


Capítulo 5. Preparando el sistema LFS


Introducción

En los próximos capítulos instalaremos todo el software que forma parte de un sistema Linux básico. Después de seguir las instrucciones de este capítulo y el siguiente tendrás un sistema Linux completamente operativo. Los capítulos restantes se encargan de preparar los guiones de arranque, hacer el sistema LFS arrancable y configurar una red básica.

El software utilizado en este capítulo tiene las librerías enlazadas estáticamente y será reinstalado en el siguiente capítulo con las librerías enlazadas dinámicamente. La razón por la que se instala la versión estática primero es porque puede dar la casualidad de que nuestro sistema Linux normal y nuestro sistema LFS no utilicen las mismas versiones de las librerías C. Si los programas utilizados en la primera parte estuvieran enlazados a versiones antiguas de las librerías C podrían funcionar incorrectamente en nuestro sistema LFS. Otra razón es la de resolver las dependencias circulares. Un ejemplo de estas dependencias es que necesitas un compilador para instalar un compilador, y que vas a necesitar un intérprete de comandos para instalar un intérprete de comandos y un compilador.

La clave para aprender a hacer funcionar Linux es saber qué es lo que hace cada paquete exactamente y por qué un usuario o un sistema los necesita. Tienes una descripción del contenido de cada paquete después de la subsección de instalación de cada uno de ellos y en el apéndice A.

Durante la instalación de varios paquetes verás aparecer en pantalla todo tipo de avisos (warnings). Ésto es normal y puedes ignorarlos tranquilamente. No son más que eso, avisos (la mayoría debidos a un uso inapropiado de la sintaxis de C o C++, pero no ilegal. Lo que sucede, normalmente, es que cambia el estándar C, pero los paquetes continúan utilizando el estándar antiguo).

Antes de comenzar, asegúrate de que la variable de entorno LFS tiene el valor correcto si has decidido utilizarla. Ejecuta el siguiente comando:

echo $LFS

Comprueba que la salida del comando corresponde con el directorio utilizado como punto de montaje de la partición LFS (por ejemplo /mnt/lfs).


¿Por qué usamos enlazado estático?

Doy gracias a Plasmatic por enviar el texto en el que está basado ésto a una de las listas de correo de LFS.

Cuando construyes (compilas) un programa, en vez de reescribir todas las funciones que se ocupan de tratar con el núcleo, hardware, ficheros, etc. con cada nuevo programa que escribas, puedes encontrar todas esas funciones básicas guardadas en librerías. glibc, la cual instalaremos más tarde, es una de las principales librerías, donde se encuentra el código de todas las funciones básicas que utilizan los programas, que permiten tareas como abrir ficheros, mostrar información en pantalla, y recoger datos introducidos por el usuario. Cuando el programa es compilado, estas librerías son enlazadas junto con el nuevo programa, así que puede usar cualquiera de las funciones que contengan las librerías.

Sin embargo, estas librerías pueden ser muy grandes (por ejemplo, libc.a ronda normalmente los 2.5MB). Por lo tanto, no se desea normalmente tener una copia de cada librería añadida al programa. Tan sólo imagina que tienes un comando tan simple como ls con 2.5MB extra añadidos a él. En vez de hacer que la librería forme parte del programa, o que tenga las librerías enlazadas estáticamente, las librerías se mantienen en un fichero aparte que se carga cuando el programa lo necesita. Ésto es lo que se llama enlazar las librerías dinámicamente. Se les da este nombre porque las librerías se cargan y descargan dinámicamente según se las necesite.

Así que tenemos un fichero de 1kb y otro de 2.5MB, pero esto no nos ha ahorrado espacio (excepto, quizás, en memoria RAM mientras no se necesite la librería). La ventaja REAL del enlace dinámico es que sólo necesitamos una copia de la librería. Si ls y rm utilizan la misma librería, no necesitamos dos copias de ella, ya que ambos pueden utilizar el código del mismo fichero. Incluso cuando se cargan en memoria los dos programas comparten el código en vez de cargarlo dos veces. Así que no sólo se ahorra espacio en disco, si no que, además, se ahorra espacio en la preciada memoria RAM.

Si el enlazado dinámico nos ahorra tanto espacio, ¿por qué estamos haciendo que todo se enlace estáticamente? Bien, la razón es que cuando estableces como raíz (chroot) tu propio y nuevo (pero muy incompleto) entorno LFS, no estarán disponibles las librerías porque están situadas en alguna parte de tu antiguo árbol de directorios (por ejemplo /usr/lib), el cual no será accesible desde la raíz de LFS ($LFS).

Para que tus nuevos programas se ejecuten dentro de tu entorno, una vez establecida la nueva raíz, debes asegurarte que las librerías se enlazan estáticamente cuando los construyes. Por lo tanto, se utilizarán las opciones --enable-static-link, --disable-shared, y -static durante todo el capítulo 5. Una vez en el capítulo 6, lo primero que haremos será construir el principal conjunto de librerías del sistema, glibc. Tras hacer esto, comenzaremos a reconstruir los programas que habremos instalado en el capítulo 5, pero esta vez con las librerías enlazadas dinámicamente. De esta manera, aprovechamos las ventajas de ahorro de espacio que nos ofrecen las librerías dinámicas.

Ahora ya sabes cuáles son las razones por las que necesitas usar opciones raras como -static. Si intentas construir todo sin ellas verás rápidamente lo que sucede cuando establezcas la raíz a tu nuevo sistema LFS lisiado.

Si quieres saber más sobre librerías dinámicas consulta algún libro o página web sobre programación, en especial alguno relacionado con Linux.


Instalando todos los programas como usuario sin privilegios

Si estás conectado como administrador (root) durante los distintos pasos del capítulo 5 es posible que sobreescribas algunos ficheros del sistema con los que vayas creando en este capítulo. Hay todo tipo de causas para que esto suceda. Por ejemplo, porque no has definido la variable de entorno $LFS. Esta sobreescritura puede causar todo tipo de problemas en tu sistema, luego es una buena idea entrar en el sistema como un usuario sin privilegios durante el capítulo 5. Para evitar estas situaciones, y asegurarnos de tener el entorno lo mas limpio posible, vamos a crearnos un nuevo usuario llamado "lfs", el cual usaremos durante la instalación. Ejecutando como administrador los siguientes comandos crearemos el usuario "lfs":

useradd -s /bin/bash -m lfs &&
passwd lfs

Este es el momento de cambiar los permisos de tu partición LFS para que el usuario "lfs" tenga permiso de escritura en ella. Ejecuta como administrador el siguiente comando para que el nuevo dueño de la partición sea el usuario "lfs":

chown -R lfs $LFS

Ahora puedes conectarte como el usuario "lfs". Para conectarte dispones de dos opciones: conectarte normalmente desde el modo consola o el entorno gráfico o mediante su - lfs. Una vez estés conectado como el usuario "lfs", escribe los siguientes comandos para establecer el entorno de trabajo adecuado:

cat > ~/.bash_profile << "EOF"
umask 022

LFS=/mnt/lfs
LC_ALL=POSIX
export LFS LC_ALL
EOF
source ~/.bash_profile

Este perfil nos asegura que la máscara de permisos (umask) tenga el valor 022 para que los nuevos archivos y directorios que se creen posean los permisos correctos. Es recomendable que mantengas este valor para la máscara de permisos durante todo el proceso de instalación. Además, establece el valor de las variables de entorno $LFS y $LC_ALL. La variable $LFS ya se explicó en los capítulos anteriores. La variable $LC_ALL se utiliza para establecer el idioma del sistema.

En el caso de que tu distribución utilice una versión de glibc anterior a la 2.2.4, tener almacenado en la variable $LC_ALL algo que sea distinto a "C" o "POSIX", durante el capítulo 5, puede causar problemas cuando, estando en el capítulo 6, quieras salir del entorno chroot e intentes volver a entrar. Dándole el valor "POSIX" ("C" es un alias de "POSIX") nos aseguramos de que todo funcionará correctamente en el entorno cuando se establezca la nueva raíz.


Creando directorios

Ahora vamos a crear, en la partición LFS, el árbol de directorios basado en el estándar FHS, el cual se puede encontrar en http://www.pathname.com/fhs/. Siguiendo los siguientes pasos crearemos la estructura del árbol de directorios por defecto:

cd $LFS &&
mkdir -p bin boot dev/pts etc/opt home lib mnt proc root sbin tmp var opt &&
for dirname in $LFS/usr $LFS/usr/local
   do
   mkdir $dirname
   cd $dirname
   mkdir bin etc include lib sbin share src
   ln -s share/man
   ln -s share/doc
   ln -s share/info
   cd $dirname/share
   mkdir dict doc info locale man nls misc terminfo zoneinfo
   cd $dirname/share/man
   mkdir man{1,2,3,4,5,6,7,8}
done &&
cd $LFS/var &&
mkdir -p lock log mail run spool tmp opt cache lib/misc local &&
cd $LFS/opt &&
mkdir bin doc include info lib man &&
cd $LFS/usr &&
ln -s ../var/tmp

Normalmente los directorios se crean con los permisos 755, lo que no es una buena opción para todos los directorios. El primer cambio es establecer los permisos 0750 para el directorio $LFS/root. Esto nos asegura que no todos los usuarios tengan acceso al directorio /root (lo mismo que debería hacer cualquier usuario con los directorios /home/username). El segundo cambio es establecer los permisos 1777 para los directorios tmp. De esta manera cualquier usuario puede escribir en los directorios /tmp o /var/tmp, pero no pueden borrar los ficheros de otros usuarios (de esto último se encarga el llamado "bit pegajoso" (sticky bit) - bit 1 de la máscara de permisos 1777).

cd $LFS &&
chmod 0750 root &&
chmod 1777 tmp var/tmp

Ahora que se han creado los directorios debes copiar los ficheros fuente que fueron descargados en el capítulo 3 a algún directorio que cuelgue de $LFS/usr/src (tendrás que crear el directorio en el que desees meter los fuentes).


Instalando Bash-2.05a

Estimación del tiempo de construcción:      3 minutos 
Estimación del espacio de disco requerido:  20 MB

Instalación de Bash

Antes de intentar instalar Bash, tienes que comprobar y asegurarte de que tu distribución tiene los archivos /usr/lib/libcurses.a y /usr/lib/libncurses.a. Si tu distribución original es otro sistema LFS, todos estos ficheros existirán si seguiste las instrucciones del libro al pie de la letra.

Si no existe ninguno de los dos ficheros, debes instalar el paquete de desarrollo de la librería ncurses. Este paquete suele tener un nombre parecido a ncurses-dev. Si este paquete ya está instalado o acabas de instalarlo, comprueba los dos ficheros de nuevo. A menudo, el fichero libcurses.a puede faltar (todavía). Si es ese el caso, entonces crea el fichero libcurses.a como un enlace simbólico, ejecutando como administrador del sistema (root) las siguientes órdenes:

cd /usr/lib &&
ln -s libncurses.a libcurses.a

Ya podemos continuar. Instala Bash ejecutando las siguientes órdenes:

./configure --enable-static-link --prefix=$LFS/usr \
   --bindir=$LFS/bin --with-curses &&
make &&
make install &&
cd $LFS/bin &&
ln -sf bash sh

Si al terminar la etapa make install se imprimen unas líneas como estas:

install-info: unknown option `--dir-file=/mnt/lfs/usr/info/dir' 
usage: install-info [--version] [--help] [--debug] [--maxwidth=nnn] 
	[--section regexp title] [--infodir=xxx] [--align=nnn] 
	[--calign=nnn] [--quiet] [--menuentry=xxx]
	[--info-dir=xxx] 
	[--keep-old] [--description=xxx] [--test]
	[--remove] [--] filename 
make[1]: *** [install] Error 1 
make[1]: Leaving directory `/mnt/lfs/usr/src/bash-2.05a/doc' 
make: [install] Error 2 (ignored)

entonces, probablemente, estás utilizando Debian y tienes una versión antigua del paquete texinfo. Este error no es grave de ninguna manera: las páginas info se instalarán cuando volvamos a compilar bash dinámicamente en el capítulo 6, así que puedes ignorarlo.

Cuando probamos la instalación con la versión más moderna de Debian, los últimos dos comandos se ejecutaron porque el proceso de instalación no devolvió un valor mayor de 0. Pero harías bien en comprobar si tienes el enlace simbólico $LFS/bin/sh en tu partición LFS. Si no lo tienes, ejecuta ahora manualmente los dos últimos comandos.


Explicación de los comandos

--enable-static-link: Esta opción de configure provoca que Bash sea enlazado estáticamente.

--prefix=$LFS/usr: Esta opción de configure instala todos los ficheros de Bash bajo el directorio $LFS/usr, que pasa a ser el directorio /usr cuando entramos en el entorno chroot o reiniciamos LFS.

--bindir=$LFS/bin: Esto instala los archivos ejecutables en $LFS/bin. Lo hacemos de esta manera porque queremos que bash esté en /bin, no en /usr/bin. Una razón para ésto es que el directorio /usr podría estar en una partición separada que tendrá que montarse en algún momento. Antes de que se monte esa partición, necesitas y querrás tener bash disponible (sería difícil ejecutar los guiones de arranque sin un intérprete de comandos, por ejemplo).

--with-curses: Esto provoca que Bash se enlace con la librería curses en lugar de la librería por defecto, termcap, que se está convirtiendo en obsoleta.

No es estrictamente necesario enlazar bash con libncurses (podría, por el momento, enlazarse con una librería estática termcap, y no pasaría nada porque, de todas formas, instalaremos de nuevo Bash en el capítulo 6, donde usaremos libncurses), pero es una buena forma de comprobar que el paquete ncurses se ha instalado correctamente. Si no es así, podrías tener problemas más adelante en este capítulo, cuando instales el paquete texinfo. Ese paquete necesita ncurses y no se puede utilizar termcap en ese caso.

ln -sf bash sh: Esta orden crea el enlace simbólico sh, que apunta a bash. Muchos guiones se ejecutan utilizando 'sh' (invocándole mediante #!/bin/sh como primera línea del guión) lo que invoca un modo especial de bash. Bash se comportará entonces (de manera tan similar como sea posible) como el intérprete de órdenes Bourne original.

Los && al final de cada línea provocan que el siguiente comando a ejecutar sólo lo haga si el anterior terminó devolviendo un valor de 0, que indica éxito. Si todos estos comandos se copian en el intérprete de órdenes, es importante asegurarse de que, si ./configure falla, make no será ejecutado e, igualmente, si make falla, entonces make install no se ejecutará, y así sucesivamente.


Instalando Binutils-2.12

Estimación del tiempo de construcción:      6 minutos
Estimación del espacio de disco requerido:  96 MB

Contenido de binutils-2.11.2


Descripciones


Instalando Bzip2-1.0.2

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  3 MB

Instalando Diffutils-2.8

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  4 MB

Instalando Fileutils-4.1

Estimación del tiempo de construcción:      3 minutos
Estimación del espacio de disco requerido:  25 MB

Instalación de Fileutils

Los programas de un paquete fileutils enlazados estáticamente pueden causar violaciones de segmento en algunos sistemas si tu distribución tiene instalada la librería Glibc-2.2.3 o una versión posterior. Parece que también ocurre, en su mayoría, en máquinas que contienen un procesador AMD, aunque existen un caso o dos donde ha sido afectado un sistema Intel. Si tu sistema entra en esta categoría, prueba el siguiente arreglo.

Ten en cuenta que, en algunos casos, utilizar estos comandos de sed provocará problemas que impedirán compilar este paquete, incluso cuando tu sistema tenga un procesador AMD y una librería Glibc-2.2.3 (o superior) instalada. Si ese es tu caso, necesitarás borrar el directorio fileutils-4.1 y desempaquetarlo de nuevo antes de continuar. Creemos que esto puede pasar cuando tu distribución ha alterado de alguna forma la librería Glibc-2.2.3, pero los detalles no están disponibles por ahora.

Para reparar este paquete de forma que compile adecuadamente en máquinas AMD/Glibc-2.2.3, ejecuta los siguiente comandos. No intentes utilizar este arreglo si no tienes la librería Glibc-2.2.3 instalada. Es más que probable que provoque todo tipo de problemas a la hora de compilar.

cp lib/Makefile.in lib/Makefile.in.backup &&
sed -e 's/\(.*\)\(fopen-safer\.c \)\\/\1\2atexit.c \\/' \
   -e 's/\(.*\)\(idcache\$U\.\$.*\)\\/\1\2atexit$U.$(OBJEXT) \\/' \
   lib/Makefile.in.backup > lib/Makefile.in

Instala fileutils ejecutando los siguientes comandos:

./configure --disable-nls \
   --prefix=$LFS/usr --bindir=$LFS/bin &&
make LDFLAGS=-static &&
make install &&
cd $LFS/usr/bin &&
ln -sf ../../bin/install

Una vez hayas instalado fileutils, puedes comprobar si se ha evitado el problema de la violación de segmento ejecutando $LFS/bin/ls. Si esto funciona, entonces está solucionado. Si no, deberás rehacer la instalación utilizando los comandos de sed si no los usaste, o sin ellos, si en efecto los utilizaste.


Contenido de fileutils-4.1


Descripciones


Instalando Gawk-3.1.0

Estimación del tiempo de construcción:      2 minutos
Estimación del espacio de disco requerido:  12 MB

Instalación de Gawk

Atención: NO ejecutes make uninstall en este paquete si has aplicado el arreglo de sed para cambiar la definición del directorio libexec. La regla uninstall del fichero Makefile ejecuta un comando como rm -rf <libexecdir>/* Como hemos cambiado el directorio libexec a /usr/bin se ejecutará rm -rf /usr/bin/*

Al instalar Gawk utilizando la librería glibc-2.1.x en tu sistema base, puede ser necesario usar un arreglo para prevenir un conflicto en el nombre de las variables. En este caso, se pueden utilizar los comandos siguientes. Ten en cuenta que estos comandos pueden ser utilizados para otras versiones de glibc, por lo que, si no estás seguro, usa entonces la primera versión.

cp awklib/Makefile.in awklib/Makefile.in.backup &&
sed -e '/^datadir/s/awk/gawk/' \
-e '/^libexecdir/s%/awk%%' awklib/Makefile.in.backup \
   > awklib/Makefile.in &&
export CPPFLAGS=-Dre_max_failures=re_max_failures2 &&
./configure --prefix=$LFS/usr --disable-nls \
   --libexecdir=$LFS/usr/bin &&
unset CPPFLAGS &&
make LDFLAGS=-static &&
make install

Si estás utilizando una versión más moderna de glibc (2.2.x), puedes utilizar los siguientes comandos para instalar Gawk:

cp awklib/Makefile.in awklib/Makefile.in.backup &&
sed -e '/^datadir/s/awk/gawk/' \
-e '/^libexecdir/s%/awk%%' awklib/Makefile.in.backup \
   > awklib/Makefile.in &&
./configure --prefix=$LFS/usr --disable-nls \
   --libexecdir=$LFS/usr/bin &&
make LDFLAGS=-static &&
make install


Instalando GCC-2.95.3

Estimación del tiempo de construcción:      22 minutos
Estimación del espacio de disco requerido:  168 MB

Instalación de GCC

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

Instala GCC ejecutando los siguientes comandos:

patch -Np1 -i ../gcc-2.95.3-2.patch &&
mkdir ../gcc-build &&
cd ../gcc-build &&
../gcc-2.95.3/configure --prefix=/usr --enable-languages=c,c++ \
   --disable-nls --disable-shared --enable-threads=posix &&
make BOOT_LDFLAGS=-static bootstrap &&
make prefix=$LFS/usr install &&
cd $LFS/lib &&
ln -sf ../usr/bin/cpp &&
cd $LFS/usr/lib &&
ln -sf ../bin/cpp &&
cd $LFS/usr/bin &&
ln -sf gcc cc &&
rmdir $LFS/usr/*-gnu/include &&
rmdir $LFS/usr/*-gnu


Explicación de los comandos

patch -Np1 -i ../gcc-2.95.3-2.patch: Este nuevo parche soluciona el manejo incorrecto de símbolos débiles, la sobreoptimización de las llamadas a estos símbolos débiles, y modifica atexit y el símbolo __dso_handle requerido para un funcionamiento correcto de atexit.

make BOOT_LDFLAGS=-static: Esto es el equivalente al "make LDFLAGS=-static" que usamos con otros paquetes para compilarlos estáticamente

--prefix=/usr: Esto NO es un error tipográfico. GCC establece directamente algunas rutas durante la compilación y por eso necesitamos pasar /usr como prefijo a ./configure. Pasamos el prefijo real de instalación posteriormente a "make install".

--enable-languages=c,c++: Con esto sólo se construyen los compiladores C y C++ y no el resto de compiladores disponibles, que no son habitualmente utilizados. Si se necesitan esos otros compiladores, el parámetro --enable-languages debe omitirse.

--enable-threads=posix: Esto activa el manejo de excepciones C++ en código multi-hilo.

ln -sf ../usr/bin/cpp: Esto crea el enlace simbólico $LFS/lib/cpp. Algunos paquetes intentan encontrar cpp explícitamente en /lib.

ln -sf ../bin/cpp: Esto crea el enlace simbólico $LFS/usr/lib/cpp para los paquetes que esperan encontrar cpp en /usr/lib.

rmdir $LFS/usr/*-gnu/include y rmdir $LFS/usr/*-gnu: Estos directorios son creados vacíos por GCC y no nos sirven para ningún propósito concreto. Están relacionados con la compilación cruzada pero no son de aplicación para nosotros y está considerado como un fallo de GCC que no podemos corregir, sobre todo porque acaban siendo directorios vacíos. Por eso tenemos que eliminarlos manualmente.


Contenido de gcc-2.95.3


Instalando Grep-2.5

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  4 MB

Instalando Gzip-1.2.4a

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  2 MB

Instalando Linux Kernel-2.4.18

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  132 MB

El porqué de copiar las cabeceras del núcleo y no hacer enlaces simbólicos a ellas.

En el pasado, era una práctica común enlazar simbólicamente los directorios /usr/include/linux y asm con /usr/src/linux/include/linux y asm, respectivamente. Esta es una mala idea, como señala este extracto de un mensaje de Linus Torvalds a la Lista de Correo del Núcleo Linux:

Sugeriría que la gente que compile núcleos nuevos debe:

 - no tener un sólo enlace simbólico a la vista (excepto el que crea la
   misma construcción del núcleo, el enlace simbólico llamado
   "linux/include/asm", que sólo se usa para la compilación interna del
   mismo núcleo).

Y sí, esto es lo que yo hago. Mi /usr/src/linux todavía contiene los
ficheros de cabecera del antiguo 2.2.13, aunque no he ejecutado un
núcleo 2.2.13 desde hace _muucho_ tiempo. Pero esas fueron las cabeceras
con las que fue compilada glibc, por lo que esas cabeceras son las que
coinciden con los ficheros objeto de la librería.

Y este es, de hecho, el entorno que se ha sugerido en, al menos, los
últimos cinco años. No sé por qué el asunto del enlace simbólico sigue
coleando, como un mal zombi. Casi cada distribución todavía tiene ese
enlace simbólico roto,  y la gente todavía recuerda que el código fuente
de linux debe ir en "/usr/src/linux" aunque no ha sido cierto desde hace
_muucho_ tiempo.

La parte relevante de este mensaje es donde él afirma que las cabeceras deberían ser con las que fue compilada glibc. Estas son las cabeceras que deberían permanecer accesibles y por ello, copiándolas, nos aseguramos de que seguimos esa pauta. Fíjate también en que, como no tienes esos enlaces simbólicos, es adecuado tener el código fuente del núcleo en /usr/src/linux.


Instalando Make-3.79.1

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  6 MB

Instalando Patch-2.5.4

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  2 MB

Instalación de Patch

Instala Patch ejecutando los siguientes comandos:

export CPPFLAGS=-D_GNU_SOURCE &&
./configure --prefix=$LFS/usr &&
unset CPPFLAGS &&
make LDFLAGS=-static &&
make install


Instalando Sed-3.02

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  2 MB

Instalando Sh-utils-2.0

Estimación del tiempo de construcción:      2 minutos
Estimación del espacio de disco requerido:  23 MB

Contenido de sh-utils-2.0


Descripciones


Instalando Texinfo-4.1

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  11 MB

Instalación de Texinfo

Instala Texinfo ejecutando los siguientes comandos:

./configure --prefix=$LFS/usr --disable-nls &&
make LDFLAGS=-static &&
make install


Instalando Textutils-2.0

Estimación del tiempo de construcción:      2 minutos
Estimación del espacio de disco requerido:  24 MB

Instalación de Textutils

Instala Textutils ejecutando los siguientes comandos:

./configure --prefix=$LFS/usr --disable-nls &&
make LDFLAGS=-static &&
make install &&
mv $LFS/usr/bin/cat $LFS/usr/bin/head $LFS/bin


Contenido de textutils-2.0


Descripciones


Capítulo 6. Instalando los programas del sistema base


Sobre los símbolos de depuración

Muchos programas y librerías son compilados por defecto con símbolos de depuración (opción -g de gcc).

Un programa compilado con símbolos de depuración permite al usuario lanzar un programa o librería a través de un depurador y la salida del depurador será amigable. Estos símbolos de depuración también agrandan el programa o librería de forma significativa.

Antes de que comiences a preguntarte si estos símbolos de depuración realmente producen una gran diferencia, aquí tienes algunas estadísticas. Úsalas para sacar tu propia conclusión.

Los tamaños varían dependiendo de qué compilador fue usado y qué versión de la librería C se usó para enlazar dinámicamente los programas, pero los resultados son similares si comparas los programas con y sin símbolos de depuración.

Para eliminar los símbolos de depuración de un binario (debe ser un binario a.out o ELF) ejecuta strip --strip-debug fichero. Pueden usarse comodines para eliminar los símbolos de depuración de múltiples ficheros (puede usarse algo como esto: strip --strip-debug $LFS/usr/bin/*). Mucha gente probablemente nunca use un depurador, por lo que eliminando estos símbolos se puede liberar una buena cantidad de espacio del disco.

Para tu comodidad, en el capítulo 9 se incluye un comando simple para eliminar todos los símbolos de depuración de todos los programas y librerías del sistema.

Puedes encontrar información adicional en la receta de optimización que hay en http://hints.linuxfromscratch.org/hints/optimization.txt .


Entrando al entorno chroot

Es la hora de entrar en nuestro entorno chroot para instalar el resto de programas que necesitamos.

Ejecuta los siguientes comandos para entrar en el entorno chroot. A partir de este punto ya no es necesario usar la variable $LFS, porque todo lo que un usuario haga estará restringido a la partición LFS (aunque / sea realmente /mnt/lfs el intérprete de comandos no lo sabe).

cd $LFS &&
chroot $LFS /usr/bin/env -i HOME=/root \
   TERM=$TERM /bin/bash --login

La opción -i borrará todas las variables de entorno actuales mientras se esté dentro del entorno chroot y solamente se exportan las variables HOME y TERM. La construcción TERM=$TERM fijará la variable TERM dentro del chroot al mismo valor que fuera del chroot porque programas como vim y less la necesitan para funcionar correctamente. Si necesitas tener presentes otras variables, como CFLAGS o CXXFLAGS, necesitas volver a establecerlas de nuevo.

La razón por la que hacemos cd $LFS antes de lanzar el comando chroot es porque el antiguo paquete sh-utils tiene un programa chroot que no puede hacer el cambio de directorio por sí mismo, por lo que debemos ejecutarlo manualmente. Aunque esto no es un problema en muchas distribuciones modernas, tampoco es perjudicial y nos aseguramos de que el comando funciona para todo el mundo.

Ahora que estamos dentro del entorno chroot, podemos continuar instalando todos los programas del sistema base. Debes asegurarte de que todos los comandos que aparecen a continuación en este y los siguientes capítulos son lanzados dentro del entorno chroot. Si por alguna razón abandonas este entorno (tras un reinicio, por ejemplo), por favor, recuerda montar de nuevo $LFS/proc y reentrar en el chroot antes de seguir con el libro.

Ten en cuenta que en la línea de entrada de comandos de bash pondrá: "I have no name!". Esto es normal porque Glibc no ha sido instalada todavía.


Instalando Glibc-2.2.5

Estimación del tiempo de construcción:      46 minutos
Estimación del espacio de disco requerido:  350 MB

Instalación de Glibc

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.


Explicación de los comandos

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


Contenido de glibc-2.2.5


Descripciones


Descripciones


Creando los dispositivos (Makedev-1.4)

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  57 KB

Instalando Findutils-4.1

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  3 MB

Instalando Findutils

Antes de instalar Findutils debe desempaquetarse el parche findutils.

Instala Findutils ejecutando los siguientes comandos:

patch -Np1 -i ../findutils-4.1.patch &&
./configure --prefix=/usr &&
make &&
make libexecdir=/usr/bin install


Contenido de findutils-4.1


Descripciones


Instalando Ncurses-5.2

Estimación del tiempo de construcción:      6 minutos
Estimación del espacio de disco requerido:  29 MB

Instalación de Ncurses

Instala Ncurses ejecutando los siguientes comandos:

./configure --prefix=/usr --libdir=/lib \
   --with-shared --disable-termcap &&
make &&
make install &&
cd /lib &&
mv *.a /usr/lib &&
chmod 755 *.5.2 &&
cd /usr/lib &&
ln -sf libncurses.a libcurses.a &&
ln -sf ../../lib/libncurses.so &&
ln -sf ../../lib/libcurses.so &&
ln -sf ../../lib/libform.so &&
ln -sf ../../lib/libpanel.so &&
ln -sf ../../lib/libmenu.so


Contenido de ncurses-5.2


Descripciones


Instalando Vim-6.1

Estimación del tiempo de construcción:      2 minutos
Estimación del espacio de disco requerido:  15 MB

Instalación de Vim

Si no quieres instalar vim como editor en el sistema LFS, querrás descargar alguno alternativo e instalar el editor que prefieras. Hay algunas recetas disponibles sobre cómo instalar otros editores en http://hints.linuxfromscratch.org/hints/. Las recetas que hay actualmente disponibles son para Emacs, Joe y nano.

Instala Vim ejecutando los siguientes comandos:

./configure --prefix=/usr &&
make CPPFLAGS=-DSYS_VIMRC_FILE=\\\"/etc/vimrc\\\" &&
make install &&
cd /usr/bin &&
ln -sf vim vi

Si piensas instalar el sistema X Window en tu sistema LFS, piensa en recompilar Vim después de instalar X. Vim tiene una bonita versión con interfaz gráfica que necesita X y alguna otra librería instalada. Para más información lee la documentación de Vim.


Instalando GCC-2.95.3

Estimación del tiempo de construcción:      22 minutos
Estimación del espacio de disco requerido:  148 MB

Contenido de gcc-2.95.3


Instalando Bison-1.34

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  3 MB

Contenido de bison-1.31


Descripciones

bison

Bison es un generador de analizadores sintácticos, un sustituto de YACC ("Yet Another Compiler Compiler", otro compilador de compiladores). Entonces, ¿qué es Bison? Es un programa que genera un programa que analiza la estructura de un fichero de texto. En lugar de escribir el programa, el usuario especifica qué cosas deben ser conectadas y con esas reglas se genera un programa que analiza el fichero de texto. Hay muchos ejemplos en los que se necesita esta estructura y uno de ellos es la calculadora.

Tomando la cadena :

        1 + 2 * 3

Una persona puede fácilmente saber que el resultado es 7. ¿Por qué? Porque al ver la estructura nuestro cerebro sabe como interpretar la cadena. La computadora no sabe eso y Bison es una herramienta que le ayuda a interpretarla presentando la cadena de la siguiente forma al compilador:

            +
           / \
          *   1
         / \
        2   3

Comenzando por la base del árbol y subiendo por los números 2 y 3, que están unidos por el símbolo de la multiplicación, la computadora multiplica 2 y 3. Almacena el resultado de la multiplicación y, lo siguiente que ve, es el resultado de 2*3 y el número 1 unido con el símbolo de la suma. Añadiendo 1 al resultado previo se obtiene 7. El cálculo de formulas más complejas puede hacerse pasándolas a este formato de árbol. El ordenador comienza justo por la base y sigue trabajando hacia arriba hasta alcanzar el resultado correcto. Por supuesto, Bison no se usa sólo en calculadoras.


Instalando Groff-1.17.2

Estimación del tiempo de construcción:      2 minutos
Estimación del espacio de disco requerido:  16 MB

Instalación de Groff

Instala Groff ejecutando los siguientes comandos:

./configure --prefix=/usr &&
make &&
make install &&
cd /usr/bin &&
ln -s soelim zsoelim &&
ln -s eqn geqn &&
ln -s tbl gtbl


Contenido de groff-1.17.2


Descripciones


Instalando Man-1.5j

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  1 MB

Instalación de Man

Instala Man ejecutando los siguientes comandos:

./configure -default &&
make &&
make install &&
mv /usr/share/misc/man.conf /etc

Puede que quieras mirar la receta sobre man en http://hints.linuxfromscratch.org/hints/man.txt que se ocupa de cuestiones de formateado y compresión de las páginas del manual.


Instalando Perl-5.6.1

Estimación del tiempo de construcción:      6 minutos
Estimación del espacio de disco requerido:  35 MB

Contenido de perl-5.6.1


Descripciones


Instalando Texinfo-4.1

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  10 MB

Instalación de Texinfo

Instala Texinfo ejecutando los siguientes comandos:

./configure --prefix=/usr &&
make &&
make install &&
make TEXMF=/usr/share/texmf install-tex


Instalando Autoconf-2.53

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  4 MB

Contenido de autoconf-2.52


Descripciones


Instalando Flex-2.5.4a

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  3MB

Instalando Bin86-0.16.2

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  1 MB

Instalando Binutils-2.12

Estimación del tiempo de construcción:      6 minutos
Estimación del espacio de disco requerido:  85 MB

Contenido de binutils-2.11.2


Descripciones


Instalando Bzip2-1.0.2

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  2 MB

Instalando Ed-0.2

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  2 MB

Instalación de Ed

Ed no es algo que querrás utilizar personalmente. Se instala aquí porque puede que lo use el programa patch si te encuentras con algún parche basado en ed. Esto no suele ocurrir porque ahora se prefieren los parches basados en diff.

Instala Ed ejecutando los siguientes comandos:

cp buf.c buf.c.backup &&
sed 's/int u/int u, sfd/' buf.c.backup | \
   sed '/.*\*mktemp.*/d' | \
   sed 's/.*if (mktemp.*/  sfd = mkstemp(sfn);\
   if ((sfd == -1) || (sfp = fopen (sfn, "w+")) == NULL)/' > buf.c &&
./configure --prefix=/usr &&
make &&
make install &&
mv /usr/bin/ed /usr/bin/red /bin


Instalando Gettext-0.11.1

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  11MB

Contenido de gettext-0.10.40


Instalando Kbd-1.06

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  8 MB

Instalación de Kbd

Instala Kbd ejecutando los siguientes comandos:

patch -Np1 -i ../kbd-1.06-2.patch &&
./configure &&
make &&
make install


Contenido de kbd-1.06


Descripciones


Instalando E2fsprogs-1.27

Estimación del tiempo de construcción:      2 minutos
Estimación del espacio de disco requerido:  21 MB

Instalación de E2fsprogs

Instala E2fsprogs ejecutando los siguientes comandos:

mkdir ../e2fsprogs-build &&
cd ../e2fsprogs-build &&
../e2fsprogs-1.27/configure --prefix=/usr --with-root-prefix="" \
   --enable-elf-shlibs &&
make &&
make install &&
make install-libs &&
install-info /usr/share/info/libext2fs.info /usr/share/info/dir


Contenido de e2fsprogs-1.25


Descripciones


Instalando Fileutils-4.1

Estimación del tiempo de construcción:      3 minutos
Estimación del espacio de disco requerido:  16 MB

Instalación de Fileutils

Instala Fileutils ejecutando los siguientes comandos:

./configure --prefix=/usr --bindir=/bin &&
make &&
make install &&
cd /usr/bin &&
ln -sf ../../bin/install


Contenido de fileutils-4.1


Descripciones


Instalando Gzip-1.2.4a

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  1 MB

Instalación de Gzip

Instala Gzip ejecutando los siguientes comandos:

./configure --prefix=/usr &&
cp gzexe.in gzexe.in.backup &&
sed 's%"BINDIR"%/bin%' gzexe.in.backup > gzexe.in &&
make &&
make install &&
cd /usr/bin &&
mv gzip /bin &&
rm gunzip zcat &&
cd /bin &&
ln -sf gzip gunzip &&
ln -sf gzip zcat &&
ln -sf gunzip uncompress


Instalando Lilo-22.2

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  3 MB

Instalación de Lilo

Hemos elegido Lilo porque nos sentimos cómodos con él, pero puede que desees echar un vistazo a otra cosa. Alguien ha escrito una receta sobre GRUB en http://hints.linuxfromscratch.org/hints/grub-howto.txt, ya que es un gestor de arranque alternativo.

Instala Lilo ejecutando los siguientes comandos:

make &&
make install

Parece que la compilación de este paquete falla en ciertas máquinas cuando se usa la opción del compilador -g. Si no consigues compilar Lilo, deberías tratar de borrar el -g de la variable CFLAGS en el fichero Makefile.

Al final de la instalación, el proceso make install imprimirá un mensaje afirmando que se debe ejecutar /sbin/lilo para completar la actualización. No lo hagas, de momento no es útil. El fichero /etc/lilo.conf no está presente todavía. Completaremos la instalación de lilo en el capítulo 8.

Quizá te interese saber que alguien escribió una receta sobre cómo conseguir un logotipo en lugar de la línea de órdenes estándar de LILO o el menú. Échalo un vistazo en http://hints.linuxfromscratch.org/hints/bootlogo.txt .


Instalando Modutils-2.4.15

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  2 MB

Instalando Procps-2.0.7

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  2 MB

Instalación de Procps

Instala Procps ejecutando los siguientes comandos:

make &&
make XSCPT='' install &&
mv /usr/bin/kill /bin


Contenido de procps-2.0.7


Descripciones


Instalando Psmisc-20.2

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  500 KB

Instalando Reiserfsprogs-3.x.1b

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  7 MB

Instalando Sh-utils-2.0

Estimación del tiempo de construcción:      2 minutos
Estimación del espacio de disco requerido:  11 MB

Instalación de Sh-utils

Instala Shellutils ejecutando los siguientes comandos:

./configure --prefix=/usr &&
make &&
make install &&
cd /usr/bin &&
mv basename date echo false hostname /bin &&
mv pwd sleep stty su test true uname /bin &&
mv chroot ../sbin


Contenido de sh-utils-2.0


Descripciones


Instalando Net-tools-1.60

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  5 MB

Contenido de net-tools-1.60


Instalando Shadow-4.0.3

Estimación del tiempo de construcción:      3 minutos
Estimación del espacio de disco requerido:  6 MB

Instalación del Entorno de Contraseñas Ocultas (Shadow Password Suite)

Antes de instalar este paquete, puede que quieras echar un vistazo a la receta de lfs http://hints.linuxfromscratch.org/hints/shadowpasswd_plus.txt . En ella se discute cómo puedes hacer tu sistema más seguro respecto a las contraseñas y cómo conseguir exprimir hasta el máximo este paquete.

Instala el Entorno de Contraseñas Ocultas (Shadow Password Suite) ejecutando los siguientes comandos:

./configure --prefix=/usr --enable-shared &&
make &&
make install &&
cd etc &&
cp limits login.access /etc &&
sed 's%/var/spool/mail%/var/mail%' login.defs.linux > /etc/login.defs &&
cd /usr/sbin &&
ln -sf vipw vigr &&
rm /bin/vipw &&
mv /bin/sg /usr/bin &&
cd /lib &&
mv libmisc.*a libshadow.*a /usr/lib &&
cd /usr/lib &&
ln -s ../../lib/libshadow.so


Contenido de shadow-20001016


Descripciones


Instalando Sysvinit-2.84

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  630 KB

Contenido de sysvinit-2.84


Descripciones


Instalando Textutils-2.0

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  15 MB

Instalación de Textutils

Instala Textutils ejecutando los siguientes comandos:

./configure --prefix=/usr &&
make &&
make install &&
mv /usr/bin/cat /usr/bin/head /bin


Contenido de textutils-2.0


Descripciones


Instalando Util-linux-2.11o

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  9 MB

Instalación de Util-Linux

Instala Util-Linux ejecutando los siguientes comandos:

./configure &&
make HAVE_SLN=yes &&
make HAVE_SLN=yes install


Contenido de util-linux-2.11n


Descripciones


Instalando LFS-Bootscripts-1.9

Estimación del tiempo de construcción:      1 minuto
Estimación del espacio de disco requerido:  23 KB

Instalación de LFS-Bootscripts

Nosotros usamos guiones de inicio al estilo SysV. Lo hemos elegido porque es ampliamente usado y nos sentimos cómodos con él. Si quieres probar alguna otra cosa, alguien ha escrito una receta para LFS con guiones de arranque al estilo BSD. Está en: http://hints.linuxfromscratch.org/hints/bsd-init.txt.

Si decides usar el estilo BSD o cualquier otro estilo de guiones, puedes saltarte el capítulo 7 e ir directamente al capítulo 8.

Instala LFS-Bootscripts ejecutando los siguientes comandos:

cp -a rc.d sysconfig /etc &&
chown -R root.root /etc/rc.d /etc/sysconfig


Contenido de LFS-bootscripts-1.9


Descripciones


Configurando los programas esenciales

Ahora que están todos los paquetes instalados, todo lo que tenemos que hacer para conseguir que algunos programas funcionen correctamente es crear sus ficheros de configuración.


Configurando Sysklogd

Crea un nuevo fichero /etc/syslog.conf ejecutando lo siguiente:

cat > /etc/syslog.conf << "EOF"
# Inicio de /etc/syslog.conf

auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *

# Fin de /etc/syslog.conf
EOF


Configurando Sysvinit

Crea un nuevo fichero /etc/inittab ejecutando lo siguiente:

cat > /etc/inittab << "EOF"
# Inicio de /etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:respawn:/sbin/sulogin

1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600

# Fin de /etc/inittab
EOF


Capítulo 7. Preparando los guiones de arranque


¿Cómo hacen estos guiones que funcione el proceso de arranque?

Linux utiliza como sistema de inicio SysVinit, que se basa en el concepto de niveles de ejecución. Este sistema de inicio puede variar ampliamente de un sistema a otro, por lo tanto, no se debe asumir que porque las cosas funcionen en <inserte el nombre de una distribución> tengan que funcionar en LFS también. LFS tiene su propia manera de hacer las cosas, la cual suele respetar los estándares aceptados.

SysVinit (al que llamaremos init a partir de este momento) se basa en un esquema de niveles de ejecución. Hay 7 (desde el 0 al 6) niveles de ejecución (en realidad, existen más pero son para casos especiales y es raro utilizarlos. Puedes leer la página man de init para obtener más información), y cada uno de ellos indica lo que debe hacer el sistema durante el arranque. El nivel de ejecución por omisión es el 3. He aquí una breve descripción de los distintos niveles de ejecución como suelen implementarse:

0: parada del sistema
 1: modo monousuario
 2: modo multiusuario sin red
 3: modo multiusuario con red
 4: reservado para personalizar, si no, hace lo mismo que el 3
 5: Igual que el 4. Normalmente se utiliza para iniciar el entorno
 gráfico (como xdm de X o kdm de KDE)
 6: reinicio del sistema

Para cambiar el nivel de ejecución se utiliza el comando init <nivel de ejecución> donde <nivel de ejecución> representa el nivel de ejecución que deseemos arrancar. Por ejemplo, para reiniciar el sistema se utilizaría el comando init 6. El comando reboot no es más que un alias de dicho comando, al igual que el comando halt lo es de init 0.

Debajo de /etc/rc.d existen una serie de directorios rc?.d, donde ? representa el número del nivel de ejecución, y el directorio rcsysinit.d, que contienen un conjunto de enlaces simbólicos. Los nombres de estos enlaces simbólicos empiezan con K o con S seguidos de 2 cifras. Los enlaces que comienzan por una K indican la parada (kill) de un servicio, mientras que la S indica su inicio (start). Las dos cifras determinan el orden de ejecución, desde 00 hasta 99; cuanto menor sea el número antes se ejecutará. En el momento que se desee cambiar de nivel se pararán los servicios del nivel actual, para iniciar los del nuevo nivel.

Los enlaces simbólicos apuntan a los guiones situados en el directorio /etc/rc.d/init.d, que son los que realmente se ejecutan. Tanto los enlaces de parada como los de inicio apuntan al mismo guión. Esto se debe a que se pueden ejecutar usando parámetros como start, stop, restart, reload, status. Cuando se encuentra un enlace que comienza por K se ejecuta el guión con el parámetro stop. Y cuando comienza por S con el parámetro start.

Hay una excepción. Los enlaces que comienzan por S en los directorios rc0.d y rc6.d no inician nada. Todos estos guiones se ejecutan con el parámetro stop para parar algo. Es evidente que cuando quieres apagar o reiniciar el sistema, no quieres ejecutar nada, sólo quieres pararlo.

He aquí una descripción de lo que hace cada parámetro:

Por supuesto, puedes modificar el proceso de inicio para adecuarlo a tus necesidades (después de todo es tu sistema LFS, no el nuestro). Lo aquí expuesto es un ejemplo de cómo nos gusta a nosotros (claro que lo que a nosotros nos gusta, puede que tú lo odies).


Configurando el guión network

Esta sección solamente es aplicable en el caso de que vayas a configurar una tarjeta de red.

Si no tienes tarjeta de red es muy probable que no vayas a crear ninguna configuración relacionada con ellas. En ese caso, debes eliminar los enlaces simbólicos a network de todos los directorios de los niveles de ejecución (/etc/rc.d/rc*.d)


Capítulo 8. Haciendo el sistema LFS arrancable


Instalando linux-2.4.18

Estimación del tiempo de construcción:           Depende de las opciones seleccionadas
Estimación del espacio de disco requerido:  Depende de las opciones seleccionadas

Construir el núcleo comprende dos pasos: configurarlo y compilarlo. Hay varias maneras de configurar el núcleo. Si no te gusta la que utiliza este libro, lee el fichero README que acompaña al árbol de código fuente del núcleo, y busca qué otras opciones existen.

Lo que puedes hacer es tomar el fichero .config del código fuente del núcleo de tu distribución original y copiarlo al directorio $LFS/usr/src/linux. De esta forma, no tienes que configurar el núcleo completo desde cero y puedes usar tus valores actuales. Si eliges hacerlo de esta manera, primero ejecuta el comando make mrproper que aparece debajo, después copia el fichero .config y, a continuación, ejecuta make menuconfig seguido del resto de comandos (puede que make oldconfig sea mejor elección en algunas situaciones. Lee el fichero README para más detalles sobre cuándo se usa make oldconfig).

Los siguientes comandos se ejecutan para construir el núcleo

cd /usr/src/linux &&
make mrproper &&
make menuconfig &&
make dep &&
make bzImage &&
make modules &&
make modules_install &&
cp arch/i386/boot/bzImage /boot/lfskernel &&
cp System.map /boot

Nota: la ruta a arch/i386/boot/bzImage puede variar en las distintas plataformas.


Capítulo 9. El final


El final

¡Bien hecho! Has terminado de instalar tu sistema LFS. Puede que haya sido un proceso largo pero ha merecido la pena. Te deseamos mucha diversión con tu flamante sistema Linux hecho a la medida.

Ahora podría ser un buen momento para quitar todos los símbolos de depurado de los archivos binarios de tu sistema LFS. Si no eres un programador y no planeas depurar tus programas, entonces te alegrará saber que puedes recuperar algunas decenas de megabytes borrando estos símbolos. Este proceso no produce ningún otro inconveniente que no sea no poder depurar los programas nunca más, lo que no es problema si no sabes cómo depurarlos.

Advertencia: El 98% de la gente que usa el comando mencionado más adelante no experimenta ningún problema. Pero haz una copia de seguridad de tu sistema LFS antes de ejecutar este comando. Hay una pequeña posibilidad de que te salga el tiro por la culata, y convierta tu sistema en inutilizable (principalmente destruyendo los módulos del núcleo y las librerías dinámicas y compartidas). Sin embargo, suele ocurrir más a menudo por un error tipográfico que por un problema con el comando utilizado.

Después de haber dicho esto, la opción --strip-debug que usaremos para quitar los símbolos de depuración es, bajo circunstancias normales, bastante inocua. No borrará nada vital de los ficheros. También es bastante seguro usar --strip-all con programas normales (no se debe usar en librerías -se destruirían), pero no es tan seguro como el anterior y el espacio que ganas no es tan grande. Pero si andas justo de espacio de disco, cada granito de arena ayuda, así que decide por ti mismo. Por favor, lee la página del manual (man) de strip para ver las opciones que puedes usar. La idea general es no ejecutar strip sobre librerías (usando otra opción que no sea --strip-debug) para asegurarnos de hacer la apuesta segura.

find $LFS/{,usr/,usr/local/}{bin,sbin,lib} -type f \
   -exec /usr/bin/strip --strip-debug '{}' ';'

Puede ser una buena idea crear el fichero $LFS/etc/lfs-3.3. Teniendo este fichero, te será muy fácil (y a nosotros, si es que vas a pedir ayuda en algún momento) saber qué versión de LFS tienes instalada en tu sistema. Este archivo puede ser un archivo vacío, ejecutando:

touch $LFS/etc/lfs-3.3


Registrarse

¿Quieres registrarte como usuario de LFS ahora que has terminado el libro? Visita http://linuxfromscratch.org/cgi-bin/lfscounter.cgi y regístrate como usuario de LFS introduciendo tu nombre y la primera versión de LFS que has usado.

Arranquemos el sistema LFS ahora...


Arrancando el sistema

Ahora que se han instalado todos los programas y se han creado los guiones de arranque, ya es hora de reiniciar el ordenador. Antes de reiniciar, desmontemos $LFS/proc y la partición LFS, ejecutando

umount $LFS/proc &&
umount $LFS

Y ahora puedes reiniciar el sistema ejecutando algo como:

/sbin/shutdown -r now

Asegúrate de indicar, en la línea de órdenes de LILO, que arranque lfs y no la entrada por defecto, que haría arrancar de nuevo tu sistema original.

Una vez hayas reiniciado, tu sistema LFS está listo para su uso, y puedes empezar a añadir los programas que desees.

Una última cosa que puede que quieras hacer es ejecutar lilo, ahora que ya estás dentro del sistema LFS. De esta forma, pondrás en el MBR la versión de LILO del sistema LFS, en lugar de la que hay allí en este momento, que es la de tu sistema original. Dependiendo de como sea de antigua tu distribución original, la versión del sistema LFS puede tener más características avanzadas que necesites (y puedes) usar.

De cualquier forma, ejecuta lo siguiente para activar la versión de lilo instalada en el sistema LFS:

/sbin/lilo

SI te estás preguntando: "Bien, ¿dónde acudo ahora?"; te alegrará escuchar que alguien ha escrito una receta en LFS sobre el tema en http://hints.linuxfromscratch.org/hints/afterlfs.txt. De igual manera, si no sólo eres novato en LFS, sino en Linux en general, quizá encuentres el consejo para novatos en http://hints.linuxfromscratch.org/hints/newbie.txt muy interesante.

No olvides que existen varias listas de correo en LFS a las que puedes suscribirte si necesitas ayuda, consejo, etc. Visita el Capítulo 1 - Listas de correo y archivos para más información.

De nuevo, te agradecemos el haber utilizado el libro LFS, esperamos que lo hayas encontrado útil y que haya merecido la pena el tiempo invertido.


Apéndice A. Descripción de paquetes y dependencias


Introducción

En este apéndice se describen los siguiente aspectos de cada paquete instalado en este libro.

Mucha de la información sobre estos paquetes (especialmente, su descripción) se ha extraído de las páginas del manual de esos paquetes. No vamos a mostrar las páginas del manual completas, sólo los elementos centrales que hagan posible entender lo que cada programa hace. Para conocer y entender todos los detalles sobre un programa aconsejamos comenzar leyendo la página del manual completa además de este apéndice.

Ciertos paquetes están documentados con mayor profundidad que otros, sencillamente porque sabemos más sobre unos que sobre otros. Si algo debería ser añadido a las siguientes descripciones, por favor no dudes en comunicarlo en las listas de correo. Intentamos que la lista contenga una descripción detallada de cada paquete, pero no podemos hacerlo sin ayuda.

Ten en cuenta que actualmente sólo está descrito lo que hace un paquete , y no lo que necesita que esté instalado. Esto se añadirá más adelante.

También están listadas todas las dependencias para la instalación de todos los paquetes instalados en el libro. La lista incluye qué programas de qué paquetes son necesarios para compilar correctamente el paquete a instalar.

Estas no son las dependencias necesarias para su ejecución, por lo tanto no te ayudarán para saber qué programas son necesarios para usar los programas del paquete. Son solamente las dependencias necesarias para compilarlo.

La lista de dependencias puede estar en ocasiones anticuada con respecto a la versión del paquete usada actualmente. Comprobar las dependencias es un trabajo pesado por lo que puede haber un desfase en la actualización de los paquetes. Pero, normalmente, en la actualización de versiones menores del paquete, las dependencias de instalación no cambian, por lo que son actuales en muchos casos. Si actualizamos a una versión mayor, con seguridad haremos un nuevo chequeo de las dependencias al mismo tiempo.


Autoconf


Contenido de autoconf-2.52


Descripciones


Binutils


Contenido de binutils-2.11.2


Descripciones


Bison


Contenido de bison-1.31


Descripciones

bison

Bison es un generador de analizadores sintácticos, un sustituto de YACC ("Yet Another Compiler Compiler", otro compilador de compiladores). Entonces, ¿qué es Bison? Es un programa que genera un programa que analiza la estructura de un fichero de texto. En lugar de escribir el programa, el usuario especifica qué cosas deben ser conectadas y con esas reglas se genera un programa que analiza el fichero de texto. Hay muchos ejemplos en los que se necesita esta estructura y uno de ellos es la calculadora.

Tomando la cadena :

        1 + 2 * 3

Una persona puede fácilmente saber que el resultado es 7. ¿Por qué? Porque al ver la estructura nuestro cerebro sabe como interpretar la cadena. La computadora no sabe eso y Bison es una herramienta que le ayuda a interpretarla presentando la cadena de la siguiente forma al compilador:

            +
           / \
          *   1
         / \
        2   3

Comenzando por la base del árbol y subiendo por los números 2 y 3, que están unidos por el símbolo de la multiplicación, la computadora multiplica 2 y 3. Almacena el resultado de la multiplicación y, lo siguiente que ve, es el resultado de 2*3 y el número 1 unido con el símbolo de la suma. Añadiendo 1 al resultado previo se obtiene 7. El cálculo de formulas más complejas puede hacerse pasándolas a este formato de árbol. El ordenador comienza justo por la base y sigue trabajando hacia arriba hasta alcanzar el resultado correcto. Por supuesto, Bison no se usa sólo en calculadoras.


E2fsprogs


Contenido de e2fsprogs-1.25


Descripciones


Fileutils


Contenido de fileutils-4.1


Descripciones


Findutils


Contenido de findutils-4.1


Descripciones


GCC


Contenido de gcc-2.95.3


Gettext


Contenido de gettext-0.10.40


Glibc


Contenido de glibc-2.2.5


Descripciones


Descripciones


Groff


Contenido de groff-1.17.2


Descripciones


Gzip


Kbd


Contenido de kbd-1.06


Descripciones


LFS-Bootscripts


Contenido de LFS-bootscripts-1.9


Descripciones


Man


Modutils


Ncurses


Contenido de ncurses-5.2


Descripciones


Net-tools


Contenido de net-tools-1.60


Perl


Contenido de perl-5.6.1


Descripciones


Procps


Contenido de procps-2.0.7


Descripciones


Entorno de Contraseñas Ocultas (Shadow Password Suite)


Contenido de shadow-20001016


Descripciones


Sh-utils


Contenido de sh-utils-2.0


Descripciones


Sysvinit


Contenido de sysvinit-2.84


Descripciones


Texinfo


Textutils


Contenido de textutils-2.0


Descripciones


Util Linux


Contenido de util-linux-2.11n


Descripciones