# Linux From Scratch

Linux From Scratch o LFS es un tipo de instalación del sistema operativo GNU/Linux y el nombre de un libro escrito por Gerard Beekmans junto a otros. El libro es una colección de documentos que indican los pasos para desarrollar un sistema GNU/Linux desde cero, a partir del código fuente. El libro Linux From Scratch está disponible en línea en el sitio oficial y actualmente su versión es la 11.1.

## Proyectos bajo el LFS

Linux From Scratch es una forma de instalar un sistema Linux funcional mediante la compilación manual de todos sus componentes. Naturalmente, se trata de un proceso más largo que el de instalar una distribución Linux precompilada . Según el sitio web Linux From Scratch , las ventajas de este método son un sistema compacto, flexible y seguro y una mayor comprensión del funcionamiento interno de los sistemas operativos basados en Linux.
Para mantener LFS pequeño y simple, el libro Beyond Linux From Scratch (BLFS) fue creado para presentar las instrucciones de como desarrollar un sistema básico GNU/Linux después de crear LFS. Presenta y guía al lector a través de las adiciones al sistema, incluido el sistema X Window, entornos de escritorio (KDE, GNOME, Xfce, LXDE), software de productividad, navegadores web, lenguajes y herramientas de programación, software multimedia y herramientas de administración de redes y sistemas. Desde la versión 5.0, la versión del libro de BLFS coincide con la versión del libro de LFS.
El libro Cross Linux From Scratch (CLFS) se centra en la compilación cruzada, incluida la compilación para sistemas sin interfaz gráfica o integrados que pueden ejecutar Linux, pero carecen de los recursos necesarios para compilar Linux. CLFS admite una amplia gama de procesadores y aborda técnicas avanzadas que no se incluyen en el libro LFS, como cadenas de herramientas de compilación cruzada, compatibilidad con múltiples bibliotecas ( bibliotecas de 32 y 64 bits una al lado de la otra) y arquitecturas de conjuntos de instrucciones alternativas como Itanium, SPARC, MIPS, y Alpha.
El proyecto Linux from Scratch, al igual que BitBake, también admite la compilación cruzada de Linux para sistemas integrados ARM como Raspberry Pi y BeagleBone.
El libro Hardened Linux From Scratch (HLFS) se centra en mejoras de seguridad como parches del kernel reforzados, políticas de control de acceso obligatorias, protección contra la destrucción de la pila y aleatorización del diseño del espacio de direcciones. Además de su objetivo principal de crear un sistema operativo centrado en la seguridad, HLFS tenía el objetivo secundario de ser una herramienta de enseñanza de seguridad. No se ha actualizado desde 2011.
Automated Linux From Scratch (ALFS) es un proyecto diseñado para automatizar el proceso de creación de un sistema LFS. Está dirigido a usuarios que han repasado varias veces los libros de LFS y BLFS y desean reducir la cantidad de trabajo que esto implica. Un objetivo secundario es actuar como prueba de los libros LFS y BLFS extrayendo y ejecutando directamente instrucciones de las fuentes XML de los libros LFS y BLFS.

## Requisitos y procedimiento

Para construir LFS se necesita una partición limpia y un sistema Linux en funcionamiento con un compilador y algunas bibliotecas de software esenciales. En lugar de instalar desde un sistema Linux existente, también se puede utilizar un Live CD para construir un sistema LFS.
El proyecto anteriormente mantenía el Live CD de Linux From Scratch. El Live CD de LFS contiene todos los paquetes fuente (solo en la versión completa del Live CD), el libro de LFS, herramientas de construcción automatizadas y (excepto para la versión mínima del Live CD) un Xfce para trabajar. El LFS Live CD oficial ya no se mantiene, y no se puede utilizar para construir el LFS versión7 o posterior. Hay, sin embargo, dos construcciones no oficiales que se pueden utilizar para construir un kernel de 32 bits o 64 bits y el espacio de usuario, respectivamente, para LFS 7. x.
Primero, se debe compilar una cadena de herramientas que consiste en las herramientas utilizadas para compilar LFS, como GCC, glibc, binutils, y otras utilidades necesarias. Luego, el directorio raíz debe ser cambiado, (usando chroot), a la partición de la cadena de herramientas para comenzar a construir el sistema final. Uno de los primeros paquetes a compilar es glibc; después de eso, el linker de la cadena de herramientas debe ser ajustado para link contra el glibc recién construido, para que todos los otros paquetes que compondrán el sistema final puedan ser enlazados contra él también. Durante la fase chroot, la función hash de bash se desactiva y el directorio bin de la cadena de herramientas temporal se mueve al final de PATH. De esta forma los programas recién compilados aparecen primero en PATH y el nuevo sistema construye sobre sus propios componentes nuevos.

## Software requerido por LFS

El software siguiente es requerido en LFS versión 7.2:
| Autoconf 2.69 Automake 1.12.3 Bash 4.2 Binutils 2.22 Bison 2.6.2x86-64 Bzip2 1.0.6 Coreutils 8.19 DejaGNU 1.5 Diffutils 3.2 E2fsprogs 1.42.5 Expect 5.45 File 5.1 Findutils 4.4.2 Flex 2.5.37 Gawk 4.0.1 GCC 4.7.1 GDBM 1.10 Gettext 0.18.1.1 Glibc 2.16.0 GMP 5.0.5 | Grep 2.14 Groff 1.21 GRUB 2.00 Gzip 1.5 Iana-Etc 2.30 Inetutils 1.9.1 IPRoute2 3.5.1 Kbd 1.15.3 Less 444 LFS-Bootscripts 20120901 Libpipeline 1.2.1 Libtool 2.4.2 Linux 3.5.2 GNU m4 1.4.16 Make 3.82 Man-DB 2.6.2 Man-pages 3.42 MPC 1.0 MPFR 3.1.1 Ncurses 5.9 | Patch 2.6.1 Perl 5.16.1 Pkg-config 0.27 Procps 3.2.8 Psmisc 22.19 Readline 6.2 Sed 4.2.1 Shadow 4.1.5.1 Systemd 188 Sysklogd 1.5 Sysvinit 2.88dsf Tar 1.26 Tcl 8.5.12 Time Zone Data 2012e Texinfo 4.13a Udev-lfs Tarball 188 Util-linux-ng 2.21.2 Vim 7.3 XZ Utils 5.0.4 Zlib 1.2.7 |
El siguiente software es incluido en CLFS versión 1.1.0. Estos soportan varias arquitecturas.
| Autoconf 2.61 Automake 1.10.1 Bash 3.2 Bash Documentation 3.2 Bin86 (x86_64 non-multilib only) Binutils 2.18 Bison 2.3 Bzip2 1.0.4 CLFS-Bootscripts 1.0pre10 Coreutils 6.9 DejaGNU 1.4.4 Diffutils 2.8.7 E2fsprogs 1.40.4 Elftoaout 2.3 (Sparc and Sparc64 only) Expect 5.43.0 File 4.23 Findutils 4.2.32 Flex 2.5.35 Gawk 3.1.6 GCC 4.2.4 Gettext 0.17 Glibc 2.7 | Grep 2.5.3 Groff 1.19.2 GRUB 0.97 Gzip 1.3.12 Hfsutils 3.2.6 (PowerPC and PowerPC64 only) Iana-Etc 2.20 Inetutils 1.5 IPRoute2 2.6.23 Kbd 1.13 Less 418 LILO 22.8 (x86_64 non-multilib only) Libtool 1.5.26 Linux 2.6.24.7 GNU m4 1.4.10 Make 3.81 Man 1.6e Man-pages 3.01 Mktemp 1.5 Module-Init-Tools 3.4 Ncurses 5.6 Parted 1.8.8 (PowerPC and PowerPC64 only) Patch 2.5.9 | Perl 5.8.8 PowerPC Utils 1.1.3 (PowerPC and PowerPC64 only) Procps 3.2.7 Psmisc 22.6 Readline 5.2 Sed 4.1.5 Shadow 4.1.2 Silo 1.4.13 (Sparc and Sparc64 only) Sysklogd 1.5 Sysvinit 2.86 tar 1.20 Tcl 8.4.16 Texinfo 4.11 Tree 1.5.1.1 Udev 124 Util-linux-ng 2.14 Vim 7.1 Vim 7.1 language files (optional) Yaboot 1.3.13 (PowerPC and PowerPC64 only) Zlib 1.2.3 |