Copyright © 1999-2002 por 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
Copyright (c) 1999-2002, Gerard Beekmans
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions in any form must retain the above copyright notice, this list of conditions and the following disclaimer.
Neither the name of "Linux From Scratch" nor the names of its contributors may be used to endorse or promote products derived from this material without specific prior written permission.
Any material derived from Linux From Scratch must contain a reference to the "Linux From Scratch" project.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Este libro está dedicado a la querida esposa de Gerard Beekmans, Beverly Beekmans.
Después de haber usado diferentes distribuciones de Linux, nunca estuve satisfecho con ninguna de ellas. No me gustaba la forma en la que estaban organizados los guiones de arranque, o no me gustaba la configuración por omisión de ciertos programas, y cosas por el estilo. Llegué a darme cuenta de que si quería estar completamente satisfecho con algún sistema Linux, tenía que construir el mío propio desde cero, usando, idealmente, sólo el código fuente. Sin utilizar paquetes precompilados de ninguna clase. Sin la ayuda de un CD-ROM o disco de arranque que instalase utilidades básicas. Utilizaría mi sistema Linux actual para construir el mío por mi cuenta.
Esta, en su momento, idea descabellada se presentó muy difícil y algunas veces casi imposible. Después de sortear toda clase de problemas de dependencias, de compilación, etc., creé un sistema Linux hecho a medida y completamente funcional. Llamé a este sistema LFS, que significa Linux From Scratch (Linux desde Cero).
¡Espero que paséis buenos momentos trabajando en vuestro LFS!
--
Gerard Beekmans
gerard@linuxfromscratch.org
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.
Si no deseas construir tu propio sistema Linux desde cero probablemente no quieras leer este libro. Nuestra meta es construir los fundamentos de un sistema completo y usable. Si sólo quieres saber lo que sucede mientras arranca tu ordenador, entonces te recomendamos el "From Power Up To Bash Prompt HOWTO (De La Puesta En Marcha Al Indicador Del Bash CÓMO)". Este CÓMO construye un sistema que es similar al de este libro, pero lo enfoca estrictamente hacia la creación de un sistema capaz de iniciar el símbolo del sistema de BASH .
Mientras decides lo que vas a leer, considera tu objetivo. Si deseas construir un sistema Linux mientras aprendes un poco en el camino, entonces este libro es tu mejor elección. Si tu objetivo es estrictamente educacional, y no tienes planes para tu sistema terminado, entonces el "De La Puesta En Marcha Al Indicador Del Bash CÓMO" es, probablemente, mejor elección.
Podrás encontrar el "De La Puesta En Marcha Al Indicador Del Bash CÓMO" en http://personal.telefonica.terra.es/web/aus/linux/p2b/power2bash.html y el original "From Power Up To Bash Prompt HOWTO" en http://www.netspace.net.au/~gok/power2bash/.
Muchos de los apéndices están repetidos en la segunda parte (lo que, de alguna manera, alarga el libro). Creemos que esto facilita su lectura. De esta forma no tienes que dirigirte a un apéndice mientras lees la Parte II. Eso es un fastidio, sobre todo si estás leyendo la versión de texto de este libro. Este libro se divide en las siguientes partes.
La Primera Parte te aporta información general sobre el contenido de este libro (revisiones, dónde conseguirlo, diario de cambios, listas de correo, y otra información de contacto). También contiene sugerentes lecturas que exponen algunas consideraciones importantes que deberías saber antes de comenzar con tu sistema LFS.
La Parte II te guía a través de la construcción e instalación de un sistema LFS. El sistema LFS resultante será los cimientos sobre los que construirás el resto de tu sistema Linux. Sea lo que sea en lo que se convierta tu sistema, este se construirá y soportará sobre estos fundamentos que vamos a construir en la Parte II.
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.
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.
Para facilitar la comprensión se utilizan ciertas convenciones a lo largo del libro. Aquí hay unos ejemplos:
./configure --prefix=/usr
El texto con este estilo debe teclearse exactamente como aparece, a menos que se indique lo contrario. También se utiliza en las secciones explicativas para identificar el comando al que se hace referencia.
install-info: unknown option `--dir-file=/mnt/lfs/usr/info/dir'
El estilo de este texto (ancho fijo) representa salida por pantalla, probablemente como resultado de la ejecución de comandos; y también se usa para especificar nombres de archivo, como, por ejemplo /etc/lilo.conf.
Énfasis
Este tipo de texto se utiliza con varios fines en el libro, principalmente para poner de relieve puntos importantes y para dar ejemplos de qué se debe teclear.
http://www.linuxfromscratch.org/
Este tipo de texto se usa para hipervínculos, tanto al propio libro como a páginas externas (tales como direcciones de descarga, CÓMOs, sitios web, etc).
cat > $LFS/etc/group << "EOF" root:x:0: bin:x:1: ...... EOF |
Este tipo de secciones se usa principalmente al crear archivos de configuración. El primer comando (en negrita) solicita al sistema que cree el archivo $LFS/etc/group a partir de lo que se teclee en las líneas siguientes, hasta encontrar la secuencia EOF. Por lo tanto, generalmente la sección entera debe teclearse tal cual.
Esta es la traducción al castellano del libro LFS-BOOK versión 4.0 con fecha 5 de octubre de 2002. Si la versión tiene más de un mes de antigüedad, es probable que haya una versión más nueva disponible para su descarga. Puedes buscar nuevas versiones en los sitios de descarga alternativos (mirrors) relacionados a continuación.
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.
EcolNet, España [Varios servidores] - http://www.escomposlinux.org/lfs-es
Cervera, España [126 Kbits] - http://www.macana-es.com
Fremont, California, EEUU [8 Mbit] - http://www.linuxfromscratch.org/lfs/intro.shtml
Lufkin, Texas, EEUU [6 Mbit] - http://linuxfromscratch.idge.net/lfs/intro.shtml
Columbus, Ohio, EEUU [1 Mbit] - http://www.us.linuxfromscratch.org/lfs/intro.shtml
Mainz, Alemania [100 Mbit] - http://lfs.linux-provider.net/lfs/intro.shtml
Amsterdam, Holanda [100 Mbit] - http://www.nl.linuxfromscratch.org/lfs/intro.shtml
Oslo, Noruega [100 Mbit] - http://www.no.linuxfromscratch.org/lfs/intro.shtml
Lancaster, Reino Unido [100 Mbit] - http://linuxfromscratch.mirror.ac.uk/lfs/intro.shtml
Univ. de Tecnología de Viena, Austria [64 Mbit] - http://www.at.linuxfromscratch.org/lfs/intro.shtml
Karlskrona, Suecia [10 Mbit] - http://www.se.linuxfromscratch.org/lfs/intro.shtml
Freising, Alemania [4 Mbit] - http://www.de.linuxfromscratch.org/lfs/intro.shtml
Teeside, Reino Unido [256 Kbit] - http://www.linuxfromscratch.co.uk/lfs/intro.shtml
Fremont, California, EEUU [FTP] [8 Mbit] - ftp://ftp.linuxfromscratch.org
Fremont, California, EEUU [HTTP] [8 Mbit] - http://ftp.linuxfromscratch.org
Lufkin, Texas, EEUU [FTP] [6 Mbit] - ftp://linuxfromscratch.idge.net/linuxfromscratch
Lufkin, Texas, EEUU [HTTP] [6 Mbit] - http://ftp.idge.net/linuxfromscratch
Univ. de Twente, Holanda [HTTP] [100 Mbit] - http://ftp.snt.utwente.nl/linux/lfs/
Univ. de Twente, Holanda [FTP] [100 Mbit] - ftp://ftp.snt.utwente.nl/pub/linux/lfs/
Oslo, Noruega [FTP] [100 Mbit] - ftp://ftp.no.linuxfromscratch.org/mirrors/lfs/
Lancaster, Reino Unido [HTTP] [100 Mbit] - http://www.mirror.ac.uk/sites/ftp.linuxfromscratch.org/
Univ. de Tec. de Viena, Austria [FTP] [64 Mbit] - ftp://ftp.at.linuxfromscratch.org/pub/lfs/
Univ. de Tec. de Viena, Austria [HTTP] [64 Mbit] - http://ftp.at.linuxfromscratch.org/pub/lfs
Karlskrona, Suecia [FTP] [10 Mbit] - ftp://ftp.se.linuxfromscratch.org/lfs
Freising, Alemania [HTTP] [4 Mbit] - http://ftp.de.linuxfromscratch.org/
Freising, Alemania [FTP] [4 Mbit] - ftp://ftp.de.linuxfromscratch.org/mirrors/ftp.linuxfromscratch.org/
4.0 - 5 de octubre de 2002
3 de octubre de 2002 [gerard]: Capítulo 06 - Linuxthreads: En lugar de cd man usar la opción -C para make que tiene más sentido (y también es más corto).
29 de septiembre de 2002 [gerard]: Capítulo 05 - GCC: Corregido el antiguo parche nofixincludes y reinstalado.
29 de septiembre de 2002 [markh]: Capítulo 05 - Bash: Corregida la referencia a Debian que trataba sobre la antigua versión estable (potato) y no puede aplicarse a la actual (woody). Notificado por h2k1 en #lfs.
4.0-RC1 - 28 de septiembre de 2002
Actualizado a:
automake-1.6.3
bin86-0.16.3
binutils-2.13
bison-1.35
diffutils-2.8.1
file-3.39
gawk-3.1.1
gcc-3.2
gettext-0.11.5
groff-1.18
gzip-1.2.4b.patch
lfs-bootscripts-1.10
linux-2.4.19
MAKEDEV-1.7
man-1.5k
man-pages-1.52
modutils-2.4.19
ncurses-5.2-2.patch
perl-5.8.0
psmisc-21
texinfo-4.2
textutils-2.1
util-linux-2.11u
Añadido:
ed-0.2.patch
fileutils-4.1.patch
gawk-3.1.2.patch
gcc-3.2.patch
gcc-3.2-nofixincludes.patch
glibc-2.2.5-2.patch
gzip-1.2.4b.patch
kbd-1.06-3.patch
man-1.5k.patch
ncurses-5.2.patch
procps-2.0.7.patch
sh-utils-2.0-hostname.patch
vim-6.1.patch
zlib-1.1.4
Eliminado:
gzip-1.2.4a.patch
kbd-1.06-2.patch
reiserfsprogs-3.x.1b
28 de septiembre de 2002 [gerard]: Capítulo 05 - GCC: Añadido el parche nofixincludes para evitar que el guión se ejecute en el capítulo 05. Debe ejecutarse en el Capítulo 06, por lo que lo necesitamos en un parche aparte.
28 de septiembre de 2002 [gerard]: Capítulo 06 - Man: Sustituida la expresión sed por un parche normal.
28 de septiembre de 2002 [gerard]: Capítulo 06 - Bzip2: Eliminado PREFIX=/usr del comando make install porque PREFIX está establecido realmente a /usr por defecto.
28 de septiembre de, 2002 [gerard]: Capítulo 06 - Vim: Eliminada la nota sobre el cumplimiento del FHS. Es erronea porque Vim no utiliza para nada el localstatedir.
28 de septiembre de 2002 [timothy]: Aplicado un parche gramatical de Bill Maltby. Cambiado "$LFS" a "LFS" cuando se habla de la variable de entorno LFS.
23 de septiembre de 2002 [timothy]: Aplicados unos parches con correcciones gramaticales de Bill Maltby.
23 de septiembre de 2002 [timothy]: Añadido - antes de las opciones de tar (por claridad).
22 de septiembre de 2002 [timothy]: Capítulo 06: Aplicado un parche con correcciones gramaticales de Alex.
21 de septiembre de 2002 [timothy]: Capítulo 02: Aplicado un parche con correcciones gramaticales de Bill Maltby.
21 de septiembre de 2002 [timothy]: Capitulo 06 - Zlib: mv las librerías compartidas a /lib.
20 de septiembre de 2002 [timothy]: Capítulo 05 - GCC: Eliminada la opción --enable-threads=posix pues no construimos un compilador C++ en este capítulo.
18 de septiembre de 2002 [timothy]: Capítulo 05 - Introducción: Eliminado un párrafo sobre enlazado estático pues parece confuso y está cubierto mejor y con más detalle en ¿Por qué Estático?.
18 de septiembre de 2002 [timothy]: Capítulo 08 - Linux: Eliminado el comando cd.
18 de septiembre de 2002 [timothy]: Capítulo 06 - Ncurses: Eliminada la explicación del antiguo comando mv /lib/*.a /usr/lib.
13 de septiembre de 2002 [gerard]: Capítulo 06 - Shadow: Añadido --libdir=/usr/lib a las opciones del guión configure. De este modo se genera una libshadow.la correcta. Cambiado también el comando mv para mover todos los ficheros libshadow.so* al directorio /lib. Los ficheros lib*a todavía están en el directorio /usr/lib.
13 de septiembre de 2002 [gerard]: Capítulo 06 - Man: Añadida otra expresión al comando sed que modifica el fichero man.conf. La expresión añadida comenta la línea MANPATH /usr/man que provoca resultados duplicados cuando se utiliza el comando whatis.
13 de septiembre de 2002 [gerard]: Capítulo 06: Añadida la instalación de las Páginas de manual de Linux Threads después de la instalación de Perl.
12 de septiembre de 2002 [gerard]: Capítulo 06 - Crear el enlace mtab: Hacer el comando ln como ln -sf para que el fichero /etc/mtab existente, creado por el comando mount, sea eliminado antes de recrearlo como enlace simbólico.
12 de septiembre de 2002 [gerard]: Capítulo 06 - Sh-utils: Añadido el parche sh-utils-hostname que suprime la construcción del programa hostname. Se hace esto porque el programa hostname del paquete net-tools es superior a esta versión.
12 de septiembre de 2002 [gerard]: Capítulo 06 - Gawk: Actualizado el parche para Gawk. Ahora cambia también la localización del directorio DDEFPATH.
12 de septiembre de 2002 [gerard]: Capítulo 06 - Procps: Añadido un parche que corrige un problema con las locales que hacen que top falle con ciertos ajustes de locale.
12 de septiembre de 2002 [timothy]: Capítulo 04 - Creando un sistema de ficheros: Referencia a sistemas de ficheros alternativos en BLFS.
12 de septiembre de 2002 [gerard]: Eliminados todos los enlaces simbólicos /usr/lib/*.so superfluos de las instalaciones de las librerías.
12 de septiembre de 2002 [gerard]: Actualizado a lfs-bootscripts-1.10
12 de septiembre de 2002 [gerard]: Capítulo 06 - Configurando Sysvinit: Cambiada la línea de sulogin a once en lugar de tenerlo recargando. De esta forma se comportará como se espera (por ejemplo, un CTRL+D continuará en lugar de reiniciar sulogin).
12 de septiembre de 2002 [gerard]: Capítulo 06 - GCC: Añadida la opción --enable-clocale=gnu para asegurar que la librería C++ utiliza el modo locale correcto.
11 de septiembre de 2002 [timothy]: Prólogo: Cambios gramaticales.
8 de septiembre de 2002 [timothy]: Capítulo 06: Aplicado el parche con cambios gramaticales de Alex.
7 de septiembre de 2002 [timothy]: Capítulo 06 - Gzip: Añadido gzip-1.2.4b.patch.
7 de septiembre de 2002 [timothy]: Capítulo 05 - Textutils: Añadido re_max_failures2 para sistemas antiguos.
2 de septiembre de 2002 [timothy]: Capítulo 06 - Bash: Eliminada la creación del enlace simbólico sh. Creando los enlaces simbólicos bash y sh: Añadido el enlace simbólico /bin/bash, enlazado sh a bash. Gzip, Sysvinit, Util-Linux: Acortados los comandos cp. Makedev: Eliminada la creación y eliminación de /bin/bash. Man: Modificada la sentencia sed para editar la llamada a less, así SGR funcionará
1 de septiembre de 2002 [timothy]: Capítulo 06 - Sobre los símbolos de depuración: Eliminada la información sobre eliminar los símbolos de /static. Man: Añadida una sentencia sed para evitar que groff utilice la secuencia de escape SGR.
1 de septiembre de 2002 [timothy]: Capítulo 05 - Instalando todo el software como usuario sin privilegios: Añadido $CC='gcc -s' para omitir la compilación de los símbolos en los paquetes estáticos.
30 de agosto de 2002 [timothy]: Capítulo 06 - Makedev: Poner rm /bin/bash después de la creación de los dispositivos. Perl: Eliminada la información sobre el antiguo parche.
30 de agosto de 2002 [timothy]: Capítulo 05 - GCC: Reañadido HAVE_GAS_HIDDEN; eliminado --enable-__cxa-atexit que era incorrecto e innecesario en este capítulo; añadida información sobre el parche.
26 de agosto de 2002 [gerard]: Añadido un nuevo parche a Glibc e introducido un parche para GCC.
26 de agosto de 2002 [gerard]: Actualizado a automake-1.6.3, gcc-3.2, groff-1.18, makedev-1.7, perl-5.8.0, util-linux-2.11u
22 de agosto de 2002 [timothy]: Apéndice: Añadidas las URL olvidadas de los parches.
18 de agosto de 2002 [timothy]: Capítulos 05 y 06: Cambiado ln -sf a ln -s donde es posible.
18 de agosto de 2002 [timothy]: Capítulo 06 - Binutils: cp libiberty.h después del install, pues es necesario para cierto software. Shadow: añadido un comando para eliminar el programa groups instalado por Shadow pues Sh-utils instala un (mejor) programa groups.
18 de agosto de 2002 [timothy]: Capítulo 05 - Sh-utils: Re-añadido sh-utils-2.0.patch.
16 de agosto de 2002 [markh]: Capítulo 06 - Poner man-pages justo después de la instalación de las cabeceras del núcleo.
15 de agosto de 2002 [markh]: Capítulo 06 - Poner la instalación de MAKEDEV antes de glibc y eliminar la creación temporal de /dev/null, pues ya no es necesario.
15 de agosto de 2002 [timothy]: Capítulo 04 - Preparando una nueva partición: mencionado que la partición de intercambio puede compartirse entre el LFS y el sistema anfitrión. Cambios gramaticales.
13 de agosto de 2002 [gerard]: Capítulo 06: Eliminada la opción --with-curses en la instalación de Bash, pues es innecesaria aquí.
9 de agosto de 2002 [timothy]: Actualizado a modutils-2.4.19, linux-2.4.19, gettext-0.11.5, binutils-2.13, textutils-2.1.
9 de agosto de 2002 [timothy]: Capítulo 06 - Vim: cambiado el enlace a los editores alternativos de las recetas al BLFS.
8 de agosto de 2002 [gerard]: Capítulo 06 - Ncurses: eliminada la opción --disable-termcap de configure. Ahora termcap está desactivado por defecto, así que no necesitamos esta opción (se quedó aquí de otros tiempos en que si era necesaria).
8 de agosto de 2002 [gerard]: Capítulo 06 - Linux: Añadido el comando cp include/asm-generic /usr/include. Hay programas que usan estos ficheros, al igual que las cabeceras del directorio asm puede que se dividan en el futuro y se coloquen en asm-generic.
8 de agosto de 2002 [gerard]: Appendix A - Gettext: añadida la descripción perdida del programa msgcat.
4 de agosto de 2002 [timothy]: Añadido zlib-1.1.4.
3 de agosto de 2002 [timothy]: Actualizado a man-pages-1.52, man-1.5k, gettext-0.11.4, modutils-2.4.18.
29 de julio de 2002 [timothy]: Eliminado Reiserfsprogs. Actualizado a util-linux-2.11t y file-3.39. Capítulo 04 & 05 - Creando una nueva partición, Introducción, Por qué estático: cambios gramaticales. Diffutils, Fileutils, Grep, Texinfo: poner LDFLAGS=-static antes de configure en lugar de como una argumento de make. GCC: añadido HAVE_GAS_HIDDEN a auto-host.h.
29 de julio de 2002 [timothy]: Capítulo 06 - Glibc: añadida la opción --disable-profile.
29 de julio de 2002 [timothy] Capítulo 08 - Linux: añadida información sobre los módulos y la documentación del núcleo.
29 de julio de 2002 [timothy]: Capítulo 09 - Reiniciando el sistema: añadido un comando para eliminar el directorio static.
8 de julio de 2002 [timothy]: Capítulo 09 - Reiniciando el sistema: Señalar a BLFS como siguiente paso.
3 de julio de 2002 [timothy]: Capítulo 06 - Sysvinit: Simplificado el comando de sed y actualizada la descripción de la instalación debido a que ahora init muestra "Sending processes" en lugar de "Sending all processes".
2 de julio de 2002 [markh]: Cambio interno - Hacer que todos los parches usen una entidad &package-patch-version; y eliminar todas las referencias directas a la versión de los parches.
30 de junio de 2002 [timothy]: Actualizado a man-pages-1.51 y automake-1.6.2
24 de junio de 2002 [timothy]: Capítulo 06 - Shadow, Util-linux, LFS-Bootscripts: Actualizado el contenido de los paquetes.
23 de junio de 2002 [timothy]: Capítulos 05 y 06 - Net-tools, Perl, Texinfo, Autoconf, Automake, File, Libtool, Bin86, Vim, Linux, Bison, Less, Man-pages, Groff, Bzip2, E2fsprogs, Grep, Lilo, Modutils, Procps, Psmisc, Reiserfsprogs: Actualizado el contenido de los paquetes.
23 de Junio del 2002 [timothy]: M4, Bzip2,File, E2fsprogs: Añadido "última versión comprobada" para uniformidad. GCC: Eliminados los programas específicos para i686.
16 de junio de 2002 [timothy]: Capítulo 06 - Gettext: Actualizado el contenido del paquete.
14 de junio de 2002 [timothy]: Capítulos 05 y 06 - Binutils, Bzip2, Diffutils, Grep: Actualizado el contenido de los paquetes. GCC: Actualizada la descripción de c++filt.
13 de junio de 2002 [timothy]: Capítulo 09 - El Final: Cambiado $LFS/etc/lfs-4.0 por $LFS/etc/lfs y poner el número de la versión dentro de este fichero.
12 de junio de 2002 [timothy]: Capítulo 05 - GCC: Modificadas las instrucciones de construcción y las explicaciones de los comandos para construir sólo el compilador C. El compilador C++ no es necesario hasta la segunda construcción de GCC.
12 de junio de 2002 [timothy]: Capítulo 06 - Shadow: Cambios gramaticales.
11 de junio de 2002 [timothy]: Capítulos 05 y 06 - Gawk: Creada la lista de contenidos del paquete y las descripciones. Fileutils: Eliminado un párrafo confuso sobre el parche de fileutils. GCC: Actualizado el contenido del paquete.
11 de junio de 2002 [timothy] Todo el software: Actualizado el espacio requerido en disco.
9 de junio de 2002 [markh]: Capítulo 06 - Creando Directorios: Cambiado usr,usr/local a sólo usr/local, pues usamos la opción -p de mkdir que creará el directorio usr de todas formas.
7 de junio de 2002 [timothy] Capítulo 06 - Reiserfsprogs: añadida la descripción de unpack.
7 de junio de 2002 [timothy] Capítulo 02 - Cómo buscar ayuda: Mencionadas las FAQ.
6 de junio de 2002 [markh] - Capítulo 05 - Modificar explicaciones debido al cambio a /static.
5 de junio de 2002 [timothy] Prólogo - Quién puede no querer leer este libro: aplicada una versión revisada del parche de gramática de Scot.
5 de junio de 2002 [timothy] Capítulo 09 - Reiniciando el sistema, Lilo, Bootscripts: mencionar los autores de las recetas. Capítulo 06 - Vim: actualizada la URL de la receta. Capítulo 05 - Gawk: para evitar confusiones, mencionado el parche que se aplicará en el Capítulo 06.
3 de junio de 2002 [timothy] Capítulo 01 - FAQ: editada para incluir la notificación de errores tipográficos.
31 de mayo de 2002 [gerard] Capítulo 05 - Findutils: Añadido el arreglo de CPPFLAGS...re_max_failures necesario en sistemas Glibc-2.1.
30 de mayo de 2002 [markh]: Capítulos 05 y 06 - Actualizado a binutils-2.12.1.
30 de mayo de 2002 [markh]: Capítulo 05 - Bash: Eliminada la sección sobre "los últimos dos comandos se ejecutan igualmente" porque ya no usamos esos comandos a los que se refiere.
30 de mayo de 2002 [gerard]: Capítulo 06 - Glibc: Sustituidos los arreglos de sed por un parche normal.
30 de mayo de 2002 [gerard]: Capítulo 06 - Gawk: Sustituidos los arreglos de sed por un parche normal.
30 de mayo de 2002 [gerard]: Capítulo 05 - Fileutils: Sustituidos los arreglos de sed por un parche normal.
30 de mayo de 2002 [gerard]: Capítulo 06 - Ed: Sustituidos los arreglos de sed por un parche normal.
28 de mayo de 2002 [gerard]: Capítulo 06 - Cambiando el propietario: eliminado el comando explícito chown /lost+found.Esto se hace con el primer comando ahora que proc ya no se monta en el Capítulo 5.
27 de mayo de 2002 [gerard]: Actualizado a ncurses-5.2-2.patch (este parche es más pequeño que el usado antes).
26 de mayo de 2002 [gerard]: Actualizado a: automake-1.6.1, bin86-0.16.3, file-3.38, gawk-3.1.1, gcc-3.1, gettext-0.11.2, modutils-2.4.16, psmisc-21 y util-linux-2.11r. Añadidos unos parches para ncurses, perl y vim que arreglan su compilación con gcc-3.1.
26 de mayo de 2002 [gerard]: Capítulos 05 y 06 - Binutils: Eliminado el establecimiento del directorio de herramientas en el capítulo 05-binutils, movida su descripción al capítulo 06-binutils.
26 de mayo de 2002 [gerard]: Capítulo 05 - Gawk y Findutils: simplificada la instalación al eliminar las modificaciones de libexecdir. Podemos dejar que se cree $LFS/static/libexecdir. El directorio $LFS/static es temporal de todas formas, así que no importa el aspecto que tenga.
26 de mayo de 2002 [gerard]: Capítulo 06 - Creando directorios: eliminado el comando cd / y cambiados los dos comandos chmod para usar en su lugar rutas absolutas.
25 de mayo de 2002 [markh]: Capítulo 06 - Algunas correcciones menores relacionadas con la eliminación de la variable $LFS donde no es necesaria.
23 de mayo de 2002 [gerard]: Implementado el keep_chap5_and_chap6_sep lfs-hint. Mayores cambios: añadidos findutils y util-linux al capítulo 5, instalar todo lo del capítulo 5 en $LFS/static y reordenar la instalación de los paquetes en el capítulo 6 la inclusión en el código de rutas equivocadas (ficheros ubicados en $LFS/static).
23 de mayo de 2002 [gerard]: Apéndice A - E2fsprogs: Añadidas algunas descripciones.
23 de mayo de 2002 [gerard]: Apéndice A - Bin86: Añadidas algunas descripciones.
23 de mayo de 2002 [gerard]: Apéndice A - Flex: Añadidas algunas descripciones.
23 de mayo de 2002 [gerard]: Apéndice A - Glibc: Añadidas algunas descripciones.
18 de mayo de 2002 [gerard]: Apéndice A - E2fsprogs: Añadidas algunas descripciones.
18 de mayo de 2002 [gerard]: Apéndice A - Glibc: Añadidas algunas descripciones.
17 de mayo de 2002 [markh]: Cambiados todos los chown X.X a chown X:X que es menos propicio a crear problemas (según la documentación de chown).
16 de mayo de 2002 [gerard]: Capítulo 01 - Servidores alternativos: Añadido el acceso por http al servidor alternativo FTP idge.net
16 de mayo de 2002 [gerard]: Apéndice A - Glibc: Añadidas algunas descripciones.
15 de mayo de 2002 [markh]: Capítulo 05 - Bzip2. Cambiadas las instrucciones relacionadas con los enlaces duros en distribuciones antiguas de las instrucciones de gzip en el capítulo 05.
11 de mayo de 2002 [markh]: Varias modificaciones XML; básicamente alterar las etiquetas <ulink> para eliminar erróneos en la salida HTML.
9 de mayo de 2002 [gerard]: Apéndice A - Glibc: Poner descripciones desaparecidas.
6 de mayo de 2002 [gerard]: Capítulo 06 - Shadow: Fijada la localización del enlace simbólico vigr a /usr/sbin
2 de mayo de 2002 [gerard]: Capítulo 06 - Procps: Cambiadas las comillas simples por dobles (dos comillas simples pueden confundirse con una doble y provocar errores).
2 de mayo de 2002 [gerard]: Cambiado el comando cd dir && ln -sf a un único comando (como ln -sf bash $LFS/bin/sh) Lo mismo para las construcciones cd dir && mv/cp que ahora son sustituidas por mv $LFS/usr/bin/{bzcat,bzip2} $LFS/bin.
2 de mayo de 2002 [markh]: Eliminada la sección "Eliminando la antigua librería NSS".
1 de mayo de 2002 [gerard]: Eliminado todo lo relacionado con Glibc-2.0 - los parches para gzip y sh-utils patch y la copia de los ficheros libnss. También se cambian las construcciones export VAR=VALUE...unset VAR por VAR=VALUE ./configure.
26 de abril de 2002 [marcheerdink]: Capítulo 06 Findutils: añadido libexecdir=/usr/bin al comando make para solucionar una ruta equivocada a libexecdir en updatedb.
25 de abril de 2002 [gerard]: Capítulo 06 Glibc: añadida una nota en la que si quieres instalar manualmente algunas locales, en lugar de todas, primero se debe crear el directorio /usr/lib/locale.
21 de abril de 2002 [gerard & markh]: Actualizado a MAKEDEV-1.5
12 de abril de 2002 [markh]: Añadir el directorio entities/ al cvs y extraerlas de index.xml.
19 de abril de 2002 [marcheerdink]: Actualizado a los siguiente paquetes: bison-1.35, diffutils-2.8.1, texinfo-4.2, util-linux-2.11q
9 de abril de 2002 [marcheerdink]: Añadido --disable-perl-regexp a las opciones del configure de grep para evitar que intente enlazarse con una librería pcre no existente.
8 de abril de 2002 [gerard]: Añadido el servidor alternativo http://ftp.de.linuxfromscratch.org (complementario del ftp://ftp.de).
El servidor linuxfromscratch.org hospeda las siguientes listas de correo de acceso público:
lfs-support
lfs-dev
lfs-announce
lfs-security
lfs-book
lfs-chat
alfs-discuss
blfs-dev
blfs-book
blfs-support
La lista de correo lfs-support proporciona soporte a los usuarios que se están construyendo un sistema LFS como el descrito en el libro principal. Las solicitudes de ayuda para instalar software no incluido en el sistema base deben hacerse en la lista blfs-support.
La lista de correo lfs-dev es para discutir cosas directamente relacionadas con el LFS-BOOK. Si hay problemas con el libro, se necesita comunicar uno o dos errores, o hacer una sugerencia para mejorar el libro, esta lista de correo es la adecuada.
Las solicitudes de ayuda deben dirigirse a lfs-support o blfs-support.
La lista lfs-announce es una lista moderada. Puedes suscribirte a ella, pero no puedes enviar ningún mensaje. Esta lista se usa para anunciar las nuevas versiones estables. La lista lfs-dev también facilitará información sobre las versiones de desarrollo. Si un usuario está en la lista lfs-dev tiene poca utilidad que se suscriba a esta lista, porque lo que se publica en lfs-announce se publica también en lfs-dev.
La lista lfs-security es para discutir cuestiones relacionadas con la seguridad. Los problemas de seguridad relacionados con los paquetes que se usan en LFS deben dirigirse a esta lista.
La lista lfs-book es usada por los editores del LFS-BOOK para coordinar su mantenimiento, como la edición XML y similares. La discusión actual sobre lo que debería añadirse o eliminarse del libro tiene lugar en lfs-dev.
La lista lfs-chat es un lugar de encuentro para los miembros de la Comunidad LFS (en la que también estás incluido) y sirve para charlar sobre todo. No hace falta que esté relacionado con ordenadores. Todo vale y nada está fuera de lugar.
La lista alfs-discuss es para discutir el desarrollo de ALFS, el Linux Desde Cero Automatizado (Automated Linux From Scratch). El objetivo de este proyecto es desarrollar una herramienta de instalación que pueda crear un sistema LFS de forma automática, acelerando la compilación al eliminar la necesidad de introducir manualmente los comandos.
La lista blfs-dev es para discutir cuestiones relacionadas con el BLFS-BOOK (Más allá de LFS). Esta es la lista de correo para informar sobre errores y hacer sugerencias para mejorar el libro BLFS.
La solicitud de ayuda sobre programas que estén más allá de la puesta en marcha de un LFS base (no sólo los que están en BLFS) deben dirigirse a blfs-support.
La lista blfs-book es usada por los editores del BLFS-BOOK para coordinar su mantenimiento, como la edición XML y similares. La discusión actual sobre lo que debería añadirse o eliminarse del libro tiene lugar en blfs-dev.
La lista blfs-support es para dar soporte sobre cualquier software no construido o instalado en el libro LFS. Cualquier software que esté más allá del instalado como parte del sistema base LFS puede ser discutido aquí.
Todas estas listas están archivadas y pueden verse en línea en http://archive.linuxfromscratch.org/mail-archives o descargarlas de http://ftp.linuxfromscratch.org/mail-archives o ftp://ftp.linuxfromscratch.org/mail-archives.
No necesitas suscribirte a una lista para mandar un mensaje. Sin embargo, si escribes en una lista a la que no estás suscrito, debes mencionar esto para que los miembros de la lista puedan incluirte en la cabecera CC: de las respuestas para que puedas recibirlas.
La dirección de envío a una lista tiene el formato nombre_de_la_lista@linuxfromscratch.org donde nombre_de_la_lista puede ser una de la listas mencionadas en la sección anterior . Ejemplos de las direcciones de envío son lfs-dev@linuxfromscratch.org, lfs-support@linuxfromscratch.org y blfs-support@linuxfromscratch.org.
Puedes suscribirte a cualquiera de las listas anteriormente mencionadas enviando un mensaje a listar@linuxfromscratch.org y escribiendo subscribe nombre_de_la_lista como asunto del mensaje.
Puedes suscribirte a múltiples listas con un solo mensaje. Esto se hace dejando el asunto en blanco y colocando todos los comandos en el cuerpo del mensaje. El mensaje tendrá este aspecto:
Para: listar@linuxfromscratch.org
Asunto:
subscribe lfs-dev
subscribe blfs-support
subscribe alfs-discuss
Después de enviar el mensaje, el programa Listar te enviará un mensaje solicitando la confirmación a la petición de suscripción. Después de enviar la confirmación, Listar te enviará un mensaje diciendo que has sido suscrito a la lista o listas y una introducción particular para cada lista.
Para desuscribirte de una lista envía un mensaje a listar@linuxfromscratch.org y pon unsubscribe nombre_de_la_lista como asunto del mensaje.
Puedes desuscribirte de múltiples listas con un solo mensaje. Esto se hace dejando el asunto en blanco y colocando todos los comandos en el cuerpo del mensaje. El mensaje tendrá este aspecto:
Para: listar@linuxfromscratch.org
Asunto:
unsubscribe lfs-dev
unsubscribe blfs-support
unsubscribe alfs-discuss
Después de enviar el mensaje, el programa Listar te enviará un mensaje solicitando la confirmación a la petición de desuscripción. Después de enviar la confirmación, Listar te enviará un mensaje diciendo que has sido desuscrito de la lista o 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.
Activar: set nombre_de_la_lista digest
Desactivar: unset nombre_de_la_lista digest
Todas las listas tienen disponible el modo de resumen, que puede activarse después de que el usuario se suscriba a la lista. Entrar en el modo de resumen hace que pares de recibir mensajes individuales al ritmo que se van publicando y, en su lugar, recibirás un mensaje diario conteniendo todos los mensajes publicados durante ese día.
Hay otro modo de resumen llamado digest2. Cuando el usuario activa este modo de uso recibe el resumen diario, pero también continúa recibiendo los mensajes individuales. Para activar este modo de uso sustituye digest por digest2 en el comando.
Activar: set nombre_de_la_lista vacation
Desactivar: unset nombre_de_la_lista vacation
Si un usuario va a ausentarse un tiempo, o desea parar de recibir mensajes sin necesidad de desuscribirse, puede cambiar al modo de vacaciones. Esto tiene el mismo efecto que desuscribirse, pero sin tener que pasar por el proceso de desuscripción y posterior suscripción.
Todas las listas de correo hospedadas en linuxfromscratch.org también son accesibles a través del servidor NNTP. Todos los mensajes publicados en una lista de correo son copiados en el grupo de noticias correspondiente y viceversa.
El servidor de noticias (news) a usar es news.linuxfromscratch.org.
Si encuentras algún error, tienes preguntas o encuentras un error tipográfico en el libro, entonces consulta la página de las FAQ (Cuestiones Preguntadas Frecuentemente).
Versión en castellano: http://www.escomposlinux.org/lfs-es/faq.
Versión original en inglés: http://www.linuxfromscratch.org/faq/.
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
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.
Los SBUs son Static Bash Units (Unidades de Bash Estático) y son nuestro método para identificar cuanto tiempo necesita un paquete para compilar. ¿Por qué no usamos tiempos normales como todo el mundo?
El mayor problema es que esos tiempos no pueden ser precisos, ni siquiera en parte. Puesto que muchas personas instalan LFS sobre muchos sistemas diferentes, los tiempos que se tardan en compilar algo varían demasiado. Un paquete puede tardar 20 minutos en un sistema, pero el mismo paquete puede tardar 3 días en otro sistema (esto no es una exageración). Así que en su lugar utilizamos el Static Bash Unit o SBU.
Funciona de esta forma: el primer paquete que compilas en el libro es Bash en el Capítulo 5 y será enlazado estáticamente. El tiempo que se necesita para compilar este paquete será tomado como base y llamado SBU. Todos los demás tiempos de compilación son relativos al tiempo necesario para instalar Bash. Por ejemplo, GCC-3.2 necesita unos 9.5 SBUs y está comprobado que este número es bastante constante para muchos sistemas diferentes. Así que, multiplicando 9.5 por los segundos que necesita para instalar Bash (el valor SBU), obtendrás una buena aproximación del tiempo que tardará GCC en tu sistema.
Nota: Hemos visto que los SBUs no funcionan bien en máquinas basadas en SMP (Multi-Procesador Simétricos). Por lo que todas las apuestas quedan en el aire si eres lo bastante afortunado para tener una disposición SMP.
En este documento asumiremos que todos los paquetes descargados se situarán en alguna parte de $LFS/usr/src.
Aunque no importa donde guardes los paquetes descargados, te recomendamos hacerlo en la partición LFS. Esto tiene sentido porque necesitas tener acceso a esos ficheros cuando hagas chroot a $LFS y cuando arranques el sistema LFS, aunque el acceso cuando arranques el $LFS puede conseguirse por otros métodos. El directorio $LFS/usr/src es el sitio más lógico para guardar el código fuente, aunque no es obligatorio. Puedes incluso crear un subdirectorio en $LFS/usr/src para almacenar los paquetes. De esa forma puedes separar los paquetes de los directorios temporales usados para la compilación, pero de nuevo eso es cosa tuya.
El siguiente capítulo contiene la lista de todos los paquetes que necesitas descargar. La partición LFS no se ha creado todavía, luego no puedes almacenarlos ahí. Guárdalos en cualquier otro lugar ahora, y después muévelos a la partición LFS, cuando ésta sea creada.
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.
LFS pretende ser independiente de la plataforma en la medida de lo posible. Dicho esto, el esfuerzo de desarrollo principal se centra en la plataforma x86. Intentamos incluir información, donde sea posible, sobre diferencias respecto a otras plataformas como la PPC. Si compilando tienes algún problema que no esté relacionado con la plataforma x86, no dudes en buscar ayuda en las listas de correo. Mejor incluso, si encuentras solución a algún problema particular relacionado con una de las otras plataformas, por favor hazlo saber en la lista de correo lfs-dev. Lo incluiremos en el libro (suponiendo que confirmemos que funciona).
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.
Además de una breve explicación del problema que estás teniendo, debes incluir lo siguiente en tu petición:
la versión del libro que estás usando (que es 4.0),
el paquete o la sección que te da problemas
el mensaje de error exacto o los síntomas que aparecen,
si te has desviado o no del libro.
(Ten en cuenta que decir que no has seguido las recomendaciones del libro no implica que no vayamos a ayudarte. Después de todo, la razón de ser de LFS es la posibilidad de elección. Simplemente nos ayudará a detectar otras posibles causas de tu problema)
Cuando algo vaya mal en la fase en que se ejecuta el guión configure, consulta las últimas líneas de config.log. Este fichero puede contener errores encontrados durante la configuración que no se muestran en pantalla. Incluye esas líneas relevantes si decides pedir ayuda.
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 |
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.
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.
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)
En este capítulo se preparará la partición que contendrá el sistema LFS. Crearemos la partición, haremos un sistema de ficheros en ella, y la montaremos.
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.
Una vez que se haya creado la partición, tendremos que crear un nuevo sistema de ficheros en esa partición. El sistema de ficheros estándar usado hoy en día es el sistema ext2, pero los llamados sistemas de ficheros con registro de transacciones (journaling) están aumentando su popularidad también. Asumiremos que deseas crear un sistema de ficheros ext2. Sin embargo, puedes encontrar las instrucciones de construcción para otros sistemas de ficheros en http://www.escomposlinux.org/lfs-es/blfs-es-CVS/postlfs/filesystems.html (la versión original la tienes en http://beyond.linuxfromscratch.org/view/cvs/postlfs/filesystems.html).
Para crear un sistema de ficheros ext2, utiliza el comando mke2fs. El comando sólo necesita como opción la partición LFS para crear el sistema de ficheros.
mke2fs /dev/xxx |
Cambia "xxx" por el nombre de tu partición (por ejemplo, hda11).
Nada más crear el sistema de ficheros, ya está listo para su uso. Todo lo que tenemos que hacer para acceder a la partición (para, por ejemplo, leer datos y escribirlos), es montarla. Si se monta sobre el directorio /mnt/lfs, se puede acceder a la partición sin más que situarse en el directorio /mnt/lfs. No importa el directorio que elijas, sólo asegúrate de recordar cuál escogiste.
Crea el directorio /mnt/lfs ejecutando:
mkdir -p /mnt/lfs |
Ahora, monta la partición LFS ejecutando:
mount /dev/xxx /mnt/lfs |
Cambia "xxx" por el nombre de tu partición (por ejemplo, hda11).
Este directorio (/mnt/lfs) es la variable LFS sobre la que ya has leído en el Capítulo 2. Si habías pensado usar la variable de entorno LFS, ahora debes ejecutar export LFS=/mnt/lfs
Si decidiste crear varias particiones para LFS (por ejemplo $LFS y $LFS/usr), móntalas como sigue:
mkdir -p /mnt/lfs && mount /dev/xxx /mnt/lfs && mkdir /mnt/lfs/usr && mount /dev/yyy /mnt/lfs/usr |
Por supuesto, sustituye /dev/xxx y /dev/yyy por los nombres de tus particiones.
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).
(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.
Como se explica en el capítulo de introducción, todo lo que instalemos en este capítulo se hará en el directorio $LFS/static. De este modo no llenaremos la partición LFS con un montón de ficheros temporales. Todo lo que necesitamos es crear este directorio para poder comenzar la instalación. Simplemente ejecuta este comando para crear el directorio:
mkdir $LFS/static |
Puede que quieras mover los paquetes que descargaste en el Capítulo 3 al directorio $LFS/static. En ese caso, crea el subdirectorio $LFS/static/src para guardarlos.
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.
Estimación del tiempo de construcción: 1 SBU Estimación del espacio de disco requerido: 24 MB |
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.
--enable-static-link: Esta opción de configure provoca que Bash sea enlazado estáticamente.
--prefix=$LFS/static: Esta opción de configure instala todos los ficheros de Bash bajo el directorio $LFS/static, que pasa a ser el directorio /static cuando entramos en el entorno chroot o reiniciamos LFS.
--with-curses: Esto provoca que Bash se enlace con la librería curses en lugar de la librería por defecto, termcap, que se está quedando obsoleta.
No es estrictamente necesario enlazar bash con libncurses (podría, por el momento, enlazarse con una librería estática termcap y no pasaría nada porque, de todas formas, instalaremos de nuevo Bash en el Capítulo 6, donde usaremos libncurses), pero es una buena forma de comprobar que el paquete ncurses se ha instalado correctamente. Si no es así, podrías tener problemas más adelante en este capítulo, cuando instales el paquete Texinfo. Ese paquete necesita ncurses y no se puede utilizar termcap en ese caso.
Los && al final de cada línea provocan que el siguiente comando a ejecutar sólo lo haga si el anterior terminó devolviendo un valor de 0, que indica éxito. Si todos estos comandos se copian en el intérprete de órdenes (shell), es importante asegurarse de que, si ./configure falla, make no será ejecutado e, igualmente, si make falla, entonces make install no se ejecutará, y así sucesivamente.
Última versión conprobada: 2.05a.
bash es la "Bourne-Again SHell", que es un completo intérprete de comandos usado ampliamente en sistemas Unix. El programa bash lee de la entrada estándar, el teclado. Un usuario escribe algo y el programa evalúa lo que ha escrito y hace algo con ello, como lanzar un programa.
Última versión comprobada: 2.05a.
Bash: bash, sh
Binutils: ar, as, ld, ranlib, size
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, tr, uniq
Estimación del tiempo de construcción: 2.05 SBU Estimación del espacio de disco requerido: 160 MB |
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 Binutils tal como está. Por esta razón, si tienes definida cualquier variable de entorno que pueda sobreescribir las optimizaciones por defecto, como CFLAGS o CXXFLAGS, recomendamos quitarlas o modificarlas cuando construyas Binutils. Estás avisado.
Instala Binutils ejecutando los siguientes comandos:
mkdir ../binutils-build && cd ../binutils-build && ../binutils-2.13/configure --prefix=$LFS/static --disable-nls && make LDFLAGS=-all-static && make install |
mkdir ../binutils-build: Las instrucciones de instalación de Binutils recomiendan crear un directorio de construcción separado en lugar de compilar el paquete dentro del árbol de directorios de código fuente. Por ello, creamos un directorio binutils-build y trabajamos allí.
--disable-nls: Esta opción desactiva la internacionalización (también conocida como i18n). No la necesitamos para los programas estáticos, y nls a menudo causa problemas en el enlazado estático.
LDFLAGS=-all-static: Asignar a la variable LDFLAGS el valor -all-static provoca que binutils se enlace estáticamente.
Última versión comprobada: 2.12.1.
addr2line, ar, as, gasp, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings y strip
addr2line traslada direcciones de programas a nombres de ficheros y números de líneas. Dándole una dirección y un ejecutable, usa la información de depuración del ejecutable para averiguar qué fichero y número de línea está asociado con dicha dirección.
El programa ar crea, modifica y extrae desde archivos. Un archivo es un fichero que almacena una colección de otros ficheros en una estructura que hace posible obtener el original de cada fichero individual (llamados miembros del archivo).
as está pensado, principalmente, para ensamblar la salida del compilador GNU, gcc, para ser usada por el enlazador ld.
ld combina un número de objetos y ficheros de archivo, reubica sus datos y establece las referencias a los símbolos. Frecuentemente, el último paso de la compilación de un nuevo programa es hacer una llamada a ld.
La utilidad objcopy copia el contenido de un fichero objeto en otro. objcopy usa la librería BFD de GNU para leer y escribir los ficheros objeto. Puede escribir el fichero objeto destino en un formato diferente al del fichero objeto fuente.
objdump muestra información sobre uno o más ficheros objeto. Mediante opciones se puede indicar la información a mostrar. Esta información es útil fundamentalmente para los programadores que trabajan en herramientas de compilación (al contrario de los programadores que sólo quieren que sus programas compilen y funcionen).
ranlib genera un índice de los contenidos de un archivo, y lo coloca en el archivo. El índice lista cada símbolo definido por un miembro de un archivo que es un fichero objeto reubicable.
size lista los tamaños de las secciones --y el tamaño total-- para cada uno de los ficheros objeto en su lista de argumentos. Por defecto, se genera una línea de salida por cada fichero objeto o cada módulo de un archivo.
Para cada fichero dado, strings muestra las cadenas de caracteres imprimibles de al menos 4 caracteres (o el número especificado en las opciones del programa) seguidas por un carácter no imprimible. Por defecto, sólo muestra las cadenas procedentes de las secciones de inicialización y carga de los ficheros objeto; para otros tipos de ficheros muestra todas las cadenas de los mismos.
strings es útil, principalmente, para determinar el contenido de ficheros que no son de texto.
strip elimina todos los símbolos o sólo los especificados de los ficheros objeto. La lista de ficheros objeto puede incluir archivos. Se debe indicar, por lo menos, un fichero objeto. strip modifica los ficheros mencionados en sus argumentos, en vez de escribir copias modificadas con otro nombre.
Última versión comprobada: 2.11.2.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, nm, ranlib, strip
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, rmdir, touch
Flex: flex
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: ldconfig
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, true, uname
Texinfo: install-info, makeinfo
Textutils: cat, sort, tr, uniq
Estimación del tiempo de construcción: 0.07 SBU Estimación del espacio de disco requerido: 6 MB |
Instala Bzip2 ejecutando los siguientes comandos:
make CC="gcc -static" && make PREFIX=$LFS/static install |
Aunque, estrictamente, no es una parte de un sistema LFS básico, merece la pena mencionar que se puede descargar un parche que permite al programa tar comprimir y descomprimir utilizando bzip2/bunzip2 fácilmente. Con el tar simple, tienes que utilizar construcciones como bzcat fichero.tar.bz2 | tar -xv o tar --use-compress-prog=bunzip2 -xvf fichero.tar.bz2 para utilizar bzip2 y bunzip2 con tar. Este parche añade la opción -j para que puedas desempaquetar un archivo Bzip2 con tar -xvfj fichero.tar.bz2. La aplicación de este parche se mencionará cuando se instale el paquete Tar.
make CC="gcc -static": Este es el método que utilizamos para decirle a gcc que queremos que bzip2 sea enlazado estáticamente.
Última versión comprobada: 1.0.2
bunzip2 (enlace a bzip2), bzcat (enlace a bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless y bzmore
bzcmp y bzdiff se usan para invocar el programa cmp o diff en ficheros comprimidos con bzip2.
bzegrep, bzfgrep, y bzgrep invocan, respectivamente, a egrep, fgrep, o grep en ficheros comprimidos con bzip2.
bzip2 comprime ficheros usando el algoritmo de compresión de texto por ordenación de bloques Burrows-Wheeler y la codificación Huffman. La compresión es, en general, considerablemente superior a la obtenida por otros compresores más convencionales basados en el LZ77/LZ78 y se acerca al rendimiento de la familia de compresores estadísticos PPM.
Estimación del tiempo de construcción: 0.39 SBU Estimación del espacio de disco requerido: 10 MB |
Instala Diffutils ejecutando los siguientes comandos:
LDFLAGS=-static CPPFLAGS=-Dre_max_failures=re_max_failures2 \ ./configure --prefix=$LFS/static --disable-nls && make && make install |
CPPFLAGS=-Dre_max_failures=re_max_failures2: La variable CPPFLAGS es leída por el programa cpp (PreProcesador de C). El valor de esta variable le dice al preprocesador que cambie cada aparición de re_max_failures que encuentre por re_max_failures2 antes de enviar el código fuente al compilador para su compilación. Este paquete tiene problemas en el enlazado estático en sistemas que ejecutan una versión más antigua de Glibc, y esta construcción soluciona ese problema.
Estimación del tiempo de construcción: 0.94 SBU Estimación del espacio de disco requerido: 40 MB |
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.
patch -Np1 -i ../fileutils-4.1.patch: Esto se usa para solucionar un problema cuando se construye fileutils estáticamente en sistemas que tienen glibc 2.2.3. Si no se hace, entonces existe la posibilidad de que los programas de fileutils provoquen violaciones de segmento (segmentation faults) una vez que se ha entrado en el entorno chroot en el Capítulo 6.
Última versión comprobada: 4.1.
chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, shred, sync, touch y vdir
chgrp cambia el grupo de cada fichero al grupo especificado, que puede ser tanto el nombre de un grupo como su identificador numérico.
chmod cambia los permisos de un fichero de acuerdo con el modo, que puede ser tanto una representación simbólica de los cambios a hacer o un número octal que representa el patrón de bits de los nuevos permisos.
dd copia un fichero (por defecto, de la entrada estándar a la salida estándar) con un tamaño de bloque definido por el usuario, mientras, opcionalmente, realiza conversiones en él.
df muestra la cantidad de espacio disponible en los sistemas de ficheros a los que pertenece cada fichero que se le pasa como argumento. Si no se indica ningún fichero, se muestra el espacio disponible en todos los sistemas de ficheros montados actualmente
dir y vdir son versiones de ls con formatos de salida diferentes. Estos programas listan cada fichero o directorio especificado. El contenido de los directorios se lista alfabéticamente. Para ls, los ficheros se listan, por defecto, en columnas ordenados verticalmente si la salida estándar es un terminal; en otro caso se listan uno por línea. Para dir, los ficheros se listan, por defecto, en columnas ordenados verticalmente. Para vdir, los ficheros se listan, por defecto, en formato largo.
dircolors imprime comandos para modificar la variable de entorno LS_COLOR, que se usa para cambiar el esquema de color por defecto de ls y de herramientas relacionadas.
du muestra la cantidad de espacio en disco usado por cada fichero o directorio listado en la línea de comandos, y por cada uno de sus subdirectorios.
mknod crea una tubería (FIFO), un fichero especial de caracteres o un fichero especial de bloques con el nombre indicado.
mv mueve ficheros de un directorio a otro o renombra ficheros, dependiendo de los argumentos que se le pasen.
Última versión comprobada: 4.1.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
Make: make
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, tr
Estimación del tiempo de construcción: 0.12 SBU Estimación del espacio de disco requerido: 8 MB |
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 |
patch -Np1 -i ../findutils-4.1.patch: Este parche es para solucionar algunos errores de compilación evitando un conflicto de variables y cambiando alguna sintaxis equivocada.
Última versión comprobada: 4.1.
bigram se usa junto con code para generar las bases de datos de locate en el formato antiguo. Para saber más de estos tres programas, lee la página de manual locatedb.5.
El programa find busca los ficheros de una jerarquía de directorios que cumplan un cierto criterio. Si no se especifica un criterio de búsqueda, lista todos los ficheros del directorio actual y de los subdirectorios.
frcode es llamado por updatedb para comprimir la lista de ficheros usando "front-compression", que reduce el tamaño de la base de datos en un factor de 4 o 5.
locate busca en una base de datos que contiene todos los ficheros y directorios de un sistema de ficheros. Este programa lista los ficheros y directorios de la base de datos que cumplan cierto criterio. Si un usuario busca un fichero, este programa buscará en la base de datos y le dirá dónde están ubicados exactamente esos ficheros. Esto sólo es válido si la base de datos de locate se encuentra actualizada. En otro caso mostrará información anticuada.
El programa updatedb actualiza la base de datos de locate. Explora por completo el sistema de ficheros (incluidos otros sistemas de ficheros que se encuentren montados a no ser que se le indique lo contrario) e inserta todos los directorios y ficheros que encuentre en la base de datos que usa locate para recuperar dicha información. Es una buena costumbre actualizar la base de datos una vez al día para obtener información correcta cuando se necesite.
Última versión comprobada: 4.1.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, mv, rm
Grep: egrep, grep
Gcc: cc1, collect2, cpp0, gcc
Make: make
Patch: patch
Sed: sed
Sh-utils: basename, date, echo, hostname
Textutils: cat, tr
Estimación del tiempo de construcción: 0.39 SBU Estimación del espacio de disco requerido: 17 MB |
Instala Gawk ejecutando los siguientes comandos:
CPPFLAGS=-Dre_max_failures=re_max_failures2 \ ./configure --prefix=$LFS/static --disable-nls && make LDFLAGS=-static && make install |
Estimación del tiempo de construcción: 9.48 SBU Estimación del espacio de disco requerido: 326 MB |
Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.
Se sabe que este programa se comporta mal si cambias sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Es mejor dejar a GCC tal como está. Por esta razón, si tienes definida cualquier variable de entorno que pueda sobreescribir las optimizaciones por defecto, como CFLAGS o CXXFLAGS, recomendamos quitarlas o modificarlas cuando construyas GCC. Estás avisado.
Instala GCC ejecutando los siguientes comandos:
patch -Np1 -i ../gcc-3.2.patch && patch -Np1 -i ../gcc-3.2-nofixincludes-2.patch && mkdir ../gcc-build && cd ../gcc-build && ../gcc-3.2/configure --prefix=/static --enable-languages=c \ --disable-nls --disable-shared && echo "#define HAVE_GAS_HIDDEN 1" >> gcc/auto-host.h && make BOOT_LDFLAGS=-static bootstrap && make prefix=$LFS/static install && ln -s gcc $LFS/static/bin/cc |
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.
Última versión comprobada: 3.1.
c++, c++filt, cc (enlace a gcc), cc1, cc1plus, collect2, cpp, cpp0, g++, gcc, gccbug, gcov y tradcpp0
Estos programas forman el compilador de C. Un compilador convierte el código fuente en formato de texto a un formato que un ordenador pueda entender. Después de que un fichero de código fuente es compilado en un fichero objeto, un enlazador creará un fichero ejecutable a partir de uno o más de estos ficheros objeto generados por el compilador.
El lenguaje C++ proporciona sobrecarga de funciones, lo que significa que es posible escribir varias funciones con el mismo nombre (suponiendo que cada una tome parámetros de diferente tipo). Todos los nombres de funciones C++ son codificadas dentro de una etiqueta de bajo nivel del ensamblador (este proceso es conocido como "mangling"). El programa c++flit hace lo contrario: decodifica (demangling) nombres de bajo nivel en nombres de nivel de usuario para que el enlazador pueda evitar conflictos en estas funciones sobrecargadas.
cpp preprocesa un fichero fuente, por ejemplo la inclusión del contenido de los ficheros de cabecera en el fichero fuente. Simplemente, añade una línea del tipo #include <fichero> a tu fichero fuente y el preprocesador insertará el contenido del fichero incluido dentro del fichero fuente.
gccbug es un guión del interprete de comandos que se usa para simplificar la creación de notificaciones de errores.
libiberty es una colección de subrutinas usadas por muchos programas GNU, incluidos getopt, obstack, strerror, strtol y strtoul.
libstdc++ es la librería C++. Es utilizada por programas escritos en C++ y contiene funciones que son usadas frecuentemente por esos programas. De esta forma el programador no necesita escribir ciertas funciones (como la escritura de una cadena de texto en pantalla) desde el principio cada vez que crea un programa.
Última versión comprobada: 2.95.3.
Bash: sh
Binutils: ar, as, ld, nm, ranlib
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
Find: find
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Patch: patch
Sed: sed
Sh-utils: basename, dirname, echo, expr, hostname, sleep, true, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tail, tr
Estimación del tiempo de construcción: 0.26 SBU Estimación del espacio de disco requerido: 5 MB |
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 |
--disable-perl-regexp: Con esta opción nos aseguramos de que Grep no intenta enlazarse con la librería PCRE, que frecuentemente sólo se encuentra disponible como librería compartida en las distribuciones. No usar esta opción puede causar errores de compilación.
Última versión comprobada: 2.5.
Última versión comprobada: 2.4.2.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chmod, install, ls, mkdir, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.04 SBU Estimación del espacio de disco requerido: 2 MB |
Instala Gzip ejecutando los siguientes comandos:
./configure --prefix=$LFS/static && make LDFLAGS=-static && make install |
Última versión comprobada: 1.2.4a.
gunzip (enlace a gzip), gzexe, gzip, uncompress (enlace a gunzip), zcat (enlace a gzip), zcmp, zdiff, zforce, zgrep, zmore y znew
gzexe permite comprimir ficheros ejecutables que automáticamente se descomprimen y ejecutan al ser lanzados (con una penalización en el rendimiento).
zcat descomprime, y escribe en la salida estándar, tanto una lista de ficheros en su línea de comandos como un fichero leído por su entrada estándar.
zforce fuerza la extensión .gz en todos los ficheros gzip para que gzip no los comprima dos veces. Esto puede ser útil para ficheros con el nombre truncado después de una transferencia de ficheros.
Estimación del tiempo de construcción: 0.26 SBU Estimación del espacio de disco requerido: 8 MB |
Instala Make ejecutando los siguientes comandos:
./configure --prefix=$LFS/static --disable-nls && make LDFLAGS=-static && make install |
Durante la etapa make install verás este aviso:
chgrp: changing group of `/mnt/lfs/static/bin/make': Operation not permitted /mnt/lfs/static/bin/make needs to be owned by group kmem and setgid; otherwise the `-l' option will probably not work. You may need special privileges to complete the installation of /mnt/lfs/static/bin/make. chgrp: cambiando grupo de `/mnt/lfs/static/bin/make': Operación no permitida /mnt/lfs/static/bin/make necesita pertenecer al grupo kmem y activar el bit SGID; de otra manera, la opción '-l' probablemente no funcionará. Puede que necesites privilegios especiales para completar la instalación de /mnt/lfs/static/bin/make.
Puedes ignorar este aviso sin que conlleve ninguna consecuencia. El programa make no necesita pertenecer al grupo kmem ni ejecutarse con ese ID de grupo (setgid) para que la opción -l funcione. (Esta opción le ordena a make que no empiece nuevos trabajos cuando se alcance una determinada carga del sistema).
Última versión comprobada: 3.79.1.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chgrp, chmod, install, ls, mv, rm
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.10 SBU Estimación del espacio de disco requerido: 3 MB |
Instala Patch ejecutando los siguientes comandos:
CPPFLAGS=-D_GNU_SOURCE \ ./configure --prefix=$LFS/static && make LDFLAGS=-static && make install |
CPPFLAGS=-D_GNU_SOURCE: Este modificador corrige los problemas de instalación de este paquete en las plataformas PPC y m68k (que nosotros sepamos). Tampoco daña la compilación en otras plataformas, como x86, así que lo hacemos por defecto.
Última versión comprobada: 2.5.4.
El programa patch modifica un fichero según lo indicado en un fichero de parche. Normalmente un fichero de parche es una lista creada por el programa diff que contiene instrucciones sobre cómo necesita ser modificado un fichero original. Patch se usa mucho para parchear el código fuente pues ahorra bastante tiempo y espacio. Imagina un paquete de 1MB de tamaño. La siguiente versión de ese paquete sólo cambia en dos ficheros con respecto a la primera versión. Se puede distribuir como un nuevo paquete entero de 1MB o sólo como un parche de 1KB con el que actualizar la primera versión para hacerla idéntica a la segunda. Por tanto, si la primera versión ya fue descargada, un parche evita hacer una segunda descarga larga.
Estimación del tiempo de construcción: 0.09 SBU Estimación del espacio de disco requerido: 2 MB |
Instala Sed ejecutando los siguientes comandos:
CPPFLAGS=-Dre_max_failures=re_max_failures2 \ ./configure --prefix=$LFS/static && make LDFLAGS=-static && make install |
Última versión comprobada: 3.02.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gcc: cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: echo, expr, hostname, sleep
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.47 SBU Estimación del espacio de disco requerido: 42 MB |
Antes de instalar Sh-utils, puede ser necesario aplicarle un parche para evitar un conflicto de nombres de variables con ciertas versiones de Glibc (normalmente glibc-2.1.x), cuando se compila sh-utils estáticamente. De todas formas, es inocuo aplicar el parche incluso si tienes una versión diferente de glibc. De modo que, si no estás seguro, es mejor que lo apliques.
patch -Np1 -i ../sh-utils-2.0.patch |
Instala Sh-utils ejecutando los siguientes comandos:
./configure --prefix=$LFS/static \ --disable-nls && make LDFLAGS=-static && make install |
Cuando ejecutes make install verás el siguiente mensaje de aviso:
WARNING: insufficient access; not installing su NOTE: to install su, run 'make install-root' as root AVISO: privilegios insuficientes; no se instalará su NOTA: para instalar su, ejecuta 'make install-root' como usuario root
Puedes ignorar este mensaje de aviso. Necesitas entrar al sistema como root para instalar su de la manera que Sh-utils quiere hacerlo, es decir, activando el bit SUID. Como no necesitamos su durante el Capítulo 6, y se instalará correctamente cuando reinstalemos Sh-utils en dicho capítulo, puedes hacer como si no hubieras visto el mensaje.
Última versión comprobada: 2.0.
basename, chroot, date, dirname, echo, env, expr, factor, false, groups, hostid, id, logname, nice, nohup, pathchk, pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname, uptime, users, who, whoami y yes
chroot ejecuta un comando o un intérprete de comandos (shell) interactivo dentro de un directorio raíz determinado.
date muestra la fecha y hora actual en un formato determinado o establece la fecha y hora del sistema.
id muestra los identificadores efectivos de usuario y de grupo del usuario actual o de un usuario dado.
nohup ejecuta un comando que no se interrumpe cuando se cierra la sesión, con su salida a un fichero de registro.
Última versión comprobada: 2.0.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, chown, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.25 SBU Estimación del espacio de disco requerido: 10 MB |
Para poder usar ficheros bzip2 con tar, utiliza el parche que se encuentra en el servidor FTP de LFS. Este parche añadirá la opción -j a tar, que funciona de la misma forma que la opción -z (usada para los ficheros gzip).
Aplica el parche ejecutando el siguiente comando:
patch -Np1 -i ../tar-1.13.patch |
Instala Tar ejecutando los siguientes comandos:
./configure --prefix=$LFS/static --disable-nls && make LDFLAGS=-static && make install |
Última versión comprobada: 1.13.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Net-tools: hostname
Patch: patch
Sed: sed
Sh-utils: basename, echo, expr, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.47 SBU Estimación del espacio de disco requerido: 19 MB |
Instala Texinfo ejecutando los siguientes comandos:
LDFLAGS=-static ./configure --prefix=$LFS/static \ --disable-nls && make && make install |
Última versión comprobada: 4.2.
El programa info lee documentos Info, almacenados normalmente en el directorio /usr/share/info. Los documentos Info son como las páginas de manual, pero tienden a ser más profundos que una simple explicación de las opciones de un programa.
El programa install-info actualiza las entradas info. Cuando se ejecuta info, muestra una lista con los temas disponibles (es decir, los documentos info) disponibles. El programa install-info se usa para mantener esta lista. Si los ficheros info son eliminados manualmente, también debes eliminar el tema en el fichero índice. Este programa se utiliza para eso. También funciona en sentido contrario cuando se añaden documentos info.
Última versión comprobada: 4.0.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ln, ls, mkdir, mv, rm
Gcc: cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
Make: make
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep
Texinfo: makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.95 SBU Estimación del espacio de disco requerido: 49 MB |
Instala Textutils ejecutando los siguientes comandos:
CPPFLAGS=-Dre_max_failures=re_max_failures2 \ ./configure --prefix=$LFS/static \ --disable-nls && make LDFLAGS=-static && make install |
Última versión comprobada: 2.0.
cat, cksum, comm, csplit, cut, expand, fmt, fold, head, join, md5sum, nl, od, paste, pr, ptx, sort, split, sum, tac, tail, tr, tsort, unexpand, uniq y wc
csplit escribe partes de un fichero separadas por un determinado patrón en ficheros xx01, xx02, etc, y muestra el número de bytes de cada parte en la salida estándar.
expand convierte las tabulaciones de un fichero en espacios, escribiendo en la salida estándar
fold reajusta la longitud de las líneas de un fichero (por defecto, la entrada estándar), escribiendo en la salida estándar.
od escribe en la salida estándar una representación inequívoca (por defecto en octal) de un fichero.
paste escribe en la entrada estándar líneas formadas por las líneas de cada uno de los ficheros especificados, separadas por tabulaciones.
tr convierte, altera y/o borra caracteres de la entrada estándar, escribiendo en la salida estándar.
tsort escribe una lista totalmente ordenada de acuerdo con el orden parcial de los ficheros especificados.
Última versión comprobada: 2.0.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Net-tools: hostname
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, sleep, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.09 SBU Estimación del espacio de disco requerido: 9 MB |
Por ahora sólo necesitamos los programas mount y umount, así que no compilaremos el paquete completo.
Instala Util-linux ejecutando los siguientes comandos:
./configure && make -C lib && make -C mount LDFLAGS=-static mount umount && cp mount/{mount,umount} $LFS/static/bin |
Última versión comprobada: 2.11n.
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chgrp, chmod, cp, install, ln, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp, cpp0
Glibc: rpcgen
Grep: grep
Make: make
Sed: sed
Sh-utils: uname, whoami
Textutils: cat
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.
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:
un binario bash con símbolos de depuración: 1200 KB
un binario bash sin símbolos de depuración: 480 KB
los ficheros de glibc y gcc (/lib y /usr/lib) con símbolos de depuración: 87 MB
los ficheros de glibc y gcc sin símbolos de depuración: 16 MB
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).
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.
Lo primero que haremos, ahora que somos root, es cambiar el propietario de los ficheros y directorios instalados en el Capítulo 5 a root -- pues si más tarde no borramos el directorio /static y vamos añadiendo nuevos usuarios, uno de esos usuarios podría acabar poseyendo los programas enlazados estáticamente, lo que no es buena idea.
Ejecuta el siguiente comando para hacer a root propietario de todos los programas enlazados estáticamente:
chown -R 0:0 /static |
Este comando utiliza "0:0" en lugar de "root:root" porque no hay forma de resolver el nombre "root", pues glibc aún no ha sido instalada.
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).
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.
Para funcionar correctamente, algunos programas necesitan que el sistema de ficheros proc esté disponible dentro del entorno chroot. Como un sistema de ficheros se puede montar tantas veces y en tantos lugares como quieras, no es problema que el sistema de ficheros proc esté todavía montado en tu sistema anfitrión -- sobre todo porque proc es un sistema de ficheros virtual.
El sistema de ficheros proc se monta en /proc ejecutando el siguiente comando.
mount proc /proc -t proc |
Posiblemente el comando mount te muestre algunos mensajes de aviso como este:
warning: can't open /etc/fstab: No such file or directory not enough memory aviso: no se puede abrir /etc/fstab: No existe el fichero o directorio memoria insuficiente
Ignóralo. Está causado por el hecho de que el sistema aún no se ha instalado por completo y faltan algunos ficheros. El montaje se realizará correctamente, que es todo lo que necesitamos en este momento.
Lo siguiente por hacer es crear un enlace simbólico /etc/mtab que apunte a /proc/mounts. Esto se hace con el siguiente comando:
ln -sf /proc/mounts /etc/mtab |
Creando este enlace simbólico se evitan los problemas que pueden aparecer si / se monta en sólo lectura y la información en /etc/mtab es errónea (p.e. anticuada). Con la creación del enlace simbólico a /proc/mounts nos aseguramos de que la información sobre los dispositivos realmente montados esté siempre actualizada.
Ten en cuenta que la utilización de este enlace simbólico necesita que tengas el soporte para el sistema de ficheros proc compilado dentro del núcleo. Este soporte se incluye por defecto y no debes eliminarlo, a menos que sepas realmente lo que estás haciendo, pues otras cosas aparte del enlace simbólico /etc/mtab dependen de que proc esté presente. En resumen, asegúrate de que tienes soporte para el sistema de ficheros proc en tu núcleo.
Algunos programas tienen fijadas en su código rutas a programas que aún no existen. Para satisfacer a estos programas creamos los enlaces simbólicos /bin/bash y /bin/sh, ambos apuntando al programa estático bash.
Crea los enlaces simbólicos /bin/bash y /bin/sh ejecutando los siguientes comandos:
ln -s /static/bin/bash /bin/bash && ln -s bash /bin/sh |
Para que root pueda entrar al sistema y para que el nombre "root" sea reconocido, es necesario tener las entradas apropiadas en los ficheros /etc/passwd y /etc/group.
Crea el fichero /etc/passwd ejecutando el siguiente comando:
echo "root:x:0:0:root:/root:/bin/bash" > /etc/passwd |
La contraseña real para root (la "x" es sólo un sustituto) se establecerá más adelante.
Crea el fichero /etc/group ejecutando el siguiente comando:
cat > /etc/group << "EOF" root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty:x:4: tape:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: EOF |
Los grupos creados no son parte de ningún estándar -- son los grupos que el guión MAKEDEV utiliza en la siguiente sección. Aparte del grupo "root", el LSB solamente recomienda que esté presente un grupo "bin" con GID 1. Todos los demás nombres de grupos y sus GID pueden ser elegidos libremente por el usuario, pues los paquetes correctamente escritos no dependen del número GID, sino que utilizan el nombre del grupo.
Estimación del tiempo de construcción: 0.07 SBU Estimación del espacio de disco requerido: 50 KB |
Ten en cuenta que al dempaquetar el fichero MAKEDEV-1.7.bz2 no se crea un directorio al que debas entrar, pues el fichero solo contiene un guión.
Prepara la creación de los ficheros de dispositivos ejecutando los siguientes comandos:
cp MAKEDEV-1.7 /dev/MAKEDEV && cd /dev && chmod 754 MAKEDEV |
Mucha gente podrá crear ahora los dispositivos ejecutando:
./MAKEDEV -v generic |
Pero si piensas utilizar devpts, entonces ejecuta esto otro:
./MAKEDEV -v generic-nopty |
Ten en cuenta que, si no estás seguro, es mejor usar el comando ./MAKEDEV -v generic, con lo que te asegurarás de tener todos los dispositivos que necesites. Pero si tienes la certeza de que vas a usar devpts, el otro comando se saltará la creación de un grupo de dispositivos que no vas a necesitar.
MAKEDEV creará del hda[1-20] al hdh[1-20] y muchos otros nodos de dispositivos de disco similares, pero recuerda que seguramente no podrás usar todos ellos debido a los límites del núcleo en cuanto al número máximo de particiones manejables.
./MAKEDEV -v generic: Esto crea un montón de dispositivos. Normalmente, estos dispositivos son todos los que necesitarás. Pero es posible que no encuentres algún dispositivo especial necesario para configurar tu hardware. Créalo con ./MAKEDEV -v <dispositivo>. La opción generic-nopty crea casi los mismos dispositivos que generic, pero se salta algunos dispositivos que no son necesarios si usas devpts.
Estimación del tiempo de construcción: 0.02 Estimación del espacio de disco requerido: 142 MB |
No compilaremos todavía un nuevo núcleo (kernel) -- lo haremos cuando terminemos la instalación de todos los paquetes. Pero como ciertos paquetes necesitan los ficheros de cabecera (headers) del núcleo, vamos a desempaquetar el archivo del núcleo ahora, ajustarlo, y copiar los ficheros de cabecera a un lugar donde puedan encontrarlos esos paquetes.
Los ficheros de cabecera del núcleo son copiados mediante la ejecución de los siguientes comandos:
ln -s /static/bin/pwd /bin/pwd && make mrproper && make include/linux/version.h && make symlinks && mkdir /usr/include/asm && cp include/asm/* /usr/include/asm && cp -R include/asm-generic /usr/include && cp -R include/linux /usr/include && touch /usr/include/linux/autoconf.h && rm /bin/pwd |
ln -s /static/bin/pwd /bin/pwd: En las fuentes del núcleo la ruta a pwd está fijada como /bin/pwd, así que, para solucionarlo, creamos un enlace simbólico temporal. Al terminar lo volvemos a eliminar.
make mrproper: Esto asegurará que el árbol del núcleo está absolutamente limpio. El equipo de desarrollo del núcleo recomienda usar este comando antes de cada compilación del núcleo, y en realidad no debes confiar en que el árbol de las fuentes esté limpio tras desempaquetarlo.
make include/linux/version.h y make symlinks: Esto crea el fichero include/linux/version.h, así como el enlace simbólico include/asm específico de la plataforma.
mkdir /usr/include/asm , cp include/asm/* /usr/include/asm y cp -R include/asm-generic /usr/include: Estos comandos copian los ficheros de cabecera del núcleo para el ensamblador específicos de la plataforma en /usr/include/asm y /usr/include/asm-generic.
cp -R include/linux /usr/include: Este comando copia los ficheros de cabecera del núcleo independientes de la plataforma en /usr/include.
touch /usr/include/linux/autoconf.h: Esto crea un fichero autoconf.h vacío. Como aún no hemos configurado el núcleo, tenemos que crear este fichero nosotros para unas cuantas cabeceras del núcleo que lo utilizan, evitando fallos de compilación.
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}.
Última versión comprobada: 2.4.18.
El núcleo Linux es el corazón de todo sistema Linux. Es lo que hace a Linux funcionar. Cuando se enciende un ordenador y se inicia un sistema Linux, el núcleo es lo primero que se carga. El núcleo inicializa los componentes hardware del sistema: puertos serie, puertos paralelo, tarjetas de sonido, tarjetas de red, controladores IDE, controladores SCSI y mucho más. En pocas palabras, el núcleo hace que el hardware esté disponible para que el software pueda ejecutarse.
Última versión comprobada: 2.4.17.
Bash: sh
Binutils: ar, as, ld, nm, objcopy
Fileutils: cp, ln, mkdir, mv, rm, touch
Findutils: find, xargs
Gcc: cc1, collect2, cpp0, gcc
Grep: grep
Gzip: gzip
Make: make
Gawk: awk
Modutils: depmod, genksyms
Net-tools: dnsdomainname, hostname
Sed: sed
Sh-utils: basename, date, expr, pwd, stty, uname, whoami, yes
Textutils: cat, md5sum, sort, tail
Estimación del tiempo de construcción: 0.01 SBU Estimación del espacio de disco requerido: 6 MB |
Estimación del tiempo de construcción: 14.71 SBU Estimación del espacio de disco requerido: 369 MB |
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.
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).
Última versión comprobada: 2.2.5.
catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump y zic
catchsegv puede usarse para crear una traza de la pila cuando un programa termina con una violación de segmento.
getconf muestra los valores de configuración del sistema para variables especificas del sistema de ficheros.
glibcbug crea un informe de fallos sobre glibc y lo envía a la dirección de correo electrónico de errores.
ldd muestra las librerías compartidas requeridas por cada programa o librería especificada en la línea de comandos.
locale es un programa Perl que le dice al compilador si debe activar (o desactivar) el uso de las locales POSIX para operaciones integradas.
mtrace imprime la ruta de multidifusión (multicast) de una fuente a un receptor (una consulta del rastro de una IP).
nscd es un demonio que suministra una caché para las peticiones más comunes al servidor de nombres.
pt_chown establece el propietario, grupo y permisos de acceso del pseudo-terminal esclavo correspondiente al pseudo-terminal maestro apuntado por el descriptor de ficheros "3". Este es el programa de ayuda para la función `grantpt'. No está pensado para ejecutarse directamente desde la línea de comandos.
sln enlaza simbólicamente un destino a una fuente. Está enlazado estáticamente, no necesitando enlazado dinámico. Por tanto, sln es útil para crear enlaces simbólicos a librerías dinámicas si, por alguna razón, el enlazador dinámico del sistema no funciona.
ld.so, libBrokenLocale.[a,so], libBrokenLocale_p.a, libSegFault.so, libanl.[a,so], libanl_p.a, libbsd-compat.a, libc.[a,so], libc_nonshared.a, libc_p.a, libcrypt.[a,so], libcrypt_p.a, libdl.[a,so], libdl_p.a, libg.a, libieee.a, libm.[a,so], libm_p.a, libmcheck.a, libmemusage.so, libnsl.a, libnsl_p.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libpthread_p.a, libresolv.[a,so], libresolv_p.a, librpcsvc.a, librpcsvc_p.a, librt.[a,so], librt_p.a, libthread_db.so, libutil.[a,so] y libutil_p.a
libSegFault es un manejador de señales de violación de segmento. Intenta capturar estas señales.
libbsd-compat proporciona la portabilidad necesaria para ejecutar ciertos programas en Linux.
Estos ficheros constituyen la librería C principal, que es una colección de funciones usadas frecuentemente en programas. De esta forma un programador no necesita crear sus propias funciones para cada tarea individual. Las cosas más comunes, como mostrar una cadena en pantalla, están presentes y a disposición del programador.
La librería C (en realidad, casi todas las librerías) viene en dos formas: dinámica y estática. En resumen, cuando un programa usa una librería C estática, se copia el código de la librería C dentro del ejecutable. Cuando un programa usa una librería dinámica, el ejecutable no contiene el código de la librería pero, en su lugar, tiene una rutina que carga las funciones desde esa librería en el momento en el que se ejecuta. De esta forma disminuye de forma significativa el tamaño del programa. La documentación que acompaña a la librería C describe esto con más detalle, pues es demasiado complicado explicarlo aquí en dos o tres líneas.
libmemusage es usada por memusage para ayudar a recoger información sobre el uso de memoria de un programa.
La idea básica es poner en módulos separados la implementación de los diferentes servicios ofrecidos para acceder a las bases de datos. Esto tiene algunas ventajas:
los colaboradores pueden añadir nuevos servicios sin tener que añadirlos a la librería C de GNU,
los módulos pueden actualizarse separadamente,
la imagen de la librería C es más pequeña.
Código usado por el núcleo para rastrear el tiempo de CPU gastado en funciones, líneas de código fuente e instrucciones.
Esta librería proporciona funciones para la creación, envío e interpretación de paquetes de datos a servidores de nombres de dominio de Internet.
Esta librería proporciona funciones para muchas de las interfaces especificadas por el POSIX.1b Realtime Extension (Extensiones en Tiempo Real POSIX.1b).
Última versión comprobada: 2.2.5.
Bash: sh
Binutils: ar, as, ld, ranlib, readelf
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mknod, mv, mkdir, rm, touch
Gcc: cc, cc1, collect2, cpp, gcc
Grep: egrep, grep
Gzip: gzip
Make: make
Gawk: gawk
Sed: sed
Sh-utils: date, expr, hostname, pwd, uname
Texinfo: install-info, makeinfo
Textutils: cat, cut, sort, tr
Estimación del tiempo de construcción: 13.26 SBU Estimación del espacio de disco requerido: 221 MB |
Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.
Se sabe que este programa se comporta mal si cambias sus parámetros de optimización (incluyendo las opciones -march y -mcpu). Es mejor dejar a GCC tal como está. Por esta razón, si tienes definida cualquier variable de entorno que pueda sobreescribir las optimizaciones por defecto, como CFLAGS o CXXFLAGS, recomendamos quitarlas o modificarlas cuando construyas GCC. Estás avisado.
Instala GCC ejecutando los siguientes comandos, que construirán los compiladores C y C++. Otros compiladores están disponibles dentro del paquete gcc. Si quieres compilar también todos los demás compiladores disponibles, elimina la opción --enable-languages=c,c++ del comando configure. Mira la documentación de GCC para más detalles sobre qué compiladores adicionales están disponibles.
Advertencia: la construcción de otros compiladores no ha sido comprobada por la gente que trabaja activamente en LFS.
patch -Np1 -i ../gcc-3.2.patch && mkdir ../gcc-build && cd ../gcc-build && ../gcc-3.2/configure --prefix=/usr --enable-shared \ --enable-languages=c,c++ --enable-threads=posix \ --with-slibdir=/lib --enable-__cxa_atexit \ --enable-clocale=gnu && make bootstrap && make install && ln -s ../usr/bin/cpp /lib && ln -s ../bin/cpp /usr/lib && ln -s gcc /usr/bin/cc |
--enable-threads=posix: Esto activa las excepciones C++ para el manejo de código multihilo.
--enable-__cxa_atexit: Esta opción dará como resultado librerías compartidas C++ y programas C++ interoperables con otras distribuciones linux.
--enable-clocale=gnu: Hay un riesgo de que ciertas personas construyan librerías C++ incompatibles con ABI si no instalan todas las localedata de glibc. Utilizando --enable-clocale=gnu nos aseguramos de que se hace "lo correcto" en todos los casos. Si no deseas usar esta opción, entonces al menos contruye la locale de_DE. Cuando GCC encuentra esta locale específica, entonces se implementa el modo locale correcto (gnu).
Última versión comprobada: 3.1.
c++, c++filt, cc (enlace a gcc), cc1, cc1plus, collect2, cpp, cpp0, g++, gcc, gccbug, gcov y tradcpp0
Estos programas forman el compilador de C. Un compilador convierte el código fuente en formato de texto a un formato que un ordenador pueda entender. Después de que un fichero de código fuente es compilado en un fichero objeto, un enlazador creará un fichero ejecutable a partir de uno o más de estos ficheros objeto generados por el compilador.
El lenguaje C++ proporciona sobrecarga de funciones, lo que significa que es posible escribir varias funciones con el mismo nombre (suponiendo que cada una tome parámetros de diferente tipo). Todos los nombres de funciones C++ son codificadas dentro de una etiqueta de bajo nivel del ensamblador (este proceso es conocido como "mangling"). El programa c++flit hace lo contrario: decodifica (demangling) nombres de bajo nivel en nombres de nivel de usuario para que el enlazador pueda evitar conflictos en estas funciones sobrecargadas.
cpp preprocesa un fichero fuente, por ejemplo la inclusión del contenido de los ficheros de cabecera en el fichero fuente. Simplemente, añade una línea del tipo #include <fichero> a tu fichero fuente y el preprocesador insertará el contenido del fichero incluido dentro del fichero fuente.
gccbug es un guión del interprete de comandos que se usa para simplificar la creación de notificaciones de errores.
libiberty es una colección de subrutinas usadas por muchos programas GNU, incluidos getopt, obstack, strerror, strtol y strtoul.
libstdc++ es la librería C++. Es utilizada por programas escritos en C++ y contiene funciones que son usadas frecuentemente por esos programas. De esta forma el programador no necesita escribir ciertas funciones (como la escritura de una cadena de texto en pantalla) desde el principio cada vez que crea un programa.
Última versión comprobada: 2.95.3.
Bash: sh
Binutils: ar, as, ld, nm, ranlib
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
Find: find
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Patch: patch
Sed: sed
Sh-utils: basename, dirname, echo, expr, hostname, sleep, true, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tail, tr
Estimación del tiempo de construcción: 0.07 SBU Estimación del espacio de disco requerido: 1 MB |
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 |
Estimación del tiempo de construcción: 0.10 SBU Estimación del espacio de disco requerido: 3 MB |
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 Findutils ejecutando los siguientes comandos:
patch -Np1 -i ../findutils-4.1.patch && ./configure --prefix=/usr && make libexecdir=/usr/bin && make libexecdir=/usr/bin install |
Por defecto, la base de datos de updatedb se encuentra en el directorio /usr/var. Si quieres respetar las normas del FHS deberás utilizar otra localización. Los siguientes comandos utilizan el fichero de base de datos /var/lib/misc/locatedb que cumple con el FHS.
patch -Np1 -i ../findutils-4.1.patch && ./configure --prefix=/usr && make localstatedir=/var/lib/misc libexecdir=/usr/bin && make localstatedir=/var/lib/misc libexecdir=/usr/bin install |
patch -Np1 -i ../findutils-4.1.patch: Este parche es para arreglar algunos errores de compilación, evitando un conflicto de variables y cambiando alguna sintaxis equivocada.
Última versión comprobada: 4.1.
bigram se usa junto con code para generar las bases de datos de locate en el formato antiguo. Para saber más de estos tres programas, lee la página de manual locatedb.5.
El programa find busca los ficheros de una jerarquía de directorios que cumplan un cierto criterio. Si no se especifica un criterio de búsqueda, lista todos los ficheros del directorio actual y de los subdirectorios.
frcode es llamado por updatedb para comprimir la lista de ficheros usando "front-compression", que reduce el tamaño de la base de datos en un factor de 4 o 5.
locate busca en una base de datos que contiene todos los ficheros y directorios de un sistema de ficheros. Este programa lista los ficheros y directorios de la base de datos que cumplan cierto criterio. Si un usuario busca un fichero, este programa buscará en la base de datos y le dirá dónde están ubicados exactamente esos ficheros. Esto sólo es válido si la base de datos de locate se encuentra actualizada. En otro caso mostrará información anticuada.
El programa updatedb actualiza la base de datos de locate. Explora por completo el sistema de ficheros (incluidos otros sistemas de ficheros que se encuentren montados a no ser que se le indique lo contrario) e inserta todos los directorios y ficheros que encuentre en la base de datos que usa locate para recuperar dicha información. Es una buena costumbre actualizar la base de datos una vez al día para obtener información correcta cuando se necesite.
Última versión comprobada: 4.1.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, mv, rm
Grep: egrep, grep
Gcc: cc1, collect2, cpp0, gcc
Make: make
Patch: patch
Sed: sed
Sh-utils: basename, date, echo, hostname
Textutils: cat, tr
Estimación del tiempo de construcción: 0.39 SBU Estimación del espacio de disco requerido: 15 MB |
Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.
Atención: NO ejecutes make uninstall en este paquete si has aplicado el parche para cambiar la definición del directorio libexec. La regla uninstall del fichero Makefile ejecuta un comando como rm -rf <libexecdir>/* Como hemos cambiado el directorio libexec a /usr/bin se ejecutará rm -rf /usr/bin/*
Instala Gawk ejecutando los siguientes comandos:
patch -Np1 -i ../gawk-3.1.1-2.patch && ./configure --prefix=/usr --libexecdir=/usr/bin && make && make install |
patch -Np1 -i ../gawk-3.1.1-2.patch: Este parche cambia el código que determina la localización del directorio libexec. El parche nos permitirá sobreescribir esa ruta pasándole la opción --libexecdir al guión configure.
Estimación del tiempo de construcción: 1.88 SBU Estimación del espacio de disco requerido: 22 MB |
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 |
patch -Np1 -i ../ncurses-5.2-patch: Este parche soluciona un problema de compilación con GCC-3.2 debido a que Ncurses utiliza construcciones que no son válidas en el nuevo estándar C++.
--with-shared: Esto activa la compilación de las librerías compartidas de ncurses.
chmod 755 *.5.2: Las librerías compartidas deben ser ejecutables. La rutina de instalación de ncurses no establece adecuadamente los permisos, por lo que tenemos que ponerlos manualmente.
ln -sf libncurses.a libcurses.a: Algunos programas intentan enlazarse usando -lcurses en lugar de -lncurses. Este enlace simbólico asegura que esos programas se enlacen sin error.
Última versión comprobada: 5.2.
captoinfo (enlace a tic), clear, infocmp, infotocap (enlace a tic), reset (enlace a tset), tack, tic, toe, tput y tset.
clear limpia la pantalla si es posible. Busca en el entorno el tipo de terminal, y después en la base de datos de terminfo, para averiguar cómo limpiar la pantalla.
infocmp puede usarse para comparar una entrada binaria de terminfo con otras entradas terminfo, reescribir una descripción de terminfo para aprovechar el campo "use=", o mostrar una descripción terminfo del fichero binario (term) en una variedad de formatos (lo opuesto de lo que hace tic).
reset activa los modos "cooked" y "echo", quita los modos "cbreak" y "raw", activa la traslación de nueva línea y restablece cualquier carácter especial desactivado a sus valores por defecto, antes de hacer la inicialización del terminal de la misma manera que tset.
tic es el compilador de entradas de descripciones de terminfo. El programa transforma un fichero terminfo en formato fuente a formato binario para su uso con las rutinas de las librerías ncurses. Los ficheros terminfo contienen información sobre las capacidades de un terminal.
libcurses.[a,so] (enlace a libncurses.[a,so]), libform.[a,so], libform_g.a, libmenu.[a,so], libmenu_g.a, libncurses++.a, libncurses.[a,so], libncurses_g.a, libpanel.[a,so] y libpanel_g.a
Última versión comprobada: 5.2.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mkdir, mv, rm
Gcc: c++, cc1, cc1plus, collect2, cpp0, gcc
Glibc: ldconfig
Grep: egrep, fgrep, grep
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, date, echo, expr, hostname, uname
Textutils: cat, sort, tr, wc
Estimación del tiempo de construcción: 0.81 SBU Estimación del espacio de disco requerido: 24 MB |
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.
patch -Np1 -i ../vim-6.1.patch: Este parche soluciona un problema de compilación con GCC-3.2.
make CPPFLAGS=-DSYS_VIMRC_FILE=\\\"/etc/vimrc\\\": Estableciendo esto hacemos que vim busque el fichero /etc/vimrc que contiene las opciones globales de vim. Normalmente el fichero buscado es /usr/share/vim, pero /etc es un sitio más lógico para este tipo de ficheros.
Última versión comprobada: 6.1.
efm_filter.pl, efm_perl.pl, ex (enlace a vim), less.sh, mve.awk, pltags.pl, ref, rview (enlace a vim), rvim (enlace a vim), shtags.pl, tcltags, vi (enlace a vim), view (enlace a vim), vim, vim132, vim2html.pl, vimdiff (enlace a vim), vimm, vimspell.sh, vimtutor y xxd
efm_filter.pl es un filtro que lee de la entrada estándar, copia a la salida estándar y crea un fichero de error que puede ser leido por vim.
efm_perl.pl formatea los mensajes de error del intérprete Perl para usarlos con el modo "quickfix" de vim.
pltags.pl crea un fichero de etiquetas para el código Perl, de modo que pueda usarse con vim.
rview es una versión restringida de view. No pueden ejecutarse comandos del intérprete de comandos y vim no puede ser suspendido.
rvim es una versión restringida de vim. No pueden ejecutarse comandos del intérprete de comandos y vim no puede ser suspendido.
Última versión comprobada: 6.0.
Bash: sh
Binutils: as, ld, strip
Diffutils: cmp, diff
Fileutils: chmod, cp, ln, mkdir, mv, rm, touch
Find: find
Gcc: cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Net-tools: hostname
Sed: sed
Sh-utils: echo, expr, uname, whoami
Textutils: cat, tr, wc
Estimación del tiempo de construcción: 0.27 SBU Estimación del espacio de disco requerido: 6 MB |
Instala Bison ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install |
Algunos programas no conocen bison e intentan encontrar el programa yacc (bison es una alternativa [mejor] para yacc). Para complacer a estos programas creamos un guión de bash llamado yacc que llama a bison haciendo que emule las convenciones de los nombres de ficheros de salida de yacc.
Crea un nuevo fichero /usr/bin/yacc ejecutando lo siguiente:
cat > /usr/bin/yacc << "EOF" #!/bin/sh # Inicio de /usr/bin/yacc exec /usr/bin/bison -y "$@" # Fin de /usr/bin/yacc EOF chmod 755 /usr/bin/yacc |
Última versión comprobada: 1.35.
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.
Última versión comprobada: 1.31.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
Make: make
Sed: sed
Sh-utils: basename, dirname, echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, head, tr, uniq
Estimación del tiempo de construcción: 0.13 SBU Estimación del espacio de disco requerido: 2 MB |
Instala Less ejecutando los siguientes comandos:
./configure --prefix=/usr --bindir=/bin --sysconfdir=/etc && make && make install |
Última versión comprobada: 374.
El programa less es un paginador de ficheros (o visor de texto). Muestra el contenido de un fichero con la posibilidad de recorrerlo. Less es una evolución del paginador habitual llamado "more". Less tiene la habilidad de poder moverse a través de los ficheros y no necesita leer por completo el fichero al principio, lo que le hace rápido cuando se leen ficheros largos.
Estimación del tiempo de construcción: 1.08 SBU Estimación del espacio de disco requerido: 18 MB |
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 |
make PROCESSEDEXAMPLEFILES="": Groff tiene varias dependencias adicionales que no instalamos con LFS. Esta opción desactiva la necesidad de esas herramientas.
ln -s ...: xman y otros programas de documentación groff/man necesitan estos enlaces simbólicos para trabajar correctamente.
Última versión comprobada: 1.17.2.
addftinfo, afmtodit, eqn, geqn (enlace a eqn), grn, grodvi, groff, grog, grolbp, grolj4, grops, grotty, gtbl (enlace a tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff y zsoelim (enlace a soelim)
addftinfo lee un fichero de fuentes troff y añade alguna información adicional sobre la métrica de la fuente, que es usada por el sistema groff.
eqn compila las descripciones de las formulas embebidas en los ficheros de entrada de troff a comandos que pueda entender troff.
groff es una interfaz para el sistema de formateado de documentos groff. Normalmente lanza el programa troff y un post-procesador apropiado para el dispositivo seleccionado.
grog lee ficheros y averigua cual de las opciones -e, -man, -me, -mm, -ms, -p, -s, y -t de groff se necesitan para mostrar los ficheros, y muestra el comando de groff incluyendo esas opciones en la salida estándar.
grolbp es un controlador de groff para las impresoras Canon CAPSL (series LBP-4 y LBP-8 de impresoras láser)
grolj4 es un controlador para groff que produce salidas en el formato PCL5 adecuado para impresoras HP Laserjet 4.
grotty transforma la salida de GNU troff en un formato adecuado para dispositivos tipo máquina de escribir.
hpftodit crea un fichero de fuentes para usar con groff -Tlj4 a partir de ficheros de marcas de fuentes métricas de HP.
indxbib hace un índice inverso para la base de datos bibliográfica, un fichero específico para usarlo con refer, lookbib, y lkbib.
lkbib busca, en las bases de datos bibliográficas, referencias que contengan las claves especificadas y muestra cualquier referencia encontrada en la salida estándar.
lookbib muestra un aviso en la salida de error estándar (excepto si la entrada estándar no es un terminal), lee de la entrada estándar una línea conteniendo un grupo de palabras clave, busca en las bases de datos bibliográficos en un fichero especificado las referencias que contengan dichas claves, muestra cualquier referencia encontrada en la salida estándar y repite el proceso hasta el final de la entrada.
pic compila descripciones de gráficos embebidos dentro de ficheros de entrada de troff o TeX a comandos que puedan ser entendidos por TeX o troff.
refer copia el contenido de un fichero en la salida estándar, excepto que las líneas entre .[ y .] son interpretadas como citas, y las líneas entre .R1 y .R2 son interpretadas como comandos sobre cómo deben ser procesadas las citas.
tbl compila descripciones de tablas embebidas dentro de ficheros de entrada troff a comandos que puedan ser entendidos por troff.
Última versión comprobada: 1.17.2.
Bash: sh
Binutils: ar, as, ld, ranlib
Bison: bison
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, touch
Gcc: cc1, cc1plus, collect2, cpp0, g++, gcc
Grep: egrep, grep
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, date, echo, expr, hostname, uname
Textutils: cat, tr
Estimación del tiempo de construcción: 0.83 SBU Estimación del espacio de disco requerido: 17 MB |
Instala Textutils ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install && mv /usr/bin/{cat,head} /bin |
Última versión comprobada: 2.0.
cat, cksum, comm, csplit, cut, expand, fmt, fold, head, join, md5sum, nl, od, paste, pr, ptx, sort, split, sum, tac, tail, tr, tsort, unexpand, uniq y wc
csplit escribe partes de un fichero separadas por un determinado patrón en ficheros xx01, xx02, etc, y muestra el número de bytes de cada parte en la salida estándar.
expand convierte las tabulaciones de un fichero en espacios, escribiendo en la salida estándar
fold reajusta la longitud de las líneas de un fichero (por defecto, la entrada estándar), escribiendo en la salida estándar.
od escribe en la salida estándar una representación inequívoca (por defecto en octal) de un fichero.
paste escribe en la entrada estándar líneas formadas por las líneas de cada uno de los ficheros especificados, separadas por tabulaciones.
tr convierte, altera y/o borra caracteres de la entrada estándar, escribiendo en la salida estándar.
tsort escribe una lista totalmente ordenada de acuerdo con el orden parcial de los ficheros especificados.
Última versión comprobada: 2.0.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Net-tools: hostname
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, sleep, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.09 SBU Estimación del espacio de disco requerido: 2 MB |
Instala Sed ejecutando los siguientes comandos:
./configure --prefix=/usr --bindir=/bin && make && make install |
Última versión comprobada: 3.02.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gcc: cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: echo, expr, hostname, sleep
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.05 SBU Estimación del espacio de disco requerido: 3 MB |
Instala Flex ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install |
Algunos programas no conocen flex e intentan encontrar el programa lex (flex es una alternativa [mejor] para lex). Para complacer a estos programas creamos un guión de bash llamado lex, que llama a flex haciéndole que emule a lex.
Crea un nuevo fichero /usr/bin/lex ejecutando lo siguiente:
cat > /usr/bin/lex << "EOF" #!/bin/sh # Inicio de /usr/bin/lex exec /usr/bin/flex -l "$@" # Fin de /usr/bin/lex EOF chmod 755 /usr/bin/lex |
Última versión comprobada: 2.5.4a.
flex es una herramienta para generar programas capaces de reconocer patrones de texto. El reconocimiento de patrones es muy útil en muchas aplicaciones. El usuario establece las reglas de búsqueda y flex generará el programa que buscará esos patrones. La razón por la que la gente usa flex es porque es mucho más fácil establecer las reglas de búsqueda que escribir un programa real que busque el texto.
Estimación del tiempo de construcción: 2.48 SBU Estimación del espacio de disco requerido: 94 MB |
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 Binutils 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 Binutils. Estás avisado.
Instala Binutils ejecutando los siguientes comandos:
mkdir ../binutils-build && cd ../binutils-build && ../binutils-2.13/configure --prefix=/usr --enable-shared && make tooldir=/usr && make tooldir=/usr install && make tooldir=/usr install-info && cp ../binutils-2.13/include/libiberty.h /usr/include |
tooldir=/usr: Normalmente, el directorio de herramientas (donde se instalarán los ejecutables de Binutils) tiene el valor $(exec_prefix)/$(target_alias), lo que se convierte en, por ejemplo, /usr/i686-pc-linux-gnu. Como sólo construimos programas para nuestro propio sistema, no necesitamos en /usr este directorio específico de cada objetivo. Esa configuración se utilizaría si el sistema fuese usado para compilación cruzada (por ejemplo, compilando un paquete en una máquina Intel, pero generando código que se ejecutará en máquinas Apple PowerPC).
make tooldir=/usr install-info: Esto instalará las páginas info de Binutils.
cp ../binutils-2.13/include/libiberty.h /usr/include: El fichero de cabecera libiberty.h es necesario para compilar cierto software.
Última versión comprobada: 2.12.1.
addr2line, ar, as, gasp, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings y strip
addr2line traslada direcciones de programas a nombres de ficheros y números de líneas. Dándole una dirección y un ejecutable, usa la información de depuración del ejecutable para averiguar qué fichero y número de línea está asociado con dicha dirección.
El programa ar crea, modifica y extrae desde archivos. Un archivo es un fichero que almacena una colección de otros ficheros en una estructura que hace posible obtener el original de cada fichero individual (llamados miembros del archivo).
as está pensado, principalmente, para ensamblar la salida del compilador GNU, gcc, para ser usada por el enlazador ld.
ld combina un número de objetos y ficheros de archivo, reubica sus datos y establece las referencias a los símbolos. Frecuentemente, el último paso de la compilación de un nuevo programa es hacer una llamada a ld.
La utilidad objcopy copia el contenido de un fichero objeto en otro. objcopy usa la librería BFD de GNU para leer y escribir los ficheros objeto. Puede escribir el fichero objeto destino en un formato diferente al del fichero objeto fuente.
objdump muestra información sobre uno o más ficheros objeto. Mediante opciones se puede indicar la información a mostrar. Esta información es útil fundamentalmente para los programadores que trabajan en herramientas de compilación (al contrario de los programadores que sólo quieren que sus programas compilen y funcionen).
ranlib genera un índice de los contenidos de un archivo, y lo coloca en el archivo. El índice lista cada símbolo definido por un miembro de un archivo que es un fichero objeto reubicable.
size lista los tamaños de las secciones --y el tamaño total-- para cada uno de los ficheros objeto en su lista de argumentos. Por defecto, se genera una línea de salida por cada fichero objeto o cada módulo de un archivo.
Para cada fichero dado, strings muestra las cadenas de caracteres imprimibles de al menos 4 caracteres (o el número especificado en las opciones del programa) seguidas por un carácter no imprimible. Por defecto, sólo muestra las cadenas procedentes de las secciones de inicialización y carga de los ficheros objeto; para otros tipos de ficheros muestra todas las cadenas de los mismos.
strings es útil, principalmente, para determinar el contenido de ficheros que no son de texto.
strip elimina todos los símbolos o sólo los especificados de los ficheros objeto. La lista de ficheros objeto puede incluir archivos. Se debe indicar, por lo menos, un fichero objeto. strip modifica los ficheros mencionados en sus argumentos, en vez de escribir copias modificadas con otro nombre.
Última versión comprobada: 2.11.2.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, nm, ranlib, strip
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, rmdir, touch
Flex: flex
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: ldconfig
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, true, uname
Texinfo: install-info, makeinfo
Textutils: cat, sort, tr, uniq
Estimación del tiempo de construcción: 0.68 SBU Estimación del espacio de disco requerido: 17 MB |
Instala Fileutils ejecutando los siguientes comandos:
./configure --prefix=/usr --bindir=/bin && make && make install && ln -s ../../bin/install /usr/bin |
Última versión comprobada: 4.1.
chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, shred, sync, touch y vdir
chgrp cambia el grupo de cada fichero al grupo especificado, que puede ser tanto el nombre de un grupo como su identificador numérico.
chmod cambia los permisos de un fichero de acuerdo con el modo, que puede ser tanto una representación simbólica de los cambios a hacer o un número octal que representa el patrón de bits de los nuevos permisos.
dd copia un fichero (por defecto, de la entrada estándar a la salida estándar) con un tamaño de bloque definido por el usuario, mientras, opcionalmente, realiza conversiones en él.
df muestra la cantidad de espacio disponible en los sistemas de ficheros a los que pertenece cada fichero que se le pasa como argumento. Si no se indica ningún fichero, se muestra el espacio disponible en todos los sistemas de ficheros montados actualmente
dir y vdir son versiones de ls con formatos de salida diferentes. Estos programas listan cada fichero o directorio especificado. El contenido de los directorios se lista alfabéticamente. Para ls, los ficheros se listan, por defecto, en columnas ordenados verticalmente si la salida estándar es un terminal; en otro caso se listan uno por línea. Para dir, los ficheros se listan, por defecto, en columnas ordenados verticalmente. Para vdir, los ficheros se listan, por defecto, en formato largo.
dircolors imprime comandos para modificar la variable de entorno LS_COLOR, que se usa para cambiar el esquema de color por defecto de ls y de herramientas relacionadas.
du muestra la cantidad de espacio en disco usado por cada fichero o directorio listado en la línea de comandos, y por cada uno de sus subdirectorios.
mknod crea una tubería (FIFO), un fichero especial de caracteres o un fichero especial de bloques con el nombre indicado.
mv mueve ficheros de un directorio a otro o renombra ficheros, dependiendo de los argumentos que se le pasen.
Última versión comprobada: 4.1.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
Make: make
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, tr
Estimación del tiempo de construcción: 0.42 SBU Estimación del espacio de disco requerido: 12 MB |
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 |
Hay un comando que se instala con este paquete que se llama test. Se usa a menudo en guiones del intérprete de comandos (shell scripts) para evaluar condiciones, pero habitualmente se encuentra como [ condición ]. Estos corchetes son comandos internos del intérprete bash. Sin embargo, el estándar FHS determina que debe haber un programa llamado [. Créalo ejecutando:
ln -s test /bin/[ |
patch -Np1 -i ../sh-utils-2.0-hostname.patch: Este parche suprime la construcción del programa hostname, que será instalado posteriormente con el paquete net-tools. El programa hostname del paquete net-tools es una versión mucho mejor (y, en algunos casos, necesaria, pues soporta opciones que necesitan algunos programas como XFree86).
Última versión comprobada: 2.0.
basename, chroot, date, dirname, echo, env, expr, factor, false, groups, hostid, id, logname, nice, nohup, pathchk, pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname, uptime, users, who, whoami y yes
chroot ejecuta un comando o un intérprete de comandos (shell) interactivo dentro de un directorio raíz determinado.
date muestra la fecha y hora actual en un formato determinado o establece la fecha y hora del sistema.
id muestra los identificadores efectivos de usuario y de grupo del usuario actual o de un usuario dado.
nohup ejecuta un comando que no se interrumpe cuando se cierra la sesión, con su salida a un fichero de registro.
Última versión comprobada: 2.0.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, chown, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.99 SBU Estimación del espacio de disco requerido: 39 MB |
Instala Gettext ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install |
Última versión comprobada: 0.11.2.
config.charset, config.rpath, gettext, gettextize, hostname, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq, ngettext, project-id, team-address, trigger, urlget, user-email y xgettext
El guión config.charset saca una tabla dependiente del sistema de los alias de codificación de los caracteres.
El guión config.rpath saca un grupo de variables dependientes del sistema, describiendo cómo fijar la ruta de busqueda en tiempo de ejecución de las librerías compartidas en un ejecutable.
El paquete gettext se usa en la internacionalización (también conocida como i18n) y en la localización (conocida como l10n). Los programas pueden ser compilados con soporte para lenguaje nativo (NLS) que activa el que se muestren los mensajes de salida en el idioma del usuario en vez de en el idioma por defecto, el inglés.
El programa gettextize copia todos los ficheros estándar gettext en un directorio. Se usa para hacer paquetes con traducción gettext.
El programa msgattrib filtra los mensajes de un catálogo de traducción de acuerdo con sus atributos, y manipula dichos atributos.
El programa msgcomm busca los mensajes que aparecen en varios ficheros .po. Se usa para comparar cómo deben traducirse las cosas.
El programa msgconv convierte un catálogo de traducción a una codificación de caracteres diferente.
El programa msgfilter aplica un filtro a todas las traducciones de un catálogo de traducción.
El programa msgfmt compila traducciones directas en código máquina. Se usa para crear el fichero de traducción final de un programa/paquete.
El programa msggrep extrae todos los mensajes de un catálogo de traducción que cumplan cierto criterio o pertenezcan a alguno de los ficheros fuente indicados.
El programa msginit crea un nuevo fichero PO, inicializando la información con valores procedentes del entorno del usuario.
El programa msgmerge combina dos traducciones directas en un fichero. Se usa para actualizar la traducción directa con el extracto de las fuentes.
El programa msgunfmt descompila ficheros de traducciones en traducciones directas de texto. Sólo puede ser usado si la versión compilada está disponible.
El programa ngettext muestra traducciones en lenguaje nativo de un mensaje de texto cuya forma gramatical depende de un número.
El guión team-address imprime las direcciones del equipo de desarrolladores en la salida estándar, y muestra instrucciones adicionales .
Última versión comprobada: 0.10.40.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, nm, ranlib, strip
Bison: bison
Diffutils: cmp
Fileutils: chmod, install, ln, ls, mkdir, mv, rm, rmdir
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, sort, tr, uniq
Estimación del tiempo de construcción: 0.16 SBU Estimación del espacio de disco requerido: 5 MB |
Instala Net-tools ejecutando los siguientes comandos:
make && make update |
Si quieres aceptar todas las respuestas que se ofrecen por defecto, puedes ejecutar, en su lugar, estos comandos:
yes "" | make && make update |
Si no sabes qué contestar a todas las preguntas que se hacen durante la etapa make, entonces basta con aceptar los valores por defecto, ya que será lo correcto en la mayoría de los casos. Lo que se pregunta aquí es una serie de cuestiones relativas al tipo de protocolos de red que tienes activados en tu núcleo.
Las respuestas por defecto activarán las herramientas de este paquete para trabajar con la mayoría de los protocolos más comunes, como TCP, PPP y algunos otros. En realidad, todavía necesitarás activar esos protocolos en el núcleo. Lo que estás haciendo aquí es, simplemente, ordenar a los programas que sean capaces de usar esos protocolos, pero corre de cuenta del núcleo dejarlos disponibles para el sistema.
make update: Esto hace lo mismo que make install con la excepción de que make update no hace copias de seguridad de los ficheros que está reemplazando. Una de las cosas que reemplaza net-tools es la versión de sh-utils de /bin/hostname (la versión de net-tools es bastante mejor que la de sh-utils).
Además, si decides volver a instalar este paquete en algún momento, ejecutar make update no hará copias de seguridad de todos los ficheros de la instalación anterior de net-tools.
Última versión comprobada: 1.60.
arp, dnsdomainname (enlace a hostname), domainname (enlace a hostname), hostname, ifconfig, nameif, netstat, nisdomainname (enlace a hostname), plipconfig, rarp, route, slattach e ypdomainname (enlace a hostname)
arp se usa para manipular la caché ARP del núcleo, usualmente para añadir o borrar una entrada o volcar dicha caché.
netstat es una herramienta multipropósito usada para mostrar las conexiones de red, tablas de encaminamiento, estadísticas de las interfaces, conexiones enmascaradas y los miembros de conexiones multidestino (multicast).
plipconfig se usa para afinar los parámetros del dispositivo PLIP, para hacerlo más rápido.
Estimación del tiempo de construcción: 3.81 SBU Estimación del espacio de disco requerido: 52 MB |
Instala Perl ejecutando los siguientes comandos:
./configure.gnu --prefix=/usr && make && make install |
Si quieres más control sobre la forma en que perl se autoconfigura para construirse, puedes ejecutar el guión interactivo Configure y modificar el modo en que perl se construye. Si piensas que puedes vivir con los (razonables) valores por defecto que perl autodetecta, entonces usa los comandos listados anteriormente.
Última versión comprobada: 5.6.1.
a2p, c2ph, dprofpp, find2perl, h2ph, h2xs, perl, perl5.6.1, perlbug, perlcc, perldoc, pl2pm, pod2html, pod2latex, pod2man, pod2text, pod2usage, podchecker, podselect, pstruct, s2p y splain
perl es el Lenguaje Práctico de Extracción e Informe. Combina algunas de las mejores características de C, sed, awk y sh en un poderoso lenguaje.
perlbug ayuda en la generación de informes de errores sobre perl o sobre los módulos incorporados, y los envía por correo.
perldoc busca una parte de la documentación en formato .pod que se incluye en el árbol de instalación de perl o en un guión de perl, y lo muestra mediante "pod2man | nroff -man | $PAGER".
pl2pm es una herramienta que ayuda en la conversión de librerías .pl de estilo Perl4 en módulos de librería de estilo Perl5.
attrs.so, B.so, ByteLoader.so, DProf.so, Dumper.so, DynaLoader.a, Fcntl.so, Glob.so, Hostname.so, IO.so, libperl.a, Opcode.so, Peek.so, POSIX.so, re.so, SDBM_File.so, Socket.so, Syslog.so y SysV.so
Última versión comprobada: 5.6.1.
Bash: sh
Binutils: ar, as, ld, nm
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, date, echo, expr, hostname, pwd, uname, whoami
Textutils: cat, comm, sort, split, tr, uniq, wc
Estimación del tiempo de construcción: 0.01 SBU Estimación del espacio de disco requerido: 1.5 MB |
Desmpaqueta glibc-linuxthreads y te darás cuenta de que obtienes dos directorios nuevos. Entra en el directorio linuxthreads, no en el directorio linuxthreads_db.
Instala las páginas de manual de los hilos de Linux ejecutando los siguientes comandos:
make -C man && make -C man install |
Estimación del tiempo de construcción: 0.08 SBU Estimación del espacio de disco requerido: 3 MB |
Instala M4 ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install |
Última versión comprobada: 1.4.
m4 es un procesador de macros. Copia la entrada a la salida expandiendo las macros en el proceso. Las macros pueden ser internas o definidas por el usuario y pueden tomar cualquier número de argumentos. Aparte de hacer la expansión de macros, m4 tiene funciones internas para la inclusión de los ficheros indicados, lanzar comandos UNIX, hacer aritmética entera, manipular texto de diversas formas, recursión, etc. El programa m4 puede ser usado como interfaz para un compilador o como procesador de macros por sí mismo.
Estimación del tiempo de construcción: 0.43 SBU Estimación del espacio de disco requerido: 12 MB |
Instala Texinfo ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install && make TEXMF=/usr/share/texmf install-tex |
make TEXMF=/usr/share/texmf install-tex: Esto instala los componentes de texinfo que pertenecen a la instalación de TeX. Aunque TeX no se instala en LFS, se instala aquí para completar la instalación de texinfo.
Última versión comprobada: 4.2.
El programa info lee documentos Info, almacenados normalmente en el directorio /usr/share/info. Los documentos Info son como las páginas de manual, pero tienden a ser más profundos que una simple explicación de las opciones de un programa.
El programa install-info actualiza las entradas info. Cuando se ejecuta info, muestra una lista con los temas disponibles (es decir, los documentos info) disponibles. El programa install-info se usa para mantener esta lista. Si los ficheros info son eliminados manualmente, también debes eliminar el tema en el fichero índice. Este programa se utiliza para eso. También funciona en sentido contrario cuando se añaden documentos info.
Última versión comprobada: 4.0.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ln, ls, mkdir, mv, rm
Gcc: cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
Make: make
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep
Texinfo: makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.05 SBU Estimación del espacio de disco requerido: 6 MB |
Instala Autoconf ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install |
Última versión comprobada: 2.53.
autoconf es una herramienta para generar guiones del intérprete de comandos que automáticamente configuran paquetes de código fuente, adaptándolos a muchas clases de sistemas tipo UNIX. Los guiones de configuración creados por autoconf son independientes de autoconf cuando se ejecutan, por tanto sus usuarios no necesitan tenerlo instalado.
El programa autoheader puede crear un plantilla de declaraciones #define de C, usada posteriormente por el guión configure.
Si hay que generar varios guiones de configuración con autoconf, el programa autoreconf puede ahorrar algo de trabajo. Ejecuta autoconf y autoheader (cuando es necesario) repetidamente para recrear los guiones de configuración de autoconf y las plantillas de configuración de las cabeceras en el árbol de directorios actual.
El programa autoscan ayuda en la creación de ficheros configure.in para los paquetes. Este programa analiza los ficheros fuente en el árbol de directorios. Si no se le especifica un directorio en la línea de comandos, utiliza el directorio de trabajo actual. Busca en los ficheros fuente problemas comunes de portabilidad y crea un fichero configure.scan que sirve como versión preliminar del fichero configure.in para ese paquete.
El programa autoupdate actualiza las llamadas a los macros de autoconf en los ficheros configure.in cambiando los nombres antiguos por los actuales.
ifnames ayuda en la creación de los ficheros configure.in. Escribe los identificadores que el paquete usa en las construcciones condicionales del preprocesador de C. Si un paquete está preparado para tener cierta portabilidad, este programa le ayuda a averiguar lo que configure necesita comprobar. Puede ayudar a fijar ciertas carencias en los configure.in generados por autoscan.
Estimación del tiempo de construcción: 0.03 SBU Estimación del espacio de disco requerido: 6 MB |
Instala Automake ejecutando los siguientes comandos:
./configure --prefix=/usr && make install |
Última versión comprobada: 1.6.2.
acinstall, aclocal, aclocal-1.6, automake, automake-1.6, compile, config.guess, config.sub, depcomp, elisp-comp, install-sh, mdate-sh, missing, mkinstalldirs, py-compile y ylwrap
automake incluye una serie de macros de autoconf que pueden ser usadas en los paquetes; algunas de ellas son requeridas por automake en ciertas situaciones. Estas macros deben estar definidas en el fichero aclocal.m4 o no serán vistas por autoconf.
El programa aclocal genera automáticamente los ficheros aclocal.m4 basados en el contenido de configure.in. Esto proporciona una forma conveniente de obtener las macros facilitadas por automake sin tener que buscarlas. Por otra parte, el mecanismo de aclocal es extensible para poder ser usado por otros paquetes
Para crear todos los Makefile.in de un paquete, ejecuta el programa automake en el directorio base, sin argumentos. automake automáticamente encontrará cada fichero Makefile.am apropiado (tras explorar configure.in) y generará el correspondiente Makefile.in.
depcomp es un guión que compila un programa mientras genera dependencias como efecto lateral.
Estimación del tiempo de construcción: 0.82 SBU Estimación del espacio de disco requerido: 14 MB |
Instala Bash ejecutando los siguientes comandos:
./configure --prefix=/usr --bindir=/bin && make && make install && exec /bin/bash --login |
Última versión conprobada: 2.05a.
bash es la "Bourne-Again SHell", que es un completo intérprete de comandos usado ampliamente en sistemas Unix. El programa bash lee de la entrada estándar, el teclado. Un usuario escribe algo y el programa evalúa lo que ha escrito y hace algo con ello, como lanzar un programa.
Última versión comprobada: 2.05a.
Bash: bash, sh
Binutils: ar, as, ld, ranlib, size
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, tr, uniq
Estimación del tiempo de construcción: 0.21 SBU Estimación del espacio de disco requerido: 2 MB |
Instala File ejecutando los siguientes comandos:
./configure --prefix=/usr --datadir=/usr/share/misc && make && make install |
Última versión comprobada: 3.37.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chmod, install, ln, ls, mv, rm, touch
Gcc: cc1, collect2, cpp0, gcc
Grep: egrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: echo, expr, hostname, sleep
Texinfo: makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.15 SBU Estimación del espacio de disco requerido: 7 MB |
Instala Libtool ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install |
Última versión comprobada: 1.4.2.
Última versión comprobada: 1.4.2.
Bash: sh
Binutils: ar, as, ld, nm, ranlib, strip
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gcc: cc, cc1, collect2, cpp0
Glibc: ldconfig
Grep: egrep, fgrep, grep
Make: make
Sed: sed
Sh-utils: echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, sort, tr, uniq
Estimación del tiempo de construcción: 0.07 SBU Estimación del espacio de disco requerido: 2 MB |
Este paquete sólo es necesario si decides utilizar Lilo en tu sistema LFS. Si vas a usar alguna otra utilidad, como Grub, no necesitas bin86. Revisa la documentación de tu gestor de arranque favorito para ver si necesita el paquete bin86 (normalmente, sólo son necesarios ld86 y/o as86).
Recuerda que no sólo los gestores de arranque requieren el paquete bin86. Siempre existe la posibilidad de que algún otro paquete necesite los programas de éste, así que tenlo en cuenta si decides saltarte este paso.
Instala Bin86 ejecutando los siguientes comandos:
make && make PREFIX=/usr install |
Última versión comprobada: 0.16.3
as86_encap es un guión del intérprete de comandos que llama a as86 y que convierte el binario creado en un fichero prog.v de C para ser incluido o enlazado con programas como instaladores de bloques de arranque.
Estimación del tiempo de construcción: 0.09 SBU Estimación del espacio de disco requerido: 3 MB |
Instala Bzip2 ejecutando los siguientes comandos:
make -f Makefile-libbz2_so && make && make install && cp bzip2-shared /bin/bzip2 && ln -s libbz2.so.1.0 libbz2.so && cp -a libbz2.so* /lib && rm /lib/libbz2.so && ln -s ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so && rm /usr/bin/{bunzip2,bzcat,bzip2} && mv /usr/bin/{bzip2recover,bzless,bzmore} /bin && ln -s bzip2 /bin/bunzip2 && ln -s bzip2 /bin/bzcat |
Aunque, estrictamente, no es una parte de un sistema LFS básico, merece la pena mencionar que se puede descargar un parche que permite al programa tar comprimir y descomprimir utilizando bzip2/bunzip2 fácilmente. Con el tar simple, tienes que utilizar construcciones como bzcat fichero.tar.bz2 | tar -xv o tar --use-compress-prog=bunzip2 -xvf fichero.tar.bz2 para utilizar bzip2 y bunzip2 con tar. Este parche añade la opción -j para que puedas desempaquetar un archivo Bzip2 con tar -xvfj fichero.tar.bz2. La aplicación de este parche se mencionará cuando se instale el paquete Tar.
make -f Makefile-libbz2_so: Esto provocará que bzip2 sea construido usando un fichero Makefile diferente, en este caso el fichero Makefile-libbz2_so, el cual crea una librería dinámica libbz2.so y enlaza las utilidades bzip2 con ella.
Última versión comprobada: 1.0.2
bunzip2 (enlace a bzip2), bzcat (enlace a bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless y bzmore
bzcmp y bzdiff se usan para invocar el programa cmp o diff en ficheros comprimidos con bzip2.
bzegrep, bzfgrep, y bzgrep invocan, respectivamente, a egrep, fgrep, o grep en ficheros comprimidos con bzip2.
bzip2 comprime ficheros usando el algoritmo de compresión de texto por ordenación de bloques Burrows-Wheeler y la codificación Huffman. La compresión es, en general, considerablemente superior a la obtenida por otros compresores más convencionales basados en el LZ77/LZ78 y se acerca al rendimiento de la familia de compresores estadísticos PPM.
Estimación del tiempo de construcción: 0.06 SBU Estimación del espacio de disco requerido: 3 MB |
Este paquete necesita que le apliques un parche antes de poder instalarlo. Asegúrate de desempaquetarlo antes de ejecutar los comandos de instalación.
Ed no es algo que querrás utilizar personalmente. Se instala aquí porque puede que lo use el programa patch si te encuentras con algún parche basado en ed. Esto no suele ocurrir porque ahora se prefieren los parches basados en diff.
Instala Ed ejecutando los siguientes comandos:
patch -Np1 -i ../ed-0.2.patch && ./configure --prefix=/usr && make && make install && mv /usr/bin/{ed,red} /bin |
patch -Np1 -i ../ed-0.2.patch : Este parche arregla una vulnerabilidad de enlaces simbólicos en ed. El ejecutable ed crea ficheros en /tmp con nombres predecibles. Usando varios tipos de ataques de enlaces simbólicos, es posible hacer a ed escribir en ficheros que no debería, cambiar los permisos de varios ficheros, etc.
Estimación del tiempo de construcción: 0.12 SBU Estimación del espacio de disco requerido: 8 MB |
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 Kbd ejecutando los siguientes comandos:
patch -Np1 -i ../kbd-1.06-3.patch && ./configure && make && make install |
patch -Np1 -i ../kbd-1.06-3.patch: Este parche soluciona dos problemas. El primero es el comportamiento de loadkeys -d, que es incorrecto en las versiones actuales de kbd. Es necesario arreglar esto porque los guiones de arranque confían en un comportamiento correcto de loadkeys -d. La segunda parte del parche cambia un fichero Makefile para que algunas utilidades que no se instalan por defecto (setlogcons, setvesablank y getunimap) se instalen también.
Última versión comprobada: 1.06.
chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, getunimap, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, openvt, psfaddtable (enlace a psfxtable), psfgettable (enlace a psfxtable), psfstriptable (enlace a psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setlogcons, setmetamode, setvesablank, showfont, showkey, unicode_start, y unicode_stop
getkeycodes muestra la tabla de correspondencias de código de exploración (scan code) a código de teclas del núcleo.
mapscrn carga una tabla de correspondencia de caracteres de salida, definida por el usuario, en el controlador de la consola. Este comando está obsoleto y sus funciones se encuentran incluidas en setfont.
Este es un grupo de herramientas para obtener tablas de caracteres Unicode a partir de fuentes de consola.
setkeycodes carga las entradas de la tabla de correspondencia de código de exploración (scan code) a código de tecla del núcleo.
setleds establece los LEDs del teclado. Mucha gente encuentra útil tener el bloqueo numérico (numlock) activado por defecto y usando este programa puede conseguirse.
Esto permite afinar el salvapantallas incorporado en el hardware (no animados, sólo una pantalla en blanco).
showfont muestra los datos de una fuente. La información mostrada incluye información de la fuente, sus propiedades, la métrica de los caracteres y el mapa de bits de cada carácter.
Última versión comprobada: 1.06.
Bash: sh
Binutils: as, ld, strip
Bison: bison
Diffutils: cmp
Fileutils: cp, install, ln, mv, rm
Flex: flex
Gettext: msgfmt, xgettext
Gcc: cc1, collect2, cpp0, gcc
Grep: grep
Gzip: gunzip, gzip
Make: make
Patch: patch
Sed: sed
Sh-utils: uname
Estimación del tiempo de construcción: 0.31 SBU Estimación del espacio de disco requerido: 6 MB |
Instala Diffutils ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install |
Estimación del tiempo de construcción: 0.80 SBU Estimación del espacio de disco requerido: 13 MB |
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 |
--with-root-prefix="": La razón por la que proporcionamos esta opción es por la configuración del fichero Makefile de e2fsprogs. Algunos programas son esenciales para el uso del sistema cuando, por ejemplo, /usr todavía no ha sido montada (como el programa e2fsck). Por lo tanto, estos programas y librerías corresponden a los directorios /lib y /sbin. Si no se pasase esta opción al comando ./configure de e2fsprogs, colocaría estos programas en /usr, que no es lo que queremos.
--enable-elf-shlibs: Esto crea librerías compartidas que algunos programas de este paquete pueden usar.
make install-libs: Esto instala las librerías compartidas que han sido construidas.
Última versión comprobada: 1.27.
badblocks, chattr, compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, fsck, fsck.ext2, fsck.ext3, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, mklost+found, resize2fs, tune2fs y uuidgen
badblocks se usa para buscar bloques dañados en un dispositivo (normalmente una partición de disco).
compile_et es usado para convertir una tabla con códigos de error y sus mensajes asociados en un fichero fuente C apropiado para usar con la librería com_err.
El programa debugfs es un depurador de sistemas de ficheros. Puede usarse para examinar y cambiar el estado de un sistema de ficheros ext2.
dumpe2fs muestra la información del superbloque y de los grupos de bloques del sistema de ficheros presente en un determinado dispositivo.
e2fsck y fsck.ext2 se usan para chequear, y opcionalmente reparar, sistemas de ficheros ext2.
e2label muestra o cambia la etiqueta de un sistema de ficheros ext2 situado en el dispositivo especificado.
La utilidad mk_cmds toma como entrada un fichero de tabla de comandos y genera como salida un fichero fuente C preparado para usarlo con la librería del subsistema, libss.
mke2fs se usa para crear sistemas de ficheros ext2 en un dispositivo (normalmente una partición de disco). mkfs.ext2 hace lo mismo que mke2fs.
Última versión comprobada: 1.25.
Bash: sh
Binutils: ar, as, ld, ranlib, strip
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mkdir, mv, rm, sync
Gcc: cc, cc1, collect2, cpp0
Glibc: ldconfig
Grep: egrep, grep
Gzip: gzip
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, echo, expr, hostname, uname
Texinfo: makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.22 SBU Estimación del espacio de disco requerido: 5 MB |
Instala Grep ejecutando los siguientes comandos:
./configure --prefix=/usr --bindir=/bin && make && make install |
Última versión comprobada: 2.5.
Última versión comprobada: 2.4.2.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chmod, install, ls, mkdir, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.03 SBU Estimación del espacio de disco requerido: 2 MB |
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 |
patch -Np1 -i ../gzip-1.2.4b.patch: Este parche corrige un desbordamiento de buffer (buffer overflow) que aparece cuando el nombre de un fichero tiene más de 1020 caracteres.
Última versión comprobada: 1.2.4a.
gunzip (enlace a gzip), gzexe, gzip, uncompress (enlace a gunzip), zcat (enlace a gzip), zcmp, zdiff, zforce, zgrep, zmore y znew
gzexe permite comprimir ficheros ejecutables que automáticamente se descomprimen y ejecutan al ser lanzados (con una penalización en el rendimiento).
zcat descomprime, y escribe en la salida estándar, tanto una lista de ficheros en su línea de comandos como un fichero leído por su entrada estándar.
zforce fuerza la extensión .gz en todos los ficheros gzip para que gzip no los comprima dos veces. Esto puede ser útil para ficheros con el nombre truncado después de una transferencia de ficheros.
Estimación del tiempo de construcción: 0.05 SBU Estimación del espacio de disco requerido: 2 MB |
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 Man ejecutando los siguientes comandos:
patch -Np1 -i ../man-1.5k.patch && PATH=$PATH:/usr/bin:/bin \ ./configure -default -confdir=/etc && make && make install |
Advertencia: Si deseas desactivar las secuencias de escape SGR, debes editar el fichero man.conf y añadir el argumento -c a nroff.
Puede que quieras mirar la receta sobre man en http://www.escomposlinux.org/lfs-es/recetas/man.html (el original se encuentra en http://hints.linuxfromscratch.org/hints/man.txt) que se ocupa de las cuestiones de formateado y compresión de las páginas de manual.
PATH=$PATH:/usr/bin:/bin ./configure -default: Las rutas a algunos programas se escriben dentro de los ficheros de man. Desafortunadamente, el guión configure asigna la última localización en el PATH en la que se encuentra un programa, en lugar de la primera. Añadiendo /usr/bin:/bin a la variable PATH para el comando ./configure nos aseguramos de que man no use la versión en /static de nuestros programas.
patch -Np1 -i ../man-1.5k.patch: Este parche comenta una de las líneas del fichero man.conf (MANPATH /usr/man) debido a que crearía resultados redundantes cuando usemos programas como whatis. También añade la opción -R a la variable PAGER para que las páginas de manual se muestren correctamente.
Última versión comprobada: 1.5k.
apropos busca palabras claves en un grupo de ficheros de bases de datos que contienen descripciones cortas de los comandos del sistema, y muestra el resultado en la salida estándar.
makewhatis lee todas las páginas de manual contenidas en las secciones incluidas en las rutas "manpath" o las páginas preformateadas contenidas en las secciones de las rutas "catpath". Por cada página escribe una línea en la base datos de whatis. Cada línea consiste en el nombre de la página y una descripción corta, separados por un guión. La descripción se extrae del contenido de la sección NAME de la página de manual.
Estimación del tiempo de construcción: 0.08 SBU Estimación del espacio de disco requerido: 3 MB |
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).
Estimación del tiempo de construcción: 0.22 SBU Estimación del espacio de disco requerido: 6 MB |
Instala Make ejecutando los siguientes comandos:
./configure --prefix=/usr && make && make install && chgrp root /usr/bin/make && chmod 755 /usr/bin/make |
Por defecto, /usr/bin/make se instala con kmem como grupo efectivo de ejecución (setgid). Esto es necesario en algunos sistemas para que pueda comprobar la carga media del sistema utilizando /dev/kmem. Sin embargo, en los sistemas Linux, cambiar el grupo de ejecución a kmem no es necesario, luego podemos quitar el bit SGID del programa make. Esto también soluciona algunos problemas que hacen que make ignore ciertas variables, como LD_LIBRARY_PATH.
Última versión comprobada: 3.79.1.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chgrp, chmod, install, ls, mv, rm
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.13 SBU Estimación del espacio de disco requerido: 3 MB |
Instala Modutils ejecutando los siguientes comandos:
./configure && make && make install |
Última versión comprobada: 2.4.16.
depmod, genksyms, insmod, insmod_ksymoops_clean, kallsyms (enlace a insmod), kernelversion, ksyms (enlace a insmod), lsmod (enlace a insmod), modinfo, modprobe (enlace a insmod) y rmmod (enlace a insmod)
genksyms lee (de la entrada estándar) la salida de gcc -E source.c y genera un fichero que contiene información sobre la versión.
insmod_ksymoops_clean borra los símbolos del núcleo (ksyms) guardados y los módulos a los que no se ha accedido en los últimos 2 días.
modinfo examina un fichero objeto asociado con un módulo del núcleo y muestra la información que pueda encontrar.
Última versión comprobada: 2.4.12.
Bash: sh
Binutils: ar, as, ld, ranlib, strip
Bison: bison
Diffutils: cmp
Fileutils: chmod, install, ln, mkdir, mv, rm
Flex: flex
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Sed: sed
Sh-utils: basename, expr, hostname, uname
Textutils: cat, tr
Estimación del tiempo de construcción: 0.03 SBU Estimación del espacio de disco requerido: 1 MB |
Instala Netkit-base ejecutando los siguientes comandos:
./configure && make && make install && cp etc.sample/{services,protocols} /etc |
Hay otros ficheros en el directorio etc.sample que podrían interesarte.
Estimación del tiempo de construcción: 0.10 Estimación del espacio de disco requerido: 2 MB |
Instala Patch ejecutando los siguientes comandos:
CPPFLAGS=-D_GNU_SOURCE \ ./configure --prefix=/usr && make && make install |
Última versión comprobada: 2.5.4.
El programa patch modifica un fichero según lo indicado en un fichero de parche. Normalmente un fichero de parche es una lista creada por el programa diff que contiene instrucciones sobre cómo necesita ser modificado un fichero original. Patch se usa mucho para parchear el código fuente pues ahorra bastante tiempo y espacio. Imagina un paquete de 1MB de tamaño. La siguiente versión de ese paquete sólo cambia en dos ficheros con respecto a la primera versión. Se puede distribuir como un nuevo paquete entero de 1MB o sólo como un parche de 1KB con el que actualizar la primera versión para hacerla idéntica a la segunda. Por tanto, si la primera versión ya fue descargada, un parche evita hacer una segunda descarga larga.
Estimación del tiempo de construcción: 0.02 SBU Estimación del espacio de disco requerido: 168 KB |
Instala Procinfo ejecutando los siguientes comandos:
make LDLIBS=-lncurses && make install |
make LDLIBS=-lncurses : Esto utiliza -lncurses en lugar de -ltermcap cuando se construye procinfo. Se hace porque libtermcap ha sido declarada obsoleta en favor de libncurses.
Última versión comprobada: 18.
lsdev recopila la información sobre los dispositivos físicos instalados en su ordenador a partir de los ficheros con las interrupciones, puertos de entrada/salida y acceso directo a memoria (DMA) del directorio /proc, facilitando una descripción rápida de qué direcciones de entrada/salida (I/O) y qué canales IRQ y DMA usa cada dispositivo.
Estimación del tiempo de construcción: 0.14 SBU Estimación del espacio de disco requerido: 2 MB |
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 Procps ejecutando los siguientes comandos:
patch -Np1 -i ../procps-2.0.7.patch && make && make XSCPT="" install && mv /usr/bin/kill /bin |
patch -Np1 -i ../procps-2.0.7.patch: Este parche corrige un problema que hace que top falle con ciertos ajustes de locale.
make XSCPT="" install: Esto asigna un valor vacío a la variable de Makefile XSCPT, lo cual deshabilita la instalación de XConsole. De otro modo "Make install" intenta copiar el fichero XConsole en /usr/X11R6/lib/X11/app-defaults. Ese directorio no existe, pues el entorno X no está instalado.
Última versión comprobada: 2.0.7.
free muestra la cantidad total de memoria física y de intercambio (swap) libre y usada en el sistema, al igual que la memoria compartida (shared) y de almacenamiento intermedio (buffers) usada por el núcleo.
tload imprime un gráfico de la carga actual del sistema en la consola (tty) especificada (o la consola del proceso tload si no se especifica ninguna).
Estimación del tiempo de construcción: 0.11 SBU Estimación del espacio de disco requerido: 2 MB |
Instala Psmisc ejecutando los siguientes comandos:
./configure --prefix=/usr --exec-prefix=/ && make && make install |
Psmisc instala la página del manual /usr/share/man/man1/pidof.1, sin embargo, el programa pidof de Psmisc no se instala por defecto. Normalmente esto no es ningún problema, ya que más tarde instalaremos el paquete Sysvinit, el cual nos facilita una versión mejor del programa pidof.
Es hora de decidir si vas a utilizar el paquete Sysvinit que contiene un programa pidof o no. Si vas a hacerlo, debes borrar la página del manual del pidof de Psmisc ejecutando:
rm /usr/share/man/man1/pidof.1 |
Si no vas a usar Sysvinit, debes completar la instalación de este paquete creando el enlace simbólico /bin/pidof ejecutando:
ln -s killall /bin/pidof |
--exec-prefix=/: Esto provocará que los programas se instalen en /bin en vez de en /usr/bin. Los programas de este paquete se usan a menudo en los guiones de inicio, así que deben estar en el directorio /bin para que puedan utilizarse cuando la partición /usr no se haya montado aún.
Última versión comprobada: 21.
fuser, killall y pstree
Nota: en LFS no instalamos el enlace pidof por omisión porque usamos en su lugar el programa pidof de sysvinit.
Última versión comprobada: 20.2
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Bison: bison
Binutils: as, ld
Diffutils: cmp
Fileutils: chmod, install, ls, mkdir, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.88 SBU Estimación del espacio de disco requerido: 7 MB |
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 |
cp limits login.access /etc: Estos ficheros no se han instalado durante la instalación del paquete, por eso los copiamos manualmente. Se usan para configurar los detalles de autenticación del sistema.
sed "s%/var/spool/mail%/var/mail%" login.defs.linux > /etc/login.defs: /var/spool/mail es la antigua localización de los buzones de los usuarios. El lugar que se usa hoy en día es /var/mail.
ln -s vipw vigr: De acuerdo a la página del manual (man) de vipw, vigr debería ser un enlace simbólico a aquél. Como el procedimiento de instalación de shadow no crea este enlace simbólico, lo hacemos manualmente.
Última versión comprobada: 4.0.3.
chage, chfn, chpasswd, chsh, dpasswd, expiry, faillog, gpasswd, groupadd, groupdel, groupmod, groups, grpck, grpconv, grpunconv, lastlog, login, logoutd, mkpasswd, newgrp, newusers, passwd, pwck, pwconv, pwunconv, sg (enlace a newgrp), useradd, userdel, usermod, vigr (enlace a vipw) y vipw
chage cambia el número de días entre cambios de la contraseña y la fecha del último cambio de contraseña.
chfn cambia el nombre completo de un usuario y otra información (extensión y número de teléfono de su oficina y número de teléfono de su casa).
chpasswd lee un fichero con pares de usuarios y contraseñas en la entrada estándar y usa esta información para actualizar un grupo de usuarios existentes.
faillog formatea el contenido del registro de fallos /var/log/faillog, y mantiene el contador y los límites de fallos.
El comando groupadd crea un nuevo grupo usando los valores especificados en la línea de comandos y los valores por defecto del sistema.
El comando groupdel modifica los ficheros con las cuentas del sistema, borrando todas las entradas referidas a un determinado grupo.
El comando groupmod modifica los ficheros de las cuentas del sistema para reflejar los cambios especificados en la línea de comandos.
grpunconv convierte a ficheros de grupos ocultos (shadow group files) los ficheros de grupos normales.
lastlog formatea y muestra el contenido del registro de último acceso /var/log/lastlog. Muestra el nombre con el que se ha accedido, puerto y hora del último acceso.
mkpasswd lee un fichero en el formato facilitado por las opciones y lo convierte al formato de fichero de base de datos correspondiente.
newusers lee un fichero con pares de nombres de usuario y contraseñas en texto plano y usa esa información para actualizar un grupo de usuarios existentes o para crear nuevos usuarios.
sg asigna el grupo del usuario al especificado, o ejecuta un comando como miembro del grupo indicado.
userdel modifica los ficheros con las cuentas del sistema, borrando todas las entradas referidas al nombre de acceso especificado.
Última versión comprobada: 20001016.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, nm, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gettext: msgfmt, xgettext
Gcc: cc1, collect2, cpp0, gcc
Glibc: ldconfig
Grep: egrep, grep
M4: m4
Make: make
Gawk: gawk
Net-tools: hostname
Sed: sed
Sh-utils: basename, echo, expr, sleep, uname
Texinfo: makeinfo
Textutils: cat, sort, tr, uniq
Estimación del tiempo de construcción: 0.03 SBU Estimación del espacio de disco requerido: 472 KB |
Última versión comprobada: 1.4.1.
syslogd proporciona una forma de registrar sucesos que muchos programas modernos utilizan. Cada mensaje registrado contiene como mínimo un campo con el nombre de la máquina y la fecha, y normalmente un campo con el nombre del programa también, pero eso depende de lo fiable que sea el programa a registrar.
Estimación del tiempo de construcción: 0.06 SBU Estimación del espacio de disco requerido: 1 MB |
Cuando se cambia de nivel de ejecución (por ejemplo cuando apagamos el sistema) el programa init envía las señales TERM y KILL a todos los procesos que él mismo inició, mostrando por pantalla el mensaje "Sending processes the TERM signal" (Enviando la señal TERM a los procesos). Esto parece indicar que init envía esta señal a todos los procesos en ejecución. Para evitar esta confusión, puede modificarse el fichero init.c de manera que el mensaje diga "Sending processes started by init the TERM signal" (Enviando la señal TERM a los procesos iniciados por init), ejecutando los siguientes comandos. Si no quieres cambiarlo, sáltate este paso.
cp src/init.c{,.backup} && sed 's/Sending processes/Sending processes started by init/g' \ src/init.c.backup > src/init.c |
Instala Sysvinit ejecutando los siguientes comandos:
make -C src && make -C src install |
Última versión comprobada: 2.84.
halt, init, killall5, last, lastb (enlace a last), mesg, pidof (enlace a killall5), poweroff (enlace a halt), reboot (enlace a halt), runlevel, shutdown, sulogin, telinit (enlace a init), utmpdump y wall
halt anota en el fichero /var/log/wtmp que el sistema se va a venir abajo, y entonces le indica al núcleo que cierre, reinicie o apague el sistema. Si halt o reboot son llamados cuando el sistema no está en los niveles de ejecución 0 o 6, shutdown es invocado en su lugar (con las opciones -h o -r).
init es el padre de todos los procesos. Su función principal es crear procesos a partir de un guión almacenado en el fichero /etc/inittab. Este fichero normalmente tiene unas entradas que hacen que init active la creación de los terminales en cada línea en la que los usuarios pueden conectarse. También controla los procesos autónomos requeridos por un sistema particular.
killall5 es el comando killall de SystemV. Envía una señal a todos los procesos excepto a los procesos de su propia sesión, por tanto no puede matar el intérprete de comandos en el que se esté ejecutando el guión desde el que fue llamado.
last busca hacia atrás en el fichero /var/log/wtmp (o el fichero indicado con la opción -f) y muestra una lista con todos los usuarios conectados (y desconectados) desde que el fichero fue creado.
lastb es lo mismo que last, excepto que por defecto muestra los registros del fichero /var/log/btmp, que contiene todos los intentos fallidos de conexión.
mesg controla el acceso al terminal de un usuario por otros. Se usa para permitir o denegar a otros usuarios escribir en su terminal.
poweroff es equivalente a "shutdown -h -p now". Para el ordenador y lo apaga (cuando se usa una BIOS compatible APM y APM está activado en el núcleo).
runlevel lee el fichero utmp del sistema (típicamente /var/run/utmp) para localizar el registro del nivel de ejecución, y entonces muestra el anterior y el nivel de ejecución actual del sistema en la salida estándar, separados por un espacio.
shutdown provoca la caída del sistema de una forma segura. Todos los usuarios conectados son notificados de que el sistema se va a venir abajo, y se bloquean los intentos de conexión al sistema.
sulogin es invocado por init cuando el sistema entra en el modo monousuario (esto se hace mediante una entrada en /etc/inittab). Init también intenta ejecutar sulogin cuando se le pasa la opción -b desde el gestor de arranque (p.e., LILO).
Estimación del tiempo de construcción: 0.26 SBU Estimación del espacio de disco requerido: 6 MB |
Si quieres usar directamente ficheros bzip2 con tar, utiliza el parche que se encuentra en el servidor FTP de LFS. Este parche añadirá a tar la opción -j, que funciona de la misma forma que la opción -z (usada para los ficheros gzip).
Aplica el parche ejecutando los siguientes comandos:
patch -Np1 -i ../tar-1.13.patch |
Instala Tar ejecutando los siguientes comandos:
./configure --prefix=/usr \ --libexecdir=/usr/bin --bindir=/bin && make && make install |
Última versión comprobada: 1.13.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Net-tools: hostname
Patch: patch
Sed: sed
Sh-utils: basename, echo, expr, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
Estimación del tiempo de construcción: 0.38 SBU Estimación del espacio de disco requerido: 10 MB |
El estándar FHS recomienda que usemos /var/lib/hwclock para la ubicación del archivo adjtime, en lugar del habitual /etc. Para hacer que hwclock, el cual es parte del paquete util-linux, sea conforme a FHS, ejecuta lo siguiente.
cp hwclock/hwclock.c{,.backup} && sed 's%etc/adjtime%var/lib/hwclock/adjtime%' \ hwclock/hwclock.c.backup > hwclock/hwclock.c && mkdir -p /var/lib/hwclock |
Instala Util-linux ejecutando los siguientes comandos:
./configure && make HAVE_SLN=yes && make HAVE_SLN=yes install |
HAVE_SLN=yes: No construimos este programa porque ya fue instalado por Glibc.
Última versión comprobada: 2.11t.
agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (enlace a rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (enlace a rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (enlace a swapon), swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (enlace a rdev), whereis y write
agetty abre un puerto de terminal, espera la introducción de un nombre de usuario e invoca al comando /bin/login.
blockdev permite llamar a los controles de entrada/salida (ioctls) de los dispositivos de bloque desde la línea de comandos.
ctrlaltdel establece la función de la combinación de teclas CTRL+ALT+DEL (reinicio duro o blando).
dmesg se usa para examinar o controlar el anillo de almacenamiento intermedio del núcleo (los mensajes de arranque del núcleo).
fsck.minix realiza una comprobación de consistencia en sistemas de ficheros MINIX de Linux.
hexdump muestra un fichero, o la entrada estándar, en un formato especificado por el usuario (ASCII, decimal, hexadecimal, octal).
line copia una línea (hasta el carácter de nueva línea) de la entrada estándar y la escribe en la salida estándar.
mkfs construye un sistema de ficheros Linux en un dispositivo, normalmente una partición del disco duro.
mkfs.bfs crea un sistema de ficheros bfs de SCO en un dispositivo, normalmente una partición del disco duro.
mkfs.minix crea un sistema de ficheros MINIX en un dispositivo, normalmente una partición del disco duro
Estos son guiones de ejemplo de uso del programa getopt con BASH o TCSH.
rdev muestra y establece el dispositivo raíz de la imagen, el dispositivo de intercambio, el tamaño del disco RAM, o el modo de vídeo.
rootflags muestra y establece la información extra usada cuando se monta el sistema de ficheros raíz.
Última versión comprobada: 2.11n.
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chgrp, chmod, cp, install, ln, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp, cpp0
Glibc: rpcgen
Grep: grep
Make: make
Sed: sed
Sh-utils: uname, whoami
Textutils: cat
Estimación del tiempo de construcción: 0.01 SBU Estimación del espacio de disco requerido: 420 KB |
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 |
Última versión comprobada: 1.10.
checkfs, cleanfs, functions, halt, ifdown, ifup, loadkeys, localnet, mountfs, mountproc, network, rc, reboot, sendsignals, setclock, swap, sysklogd y template
El guión checkfs comprueba los sistemas de ficheros justo antes de ser montados (con la excepción de los que usan registros de transacciones [journal] o los que se montan desde la red).
El guión cleanfs elimina los ficheros que no deben guardarse cuando se arranca de nuevo el sistema, como /var/run/* y /var/lock/*, regenera /var/run/utmp y elimina los ficheros /etc/nologin, /fastboot y /forcefsck que pueda haber.
El guión functions contiene funciones usadas por diferentes guiones: chequeo de errores, chequeo de estado, etc.
El guión localnet establece el nombre de máquina usado por el sistema (hostname) y activa el dispositivo de red "loopback".
El guión mountfs monta todos los sistemas de ficheros que no estén marcados como "noauto" o que no se monten a través de la red.
El guión network activa las interfaces de red (como las tarjetas de red) y establece la puerta de enlace por defecto (gateway) cuando es necesario.
El guión rc es el controlador maestro de los niveles de arranque y es responsable de lanzar todos los demás guiones, uno a uno, en una secuencia específica.
El guión sendsignals se asegura de que todos los procesos terminen antes de parar o reiniciar el sistema.
El guión setclock fija el reloj del núcleo a la hora local en caso de que el reloj del ordenador no esté fijado a la hora GMT.
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.
Por defecto, vim se ejecuta en modo compatible con vi. Hay gente a la que le puede gustar esto, pero nosotros preferimos ejecutar vim en modo vim (de otra forma, no habríamos incluido vim en este libro, sino el vi original). Crea el fichero /root/.vimrc ejecutando lo siguiente:
cat > /root/.vimrc << "EOF" # Inicio de /root/.vimrc set nocompatible set bs=2 # Fin de /root/.vimrc EOF |
Necesitamos crear el fichero /etc/nsswitch.conf. Aunque glibc debería darnos valores por defecto cuando este fichero no se encuentra o está corrupto, estos valores por defecto no funcionan bien con la conexión de red, lo cual se tratará en un capítulo posterior. También tendremos que configurar nuestra zona horaria.
Crea un fichero nuevo /etc/nsswitch.conf ejecutando lo siguiente:
cat > /etc/nsswitch.conf << "EOF" # Inicio de /etc/nsswitch.conf passwd: files group: files shadow: files publickey: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: db files # Fin de /etc/nsswitch.conf EOF |
Tienes que ejecutar el guión tzselect y contestar a las preguntas referentes a tu zona horaria. Cuando lo hayas hecho, el guión te dará la localización del fichero con la zona horaria requerida.
Crea el enlace simbólico /etc/localtime ejecutando:
ln -sf ../usr/share/zoneinfo/<salida de tzselect> /etc/localtime |
La salida de tzselect puede ser algo como EST5EDT o Canada/Eastern.
El enlace simbólico que tienes que crear con esa información será:
ln -sf ../usr/share/zoneinfo/EST5EDT /etc/localtime |
O:
ln -sf ../usr/share/zoneinfo/Canada/Eastern /etc/localtime |
Por defecto, el cargador dinámico (/lib/ld-linux.so.2) busca en /lib y /usr/lib las librerías dinámicas que necesitan los programas cuando los ejecutas. No obstante, si hay librerías en otros directorios que no sean /lib y /usr/lib, necesitas añadirlos en el fichero de configuración /etc/ld.so.conf para que el cargador dinámico pueda encontrarlas. Dos directorios típicos que contienen librerías adicionales son /usr/local/lib y /opt/lib, así que añadimos estos directorios a la ruta de búsqueda del cargador dinámico.
Crea un nuevo fichero /etc/ld.so.conf ejecutando lo siguiente:
cat > /etc/ld.so.conf << "EOF" # Inicio de /etc/ld.so.conf /usr/local/lib /opt/lib # Fin de /etc/ld.so.conf EOF |
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 |
Este paquete contiene las utilidades para modificar las contraseñas de los usuarios, añadir o borrar nuevos usuarios y grupos, y similar. No vamos a explicar lo que significa 'password shadowing'. Puedes econtrar una completa explicación en el fichero doc/HOWTO que está en el árbol de fuentes de la Shadow Password Suite al desempaquetarla. Hay una cosa que debes recordar si decides usar soporte para contraseñas ocultas: aquellos programas que necesiten verificar contraseñas (por ejemplo xdm, demonios de ftp, demonios de pop3, etc) necesitarán ser 'compatibles con shadow', es decir, necesitan ser capaces de trabajar con 'shadow passwords'.
Para habilitar las contraseñas ocultas, ejecuta el siguiente comando:
/usr/sbin/pwconv |
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 |
Nada es más molesto que usar Linux teniendo cargado un mapa de teclado incorrecto. Si tienes un teclado estándar de US (EEUU), te puedes saltar esta sección. El mapa de teclado US es el mapa por defecto si no lo cambias.
Para asignar un mapa de teclado por defecto, crea el enlace simbólico /usr/share/kbd/keymaps/defkeymap.map.gz ejecutando los siguientes comandos:
ln -s <ruta/al/mapa/del/teclado> /usr/share/kbd/keymaps/defkeymap.map.gz |
Reemplaza <ruta/al/mapa/del/teclado> por tu fichero de mapa de teclado. Por ejemplo, si tienes un teclado español, deberías ejecutar:
ln -s i386/qwerty/es.map.gz defkeymap.map.gz |
La segunda opción para configurar la disposición de tu teclado es compilar el mapa de teclado directamente en el núcleo. Esto asegurará que tu teclado siempre funcione como se espera, incluso cuando has arrancado en modo de rescate (pasando `init=/bin/sh' al núcleo) y los guiones de arranque que normalmente se encargan de cargar el mapa de teclado adecuado no se hayan ejecutado.
Ejecuta el siguiente comando para parchear el mapa de teclado correcto dentro de las fuentes del núcleo. Debes repetir este comando siempre que desenpaquetes un nuevo núcleo:
loadkeys -m /usr/share/kbd/keymaps/defkeymap.map.gz > \ /usr/src/linux/drivers/char/defkeymap.c |
Programas como login, shutdown, uptime y otros necesitan leer y escribir en /var/run/utmp, /var/log/btmp y /var/log/wtmp. Estos ficheros contienen información acerca de quién está conectado en ese momento. También contienen información acerca de cuándo fue arrancado y parado por última vez el ordenador y un registro de los intentos de conexión fallidos.
Crea estos ficheros con los permisos apropiados ejecutando los siguientes comandos:
touch /var/run/utmp /var/log/{btmp,lastlog,wtmp} && chmod 644 /var/run/utmp /var/log/{btmp,lastlog,wtmp} |
En este capítulo se configurarán los guiones de arranque que has instalado en el capítulo 6. Muchos de estos guiones funcionarán sin necesidad de modificaciones, pero algunos requieren ficheros de configuración adicionales para que puedan manejar la información dependiente del hardware específico de nuestro sistema.
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:
start: Inicia el servicio.
stop: Para el servicio.
restart: El servicio se para y se vuelve a iniciar.
reload: Se actualiza la configuración del servicio. Este parámetro se utiliza tras la modificación del fichero de configuración, cuando no se necesita reiniciar el servicio para que actualice su configuración.
status: Dice si el servicio se está ejecutando y con qué identificador de proceso (PID).
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).
El guión setclock lee la hora del reloj interno del ordenador (también conocido como el reloj CMOS o BIOS) y la convierte a la hora local mediante el fichero /etc/localtime (si el reloj interno del ordenador utiliza GMT) o no (si el reloj interno de la computadora ya está puesto a la hora local). No hay manera de detectar automáticamente si el reloj utiliza GMT o no, así que necesitamos configurarlo nosotros mismos.
Si el reloj interno del ordenador no utiliza GMT hay que cambiar el valor de la variable UTC a 0 (cero).
Para ello vamos a crear el fichero /etc/sysconfig/clock mediante la ejecución del siguiente comando:
cat > /etc/sysconfig/clock << "EOF" # Inicio de /etc/sysconfig/clock UTC=1 # Fin de /etc/sysconfig/clock EOF |
Para más información sobre la hora en LFS tienes una buena explicación en http://www.escomposlinux.org/lfs-es/recetas/time.html (la versión original se encuentra en http://hints.linuxfromscratch.org/hints/time.txt). En él se explican conceptos como las zonas horarias, UTC, y la variable de entorno TZ.
Si decidiste compilar tu fichero de mapa de caracteres dentro del núcleo al final del Capítulo 6, no es estrictamente necesario ejecutar el guión loadkeys, ya que será el núcleo el que activará dicho mapa. Aunque puedes ejecutarlo de todas maneras sin que te cause ningún problema. De todas formas, es beneficioso que mantengas el guión en el caso de tener varios núcleos y no te acuerdes o no quieras introducir el fichero de mapa de caracteres en todos ellos.
Si has decidido que no necesitas o que no quieres el guión loadkeys, elimina el enlace simbólico /etc/rc.d/rcsysinit.d/S70loadkeys
El guión sysklogd invoca al programa syslogd con la opción -m 0. Esta opción deshabilita la marca de tiempo periódica que se escribe por defecto en el fichero de registro cada 20 minutos. Si quieres habilitar esta marca de tiempo periódica debes editar el guión sysklogd y realizar los cambios necesarios. Para más información utiliza el comando man syslogd.
Una de las cosas que hace el guión localnet es establecer el nombre de la máquina. Es necesario configurar dicho nombre en /etc/sysconfig/network.
Puedes crear el fichero /etc/sysconfig/network y configurar el nombre de tu máquina ejecutando:
echo "HOSTNAME=lfs" > /etc/sysconfig/network |
Debes substituir "lfs" por el nombre de tu máquina. No debes escribir el FQDN (nombre completo de la máquina, incluido su dominio). Esta información la escribiremos más tarde en el fichero /etc/hosts
Si se va a configurar una tarjeta de red, debes decidir la dirección IP, el FQDN y los posibles alias para escribirlos en el fichero /etc/hosts. La sintaxis es:
<dirección IP> minombre.midominio.org alias |
Debes asegurarte de utilizar una dirección IP que pertenezca al rango de direcciones IP privadas. Los rangos válidos son:
Clases de redes A 10.0.0.0 B Entre 172.16.0.0 y 172.31.0.0 C Entre 192.168.0.0 y 192.168.255.0 |
Una dirección IP válida puede ser 192.168.1.1. Un FQDN válido para esa dirección IP puede ser www.linuxfromscratch.org.
Aunque no vayas a configurar la tarjeta de red necesitas un FQDN, ya que algunos programas lo necesitan para funcionar correctamente.
Si no vas a configurar la tarjeta de red crea el fichero /etc/hosts ejecutando:
cat > /etc/hosts << "EOF" # Inicio de /etc/hosts (versión sin tarjeta de red) 127.0.0.1 www.midominio.com <valor de HOSTNAME> localhost # Fin de /etc/hosts (versión sin tarjeta de red) EOF |
Si vas a configurar la tarjeta de red crea el fichero /etc/hosts ejecutando:
cat > /etc/hosts << "EOF" # Inicio de /etc/hosts (versión con tarjeta de red) 127.0.0.1 localhost.localdomain localhost 192.168.1.1 www.midominio.org <valor de HOSTNAME> # Fin de /etc/hosts (versión con tarjeta de red) EOF |
Por supuesto, puedes cambiar 192.168.1.1 y www.midominio.org a tu gusto (o a lo que te indique el administrador de la red/sistema si está planeado que se conecte esta máquina a una red que ya existe).
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)
Si estás conectado a una red puede que necesites establecer cual es la puerta de enlace por defecto para esa máquina. Para ello, se deben añadir los valores apropiados al fichero /etc/sysconfig/network ejecutando lo siguiente:
cat >> /etc/sysconfig/network << "EOF" GATEWAY=192.168.1.2 GATEWAY_IF=eth0 EOF |
Debes cambiar los valores de GATEWAY y GATEWAY_IF por los que correspondan en tu red. GATEWAY contiene la dirección IP de la puerta de enlace por omisión, y GATEWAY_IF la interfaz de red por la que es accesible dicha dirección IP.
Qué interfaces de red activa o desactiva el guión network depende de los ficheros situados en el directorio /etc/sysconfig/network-devices. Este directorio debe contener ficheros con el nombre ifconfig.xyz, donde xyz corresponde con el nombre de la interfaz de red (como eth0 o eth0:1).
Si decides renombrar o mover el directorio /etc/sysconfig/network-devices, asegúrate de que actualizas el fichero /etc/sysconfig/rc, asignando a la variable network_devices la nueva localización.
Ahora, los nuevos ficheros que creemos en este directorio contienen lo siguiente. Como ejemplo vamos a crear el fichero ifconfig.eth0 ejecutando:
cat > /etc/sysconfig/network-devices/ifconfig.eth0 << "EOF" ONBOOT=yes IP=192.168.1.1 NETMASK=255.255.255.0 BROADCAST=192.168.1.255 EOF |
Por supuesto, los valores de estas variables se deben cambiar en todos los ficheros que creemos por los valores apropiados para nuestra máquina. Si la variable ONBOOT tiene el valor yes, el guión network activará la interfaz durante el arranque del sistema. Si contiene cualquier otro valor, el guión network ignorará el contenido del archivo y, por lo tanto, no la activará.
Este capítulo hará arrancable el sistema LFS. Trataremos la creación de un nuevo fichero fstab, la construcción de un nuevo núcleo para el nuevo sistema LFS y la adición de las entradas apropiadas a LILO para que el sistema LFS se pueda seleccionar en la línea de comandos de LILO.
Para que ciertos programas sean capaces de determinar dónde se supone que están montadas por defecto las particiones, se usa el fichero /etc/fstab. Crea un nuevo fichero /etc/fstab conteniendo lo siguiente:
cat > /etc/fstab << "EOF" # Inicio de /etc/fstab # sistema de punto de tipo del opciones volcado orden de # archivos montaje sistema de chequeo # archivos /dev/*LFS* / *tipo* defaults 1 1 /dev/*swap* swap swap pri=1 0 0 proc /proc proc defaults 0 0 # Fin de /etc/fstab EOF |
*LFS*, *swap* y *tipo* deben ser reemplazados por los valores apropiados (/dev/hda2, /dev/hda5 y reiserfs, por ejemplo).
Cuando se añada una partición reiserfs, los valores 1 1 que aparecen al final de la línea deberían cambiarse a 0 0.
Para más información sobre los campos que aparecen en el fichero fstab, ver man 5 fstab.
Existen otras líneas que puedes considerar añadir al fichero fstab. Un ejemplo es la línea que debería contener si estás utilizando devpts:
devpts /dev/pts devpts gid=4,mode=620 0 0 |
Otro ejemplo es la línea a usar si pretendes utilizar dispositivos USB:
usbdevfs /proc/bus/usb usbdevfs defaults 0 0 |
Tanto una como otra opción sólo funcionarán si se tiene el soporte pertinente compilado dentro del núcleo.
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.
Última versión comprobada: 2.4.17.
Bash: sh
Binutils: ar, as, ld, nm, objcopy
Fileutils: cp, ln, mkdir, mv, rm, touch
Findutils: find, xargs
Gcc: cc1, collect2, cpp0, gcc
Grep: grep
Gzip: gzip
Make: make
Gawk: awk
Modutils: depmod, genksyms
Net-tools: dnsdomainname, hostname
Sed: sed
Sh-utils: basename, date, expr, pwd, stty, uname, whoami, yes
Textutils: cat, md5sum, sort, tail
Para poder arrancar el sistema LFS, necesitamos actualizar nuestro gestor de arranque. Asumiremos que tu sistema original usa Lilo (ya que es el gestor de arranque más comúnmente usado en este momento).
No ejecutaremos el programa lilo dentro del entorno chroot. Ejecutar lilo dentro de un entorno chroot puede acarrear fatales efectos secundarios que lleguen a inutilizar tu Registro Maestro de Arranque (MBR - Master Boot Record), y necesitarías un disco de arranque para poder arrancar cualquier sistema Linux (tanto el original como el sistema LFS).
Primero, saldremos del entorno chroot y copiaremos el fichero lfskernel al sistema original:
logout cp $LFS/boot/lfskernel /boot |
El siguiente paso es añadir una entrada en /etc/lilo.conf, para que podamos escoger a LFS cuando reiniciemos el ordenador:
cat >> /etc/lilo.conf << "EOF" image=/boot/lfskernel label=lfs root=<partición> read-only EOF |
<partición> debe ser reemplazada con el nombre de la partición LFS.
Ten en cuenta que si estás utilizando el sistema de ficheros reiserfs para tu partición raíz, se debe cambiar la línea read-only por read-write.
Ahora, actualiza el gestor de arranque ejecutando:
/sbin/lilo -v |
El último paso es sincronizar los ficheros de configuración de lilo del sistema original con los del sistema LFS:
cp /etc/lilo.conf $LFS/etc && cp $(grep "image.*=" /etc/lilo.conf | cut -f 2 -d "=") $LFS/boot |
¡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 |
¿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...
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.
En este apéndice se describen los siguiente aspectos de cada paquete instalado en este libro.
la localización oficial para la descarga del paquete.
el contenido de cada paquete.
lo que cada programa de dicho paquete hace.
lo que cada paquete necesita para poder compilarlo.
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.
Última versión comprobada: 2.53.
autoconf es una herramienta para generar guiones del intérprete de comandos que automáticamente configuran paquetes de código fuente, adaptándolos a muchas clases de sistemas tipo UNIX. Los guiones de configuración creados por autoconf son independientes de autoconf cuando se ejecutan, por tanto sus usuarios no necesitan tenerlo instalado.
El programa autoheader puede crear un plantilla de declaraciones #define de C, usada posteriormente por el guión configure.
Si hay que generar varios guiones de configuración con autoconf, el programa autoreconf puede ahorrar algo de trabajo. Ejecuta autoconf y autoheader (cuando es necesario) repetidamente para recrear los guiones de configuración de autoconf y las plantillas de configuración de las cabeceras en el árbol de directorios actual.
El programa autoscan ayuda en la creación de ficheros configure.in para los paquetes. Este programa analiza los ficheros fuente en el árbol de directorios. Si no se le especifica un directorio en la línea de comandos, utiliza el directorio de trabajo actual. Busca en los ficheros fuente problemas comunes de portabilidad y crea un fichero configure.scan que sirve como versión preliminar del fichero configure.in para ese paquete.
El programa autoupdate actualiza las llamadas a los macros de autoconf en los ficheros configure.in cambiando los nombres antiguos por los actuales.
ifnames ayuda en la creación de los ficheros configure.in. Escribe los identificadores que el paquete usa en las construcciones condicionales del preprocesador de C. Si un paquete está preparado para tener cierta portabilidad, este programa le ayuda a averiguar lo que configure necesita comprobar. Puede ayudar a fijar ciertas carencias en los configure.in generados por autoscan.
Última versión comprobada: 1.6.2.
acinstall, aclocal, aclocal-1.6, automake, automake-1.6, compile, config.guess, config.sub, depcomp, elisp-comp, install-sh, mdate-sh, missing, mkinstalldirs, py-compile y ylwrap
automake incluye una serie de macros de autoconf que pueden ser usadas en los paquetes; algunas de ellas son requeridas por automake en ciertas situaciones. Estas macros deben estar definidas en el fichero aclocal.m4 o no serán vistas por autoconf.
El programa aclocal genera automáticamente los ficheros aclocal.m4 basados en el contenido de configure.in. Esto proporciona una forma conveniente de obtener las macros facilitadas por automake sin tener que buscarlas. Por otra parte, el mecanismo de aclocal es extensible para poder ser usado por otros paquetes
Para crear todos los Makefile.in de un paquete, ejecuta el programa automake en el directorio base, sin argumentos. automake automáticamente encontrará cada fichero Makefile.am apropiado (tras explorar configure.in) y generará el correspondiente Makefile.in.
depcomp es un guión que compila un programa mientras genera dependencias como efecto lateral.
Última versión conprobada: 2.05a.
bash es la "Bourne-Again SHell", que es un completo intérprete de comandos usado ampliamente en sistemas Unix. El programa bash lee de la entrada estándar, el teclado. Un usuario escribe algo y el programa evalúa lo que ha escrito y hace algo con ello, como lanzar un programa.
Última versión comprobada: 2.05a.
Bash: bash, sh
Binutils: ar, as, ld, ranlib, size
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, tr, uniq
Última versión comprobada: 0.16.3
as86_encap es un guión del intérprete de comandos que llama a as86 y que convierte el binario creado en un fichero prog.v de C para ser incluido o enlazado con programas como instaladores de bloques de arranque.
Última versión comprobada: 2.12.1.
addr2line, ar, as, gasp, gprof, ld, nm, objcopy, objdump, ranlib, readelf, size, strings y strip
addr2line traslada direcciones de programas a nombres de ficheros y números de líneas. Dándole una dirección y un ejecutable, usa la información de depuración del ejecutable para averiguar qué fichero y número de línea está asociado con dicha dirección.
El programa ar crea, modifica y extrae desde archivos. Un archivo es un fichero que almacena una colección de otros ficheros en una estructura que hace posible obtener el original de cada fichero individual (llamados miembros del archivo).
as está pensado, principalmente, para ensamblar la salida del compilador GNU, gcc, para ser usada por el enlazador ld.
ld combina un número de objetos y ficheros de archivo, reubica sus datos y establece las referencias a los símbolos. Frecuentemente, el último paso de la compilación de un nuevo programa es hacer una llamada a ld.
La utilidad objcopy copia el contenido de un fichero objeto en otro. objcopy usa la librería BFD de GNU para leer y escribir los ficheros objeto. Puede escribir el fichero objeto destino en un formato diferente al del fichero objeto fuente.
objdump muestra información sobre uno o más ficheros objeto. Mediante opciones se puede indicar la información a mostrar. Esta información es útil fundamentalmente para los programadores que trabajan en herramientas de compilación (al contrario de los programadores que sólo quieren que sus programas compilen y funcionen).
ranlib genera un índice de los contenidos de un archivo, y lo coloca en el archivo. El índice lista cada símbolo definido por un miembro de un archivo que es un fichero objeto reubicable.
size lista los tamaños de las secciones --y el tamaño total-- para cada uno de los ficheros objeto en su lista de argumentos. Por defecto, se genera una línea de salida por cada fichero objeto o cada módulo de un archivo.
Para cada fichero dado, strings muestra las cadenas de caracteres imprimibles de al menos 4 caracteres (o el número especificado en las opciones del programa) seguidas por un carácter no imprimible. Por defecto, sólo muestra las cadenas procedentes de las secciones de inicialización y carga de los ficheros objeto; para otros tipos de ficheros muestra todas las cadenas de los mismos.
strings es útil, principalmente, para determinar el contenido de ficheros que no son de texto.
strip elimina todos los símbolos o sólo los especificados de los ficheros objeto. La lista de ficheros objeto puede incluir archivos. Se debe indicar, por lo menos, un fichero objeto. strip modifica los ficheros mencionados en sus argumentos, en vez de escribir copias modificadas con otro nombre.
Última versión comprobada: 2.11.2.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, nm, ranlib, strip
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, rmdir, touch
Flex: flex
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: ldconfig
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, true, uname
Texinfo: install-info, makeinfo
Textutils: cat, sort, tr, uniq
Última versión comprobada: 1.35.
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.
Última versión comprobada: 1.31.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
Make: make
Sed: sed
Sh-utils: basename, dirname, echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, head, tr, uniq
Última versión comprobada: 1.0.2
bunzip2 (enlace a bzip2), bzcat (enlace a bzip2), bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2, bzip2recover, bzless y bzmore
bzcmp y bzdiff se usan para invocar el programa cmp o diff en ficheros comprimidos con bzip2.
bzegrep, bzfgrep, y bzgrep invocan, respectivamente, a egrep, fgrep, o grep en ficheros comprimidos con bzip2.
bzip2 comprime ficheros usando el algoritmo de compresión de texto por ordenación de bloques Burrows-Wheeler y la codificación Huffman. La compresión es, en general, considerablemente superior a la obtenida por otros compresores más convencionales basados en el LZ77/LZ78 y se acerca al rendimiento de la familia de compresores estadísticos PPM.
E2fsprogs (1.27):
ftp://download.sourceforge.net/pub/sourceforge/e2fsprogs/
http://download.sourceforge.net/e2fsprogs/
Última versión comprobada: 1.27.
badblocks, chattr, compile_et, debugfs, dumpe2fs, e2fsck, e2image, e2label, fsck, fsck.ext2, fsck.ext3, lsattr, mk_cmds, mke2fs, mkfs.ext2, mkfs.ext3, mklost+found, resize2fs, tune2fs y uuidgen
badblocks se usa para buscar bloques dañados en un dispositivo (normalmente una partición de disco).
compile_et es usado para convertir una tabla con códigos de error y sus mensajes asociados en un fichero fuente C apropiado para usar con la librería com_err.
El programa debugfs es un depurador de sistemas de ficheros. Puede usarse para examinar y cambiar el estado de un sistema de ficheros ext2.
dumpe2fs muestra la información del superbloque y de los grupos de bloques del sistema de ficheros presente en un determinado dispositivo.
e2fsck y fsck.ext2 se usan para chequear, y opcionalmente reparar, sistemas de ficheros ext2.
e2label muestra o cambia la etiqueta de un sistema de ficheros ext2 situado en el dispositivo especificado.
La utilidad mk_cmds toma como entrada un fichero de tabla de comandos y genera como salida un fichero fuente C preparado para usarlo con la librería del subsistema, libss.
mke2fs se usa para crear sistemas de ficheros ext2 en un dispositivo (normalmente una partición de disco). mkfs.ext2 hace lo mismo que mke2fs.
Última versión comprobada: 1.25.
Bash: sh
Binutils: ar, as, ld, ranlib, strip
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mkdir, mv, rm, sync
Gcc: cc, cc1, collect2, cpp0
Glibc: ldconfig
Grep: egrep, grep
Gzip: gzip
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, echo, expr, hostname, uname
Texinfo: makeinfo
Textutils: cat, tr
Ed (0.2):
ftp://ftp.gnu.org/gnu/ed/
Parche para Ed (0.2):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 3.37.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chmod, install, ln, ls, mv, rm, touch
Gcc: cc1, collect2, cpp0, gcc
Grep: egrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: echo, expr, hostname, sleep
Texinfo: makeinfo
Textutils: cat, tr
Fileutils (4.1):
ftp://ftp.gnu.org/gnu/fileutils/
Parche para Fileutils (4.1):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 4.1.
chgrp, chmod, chown, cp, dd, df, dir, dircolors, du, install, ln, ls, mkdir, mkfifo, mknod, mv, rm, rmdir, shred, sync, touch y vdir
chgrp cambia el grupo de cada fichero al grupo especificado, que puede ser tanto el nombre de un grupo como su identificador numérico.
chmod cambia los permisos de un fichero de acuerdo con el modo, que puede ser tanto una representación simbólica de los cambios a hacer o un número octal que representa el patrón de bits de los nuevos permisos.
dd copia un fichero (por defecto, de la entrada estándar a la salida estándar) con un tamaño de bloque definido por el usuario, mientras, opcionalmente, realiza conversiones en él.
df muestra la cantidad de espacio disponible en los sistemas de ficheros a los que pertenece cada fichero que se le pasa como argumento. Si no se indica ningún fichero, se muestra el espacio disponible en todos los sistemas de ficheros montados actualmente
dir y vdir son versiones de ls con formatos de salida diferentes. Estos programas listan cada fichero o directorio especificado. El contenido de los directorios se lista alfabéticamente. Para ls, los ficheros se listan, por defecto, en columnas ordenados verticalmente si la salida estándar es un terminal; en otro caso se listan uno por línea. Para dir, los ficheros se listan, por defecto, en columnas ordenados verticalmente. Para vdir, los ficheros se listan, por defecto, en formato largo.
dircolors imprime comandos para modificar la variable de entorno LS_COLOR, que se usa para cambiar el esquema de color por defecto de ls y de herramientas relacionadas.
du muestra la cantidad de espacio en disco usado por cada fichero o directorio listado en la línea de comandos, y por cada uno de sus subdirectorios.
mknod crea una tubería (FIFO), un fichero especial de caracteres o un fichero especial de bloques con el nombre indicado.
mv mueve ficheros de un directorio a otro o renombra ficheros, dependiendo de los argumentos que se le pasen.
Última versión comprobada: 4.1.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
Make: make
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, tr
Findutils (4.1):
ftp://ftp.gnu.org/gnu/findutils/
Parche para Findutils (4.1):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 4.1.
bigram se usa junto con code para generar las bases de datos de locate en el formato antiguo. Para saber más de estos tres programas, lee la página de manual locatedb.5.
El programa find busca los ficheros de una jerarquía de directorios que cumplan un cierto criterio. Si no se especifica un criterio de búsqueda, lista todos los ficheros del directorio actual y de los subdirectorios.
frcode es llamado por updatedb para comprimir la lista de ficheros usando "front-compression", que reduce el tamaño de la base de datos en un factor de 4 o 5.
locate busca en una base de datos que contiene todos los ficheros y directorios de un sistema de ficheros. Este programa lista los ficheros y directorios de la base de datos que cumplan cierto criterio. Si un usuario busca un fichero, este programa buscará en la base de datos y le dirá dónde están ubicados exactamente esos ficheros. Esto sólo es válido si la base de datos de locate se encuentra actualizada. En otro caso mostrará información anticuada.
El programa updatedb actualiza la base de datos de locate. Explora por completo el sistema de ficheros (incluidos otros sistemas de ficheros que se encuentren montados a no ser que se le indique lo contrario) e inserta todos los directorios y ficheros que encuentre en la base de datos que usa locate para recuperar dicha información. Es una buena costumbre actualizar la base de datos una vez al día para obtener información correcta cuando se necesite.
Última versión comprobada: 4.1.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, mv, rm
Grep: egrep, grep
Gcc: cc1, collect2, cpp0, gcc
Make: make
Patch: patch
Sed: sed
Sh-utils: basename, date, echo, hostname
Textutils: cat, tr
Última versión comprobada: 2.5.4a.
flex es una herramienta para generar programas capaces de reconocer patrones de texto. El reconocimiento de patrones es muy útil en muchas aplicaciones. El usuario establece las reglas de búsqueda y flex generará el programa que buscará esos patrones. La razón por la que la gente usa flex es porque es mucho más fácil establecer las reglas de búsqueda que escribir un programa real que busque el texto.
Gawk (3.1.1):
ftp://ftp.gnu.org/pub/gnu/gawk/
Parche para Gawk (3.1.1-2):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
GCC (3.2):
ftp://ftp.gnu.org/pub/gnu/gcc/
Parche para GCC (3.2):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Parche nofixincludes para GCC (3.2):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 3.1.
c++, c++filt, cc (enlace a gcc), cc1, cc1plus, collect2, cpp, cpp0, g++, gcc, gccbug, gcov y tradcpp0
Estos programas forman el compilador de C. Un compilador convierte el código fuente en formato de texto a un formato que un ordenador pueda entender. Después de que un fichero de código fuente es compilado en un fichero objeto, un enlazador creará un fichero ejecutable a partir de uno o más de estos ficheros objeto generados por el compilador.
El lenguaje C++ proporciona sobrecarga de funciones, lo que significa que es posible escribir varias funciones con el mismo nombre (suponiendo que cada una tome parámetros de diferente tipo). Todos los nombres de funciones C++ son codificadas dentro de una etiqueta de bajo nivel del ensamblador (este proceso es conocido como "mangling"). El programa c++flit hace lo contrario: decodifica (demangling) nombres de bajo nivel en nombres de nivel de usuario para que el enlazador pueda evitar conflictos en estas funciones sobrecargadas.
cpp preprocesa un fichero fuente, por ejemplo la inclusión del contenido de los ficheros de cabecera en el fichero fuente. Simplemente, añade una línea del tipo #include <fichero> a tu fichero fuente y el preprocesador insertará el contenido del fichero incluido dentro del fichero fuente.
gccbug es un guión del interprete de comandos que se usa para simplificar la creación de notificaciones de errores.
libiberty es una colección de subrutinas usadas por muchos programas GNU, incluidos getopt, obstack, strerror, strtol y strtoul.
libstdc++ es la librería C++. Es utilizada por programas escritos en C++ y contiene funciones que son usadas frecuentemente por esos programas. De esta forma el programador no necesita escribir ciertas funciones (como la escritura de una cadena de texto en pantalla) desde el principio cada vez que crea un programa.
Última versión comprobada: 2.95.3.
Bash: sh
Binutils: ar, as, ld, nm, ranlib
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
Find: find
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Patch: patch
Sed: sed
Sh-utils: basename, dirname, echo, expr, hostname, sleep, true, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tail, tr
Última versión comprobada: 0.11.2.
config.charset, config.rpath, gettext, gettextize, hostname, msgattrib, msgcat, msgcmp, msgcomm, msgconv, msgen, msgexec, msgfilter, msgfmt, msggrep, msginit, msgmerge, msgunfmt, msguniq, ngettext, project-id, team-address, trigger, urlget, user-email y xgettext
El guión config.charset saca una tabla dependiente del sistema de los alias de codificación de los caracteres.
El guión config.rpath saca un grupo de variables dependientes del sistema, describiendo cómo fijar la ruta de busqueda en tiempo de ejecución de las librerías compartidas en un ejecutable.
El paquete gettext se usa en la internacionalización (también conocida como i18n) y en la localización (conocida como l10n). Los programas pueden ser compilados con soporte para lenguaje nativo (NLS) que activa el que se muestren los mensajes de salida en el idioma del usuario en vez de en el idioma por defecto, el inglés.
El programa gettextize copia todos los ficheros estándar gettext en un directorio. Se usa para hacer paquetes con traducción gettext.
El programa msgattrib filtra los mensajes de un catálogo de traducción de acuerdo con sus atributos, y manipula dichos atributos.
El programa msgcomm busca los mensajes que aparecen en varios ficheros .po. Se usa para comparar cómo deben traducirse las cosas.
El programa msgconv convierte un catálogo de traducción a una codificación de caracteres diferente.
El programa msgfilter aplica un filtro a todas las traducciones de un catálogo de traducción.
El programa msgfmt compila traducciones directas en código máquina. Se usa para crear el fichero de traducción final de un programa/paquete.
El programa msggrep extrae todos los mensajes de un catálogo de traducción que cumplan cierto criterio o pertenezcan a alguno de los ficheros fuente indicados.
El programa msginit crea un nuevo fichero PO, inicializando la información con valores procedentes del entorno del usuario.
El programa msgmerge combina dos traducciones directas en un fichero. Se usa para actualizar la traducción directa con el extracto de las fuentes.
El programa msgunfmt descompila ficheros de traducciones en traducciones directas de texto. Sólo puede ser usado si la versión compilada está disponible.
El programa ngettext muestra traducciones en lenguaje nativo de un mensaje de texto cuya forma gramatical depende de un número.
El guión team-address imprime las direcciones del equipo de desarrolladores en la salida estándar, y muestra instrucciones adicionales .
Última versión comprobada: 0.10.40.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, nm, ranlib, strip
Bison: bison
Diffutils: cmp
Fileutils: chmod, install, ln, ls, mkdir, mv, rm, rmdir
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, sort, tr, uniq
Glibc (2.2.5):
ftp://ftp.gnu.org/gnu/glibc/
Glibc-linuxthreads (2.2.5):
ftp://ftp.gnu.org/gnu/glibc/
Parche para Glibc (2.2.5-2):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 2.2.5.
catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump y zic
catchsegv puede usarse para crear una traza de la pila cuando un programa termina con una violación de segmento.
getconf muestra los valores de configuración del sistema para variables especificas del sistema de ficheros.
glibcbug crea un informe de fallos sobre glibc y lo envía a la dirección de correo electrónico de errores.
ldd muestra las librerías compartidas requeridas por cada programa o librería especificada en la línea de comandos.
locale es un programa Perl que le dice al compilador si debe activar (o desactivar) el uso de las locales POSIX para operaciones integradas.
mtrace imprime la ruta de multidifusión (multicast) de una fuente a un receptor (una consulta del rastro de una IP).
nscd es un demonio que suministra una caché para las peticiones más comunes al servidor de nombres.
pt_chown establece el propietario, grupo y permisos de acceso del pseudo-terminal esclavo correspondiente al pseudo-terminal maestro apuntado por el descriptor de ficheros "3". Este es el programa de ayuda para la función `grantpt'. No está pensado para ejecutarse directamente desde la línea de comandos.
sln enlaza simbólicamente un destino a una fuente. Está enlazado estáticamente, no necesitando enlazado dinámico. Por tanto, sln es útil para crear enlaces simbólicos a librerías dinámicas si, por alguna razón, el enlazador dinámico del sistema no funciona.
ld.so, libBrokenLocale.[a,so], libBrokenLocale_p.a, libSegFault.so, libanl.[a,so], libanl_p.a, libbsd-compat.a, libc.[a,so], libc_nonshared.a, libc_p.a, libcrypt.[a,so], libcrypt_p.a, libdl.[a,so], libdl_p.a, libg.a, libieee.a, libm.[a,so], libm_p.a, libmcheck.a, libmemusage.so, libnsl.a, libnsl_p.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libpthread_p.a, libresolv.[a,so], libresolv_p.a, librpcsvc.a, librpcsvc_p.a, librt.[a,so], librt_p.a, libthread_db.so, libutil.[a,so] y libutil_p.a
libSegFault es un manejador de señales de violación de segmento. Intenta capturar estas señales.
libbsd-compat proporciona la portabilidad necesaria para ejecutar ciertos programas en Linux.
Estos ficheros constituyen la librería C principal, que es una colección de funciones usadas frecuentemente en programas. De esta forma un programador no necesita crear sus propias funciones para cada tarea individual. Las cosas más comunes, como mostrar una cadena en pantalla, están presentes y a disposición del programador.
La librería C (en realidad, casi todas las librerías) viene en dos formas: dinámica y estática. En resumen, cuando un programa usa una librería C estática, se copia el código de la librería C dentro del ejecutable. Cuando un programa usa una librería dinámica, el ejecutable no contiene el código de la librería pero, en su lugar, tiene una rutina que carga las funciones desde esa librería en el momento en el que se ejecuta. De esta forma disminuye de forma significativa el tamaño del programa. La documentación que acompaña a la librería C describe esto con más detalle, pues es demasiado complicado explicarlo aquí en dos o tres líneas.
libmemusage es usada por memusage para ayudar a recoger información sobre el uso de memoria de un programa.
La idea básica es poner en módulos separados la implementación de los diferentes servicios ofrecidos para acceder a las bases de datos. Esto tiene algunas ventajas:
los colaboradores pueden añadir nuevos servicios sin tener que añadirlos a la librería C de GNU,
los módulos pueden actualizarse separadamente,
la imagen de la librería C es más pequeña.
Código usado por el núcleo para rastrear el tiempo de CPU gastado en funciones, líneas de código fuente e instrucciones.
Esta librería proporciona funciones para la creación, envío e interpretación de paquetes de datos a servidores de nombres de dominio de Internet.
Esta librería proporciona funciones para muchas de las interfaces especificadas por el POSIX.1b Realtime Extension (Extensiones en Tiempo Real POSIX.1b).
Última versión comprobada: 2.2.5.
Bash: sh
Binutils: ar, as, ld, ranlib, readelf
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mknod, mv, mkdir, rm, touch
Gcc: cc, cc1, collect2, cpp, gcc
Grep: egrep, grep
Gzip: gzip
Make: make
Gawk: gawk
Sed: sed
Sh-utils: date, expr, hostname, pwd, uname
Texinfo: install-info, makeinfo
Textutils: cat, cut, sort, tr
Última versión comprobada: 2.5.
Última versión comprobada: 2.4.2.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chmod, install, ls, mkdir, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
Última versión comprobada: 1.17.2.
addftinfo, afmtodit, eqn, geqn (enlace a eqn), grn, grodvi, groff, grog, grolbp, grolj4, grops, grotty, gtbl (enlace a tbl), hpftodit, indxbib, lkbib, lookbib, mmroff, neqn, nroff, pfbtops, pic, post-grohtml, pre-grohtml, refer, soelim, tbl, tfmtodit, troff y zsoelim (enlace a soelim)
addftinfo lee un fichero de fuentes troff y añade alguna información adicional sobre la métrica de la fuente, que es usada por el sistema groff.
eqn compila las descripciones de las formulas embebidas en los ficheros de entrada de troff a comandos que pueda entender troff.
groff es una interfaz para el sistema de formateado de documentos groff. Normalmente lanza el programa troff y un post-procesador apropiado para el dispositivo seleccionado.
grog lee ficheros y averigua cual de las opciones -e, -man, -me, -mm, -ms, -p, -s, y -t de groff se necesitan para mostrar los ficheros, y muestra el comando de groff incluyendo esas opciones en la salida estándar.
grolbp es un controlador de groff para las impresoras Canon CAPSL (series LBP-4 y LBP-8 de impresoras láser)
grolj4 es un controlador para groff que produce salidas en el formato PCL5 adecuado para impresoras HP Laserjet 4.
grotty transforma la salida de GNU troff en un formato adecuado para dispositivos tipo máquina de escribir.
hpftodit crea un fichero de fuentes para usar con groff -Tlj4 a partir de ficheros de marcas de fuentes métricas de HP.
indxbib hace un índice inverso para la base de datos bibliográfica, un fichero específico para usarlo con refer, lookbib, y lkbib.
lkbib busca, en las bases de datos bibliográficas, referencias que contengan las claves especificadas y muestra cualquier referencia encontrada en la salida estándar.
lookbib muestra un aviso en la salida de error estándar (excepto si la entrada estándar no es un terminal), lee de la entrada estándar una línea conteniendo un grupo de palabras clave, busca en las bases de datos bibliográficos en un fichero especificado las referencias que contengan dichas claves, muestra cualquier referencia encontrada en la salida estándar y repite el proceso hasta el final de la entrada.
pic compila descripciones de gráficos embebidos dentro de ficheros de entrada de troff o TeX a comandos que puedan ser entendidos por TeX o troff.
refer copia el contenido de un fichero en la salida estándar, excepto que las líneas entre .[ y .] son interpretadas como citas, y las líneas entre .R1 y .R2 son interpretadas como comandos sobre cómo deben ser procesadas las citas.
tbl compila descripciones de tablas embebidas dentro de ficheros de entrada troff a comandos que puedan ser entendidos por troff.
Última versión comprobada: 1.17.2.
Bash: sh
Binutils: ar, as, ld, ranlib
Bison: bison
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, touch
Gcc: cc1, cc1plus, collect2, cpp0, g++, gcc
Grep: egrep, grep
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, date, echo, expr, hostname, uname
Textutils: cat, tr
Última versión comprobada: 1.2.4a.
gunzip (enlace a gzip), gzexe, gzip, uncompress (enlace a gunzip), zcat (enlace a gzip), zcmp, zdiff, zforce, zgrep, zmore y znew
gzexe permite comprimir ficheros ejecutables que automáticamente se descomprimen y ejecutan al ser lanzados (con una penalización en el rendimiento).
zcat descomprime, y escribe en la salida estándar, tanto una lista de ficheros en su línea de comandos como un fichero leído por su entrada estándar.
zforce fuerza la extensión .gz en todos los ficheros gzip para que gzip no los comprima dos veces. Esto puede ser útil para ficheros con el nombre truncado después de una transferencia de ficheros.
Kbd (1.06):
ftp://ftp.win.tue.nl/pub/linux-local/utils/kbd/
Parche para Kbd (1.06-3):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 1.06.
chvt, deallocvt, dumpkeys, fgconsole, getkeycodes, getunimap, kbd_mode, kbdrate, loadkeys, loadunimap, mapscrn, openvt, psfaddtable (enlace a psfxtable), psfgettable (enlace a psfxtable), psfstriptable (enlace a psfxtable), psfxtable, resizecons, setfont, setkeycodes, setleds, setlogcons, setmetamode, setvesablank, showfont, showkey, unicode_start, y unicode_stop
getkeycodes muestra la tabla de correspondencias de código de exploración (scan code) a código de teclas del núcleo.
mapscrn carga una tabla de correspondencia de caracteres de salida, definida por el usuario, en el controlador de la consola. Este comando está obsoleto y sus funciones se encuentran incluidas en setfont.
Este es un grupo de herramientas para obtener tablas de caracteres Unicode a partir de fuentes de consola.
setkeycodes carga las entradas de la tabla de correspondencia de código de exploración (scan code) a código de tecla del núcleo.
setleds establece los LEDs del teclado. Mucha gente encuentra útil tener el bloqueo numérico (numlock) activado por defecto y usando este programa puede conseguirse.
Esto permite afinar el salvapantallas incorporado en el hardware (no animados, sólo una pantalla en blanco).
showfont muestra los datos de una fuente. La información mostrada incluye información de la fuente, sus propiedades, la métrica de los caracteres y el mapa de bits de cada carácter.
Última versión comprobada: 1.06.
Bash: sh
Binutils: as, ld, strip
Bison: bison
Diffutils: cmp
Fileutils: cp, install, ln, mv, rm
Flex: flex
Gettext: msgfmt, xgettext
Gcc: cc1, collect2, cpp0, gcc
Grep: grep
Gzip: gunzip, gzip
Make: make
Patch: patch
Sed: sed
Sh-utils: uname
Última versión comprobada: 374.
El programa less es un paginador de ficheros (o visor de texto). Muestra el contenido de un fichero con la posibilidad de recorrerlo. Less es una evolución del paginador habitual llamado "more". Less tiene la habilidad de poder moverse a través de los ficheros y no necesita leer por completo el fichero al principio, lo que le hace rápido cuando se leen ficheros largos.
LFS-Bootscripts (1.10):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 1.10.
checkfs, cleanfs, functions, halt, ifdown, ifup, loadkeys, localnet, mountfs, mountproc, network, rc, reboot, sendsignals, setclock, swap, sysklogd y template
El guión checkfs comprueba los sistemas de ficheros justo antes de ser montados (con la excepción de los que usan registros de transacciones [journal] o los que se montan desde la red).
El guión cleanfs elimina los ficheros que no deben guardarse cuando se arranca de nuevo el sistema, como /var/run/* y /var/lock/*, regenera /var/run/utmp y elimina los ficheros /etc/nologin, /fastboot y /forcefsck que pueda haber.
El guión functions contiene funciones usadas por diferentes guiones: chequeo de errores, chequeo de estado, etc.
El guión localnet establece el nombre de máquina usado por el sistema (hostname) y activa el dispositivo de red "loopback".
El guión mountfs monta todos los sistemas de ficheros que no estén marcados como "noauto" o que no se monten a través de la red.
El guión network activa las interfaces de red (como las tarjetas de red) y establece la puerta de enlace por defecto (gateway) cuando es necesario.
El guión rc es el controlador maestro de los niveles de arranque y es responsable de lanzar todos los demás guiones, uno a uno, en una secuencia específica.
El guión sendsignals se asegura de que todos los procesos terminen antes de parar o reiniciar el sistema.
El guión setclock fija el reloj del núcleo a la hora local en caso de que el reloj del ordenador no esté fijado a la hora GMT.
Última versión comprobada: 1.4.2.
Última versión comprobada: 1.4.2.
Bash: sh
Binutils: ar, as, ld, nm, ranlib, strip
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gcc: cc, cc1, collect2, cpp0
Glibc: ldconfig
Grep: egrep, fgrep, grep
Make: make
Sed: sed
Sh-utils: echo, expr, hostname, sleep, uname
Texinfo: install-info
Textutils: cat, sort, tr, uniq
Lilo (22.2):
ftp://ibiblio.org/pub/Linux/system/boot/lilo/
http://ibiblio.org/pub/Linux/system/boot/lilo/
Última versión comprobada: 2.4.18.
El núcleo Linux es el corazón de todo sistema Linux. Es lo que hace a Linux funcionar. Cuando se enciende un ordenador y se inicia un sistema Linux, el núcleo es lo primero que se carga. El núcleo inicializa los componentes hardware del sistema: puertos serie, puertos paralelo, tarjetas de sonido, tarjetas de red, controladores IDE, controladores SCSI y mucho más. En pocas palabras, el núcleo hace que el hardware esté disponible para que el software pueda ejecutarse.
Última versión comprobada: 2.4.17.
Bash: sh
Binutils: ar, as, ld, nm, objcopy
Fileutils: cp, ln, mkdir, mv, rm, touch
Findutils: find, xargs
Gcc: cc1, collect2, cpp0, gcc
Grep: grep
Gzip: gzip
Make: make
Gawk: awk
Modutils: depmod, genksyms
Net-tools: dnsdomainname, hostname
Sed: sed
Sh-utils: basename, date, expr, pwd, stty, uname, whoami, yes
Textutils: cat, md5sum, sort, tail
Última versión comprobada: 1.4.
m4 es un procesador de macros. Copia la entrada a la salida expandiendo las macros en el proceso. Las macros pueden ser internas o definidas por el usuario y pueden tomar cualquier número de argumentos. Aparte de hacer la expansión de macros, m4 tiene funciones internas para la inclusión de los ficheros indicados, lanzar comandos UNIX, hacer aritmética entera, manipular texto de diversas formas, recursión, etc. El programa m4 puede ser usado como interfaz para un compilador o como procesador de macros por sí mismo.
Última versión comprobada: 3.79.1.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chgrp, chmod, install, ls, mv, rm
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
MAKEDEV (1.7):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Man (1.5k):
ftp://ftp.win.tue.nl/pub/linux-local/utils/man/
Parche para Man (1.5k):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 1.5k.
apropos busca palabras claves en un grupo de ficheros de bases de datos que contienen descripciones cortas de los comandos del sistema, y muestra el resultado en la salida estándar.
makewhatis lee todas las páginas de manual contenidas en las secciones incluidas en las rutas "manpath" o las páginas preformateadas contenidas en las secciones de las rutas "catpath". Por cada página escribe una línea en la base datos de whatis. Cada línea consiste en el nombre de la página y una descripción corta, separados por un guión. La descripción se extrae del contenido de la sección NAME de la página de manual.
Modutils (2.4.19):
ftp://ftp.kernel.org/pub/linux/utils/kernel/modutils/
Última versión comprobada: 2.4.16.
depmod, genksyms, insmod, insmod_ksymoops_clean, kallsyms (enlace a insmod), kernelversion, ksyms (enlace a insmod), lsmod (enlace a insmod), modinfo, modprobe (enlace a insmod) y rmmod (enlace a insmod)
genksyms lee (de la entrada estándar) la salida de gcc -E source.c y genera un fichero que contiene información sobre la versión.
insmod_ksymoops_clean borra los símbolos del núcleo (ksyms) guardados y los módulos a los que no se ha accedido en los últimos 2 días.
modinfo examina un fichero objeto asociado con un módulo del núcleo y muestra la información que pueda encontrar.
Última versión comprobada: 2.4.12.
Bash: sh
Binutils: ar, as, ld, ranlib, strip
Bison: bison
Diffutils: cmp
Fileutils: chmod, install, ln, mkdir, mv, rm
Flex: flex
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Sed: sed
Sh-utils: basename, expr, hostname, uname
Textutils: cat, tr
Ncurses (5.2):
ftp://ftp.gnu.org/gnu/ncurses/
Parche para Ncurses (5.2):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 5.2.
captoinfo (enlace a tic), clear, infocmp, infotocap (enlace a tic), reset (enlace a tset), tack, tic, toe, tput y tset.
clear limpia la pantalla si es posible. Busca en el entorno el tipo de terminal, y después en la base de datos de terminfo, para averiguar cómo limpiar la pantalla.
infocmp puede usarse para comparar una entrada binaria de terminfo con otras entradas terminfo, reescribir una descripción de terminfo para aprovechar el campo "use=", o mostrar una descripción terminfo del fichero binario (term) en una variedad de formatos (lo opuesto de lo que hace tic).
reset activa los modos "cooked" y "echo", quita los modos "cbreak" y "raw", activa la traslación de nueva línea y restablece cualquier carácter especial desactivado a sus valores por defecto, antes de hacer la inicialización del terminal de la misma manera que tset.
tic es el compilador de entradas de descripciones de terminfo. El programa transforma un fichero terminfo en formato fuente a formato binario para su uso con las rutinas de las librerías ncurses. Los ficheros terminfo contienen información sobre las capacidades de un terminal.
libcurses.[a,so] (enlace a libncurses.[a,so]), libform.[a,so], libform_g.a, libmenu.[a,so], libmenu_g.a, libncurses++.a, libncurses.[a,so], libncurses_g.a, libpanel.[a,so] y libpanel_g.a
Última versión comprobada: 5.2.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, mkdir, mv, rm
Gcc: c++, cc1, cc1plus, collect2, cpp0, gcc
Glibc: ldconfig
Grep: egrep, fgrep, grep
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, date, echo, expr, hostname, uname
Textutils: cat, sort, tr, wc
Netkit-base (0.17):
ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/
Última versión comprobada: 1.60.
arp, dnsdomainname (enlace a hostname), domainname (enlace a hostname), hostname, ifconfig, nameif, netstat, nisdomainname (enlace a hostname), plipconfig, rarp, route, slattach e ypdomainname (enlace a hostname)
arp se usa para manipular la caché ARP del núcleo, usualmente para añadir o borrar una entrada o volcar dicha caché.
netstat es una herramienta multipropósito usada para mostrar las conexiones de red, tablas de encaminamiento, estadísticas de las interfaces, conexiones enmascaradas y los miembros de conexiones multidestino (multicast).
plipconfig se usa para afinar los parámetros del dispositivo PLIP, para hacerlo más rápido.
Última versión comprobada: 2.5.4.
El programa patch modifica un fichero según lo indicado en un fichero de parche. Normalmente un fichero de parche es una lista creada por el programa diff que contiene instrucciones sobre cómo necesita ser modificado un fichero original. Patch se usa mucho para parchear el código fuente pues ahorra bastante tiempo y espacio. Imagina un paquete de 1MB de tamaño. La siguiente versión de ese paquete sólo cambia en dos ficheros con respecto a la primera versión. Se puede distribuir como un nuevo paquete entero de 1MB o sólo como un parche de 1KB con el que actualizar la primera versión para hacerla idéntica a la segunda. Por tanto, si la primera versión ya fue descargada, un parche evita hacer una segunda descarga larga.
Última versión comprobada: 5.6.1.
a2p, c2ph, dprofpp, find2perl, h2ph, h2xs, perl, perl5.6.1, perlbug, perlcc, perldoc, pl2pm, pod2html, pod2latex, pod2man, pod2text, pod2usage, podchecker, podselect, pstruct, s2p y splain
perl es el Lenguaje Práctico de Extracción e Informe. Combina algunas de las mejores características de C, sed, awk y sh en un poderoso lenguaje.
perlbug ayuda en la generación de informes de errores sobre perl o sobre los módulos incorporados, y los envía por correo.
perldoc busca una parte de la documentación en formato .pod que se incluye en el árbol de instalación de perl o en un guión de perl, y lo muestra mediante "pod2man | nroff -man | $PAGER".
pl2pm es una herramienta que ayuda en la conversión de librerías .pl de estilo Perl4 en módulos de librería de estilo Perl5.
attrs.so, B.so, ByteLoader.so, DProf.so, Dumper.so, DynaLoader.a, Fcntl.so, Glob.so, Hostname.so, IO.so, libperl.a, Opcode.so, Peek.so, POSIX.so, re.so, SDBM_File.so, Socket.so, Syslog.so y SysV.so
Última versión comprobada: 5.6.1.
Bash: sh
Binutils: ar, as, ld, nm
Diffutils: cmp
Fileutils: chmod, cp, ln, ls, mkdir, mv, rm, touch
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Gawk: awk
Sed: sed
Sh-utils: basename, date, echo, expr, hostname, pwd, uname, whoami
Textutils: cat, comm, sort, split, tr, uniq, wc
Última versión comprobada: 18.
lsdev recopila la información sobre los dispositivos físicos instalados en su ordenador a partir de los ficheros con las interrupciones, puertos de entrada/salida y acceso directo a memoria (DMA) del directorio /proc, facilitando una descripción rápida de qué direcciones de entrada/salida (I/O) y qué canales IRQ y DMA usa cada dispositivo.
Procps (2.0.7):
ftp://people.redhat.com/johnsonm/procps/
Parche para Procps (2.0.7):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 2.0.7.
free muestra la cantidad total de memoria física y de intercambio (swap) libre y usada en el sistema, al igual que la memoria compartida (shared) y de almacenamiento intermedio (buffers) usada por el núcleo.
tload imprime un gráfico de la carga actual del sistema en la consola (tty) especificada (o la consola del proceso tload si no se especifica ninguna).
Psmisc (21):
http://download.sourceforge.net/psmisc/
ftp://download.sourceforge.net/pub/sourceforge/psmisc/
Última versión comprobada: 21.
fuser, killall y pstree
Nota: en LFS no instalamos el enlace pidof por omisión porque usamos en su lugar el programa pidof de sysvinit.
Última versión comprobada: 20.2
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Bison: bison
Binutils: as, ld
Diffutils: cmp
Fileutils: chmod, install, ls, mkdir, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Grep: egrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Texinfo: makeinfo
Textutils: cat, tr
Última versión comprobada: 3.02.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gcc: cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Sed: sed
Sh-utils: echo, expr, hostname, sleep
Texinfo: install-info, makeinfo
Textutils: cat, tr
Última versión comprobada: 4.0.3.
chage, chfn, chpasswd, chsh, dpasswd, expiry, faillog, gpasswd, groupadd, groupdel, groupmod, groups, grpck, grpconv, grpunconv, lastlog, login, logoutd, mkpasswd, newgrp, newusers, passwd, pwck, pwconv, pwunconv, sg (enlace a newgrp), useradd, userdel, usermod, vigr (enlace a vipw) y vipw
chage cambia el número de días entre cambios de la contraseña y la fecha del último cambio de contraseña.
chfn cambia el nombre completo de un usuario y otra información (extensión y número de teléfono de su oficina y número de teléfono de su casa).
chpasswd lee un fichero con pares de usuarios y contraseñas en la entrada estándar y usa esta información para actualizar un grupo de usuarios existentes.
faillog formatea el contenido del registro de fallos /var/log/faillog, y mantiene el contador y los límites de fallos.
El comando groupadd crea un nuevo grupo usando los valores especificados en la línea de comandos y los valores por defecto del sistema.
El comando groupdel modifica los ficheros con las cuentas del sistema, borrando todas las entradas referidas a un determinado grupo.
El comando groupmod modifica los ficheros de las cuentas del sistema para reflejar los cambios especificados en la línea de comandos.
grpunconv convierte a ficheros de grupos ocultos (shadow group files) los ficheros de grupos normales.
lastlog formatea y muestra el contenido del registro de último acceso /var/log/lastlog. Muestra el nombre con el que se ha accedido, puerto y hora del último acceso.
mkpasswd lee un fichero en el formato facilitado por las opciones y lo convierte al formato de fichero de base de datos correspondiente.
newusers lee un fichero con pares de nombres de usuario y contraseñas en texto plano y usa esa información para actualizar un grupo de usuarios existentes o para crear nuevos usuarios.
sg asigna el grupo del usuario al especificado, o ejecuta un comando como miembro del grupo indicado.
userdel modifica los ficheros con las cuentas del sistema, borrando todas las entradas referidas al nombre de acceso especificado.
Última versión comprobada: 20001016.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, nm, ranlib
Diffutils: cmp
Fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
Gettext: msgfmt, xgettext
Gcc: cc1, collect2, cpp0, gcc
Glibc: ldconfig
Grep: egrep, grep
M4: m4
Make: make
Gawk: gawk
Net-tools: hostname
Sed: sed
Sh-utils: basename, echo, expr, sleep, uname
Texinfo: makeinfo
Textutils: cat, sort, tr, uniq
Sh-utils (2.0):
ftp://ftp.gnu.org/gnu/sh-utils/
Parche para Sh-utils (2.0):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 2.0.
basename, chroot, date, dirname, echo, env, expr, factor, false, groups, hostid, id, logname, nice, nohup, pathchk, pinky, printenv, printf, pwd, seq, sleep, stty, su, tee, test, true, tty, uname, uptime, users, who, whoami y yes
chroot ejecuta un comando o un intérprete de comandos (shell) interactivo dentro de un directorio raíz determinado.
date muestra la fecha y hora actual en un formato determinado o establece la fecha y hora del sistema.
id muestra los identificadores efectivos de usuario y de grupo del usuario actual o de un usuario dado.
nohup ejecuta un comando que no se interrumpe cuando se cierra la sesión, con su salida a un fichero de registro.
Última versión comprobada: 2.0.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, chown, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tr
Última versión comprobada: 1.4.1.
syslogd proporciona una forma de registrar sucesos que muchos programas modernos utilizan. Cada mensaje registrado contiene como mínimo un campo con el nombre de la máquina y la fecha, y normalmente un campo con el nombre del programa también, pero eso depende de lo fiable que sea el programa a registrar.
Sysvinit (2.84):
ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/
Última versión comprobada: 2.84.
halt, init, killall5, last, lastb (enlace a last), mesg, pidof (enlace a killall5), poweroff (enlace a halt), reboot (enlace a halt), runlevel, shutdown, sulogin, telinit (enlace a init), utmpdump y wall
halt anota en el fichero /var/log/wtmp que el sistema se va a venir abajo, y entonces le indica al núcleo que cierre, reinicie o apague el sistema. Si halt o reboot son llamados cuando el sistema no está en los niveles de ejecución 0 o 6, shutdown es invocado en su lugar (con las opciones -h o -r).
init es el padre de todos los procesos. Su función principal es crear procesos a partir de un guión almacenado en el fichero /etc/inittab. Este fichero normalmente tiene unas entradas que hacen que init active la creación de los terminales en cada línea en la que los usuarios pueden conectarse. También controla los procesos autónomos requeridos por un sistema particular.
killall5 es el comando killall de SystemV. Envía una señal a todos los procesos excepto a los procesos de su propia sesión, por tanto no puede matar el intérprete de comandos en el que se esté ejecutando el guión desde el que fue llamado.
last busca hacia atrás en el fichero /var/log/wtmp (o el fichero indicado con la opción -f) y muestra una lista con todos los usuarios conectados (y desconectados) desde que el fichero fue creado.
lastb es lo mismo que last, excepto que por defecto muestra los registros del fichero /var/log/btmp, que contiene todos los intentos fallidos de conexión.
mesg controla el acceso al terminal de un usuario por otros. Se usa para permitir o denegar a otros usuarios escribir en su terminal.
poweroff es equivalente a "shutdown -h -p now". Para el ordenador y lo apaga (cuando se usa una BIOS compatible APM y APM está activado en el núcleo).
runlevel lee el fichero utmp del sistema (típicamente /var/run/utmp) para localizar el registro del nivel de ejecución, y entonces muestra el anterior y el nivel de ejecución actual del sistema en la salida estándar, separados por un espacio.
shutdown provoca la caída del sistema de una forma segura. Todos los usuarios conectados son notificados de que el sistema se va a venir abajo, y se bloquean los intentos de conexión al sistema.
sulogin es invocado por init cuando el sistema entra en el modo monousuario (esto se hace mediante una entrada en /etc/inittab). Init también intenta ejecutar sulogin cuando se le pasa la opción -b desde el gestor de arranque (p.e., LILO).
Tar (1.13):
ftp://ftp.gnu.org/gnu/tar/
Parche para Tar (1.13):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 1.13.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Net-tools: hostname
Patch: patch
Sed: sed
Sh-utils: basename, echo, expr, sleep, uname
Texinfo: install-info, makeinfo
Textutils: cat, tr
Última versión comprobada: 4.2.
El programa info lee documentos Info, almacenados normalmente en el directorio /usr/share/info. Los documentos Info son como las páginas de manual, pero tienden a ser más profundos que una simple explicación de las opciones de un programa.
El programa install-info actualiza las entradas info. Cuando se ejecuta info, muestra una lista con los temas disponibles (es decir, los documentos info) disponibles. El programa install-info se usa para mantener esta lista. Si los ficheros info son eliminados manualmente, también debes eliminar el tema en el fichero índice. Este programa se utiliza para eso. También funciona en sentido contrario cuando se añaden documentos info.
Última versión comprobada: 4.0.
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ln, ls, mkdir, mv, rm
Gcc: cc1, collect2, cpp0, gcc
Grep: egrep, fgrep, grep
Make: make
Sed: sed
Sh-utils: basename, echo, expr, hostname, sleep
Texinfo: makeinfo
Textutils: cat, tr
Última versión comprobada: 2.0.
cat, cksum, comm, csplit, cut, expand, fmt, fold, head, join, md5sum, nl, od, paste, pr, ptx, sort, split, sum, tac, tail, tr, tsort, unexpand, uniq y wc
csplit escribe partes de un fichero separadas por un determinado patrón en ficheros xx01, xx02, etc, y muestra el número de bytes de cada parte en la salida estándar.
expand convierte las tabulaciones de un fichero en espacios, escribiendo en la salida estándar
fold reajusta la longitud de las líneas de un fichero (por defecto, la entrada estándar), escribiendo en la salida estándar.
od escribe en la salida estándar una representación inequívoca (por defecto en octal) de un fichero.
paste escribe en la entrada estándar líneas formadas por las líneas de cada uno de los ficheros especificados, separadas por tabulaciones.
tr convierte, altera y/o borra caracteres de la entrada estándar, escribiendo en la salida estándar.
tsort escribe una lista totalmente ordenada de acuerdo con el orden parcial de los ficheros especificados.
Última versión comprobada: 2.0.
Autoconf: autoconf, autoheader
Automake: aclocal, automake
Bash: sh
Binutils: ar, as, ld, ranlib
Diffutils: cmp
Fileutils: chmod, install, ls, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp0, gcc
Glibc: getconf
Grep: egrep, fgrep, grep
M4: m4
Make: make
Gawk: gawk
Net-tools: hostname
Perl: perl
Sed: sed
Sh-utils: basename, echo, expr, sleep, uname
Tar: tar
Texinfo: install-info, makeinfo
Textutils: cat, tr
Util-linux (2.11u):
ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux/
Última versión comprobada: 2.11t.
agetty, arch, blockdev, cal, cfdisk, chkdupexe, col, colcrt, colrm, column, ctrlaltdel, cytune, ddate, dmesg, elvtune, fdformat, fdisk, fsck.cramfs, fsck.minix, getopt, hexdump, hwclock, ipcrm, ipcs, isosize, line, logger, look, losetup, mcookie, mkfs, mkfs.bfs, mkfs.cramfs, mkfs.minix, mkswap, more, mount, namei, parse.bash, parse.tcsh, pg, pivot_root, ramsize (enlace a rdev), raw, rdev, readprofile, rename, renice, rev, rootflags (enlace a rdev), script, setfdprm, setsid, setterm, sfdisk, swapoff (enlace a swapon), swapon, test.bash, test.tcsh, tunelp, ul, umount, vidmode (enlace a rdev), whereis y write
agetty abre un puerto de terminal, espera la introducción de un nombre de usuario e invoca al comando /bin/login.
blockdev permite llamar a los controles de entrada/salida (ioctls) de los dispositivos de bloque desde la línea de comandos.
ctrlaltdel establece la función de la combinación de teclas CTRL+ALT+DEL (reinicio duro o blando).
dmesg se usa para examinar o controlar el anillo de almacenamiento intermedio del núcleo (los mensajes de arranque del núcleo).
fsck.minix realiza una comprobación de consistencia en sistemas de ficheros MINIX de Linux.
hexdump muestra un fichero, o la entrada estándar, en un formato especificado por el usuario (ASCII, decimal, hexadecimal, octal).
line copia una línea (hasta el carácter de nueva línea) de la entrada estándar y la escribe en la salida estándar.
mkfs construye un sistema de ficheros Linux en un dispositivo, normalmente una partición del disco duro.
mkfs.bfs crea un sistema de ficheros bfs de SCO en un dispositivo, normalmente una partición del disco duro.
mkfs.minix crea un sistema de ficheros MINIX en un dispositivo, normalmente una partición del disco duro
Estos son guiones de ejemplo de uso del programa getopt con BASH o TCSH.
rdev muestra y establece el dispositivo raíz de la imagen, el dispositivo de intercambio, el tamaño del disco RAM, o el modo de vídeo.
rootflags muestra y establece la información extra usada cuando se monta el sistema de ficheros raíz.
Última versión comprobada: 2.11n.
Bash: sh
Binutils: as, ld
Diffutils: cmp
Fileutils: chgrp, chmod, cp, install, ln, mv, rm
Gettext: msgfmt, xgettext
Gcc: cc, cc1, collect2, cpp, cpp0
Glibc: rpcgen
Grep: grep
Make: make
Sed: sed
Sh-utils: uname, whoami
Textutils: cat
Vim (6.1):
ftp://ftp.vim.org/pub/editors/vim/unix/
Parche para Vim (6.1):
ftp://ftp.linuxfromscratch.org/lfs-packages/4.0/
http://ftp.linuxfromscratch.org/lfs-packages/4.0/
Última versión comprobada: 6.1.
efm_filter.pl, efm_perl.pl, ex (enlace a vim), less.sh, mve.awk, pltags.pl, ref, rview (enlace a vim), rvim (enlace a vim), shtags.pl, tcltags, vi (enlace a vim), view (enlace a vim), vim, vim132, vim2html.pl, vimdiff (enlace a vim), vimm, vimspell.sh, vimtutor y xxd
efm_filter.pl es un filtro que lee de la entrada estándar, copia a la salida estándar y crea un fichero de error que puede ser leido por vim.
efm_perl.pl formatea los mensajes de error del intérprete Perl para usarlos con el modo "quickfix" de vim.
pltags.pl crea un fichero de etiquetas para el código Perl, de modo que pueda usarse con vim.
rview es una versión restringida de view. No pueden ejecutarse comandos del intérprete de comandos y vim no puede ser suspendido.
rvim es una versión restringida de vim. No pueden ejecutarse comandos del intérprete de comandos y vim no puede ser suspendido.
Última versión comprobada: 6.0.
Bash: sh
Binutils: as, ld, strip
Diffutils: cmp, diff
Fileutils: chmod, cp, ln, mkdir, mv, rm, touch
Find: find
Gcc: cc1, collect2, cpp0, gcc
Grep: egrep, grep
Make: make
Net-tools: hostname
Sed: sed
Sh-utils: echo, expr, uname, whoami
Textutils: cat, tr, wc
A continuación, se da una lista de libros, CÓMOs y otros documentos que podría resultar útil descargar o comprar. Esta lista no es más que un pequeño ejemplo con el que empezar. Esperamos ser capaces de aumentar esta lista con el tiempo, tan pronto como descubramos documentos o libros más útiles.
Linux Network Administrator's Guide (Guía del Administrador de Red Linux) publicado por O'Reilly. ISBN: 1-56502-087-2
Running Linux (Ejecutando Linux) publicado por O'Reilly. ISBN: 1-56592-151-8
Casi todos los CÓMOs y muchas guías pueden descargarse del "Linux Documentation Project", Proyecto de Documentación de Linux. Las versiones originales en inglés se encuentran en http://www.tldp.org, y las traducciones al castellano en http://es.tldp.org.
Recomendamos los siguientes textos:
Guía de Administración de Redes (Linux Network Administrator's Guide)
De La Puesta En Marcha Al Indicador Del Bash CÓMO (ver Prólogo - A quién puede que no le interese leer el libro)