Linux From Scratch

Versión 4.0

Gerard Beekmans

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

Versión de la traducción: FINAL (Revisada) del 13 de octubre de 2002



Dedicatoria

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

Índice
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 base LFS
Parte 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
Sobre los SBUs
Dónde almacenar los programas descargados
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?
Creando el directorio $LFS/static
Instalando todos los programas como usuario sin privilegios
Instalando Bash-2.05a
Instalando Binutils-2.13
Instalando Bzip2-1.0.2
Instalando Diffutils-2.8.1
Instalando Fileutils-4.1
Instalando Findutils-4.1
Instalando Gawk-3.1.1
Instalando GCC-3.2
Instalando Grep-2.5
Instalando Gzip-1.2.4a
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.2
Instalando Textutils-2.1
Instalando Util-linux-2.11u
6. Instalando los programas del sistema base
Introducción
Sobre los símbolos de depuración
Entrando al entorno chroot
Cambiando el propietario
Creando directorios
Montando el sistema de ficheros /proc
Creando el enlace simbólico /etc/mtab
Creando los enlaces simbólicos bash y sh
Creando los ficheros de contraseñas y grupos
Creando los dispositivos (Makedev-1.7)
Instalando Linux-2.4.19
Instalando Man-pages-1.52
Instalando Glibc-2.2.5
Instalando GCC-3.2
Instalando Zlib-1.1.4
Instalando Findutils-4.1
Instalando Gawk-3.1.1
Instalando Ncurses-5.2
Instalando Vim-6.1
Instalando Bison-1.35
Instalando Less-374
Instalando Groff-1.18
Instalando Textutils-2.1
Instalando Sed-3.02
Instalando Flex-2.5.4a
Instalando Binutils-2.13
Instalando Fileutils-4.1
Instalando Sh-utils-2.0
Instalando Gettext-0.11.5
Instalando Net-tools-1.60
Instalando Perl-5.8.0
Instalando las páginas de manual de los hilos de Linux (linuxthreads-2.2.5)
Instalando M4-1.4
Instalando Texinfo-4.2
Instalando Autoconf-2.53
Instalando Automake-1.6.3
Instalando Bash-2.05a
Instalando File-3.39
Instalando Libtool-1.4.2
Instalando Bin86-0.16.3
Instalando Bzip2-1.0.2
Instalando Ed-0.2
Instalando Kbd-1.06
Instalando Diffutils-2.8.1
Instalando E2fsprogs-1.27
Instalando Grep-2.5
Instalando Gzip-1.2.4a
Instalando Man-1.5k
Instalando Lilo-22.2
Instalando Make-3.79.1
Instalando Modutils-2.4.19
Instalando Netkit-base-0.17
Instalando Patch-2.5.4
Instalando Procinfo-18
Instalando Procps-2.0.7
Instalando Psmisc-21
Instalando Shadow-4.0.3
Instalando Sysklogd-1.4.1
Instalando Sysvinit-2.84
Instalando Tar-1.13
Instalando Util-linux-2.11u
Instalando LFS-Bootscripts-1.10
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.19
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
Less
LFS-Bootscripts
Libtool
Lilo
Linux (el núcleo)
M4
Make
MAKEDEV
Man
Man-pages
Modutils
Ncurses
Netkit-base
Net-tools
Patch
Perl
Procinfo
Procps
Psmisc
Sed
Shadow
Sh-utils
Sysklogd
Sysvinit
Tar
Texinfo
Textutils
Util-linux
Vim
Zlib
B. Recursos
Introducción
Libros
CÓMOs 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. La principal razón es 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?". Es una buena pregunta.

Una importante razón para la existencia de LFS es enseñar a la gente cómo trabaja internamente un sistema Linux. Construir un sistema LFS ayuda a demostrar lo que hace que Linux funcione, cómo trabajan juntas las distintas partes, y cómo unas dependen de otras. Y quizás 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. Con LFS estás en el asiento del conductor y puedes dictar cada aspecto de tu sistema, como la estructura de directorios y la configuración de los guiones de arranque. También podrás decidir 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 menos de 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 restaurante de comida rápida. No tienes idea de lo que te estás comiendo. En cambio, LFS no te da una hamburguesa, sino la receta para hacer la hamburguesa. Te permite revisarla, eliminar los ingredientes no deseados, y añadir tus propios ingredientes para mejorar el sabor de tu hamburguesa. Cuando estés satisfecho con la receta entonces empiezas a prepararla. Ahora tienes la oportunidad de cocinarla a tu gusto: asarla, cocerla, freírla, hacerla a la barbacoa, o comerla cruda.

Otra analogía que podemos usar es comparar a LFS con una casa terminada. LFS te dará los planos de la casa, pero tú debes construirla. Tienes libertad para adaptar los planos como quieras.

Otra ventaja de un sistema Linux hecho a la medida es la seguridad. Compilando el sistema entero a partir del código fuente tienes la posibilidad de supervisar todo y aplicar todos los parches de seguridad que creas que son necesarios. No tienes que esperar a que alguien te proporcione un nuevo paquete binario que tape ese agujero de seguridad. Hasta que examines el nuevo parche y lo construyas no tienes garantía de que ese nuevo paquete se haya construido correctamente y realmente solucione el problema (de forma adecuada). 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

Agradecemos a las siguientes personas y organizaciones su contribución al proyecto LFS:

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

  • Fredrik Danerklint por mantener el servidor alternativo se.linuxfromscratch.org.

  • Tim Jackson <tim@idge.net> por mantener el servidor alternativo linuxfromscratch.idge.net.

  • Hagen Herrschaft <hrx@hrxnet.de> por mantener los servidores alternativos de.linuxfromscratch.org y por donar un sistema P4-2.2Ghz al proyecto LFS.

  • UK Mirror Service por mantener el servidor alternativo linuxfromscratch.mirror.ac.uk.

  • Guido Passet <guido@primerelay.net> por mantener los servidores alternativos www.nl.linuxfromscratch.org y ftp.snt.utwente.nl.

  • Timothy Bauscher <timothy@linuxfromscratch.org> por ser de gran ayuda en la edición de este libro.

  • 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 servidor alternativo www.de.linuxfromscratch.org.

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

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

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

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

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

  • Ian Cooper <ian@wpi.edu> por mantener el servidor alternativo 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 logotipo 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. Utilizaremos un sistema Linux existente como plataforma de desarrollo porque necesitamos un compilador, enlazador (linker), editor de texto y otras herramientas para construir nuestro sistema. Por regla general, las herramientas que vamos a necesitar se instalan por omisión si durante la instalación de nuestra distribución Linux seleccionamos la opción de "desarrollo".

En cuando hayas descargado los paquetes que componen un sistema LFS, crearemos un nueva partición Linux nativa sobre la que se instalará el sistema LFS.

En el siguiente paso, Capítulo 5, discutiremos la instalación de una serie de paquetes que 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 (por ejemplo, necesitas un compilador para instalar un compilador y necesitas un intérprete de comandos para instalar un intérprete de comandos). Los paquetes en este capítulo serán enlazados estáticamente.

El enlazado estático define un método de compilación que hace innecesaria la presencia de librerías tras la construcción del software. El programa resultante es capaz de funcionar por si mismo porque las porciones de código de las librerías que necesita el programa se meten dentro de él. Normalmente el software se enlaza dinámicamente. De esta manera se conserva más espacio en el disco y se mejora la eficiencia de varios programas. Nosotros enlazamos estáticamente los programas en el Capítulo 5 porque en teoría estaremos moviendo nuestro sistema de desarrollo a un entorno virtual donde no existirán las librerías mencionadas anteriormente. Si los programas se enlazan dinámicamente, nuestro entorno de desarrollo no funcionará. Ya que las librerías de las que estamos hablando están en nuestra distribución Linux, el objetivo del Capítulo 5 es construir un entorno de desarrollo en el que esas librerías no sean necesarias, y por tanto sea independiente de la distribución.

En el Capítulo 6 construiremos e instalaremos nuestro sistema final. Usaremos el programa chroot para entrar en un entorno virtual y ejecutar un nuevo intérprete de comandos cuyo directorio raíz será la partición donde construimos todos los programas del Capítulo 5. Esto es equivalente a reiniciar el sistema haciendo que el núcleo monte nuestra partición LFS como partición raíz. La razón de que utilicemos chroot en lugar de reiniciar es que crear un sistema estático arrancable requiere un trabajo adicional que no es necesario. Así, podemos seguir usando nuestro sistema anfitrión mientras construimos LFS. Mientras se está instalando el software, puedes simplemente cambiar a otra VC (consola virtual) o escritorio X y continuar usando tu ordenador como lo harías normalmente.

Cuando esté instalado todo el software del Capítulo 6, los Capítulos 7, 8 y 9 nos ayudarán a terminar la instalación. En el Capítulo 7 configuraremos los guiones de arranque. En el Capítulo 8 construiremos nuestro núcleo (kernel) final y configuraremos 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 ahora hay algo que no veas muy claro, no te preocupes. Debería aclararse 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 servidores alternativos actuales HTTP y FTP a 10 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

4.0 - 5 de octubre de 2002

4.0-RC1 - 28 de septiembre de 2002


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 modos 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 deberá sustituirse en todo momento 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.

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

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/static puedes introducir eso literalmente. Tu intérprete de comandos substituirá $LFS con /mnt/lfs al procesar la línea 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 fichero de contraseñas actual.

Una forma de asegurar que $LFS está establecida 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 sea fijada.


Cómo instalar los programas

Antes de que empieces a usar el libro 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 del archivo:

tar -xvzf archivo.tar.gz
tar -xvzf archivo.tgz

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

bzcat archivo.tar.bz2 | tar -xv

Hoy en día la mayoría de los programas tar, pero no todos, están modificados para poder utilizar ficheros bzip2 directamente. Utilizan los parámetros -I, -y o -j, que funcionan de forma similar al parámetro -z para manejar ficheros gzip. El comando anterior funciona sea cual sea la forma en que tu sistema haya modificado tar.

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

tar -xvf archivo.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). Por favor, sitúate en ese nuevo directorio antes de continuar con las instrucciones de instalación. Cada vez que este libro mencione la instalación de un paquete, previamente debes desempaquetar el archivo fuente y entrar (cd) en el directorio recién creado.

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

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

gunzip fichero.gz

Si un fichero 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 con las fuentes inmediatamente después de la instalación, pero conserva el paquete descargado por si lo necesitas de nuevo.

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


Cómo buscar ayuda

Si tienes algún problema usando este libro, y tu problema no aparece en las FAQ, encontrarás que la mayoría de 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 identificar y resolver tu problema, incluye toda la información relevante que sea posible en tu petición de ayuda.


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 ficheros. 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 de la sección anterior desde donde pone
make [2]: *** [make] Error 1
hasta el final. Esto no nos basta para diagnosticar el problema porque sólo nos dice que algo fue mal, no qué fue mal. Lo que se debería incluir para resultar útil es la sección completa tal y como aparece en el ejemplo anterior, ya que incluye el comando que se estaba ejecutando y sus mensajes de error.

Hay un artículo excelente sobre cómo buscar ayuda en Internet, escrito por 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 sigue una lista con los paquetes que necesitas descargar para construir el sistema Linux básico. Los números de versión listados corresponden a versiones del software que se sabe que funcionan, y este libro se basa en ellos.

Todas las URLs que aparecen apuntan al servidor principal de LFS. Hay varios 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.

El servidor FTP de LFS sólo contiene las versiones de los paquetes que se utilizan en este libro. Puedes comprobar en los sitios oficiales de descarga listados en el Apéndice A si está disponible un paquete más reciente o no. Si descargas un paquete más reciente, apreciaríamos que nos informases si has conseguido instalarlo sin problemas utilizando las instrucciones del libro.


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 - 105,560 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-packages-4.0.tar
http://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-packages-4.0.tar


O descargar individualmente los siguientes paquetes:
 


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

Automake (1.6.3) - 465 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/automake-1.6.3.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/automake-1.6.3.tar.bz2

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

Bin86 (0.16.3) - 113 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/bin86-0.16.3.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/bin86-0.16.3.tar.bz2

Binutils (2.13) - 9,651 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/binutils-2.13.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/binutils-2.13.tar.bz2

Bison (1.35) - 613 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/bison-1.35.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/bison-1.35.tar.bz2

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

Diffutils (2.8.1) - 642 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/diffutils-2.8.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/diffutils-2.8.1.tar.bz2

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

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

Parche para Ed (0.2) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/ed-0.2.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/ed-0.2.patch.bz2

File (3.39) - 151 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/file-3.39.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/file-3.39.tar.bz2

Fileutils (4.1) - 1,217 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/fileutils-4.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/fileutils-4.1.tar.bz2

Parche para Fileutils (4.1) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/fileutils-4.1.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/fileutils-4.1.patch.bz2

Findutils (4.1) - 226 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/findutils-4.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/findutils-4.1.tar.bz2

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

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

Gawk (3.1.1) - 1,420 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gawk-3.1.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/gawk-3.1.1.tar.bz2

Parche para Gawk (3.1.1-2) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gawk-3.1.1-2.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/gawk-3.1.1-2.patch.bz2

GCC (3.2) - 20,043 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2.tar.bz2

Parche para GCC (3.2) - 4 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2.patch.bz2

Parche nofixincludes para GCC (3.2) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2-nofixincludes-2.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/gcc-3.2-nofixincludes-2.patch.bz2

Gettext (0.11.5) - 2,489 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/gettext-0.11.5.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/gettext-0.11.5.tar.bz2

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

Parche para Glibc (2.2.5-2) - 8 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/glibc-2.2.5-2.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/glibc-2.2.5-2.patch.bz2

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

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

Groff (1.18) - 1,739 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/groff-1.18.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/groff-1.18.tar.bz2

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

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

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

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

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

LFS-Bootscripts (1.10) - 27 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-bootscripts-1.10.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/lfs-bootscripts-1.10.tar.bz2

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

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

Linux (2.4.19) - 25,432 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/linux-2.4.19.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/linux-2.4.19.tar.bz2

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

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

MAKEDEV (1.7) - 8 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/MAKEDEV-1.7.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/MAKEDEV-1.7.bz2

Man (1.5k) - 168 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/man-1.5k.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/man-1.5k.tar.bz2

Parche para Man (1.5k) - 1 KB
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/man-1.5k.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/man-1.5k.patch.bz2

Man-pages (1.52) - 569 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/man-pages-1.52.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/man-pages-1.52.tar.bz2

Modutils (2.4.19) - 213 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/modutils-2.4.19.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/modutils-2.4.19.tar.bz2

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

Parche para Ncurses (5.2-2) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/ncurses-5.2-2.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/ncurses-5.2-2.patch.bz2

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

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

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

Perl (5.8.0) - 8,416 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/perl-5.8.0.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/perl-5.8.0.tar.bz2

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

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

Parche para Procps (2.0.7) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/procps-2.0.7.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/procps-2.0.7.patch.bz2

Psmisc (21) - 172 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/psmisc-21.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/psmisc-21.tar.bz2

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

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

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

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

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

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

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

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

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

Texinfo (4.2) - 1,175 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/texinfo-4.2.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/texinfo-4.2.tar.bz2

Textutils (2.1) - 1,847 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/textutils-2.1.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/textutils-2.1.tar.bz2

Util-linux (2.11u) - 1,073 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/util-linux-2.11u.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/util-linux-2.11u.tar.bz2

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

Parche para Vim (6.1) - 1 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/vim-6.1.patch.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/vim-6.1.patch.bz2

Zlib (1.1.4) - 144 KB:
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/zlib-1.1.4.tar.bz2
http://ftp.linuxfromscratch.org/lfs-packages/4.0/zlib-1.1.4.tar.bz2


Tamaño total de todos los paquetes: 105,560 KB (103.88 MB)


Capítulo 4. Preparando una nueva partición


Creando una nueva partición

Es posible construir el sistema LFS en una sola partición - la 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 a la receta Instalar LFS en la misma partición que un sistema existente (Install LFS next to existing systems on the same partition) que podrás encontrar en http://www.escomposlinux.org/lfs-es/recetas/lfs_next_to_existing_systems.html (la versión original se encuentra en http://hints.linuxfromscratch.org/hints/lfs_next_to_existing_systems.txt).

Antes de que podamos construir nuestro nuevo sistema Linux, necesitamos una partición Linux vacía en la que podamos construirlo. Recomendamos un tamaño de partición de, al menos, 1 GB. Esto nos da suficiente espacio para almacenar todos los archivos de código fuente y compilar todos los paquetes. Pero probablemente necesitarás más espacio si planeas instalar software adicional y utilizar el sistema LFS como tu sistema Linux primario. Si ya dispones de una partición nativa de Linux, puedes saltarte esta sección del libro.

Puesto que la memoria de tu sistema sólo puede almacenar una cantidad limitada de datos al mismo tiempo, recomendamos reservar espacio del disco para los ficheros de intercambio. Un fichero de intercambio es un lugar donde los datos en memoria pueden almacenarse hasta que son requeridos. El espacio en disco puede compartirse entre tu sistema anfitrión y tu sistema LFS. Si ya tienes una partición de intercambio no necesitas crear otra. En caso contrario, debes crear una partición de intercambio mediante un programa fdisk. En cualquier caso, necesitas recordar el nombre de la partición de intercambio (por ejemplo, hda2) pues la necesitarás cuando creemos el fichero /etc/fstab.

Se debe usar el programa cfdisk (u otro programa similar a fdisk) 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). Usando este programa, crea una partición Nativa de Linux. 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 tu nueva partición. 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 este capítulo compilaremos e instalaremos un sistema Linux mínimo. Este sistema contendrá sólo las herramientas necesarias para poder iniciar la construcción del sistema LFS definitivo en el siguiente capítulo.

Los ficheros que se compilen en este capítulo se instalarán bajo el directorio $LFS/static, para mantenerlos separados de los ficheros que se instalen en el siguiente capítulo. Como todo lo hecho aquí es solamente temporal, no queremos que estos ficheros contaminen el futuro sistema LFS.

La clave para aprender qué es lo que hace funcionar un sistema Linux es saber exactamente para qué se usa cada paquete, y por qué el usuario o el sistema lo necesita. Por esta razón se facilita una descripción corta del contenido de cada paquete a continuación de las instrucciones de instalación.

Algunos de nuestros paquetes deben parchearse antes de poder compilarlos. Sólo aplicamos los parches cuando y donde son necesarios. Por tanto, no te preocupes si da la sensación de que faltan las instrucciones para algún parche.

Durante la instalación de bastantes paquetes posiblemente veas aparecer en pantalla todo tipo de avisos (warnings). Esto es normal y puedes ignorarlos tranquilamente. No son más que eso, avisos (la mayoría debidos a un uso inapropiado, pero no ilegal, de la sintaxis de C o C++. 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 es que 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, a una de las listas de correo de LFS, el texto en el que está basado ésto.)

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. En ellas se encuentra el código de todas las funciones básicas que utilizan los programas, las 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 parece deseable 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 1 KB y otro de 2.5 MB, 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 ese 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 se instalaron 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 trabajando como administrador (root) durante el 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, así que es una buena idea entrar en el sistema como un usuario sin privilegios durante el Capítulo 5. Para asegurarnos de tener el entorno lo más 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

Ahora necesitamos asignarle los permisos apropiados al directorio $LFS/static para que el usuario "lfs" pueda escribir en él.

chown -R lfs $LFS/static

Ya puedes entrar al sistema como el usuario "lfs". Para hacerlo dispones de dos opciones: conectarte normalmente desde el modo consola o el entorno gráfico o mediante su - lfs. Una vez 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
CC='gcc -s'
export LFS LC_ALL CC
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 y $CC. 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 no sea "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 cuando se establezca la nueva raíz.

$CC es una variable que establecemos para evitar que los símbolos de depuración se compilen dentro de nuestros paquetes estáticos. Mediante la omisión de estos símbolos durante el enlazado en la fase de compilación, ahorramos espacio en el disco duro y disminuimos el tiempo de compilación.


Instalando Bash-2.05a

Estimación del tiempo de construcción:      1 SBU 
Estimación del espacio de disco requerido:  24 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:

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

Ya podemos continuar. Instala Bash ejecutando los siguientes comandos:

./configure --enable-static-link \
    --prefix=$LFS/static --with-curses &&
make &&
make install

Si al terminar la etapa make install aparecen 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-2.2 (potato) 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. Se ha informado de que la versión actual de Debian (3.0, también conocida como Woody) no tiene este problema.


Instalando Binutils-2.13

Estimación del tiempo de construcción:      2.05 SBU
Estimación del espacio de disco requerido:  160 MB

Contenido de Binutils

Última versión comprobada: 2.12.1.


Descripciones


Instalando Bzip2-1.0.2

Estimación del tiempo de construcción:      0.07 SBU
Estimación del espacio de disco requerido:  6 MB

Contenido de Bzip2

Última versión comprobada: 1.0.2


Instalando Diffutils-2.8.1

Estimación del tiempo de construcción:      0.39 SBU
Estimación del espacio de disco requerido:  10 MB

Instalación de Diffutils

Instala Diffutils ejecutando los siguientes comandos:

LDFLAGS=-static CPPFLAGS=-Dre_max_failures=re_max_failures2 \
    ./configure --prefix=$LFS/static --disable-nls &&
make &&
make install


Instalando Fileutils-4.1

Estimación del tiempo de construcción:      0.94 SBU
Estimación del espacio de disco requerido:  40 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. Parece que sucede principalmente en máquinas que contienen un procesador AMD, aunque existe un caso o dos donde ha sido afectado un sistema Intel. Si tu sistema entra en esta categoría, aplica el parche.

Ten en cuenta que, en algunos casos, utilizar este parche provocará que no se pueda compilar el paquete, incluso cuando tu sistema tenga un procesador AMD y una librería Glibc-2.2.3 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 el siguiente comando. 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.

patch -Np1 -i ../fileutils-4.1.patch

Instala Fileutils ejecutando los siguientes comandos:

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

Una vez hayas instalado Fileutils, puedes comprobar si se ha evitado el problema de la violación de segmento ejecutando $LFS/static/bin/ls. Si esto funciona, entonces está solucionado. Si no, deberás rehacer la instalación aplicando el parche si no lo usaste, o sin él, si en efecto lo utilizaste.


Contenido de Fileutils

Última versión comprobada: 4.1.


Descripciones


Instalando Findutils-4.1

Estimación del tiempo de construcción:           0.12 SBU
Estimación del espacio de disco requerido:  8 MB

Instalación de Findutils

Este paquete necesita que le apliques su parche antes de que lo instales. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.

Instala Findutils ejecutando los siguientes comandos:

patch -Np1 -i ../findutils-4.1.patch &&
CPPFLAGS=-Dre_max_failures=re_max_failures2 \
    ./configure --prefix=$LFS/static &&
make LDFLAGS=-static &&
make install


Contenido de Findutils

Última versión comprobada: 4.1.


Descripciones


Instalando GCC-3.2

Estimación del tiempo de construcción:      9.48 SBU
Estimación del espacio de disco requerido:  326 MB

Explicación de los comandos

patch -Np1 -i ../gcc-3.2.patch: Este parche corrige varios errores. En particular contiene el "copy fix" y el "var fix" documentados en http://www.zipworld.com.au/~gschafer/lfs-tweaks.html.

patch -Np1 -i ../gcc-3.2-nofixincludes-2.patch: Esto evita que se ejecute el guión fixincludes.

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

--enable-languages=c: Con esto sólo se construye el compilador C. El compilador C++ se construirá en el Capítulo 6, cuando reconstruyamos GCC. También están disponibles otros compiladores. Si se necesitan esos otros compiladores, el parámetro --enable-languages debe omitirse.

echo "#define HAVE_GAS_HIDDEN 1": Esto define la directiva de ensamblador .hidden para que no construyamos más tarde una Glibc con errores.

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

ln -s gcc $LFS/static/bin/cc: Esto crea el enlace simbólico $LFS/static/bin/cc que necesitan algunos paquetes.


Contenido de GCC

Última versión comprobada: 3.1.


Descripciones


Instalando Grep-2.5

Estimación del tiempo de construcción:      0.26 SBU
Estimación del espacio de disco requerido:  5 MB

Instalación de Grep

Instala Grep ejecutando los siguientes comandos:

LDFLAGS=-static CPPFLAGS=-Dre_max_failures=re_max_failures2 \
    ./configure --prefix=$LFS/static --disable-nls \
    --disable-perl-regexp &&
make &&
make install


Instalando Gzip-1.2.4a

Estimación del tiempo de construcción:      0.04 SBU
Estimación del espacio de disco requerido:  2 MB

Instalación de Gzip

Instala Gzip ejecutando los siguientes comandos:

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


Instalando Make-3.79.1

Estimación del tiempo de construcción:      0.26 SBU
Estimación del espacio de disco requerido:  8 MB

Instalando Patch-2.5.4

Estimación del tiempo de construcción:      0.10 SBU
Estimación del espacio de disco requerido:  3 MB

Instalación de Patch

Instala Patch ejecutando los siguientes comandos:

CPPFLAGS=-D_GNU_SOURCE \
    ./configure --prefix=$LFS/static &&
make LDFLAGS=-static &&
make install


Instalando Sh-utils-2.0

Estimación del tiempo de construcción:      0.47 SBU
Estimación del espacio de disco requerido:  42 MB

Contenido de Sh-utils

Última versión comprobada: 2.0.


Descripciones


Instalando Texinfo-4.2

Estimación del tiempo de construcción:      0.47 SBU
Estimación del espacio de disco requerido:  19 MB

Instalación de Texinfo

Instala Texinfo ejecutando los siguientes comandos:

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


Instalando Textutils-2.1

Estimación del tiempo de construcción:      0.95 SBU
Estimación del espacio de disco requerido:  49 MB

Instalación de Textutils

Instala Textutils ejecutando los siguientes comandos:

CPPFLAGS=-Dre_max_failures=re_max_failures2 \
    ./configure --prefix=$LFS/static \
    --disable-nls &&
make LDFLAGS=-static &&
make install


Contenido de Textutils

Última versión comprobada: 2.0.


Descripciones


Capítulo 6. Instalando los programas del sistema base


Introducción

En este capítulo entramos en la zona de edificación y comenzamos a construir de verdad nuestro sistema LFS. Es decir, cambiamos la raíz a nuestro mini sistema Linux, creamos algunas cosas auxiliares y, después, comenzamos a instalar todos los paquetes uno por uno.

La instalación de todos estos paquetes es algo bastante sencillo, por lo que puedes pensar que, probablemente, sea más corto dar aquí las instrucciones genéricas de instalación y sólo explicar en profundidad la instalación de los paquetes que necesiten un método alternativo. Aunque estemos de acuerdo en eso, hemos elegido dar las instrucciones completas para todos y cada uno de los paquetes, simplemente para minimizar la posibilidad de errores.

Si piensas usar optimizaciones para la compilación durante este capítulo, mírate la receta de optimización en http://www.escomposlinux.org/lfs-es/recetas/optimization.html (el original se encuentra en http://hints.linuxfromscratch.org/hints/optimization.txt). Optimizar la compilación puede hacer que un programa funcione rápido, pero también puede causar problemas de compilación. Si un paquete rehúsa compilar usando optimización, inténtalo sin optimización para ver si el problema persiste.

El orden en el que se instalan los paquetes en este capítulo debe respetarse estrictamente para asegurar que ningún programa inserte en su código una ruta referente a /static. Por la misma razón, no compiles paquetes en paralelo. La compilación en paralelo puede ahorrarte algo de tiempo (sobre todo en máquinas con CPUs duales), pero puede generar un programa que contenga referencias a /static, lo que provocaría que el programa dejase de funcionar cuando se elimine dicho directorio.


Sobre los símbolos de depuración

La mayoría de los programas y librerías se compilan por defecto incluyendo los símbolos de depuración (con la opción -g de gcc).

Cuando se depura un programa o librería que fue compilado incluyendo la información de depuración, el depurador no nos da sólo las direcciones de memoria, sino también los nombres de las rutinas y variables.

Pero la inclusión de estos símbolos de depuración agranda sustancialmente un programa o librería. Para tener una idea del espacio que ocupan estos símbolos, echa un vistazo a lo siguiente:

Los tamaños pueden variar algo, dependiendo de qué compilador se usó y con qué librería C. Pero cuando comparamos programas con y sin símbolos de depuración, la diferencia generalmente está en una relación de entre 2 y 5.

Como muchas personas probablemente nunca usen un depurador en su sistema, eliminando estos símbolos se puede liberar una gran cantidad de espacio del disco.

Para eliminar los símbolos de depuración de un binario (que debe ser un binario a.out o ELF) ejecuta strip --strip-debug fichero. Pueden usarse comodines para procesar múltiples ficheros (utilizando algo como: strip --strip-debug $LFS/usr/bin/*).

Para tu comodidad, en el Capítulo 9 se incluye un comando simple para eliminar todos los símbolos de depuración de los programas y librerías del sistema. Puedes encontrar información adicional en la receta de optimización que hay en http://www.escomposlinux.org/lfs-es/recetas/optimization.html (el original se encuentra en http://hints.linuxfromscratch.org/hints/optimization.txt).


Entrando al entorno chroot

Es la hora de entrar en el entorno chroot para instalar los paquetes que necesitamos. Antes de que puedas hacer chroot, sin embargo, necesitas cambiar al usuario root, pues sólo el usuario root puede usar el comando chroot.

Hazte root y ejecuta el siguiente comando para entrar al entorno chroot:

chroot $LFS /static/bin/env -i \
    HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/static/bin \
    /static/bin/bash --login

La opción -i pasada al comando env limpiará todas las variables del chroot. Después de esto, solamente se establecen de nuevo las variables HOME, TERM, PS1 y PATH. La construcción TERM=$TERM fijará la variable TERM dentro del chroot al mismo valor que fuera del chroot, pues programas como vim y less la necesitan para funcionar correctamente. Si necesitas tener presentes otras variables, como CFLAGS o CXXFLAGS, éste es un buen sitio para establecerlas.

Desde este punto ya no es necesario utilizar la variable LFS porque todo lo que hagas estará restringido al sistema de ficheros LFS -- ya que lo que el intérprete de comandos piensa que es / en realidad es /mnt/lfs.

Debes asegurarte de que todos los comandos que aparecen en el resto de este y los siguientes capítulos son ejecutados dentro del entorno chroot. Si por alguna razón abandonas este entorno (tras un reinicio, por ejemplo), debes recordar entrar en el chroot y montar proc (como explicaremos más tarde) antes de seguir con las instalaciones.

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.


Creando directorios

Ahora vamos a crear una estructura en nuestro sistema de ficheros LFS. Crearemos un árbol de directorios. Usando los siguientes comandos se creará un árbol más o menos estándar:

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

Los directorios se crean, por defecto, con los permisos 755, pero esto no es deseable para todos los directorios. Haremos dos cambios: uno para el directorio personal de root, y otro en los directorios de los ficheros temporales.

chmod 0750 /root &&
chmod 1777 /tmp /var/tmp

El primer cambio nos asegura que no todo el mundo pueda entrar en el directorio /root -- lo mismo que debería hacer un usuario normal con su directorio personal. El segundo cambio nos asegura que cualquier usuario pueda escribir en los directorios /tmp y /var/tmp, pero no pueda borrar los ficheros de otros usuarios. Esto último lo prohíbe el llamado "bit pegajoso" (sticky bit) - el bit más alto de la máscara de permisos 1777.

Ahora que se han creado los directorios, mueve los paquetes con las fuentes que fueron descargados en el Capítulo 3 a algún subdirectorio que cuelgue de /usr/src (tendrás que crear tú el subdirectorio elegido).


Nota de conformidad con FHS

Basamos nuestro árbol de directorios en el estándar FHS (disponible en http://www.pathname.com/fhs/). Además del árbol arriba creado, este estándar estipula la existencia de /usr/local/games y /usr/share/games, pero no nos gustan para un sistema base. Sin embargo, eres libre de hacer que tu sistema cumpla el FHS. Como sobre la estructura del subdirectorio /usr/local/share el FHS no hace precisiones, creamos aquí los directorios que pensamos que son necesarios.


Creando los dispositivos (Makedev-1.7)

Estimación del tiempo de construcción:      0.07 SBU
Estimación del espacio de disco requerido:  50 KB

Instalando Linux-2.4.19

Estimación del tiempo de construcción:      0.02
Estimación del espacio de disco requerido:  142 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,asm} a /usr/src/linux/include/{linux,asm}. Esta fue una mala práctica, 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 es donde Linus afirma que las cabeceras deberían ser con las que fue compilada glibc. Estas son las cabeceras que deberías usar cuando más adelante compiles otros paquetes, pues son las que coinciden con los códigos-objeto de las librerías. Al copiar las cabeceras nos aseguramos de que permanecen disponibles si posteriormente actualizas el núcleo.

Advierte, de paso, que es perfectamente correcto tener las fuentes del núcleo en /usr/src/linux, mientras no tengas los enlaces simbólicos /usr/include/{linux,asm}.


Instalando Glibc-2.2.5

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

Instalación de Glibc

Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.

Antes de instalar glibc, debes entrar al directorio glibc-2.2.5 y desempaquetar glibc-linuxthreads dentro del directorio glibc-2.2.5, no en /usr/src como normalmente harías.

Se sabe que este programa se comporta mal si cambias sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Es mejor dejar a Glibc tal como está. Por tanto, si tienes definida cualquier variable de entorno que pueda sobreescribir las optimizaciones por defecto, como CFLAGS y CXXFLAGS, te recomendamos que las desactives o modifiques antes de construir Glibc. Estás avisado.

Igualmente, no le pases la opción --enable-kernel al guión configure. Se sabe que causa violaciones de segmento cuando otros paquetes como fileutils, make y tar son enlazados de nuevo con ella.

Básicamente, compilar Glibc de forma diferente a como el libro sugiere pone tu sistema en grave riesgo.

Instala Glibc ejecutando los siguientes comandos:

patch -Np1 -i ../glibc-2.2.5-2.patch &&
touch /etc/ld.so.conf &&
mkdir ../glibc-build &&
cd ../glibc-build &&
../glibc-2.2.5/configure --prefix=/usr --disable-profile \
    --enable-add-ons --libexecdir=/usr/bin &&
echo "cross-compiling = no" > configparms &&
make &&
make install &&
make localedata/install-locales &&
exec /static/bin/bash --login

Una alternativa a make localedata/install-locales es instalar solamente aquellos locales que necesites o desees. Esto puede hacerse usando el comando localedef. Se puede encontrar más información sobre esto en el fichero INSTALL del árbol de glibc-2.2.5. Algo a tener en cuenta es que el programa localedef asume que existe el directorio /usr/lib/locale, por lo que necesitas crearlo primero.

Las páginas de manual de los hilos (threads) de Linux no se instalarán en este punto debido a que necesitan una instalación funcional de Perl. Instalaremos Perl más tarde en este capítulo, así que retomaremos la instalación de las páginas de manual de los hilos de Linux posteriormente.

Durante la fase de configuración verás los siguientes mensajes de aviso:

configure: warning:
*** These auxiliary programs are missing or too old: msgfmt
*** some features will be disabled.
*** Check the INSTALL file for required versions.

configure: aviso:
*** Este programa auxiliar no se ha encontrado o es demasiado antiguo: msgfmt
*** algunas características serán desactivadas.
*** Compruebe en el fichero INSTALL la versión requerida.

Que no se encuentre msgfmt (incluido en el paquete gettext que será instalado más adelante en este capítulo) no causa ningún problema. Se usa msgfmt para generar los ficheros binarios traducidos que se usan para hacer que el sistema "hable" en un idioma diferente. Como estos ficheros de traducción ya han sido generados para ti, no es necesario msgfmt. Solamente necesitas msgfmt si cambias los ficheros fuente de traducción (los ficheros *.po del subdirectorio po) lo cual requerirá regenerar los ficheros binarios.


Explicación de los comandos

patch -Np1 -i ../glibc-2.2.5-2.patch: Este parche convierte todas las coincidencias de $(PERL) a /usr/bin/perl en el fichero malloc/Makefile. Esto se hace debido a que Glibc no puede autodetectar la localización de perl porque todavía no ha sido instalado. El parche también reemplaza todas las ocurrencias de root en el fichero login/Makefile con 0. Esto se hace porque Glibc no se ha instalado todavía y, por tanto, no funciona aún la resolución del nombre de usuario a su identificador de usuario (ID), así que un chown root fichero fallará, mientras que funcionará bien si usas directamente los identificadores de usuario.

El parche contiene también varias correciones de errores y de seguridad. En particular contiene las correcciones "errlist", "dns resolver", "xdr_array", "calloc", "thread exit", "udivdi3", "math test", "restrict_arr" y "divbyzero" documentadas en http://www.zipworld.com.au/~gschafer/lfs-tweaks.html

touch /etc/ld.so.conf: Uno de los pasos finales en la instalación de Glibc es ejecutar ldconfig para actualizar la caché del cargador dinámico. Si este fichero no existe, la instalación se abortará con el error de que no puede leerlo; así que, simplemente, creamos un fichero vacío (el cual hará que Glibc por defecto use /lib y /usr/lib, que es suficiente por ahora).

--disable-profile: Esto desactiva la construcción de librerías con información para perfiles (profiling). Este comando puede omitirse si tienes intención de crear perfiles.

--enable-add-ons: Esto activa los añadidos que hemos instalado con Glibc, linuxthreads

--libexecdir=/usr/bin: Esto causará que el programa pt_chown sea instalado en el directorio /usr/bin.

echo "cross-compiling = no" > configparms: Hacemos esto porque solamente estamos compilando para nuestro sistema. La compilación cruzada se usa, por ejemplo, para construir un paquete para Apple Power PC en un sistema Intel. La razón por la que Glibc piensa que hacemos compilación cruzada es porque no puede compilar un programa de prueba para determinarlo, así que automáticamente pasa, por defecto, a compilación cruzada. La compilación del programa de prueba falla porque Glibc no se ha instalado aún.

exec /static/bin/bash --login: Este comando lanzará una nueva instancia de bash que reemplazará al intérprete de comandos actual. Esto se hace para quitar el mensaje "I have no name!" del símbolo del sistema, que estaba causado por la imposibilidad de bash de resolver un identificador de usuario a su nombre de usuario (que, a su vez, se debía a la ausencia de Glibc).


Contenido de Glibc

Última versión comprobada: 2.2.5.


Descripciones


Descripciones


Instalando GCC-3.2

Estimación del tiempo de construcción:      13.26 SBU
Estimación del espacio de disco requerido:  221 MB

Contenido de GCC

Última versión comprobada: 3.1.


Descripciones


Instalando Zlib-1.1.4

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

Instalación de Zlib

Instala Zlib ejecutando los siguientes comandos:

./configure --prefix=/usr --shared &&
make LIBS="libz.so.1.1.4 libz.a" &&
make LIBS="libz.so.1.1.4 libz.a" install &&
mv /usr/lib/libz.so.* /lib &&
ln -sf ../../lib/libz.so.1 /usr/lib/libz.so &&
cp zlib.3 /usr/share/man/man3


Instalando Findutils-4.1

Estimación del tiempo de construcción:      0.10 SBU
Estimación del espacio de disco requerido:  3 MB

Contenido de Findutils

Última versión comprobada: 4.1.


Descripciones


Instalando Gawk-3.1.1

Estimación del tiempo de construcción:      0.39 SBU
Estimación del espacio de disco requerido:  15 MB

Instalando Ncurses-5.2

Estimación del tiempo de construcción:      1.88 SBU
Estimación del espacio de disco requerido:  22 MB

Instalación de Ncurses

Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.

Instala Ncurses ejecutando los siguientes comandos:

patch -Np1 -i ../ncurses-5.2-2.patch &&
./configure --prefix=/usr --with-shared &&
make &&
make install &&
chmod 755 /usr/lib/*.5.2 &&
mv /usr/lib/libncurses.so.5* /lib &&
ln -s libncurses.a /usr/lib/libcurses.a &&
ln -sf ../../lib/libncurses.so.5 /usr/lib/libncurses.so &&
ln -sf ../../lib/libncurses.so.5 /usr/lib/libcurses.so


Contenido de Ncurses

Última versión comprobada: 5.2.


Descripciones


Instalando Vim-6.1

Estimación del tiempo de construcción:      0.81 SBU
Estimación del espacio de disco requerido:  24 MB

Instalación de Vim

Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.

Si no quieres instalar Vim, tienes disponibles las instrucciones para construir editores alternativos en http://www.escomposlinux.org/lfs-es/blfs-es-CVS/postlfs/editors.html (las versiones originales se encuentran en http://beyond.linuxfromscratch.org/view/cvs/postlfs/editors.html). Actualmente hay instrucciones para Emacs, nano y joe.

Instala Vim ejecutando los siguientes comandos:

patch -Np1 -i ../vim-6.1.patch &&
./configure --prefix=/usr &&
make CPPFLAGS=-DSYS_VIMRC_FILE=\\\"/etc/vimrc\\\" &&
make install &&
ln -s vim /usr/bin/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.


Contenido de Vim

Última versión comprobada: 6.1.


Descripciones


Instalando Bison-1.35

Estimación del tiempo de construcción:      0.27 SBU
Estimación del espacio de disco requerido:  6 MB

Contenido de Bison

Última versión comprobada: 1.35.


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

Estimación del tiempo de construcción:           1.08 SBU
Estimación del espacio de disco requerido:  18 MB

Instalación de Groff

Instala Groff ejecutando los siguientes comandos:

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


Contenido de Groff

Última versión comprobada: 1.17.2.


Descripciones


Instalando Textutils-2.1

Estimación del tiempo de construcción:      0.83 SBU
Estimación del espacio de disco requerido:  17 MB

Instalación de Textutils

Instala Textutils ejecutando los siguientes comandos:

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


Contenido de Textutils

Última versión comprobada: 2.0.


Descripciones


Instalando Flex-2.5.4a

Estimación del tiempo de construcción:      0.05 SBU
Estimación del espacio de disco requerido:  3 MB

Instalando Binutils-2.13

Estimación del tiempo de construcción:      2.48 SBU
Estimación del espacio de disco requerido:  94 MB

Contenido de Binutils

Última versión comprobada: 2.12.1.


Descripciones


Instalando Fileutils-4.1

Estimación del tiempo de construcción:      0.68 SBU
Estimación del espacio de disco requerido:  17 MB

Instalación de Fileutils

Instala Fileutils ejecutando los siguientes comandos:

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


Contenido de Fileutils

Última versión comprobada: 4.1.


Descripciones


Instalando Sh-utils-2.0

Estimación del tiempo de construcción:      0.42 SBU
Estimación del espacio de disco requerido:  12 MB

Instalación de Sh-utils

Este paquete necesita que le apliques el parche de hostname antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.

Instala Sh-utils ejecutando los siguientes comandos:

patch -Np1 -i ../sh-utils-2.0-hostname.patch &&
./configure --prefix=/usr &&
make &&
make install &&
mv /usr/bin/{basename,date,echo,false,pwd} /bin &&
mv /usr/bin/{sleep,stty,su,test,true,uname} /bin &&
mv /usr/bin/chroot /usr/sbin


Contenido de Sh-utils

Última versión comprobada: 2.0.


Descripciones


Instalando Gettext-0.11.5

Estimación del tiempo de construcción:      0.99 SBU
Estimación del espacio de disco requerido:  39 MB

Contenido de Gettext

Última versión comprobada: 0.11.2.


Descripciones


Instalando Net-tools-1.60

Estimación del tiempo de construcción:      0.16 SBU
Estimación del espacio de disco requerido:  5 MB

Contenido de Net-tools

Última versión comprobada: 1.60.


Instalando Perl-5.8.0

Estimación del tiempo de construcción:      3.81 SBU
Estimación del espacio de disco requerido:  52 MB

Contenido de Perl

Última versión comprobada: 5.6.1.


Descripciones


Instalando Texinfo-4.2

Estimación del tiempo de construcción:      0.43 SBU
Estimación del espacio de disco requerido:  12 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:      0.05 SBU
Estimación del espacio de disco requerido:  6 MB

Contenido de Autoconf

Última versión comprobada: 2.53.


Descripciones


Instalando Automake-1.6.3

Estimación del tiempo de construcción:      0.03 SBU
Estimación del espacio de disco requerido:  6 MB

Contenido de Automake

Última versión comprobada: 1.6.2.


Descripciones


Instalando Bin86-0.16.3

Estimación del tiempo de construcción:      0.07 SBU
Estimación del espacio de disco requerido:  2 MB

Instalando Bzip2-1.0.2

Estimación del tiempo de construcción:      0.09 SBU
Estimación del espacio de disco requerido:  3 MB

Contenido de Bzip2

Última versión comprobada: 1.0.2


Instalando Ed-0.2

Estimación del tiempo de construcción:      0.06 SBU
Estimación del espacio de disco requerido:  3 MB

Instalando Kbd-1.06

Estimación del tiempo de construcción:      0.12 SBU
Estimación del espacio de disco requerido:  8 MB

Contenido de Kbd

Última versión comprobada: 1.06.


Descripciones


Instalando E2fsprogs-1.27

Estimación del tiempo de construcción:      0.80 SBU
Estimación del espacio de disco requerido:  13 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

Última versión comprobada: 1.27.


Descripciones


Instalando Gzip-1.2.4a

Estimación del tiempo de construcción:      0.03 SBU
Estimación del espacio de disco requerido:  2 MB

Instalación de Gzip

Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.

Instala Gzip ejecutando los siguientes comandos:

patch -Np1 -i ../gzip-1.2.4b.patch &&
./configure --prefix=/usr &&
cp gzexe.in{,.backup} &&
sed 's%"BINDIR"%/bin%' gzexe.in.backup > gzexe.in &&
make &&
make install &&
mv /usr/bin/gzip /bin &&
rm /usr/bin/{gunzip,zcat} &&
ln -s gzip /bin/gunzip &&
ln -s gzip /bin/zcat &&
ln -s gunzip /bin/uncompress


Instalando Man-1.5k

Estimación del tiempo de construcción:      0.05 SBU
Estimación del espacio de disco requerido:  2 MB

Instalando Lilo-22.2

Estimación del tiempo de construcción:      0.08 SBU
Estimación del espacio de disco requerido:  3 MB

Instalación de Lilo

Hemos elegido Lilo como gestor de arranque porque nos sentimos cómodos con él, pero puede que desees elegir otro. Fabio Fracassi ha escrito una receta sobre GRUB, que está disponible en http://www.escomposlinux.org/lfs-es/recetas/grub-howto.html (la versión original se encuentra en http://hints.linuxfromscratch.org/hints/grub-howto.txt).

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, pues no tiene utilidad : el fichero /etc/lilo.conf no está presente todavía. Completaremos la instalación de lilo en el Capítulo 8.

El símbolo estandar de LILO, o el menú, pueden sustituirse por el logo de LFS, o cualquier logo que desees. Martin Imobersteg ha escrito una receta sobre esto, que se encuentra en http://www.escomposlinux.org/lfs-es/recetas/bootlogo.html (la versión original se encuentra en http://hints.linuxfromscratch.org/hints/bootlogo.txt).


Instalando Modutils-2.4.19

Estimación del tiempo de construcción:      0.13 SBU
Estimación del espacio de disco requerido:  3 MB

Instalando Procps-2.0.7

Estimación del tiempo de construcción:      0.14 SBU
Estimación del espacio de disco requerido:  2 MB

Contenido de Procps

Última versión comprobada: 2.0.7.


Instalando Psmisc-21

Estimación del tiempo de construcción:      0.11 SBU
Estimación del espacio de disco requerido:  2 MB

Instalando Shadow-4.0.3

Estimación del tiempo de construcción:      0.88 SBU
Estimación del espacio de disco requerido:  7 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 Shadow. En ella se discute cómo puedes hacer más seguro tu sistema en lo relativo al uso de contraseñas, por ejemplo activando el uso de las contraseñas MD5, que son más seguras, o cómo conseguir exprimir hasta el máximo este paquete. Puedes encontrar la receta de Shadow en http://www.escomposlinux.org/lfs-es/recetas/shadowpasswd_plus.html (la versión original se encuentra en http://hints.linuxfromscratch.org/hints/shadowpasswd_plus.txt).

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

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

Tanto Sh-utils como Shadow instalan un programa groups único. Si lo deseas, puedes eliminar el programa groups instalado por Shadow ejecutando el siguiente comando:

rm /bin/groups


Contenido de Shadow

Última versión comprobada: 4.0.3.


Descripciones


Instalando Sysvinit-2.84

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

Contenido de Sysvinit

Última versión comprobada: 2.84.


Descripciones


Instalando Util-linux-2.11u

Estimación del tiempo de construcción:      0.38 SBU
Estimación del espacio de disco requerido:  10 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

Última versión comprobada: 2.11t.


Descripciones


Instalando LFS-Bootscripts-1.10

Estimación del tiempo de construcción:      0.01 SBU
Estimación del espacio de disco requerido:  420 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, Marc Heerdink ha escrito una receta sobre los guiones de arranque al estilo BSD, que puedes encontrar en http://www.escomposlinux.org/lfs-es/recetas/bsd-init.html (la versión original se encuentra 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

Última versión comprobada: 1.10.


Descripciones


Configurando los programas esenciales

Ahora que están todos los paquetes instalados, 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:once:/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 existe una serie de directorios rc?.d, donde ? representa el número del nivel de ejecución, más 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). Lo aquí expuesto es tan sólo un ejemplo de cómo hacer las cosas de una manera correcta (claro que aunque a nosotros esta manera nos parezca bien, puede que tú la 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.19

Estimación del tiempo de construcción:           Todas las opciones predefindas: 4.20 SBU
Estimación del espacio de disco requerido:  Todas las opciones predefinidas: 181 MB

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

Si intentas usar los módulos del núcleo necesitas el fichero /etc/modules.conf. La información relativa a los módulos, y a la configuración del núcleo en general, puedes encontrarla en la documentación del núcleo, que se guarda en /usr/src/linux-2.4.19/Documentation. La página de manual de modules.conf y el kernel-CÓMO en http://es.tldp.org/COMO-INSFLUG/COMOs/Kernel-Como/ (el original se encuentra en http://www.tldp.org/HOWTO/Kernel-HOWTO.html) puede que también sean de interes para ti.

Para construir el núcleo, ejecuta los siguientes comandos:

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 esperamos que haya 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. 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. Crea el fichero $LFS/etc/lfs ejecutando el siguiente comando:

echo 4.0 > $LFS/etc/lfs


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

Si has decidido crear varias particiones, necesitas desmontar las otras particiones antes de desmontar $LFS, por ejemplo:

umount $LFS/proc &&
umount $LFS/usr &&
umount $LFS/home &&
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

Ahora puedes eliminar el directorio static. Si piensas que puedes necesitar rehacer el Capítulo 5, entonces querrás guardar una copia de respaldo del directorio antes de eliminarlo. Para eliminar el directorio static, escribe el siguiente comando:

rm -rf /static

Ahora que has terminado de instalar tu sistema LFS, puede que te preguntes cómo instalar software adicional, como un navegador web. Tu primera parada debería ser el proyecto "Beyond Linux From Scratch" (Más Allá del LFS), que puedes encontrar en http://www.escomposlinux.org/lfs-es/blfs-es-CVS/ (el original está en http://beyond.linuxfromscratch.org/). Las recetas de LFS también pueden ser útiles y se encuentran en http://hints.linuxfromscratch.org/hints.shtml. Tienes varias recetas traducidas en http://www.escomposlinux.org/lfs-es/recetas/. En la misma línea, si no eres sólo novato en LFS, sino en Linux en general, puedes encontrar muy interesante la receta para novatos que hay en http://www.escomposlinux.org/lfs-es/recetas/newbie.html (el original lo tienes en http://hints.linuxfromscratch.org/hints/newbie.txt).

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 incluimos las páginas del manual completas, sólo los elementos clave que hagan posible entender lo que cada programa hace. Para conseguir información detallada de un programa, dirijete a su página de manual o a su página info.

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. Cuando actualizamos a una versión mayor, nos aseguramos de hacer también un chequeo de las dependencias.


Autoconf


Contenido de Autoconf

Última versión comprobada: 2.53.


Descripciones


Automake


Contenido de Automake

Última versión comprobada: 1.6.2.


Descripciones


Binutils


Contenido de Binutils

Última versión comprobada: 2.12.1.


Descripciones


Bison


Contenido de Bison

Última versión comprobada: 1.35.


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.


Bzip2


Contenido de Bzip2

Última versión comprobada: 1.0.2


E2fsprogs


Contenido de E2fsprogs

Última versión comprobada: 1.27.


Descripciones


Fileutils


Contenido de Fileutils

Última versión comprobada: 4.1.


Descripciones


Findutils


Contenido de Findutils

Última versión comprobada: 4.1.


Descripciones


GCC


Contenido de GCC

Última versión comprobada: 3.1.


Descripciones


Gettext


Contenido de Gettext

Última versión comprobada: 0.11.2.


Descripciones


Glibc


Contenido de Glibc

Última versión comprobada: 2.2.5.


Descripciones


Descripciones


Groff


Contenido de Groff

Última versión comprobada: 1.17.2.


Descripciones


Gzip


Kbd


Contenido de Kbd

Última versión comprobada: 1.06.


Descripciones


LFS-Bootscripts


Contenido de LFS-bootscripts

Última versión comprobada: 1.10.


Descripciones


Linux (el núcleo)


Man


Modutils


Ncurses


Contenido de Ncurses

Última versión comprobada: 5.2.


Descripciones


Net-tools


Contenido de Net-tools

Última versión comprobada: 1.60.


Perl


Contenido de Perl

Última versión comprobada: 5.6.1.


Descripciones


Procps


Contenido de Procps

Última versión comprobada: 2.0.7.


Shadow


Contenido de Shadow

Última versión comprobada: 4.0.3.


Descripciones


Sh-utils


Contenido de Sh-utils

Última versión comprobada: 2.0.


Descripciones


Sysvinit


Contenido de Sysvinit

Última versión comprobada: 2.84.


Descripciones


Texinfo


Textutils


Contenido de Textutils

Última versión comprobada: 2.0.


Descripciones


Util-linux


Contenido de Util-linux

Última versión comprobada: 2.11t.


Descripciones


Vim


Contenido de Vim

Última versión comprobada: 6.1.


Descripciones