You are on page 1of 5

PORTADA Linux From Scratch

Debian PORTADA

go4design, photocase.com

Linux al gusto con Linux From Scratch

LINUX A MEDIDA
mente Linux. POR ERIC AMBERG
ncluso las distribuciones mnimas de Linux incluyen componentes que nunca necesitaremos. Para quien prefiere controlar todo lo que contiene su sistema Linux, existe la opcin de compilarlo todo desde cero. Con la construccin de un sistema paquete a paquete, incluidos el kernel y la terminal, obtenemos un sistema extremadamente reducido y rpido, adems de una comprensin mucho mayor de la estructura de Linux. El proyecto Linux From Scratch (LFS) ofrece instrucciones paso a paso para la creacin de nuestro propio sistema Linux. LFS mantiene adems un LiveCD que podemos usar como punto de partida. Slo hemos de seguir el manual de instrucciones de LFS para crear un sistema completo pieza a pieza. Recordemos que en este proceso se tarda mucho ms que en una simple instalacin desde CD. De hecho, podramos tardar das, e incluso semanas, pero el esfuerzo merece la pena para cualquiera que quiera saber cmo encajan las piezas de un sistema Linux. Durante el transcurso de la compilacin iremos comprendiendo muchos conceptos muy tiles para nuestro da a da con Linux.

Con Linux From Scratch podemos crear un sistema Linux personalizado con todo lo que necesitamos y nada ms. A medida que vayamos montndolo iremos nutriendo nuestro conocimiento sobre cmo funciona real-

Las Herramientas
El manual de Linux From Scratch est disponible en formato PDF, en texto o tambin en HTML desde el sitio web del proyecto [1]. Son necesarios unos conocimientos previos sobre el funcionamiento de la terminal de comandos: Debemos saber cmo crear, copiar, mover y elimi-

nar archivos y directorios. Tambin es recomendable un conocimiento bsico sobre la instalacin y uso de software bajo Linux. En particular, recomendamos la lectura previa de los documentos Software Building HOWTO [2], Linux Users Guide [3] y la lista de lecturas recomendadas del proyecto LFS [4].

Recursos Linux From Scratch


Linux From Scratch es principalmente una coleccin de documentos, aunque el proyecto tambin proporciona un LiveCD que sirve como fundamento o constructor del Linux de cosecha propia. En el sitio web de LFS [1] encontramos trucos, parches y otros materiales tiles. De acuerdo con el sitio de LFS, el proyecto consta de los siguientes componentes:
LFS: Linux From Scratch es el manual principal del que derivan todos los dems proyectos. BLFS: Beyond Linux From Scratch nos ayuda a ampliar nuestra instalacin terminada de LFS con componentes adicionales como Gnome o KDE. ALFS: Automated Linux From Scratch proporciona herramientas para la automatizacin y gestin de contrucciones LFS y BLFS. CLFS: Cross Linux From Scratch proporciona un sistema LFS para muchos tipos de sistemas. HLFS: Hardened Linux From Scratch se centra en la implementacin de un sistema LFS securizado. Hints: El proyecto Hints es una coleccin de documentos que dan consejos adicionales para la ampliacin del sistema LFS. LiveCD: El proyecto The Live CD proporciona un CD para usarlo como anfitrin o como disco de rescate de propsito general. Patches: El proyecto Patches sirve como repositorio centralizado para todos los parches relacionados con LFS.

20

Nmero 37

WWW.LINUX- MAGAZINE.ES

Linux From Scratch PORTADA

como cadena de herramientas. El nuevo sistema Linux se montar dentro de dicha cadena, por lo que hemos de resolver las dependencias de los paquetes del sistema anfitrin. Despus de la instalacin del Figura 1: El LFS Live CD tiene todo lo necesario para construir nue- campamento base stro propio sistema de archivos Linux. usamos chroot para cambiar a un nuevo entorno en el que instalamos ms El Sistema Anfitrin paquetes; luego pasamos a los scripts de Un sistema nuevo siempre hay que consarranque, el kernel y el cargador de truirlo sobre uno ya existente llamado arranque. Finalmente podemos arrancar sistema anfitrin. El libro de LFS especinuestra mquina desde nuestro nuevo fica los requisitos mnimos, aunque sistema de archivos LFS. basta con una distribucin relativamente Vamos All! reciente. Para estar seguros podemos comparar los requisitos mnimos con las Para comenzar, descargamos la ltima especificaciones de nuestro sistema anfiversin del Live CD de LFS (actualmente trin. La seccin Requisitos del Sistema la versin 6.3-r2160) y la quemamos en Anfitrin incluye un script que nos un CD. Conviene imprimir el manual asiste en la tarea de comprobar los compara tenerlo cerca al arrancar el LiveCD. ponentes necesarios. Las fuentes se encuentran en /lfssources. El CD contiene la ltima versin o LiveCD de la documentacin de LFS, en /usr/ En vez de eso podemos usar el LFS Live share/LFS-BOOK-6.3-HTML. Como con CD [5] (Figura 1). ste incluye todas las cualquier otro proyecto, debe leerse el herramientas necesarias, as como un archivo README antes de comenzar. juego completo de fuentes. El LiveCD Creando una Particin Knoppix es otra alternativa. A la hora de usar la documentacin de LFS conviene La instalacin de LFS necesita una partiasegurarse de que disponemos de las cin separada. Para crearla iniciamos ltimas revisiones de las erratas publicanuestra herramienta de particionado das en el sitio web [6]. favorita, cfdisk, por ejemplo, y creamos una particin Linux. Una instalacin Una Visin General mnima necesita al menos 1.3 GB de Antes de proceder con la elaboracin de espacio libre. nuestro Linux de marca propia, repasareDependiendo de las aplicaciones que mos el proceso completo. Para comenplaneemos instalar, necesitamos otros 2 zar, creamos una particin, descargamos a 4GB de espacio adicional. Aunque la los paquetes necesarios y compilamos instalacin necesita mucho menos espalas herramientas que vamos a usar. A cio, el proceso de compilacin s que este software de desarrollo se le conoce requiere una buena cantidad de memoria temporal. Tambin es muy recomendable la creacin de una particin swap. Listado 1: Activando una Despus de crear la particin instalaParticin Swap mos en ella un sistema de archivos ext3. 01 # export LFS=/mnt/lfs Suponiendo que la particin sea /dev/ 02 # mkdir -pv $LFS hda1, el comando para crear el sistema de archivos es mke2fa -jv /dev/hda1. En 03 # mount -v -t ext3 /dev/hda1 la documentacin se recomienda tam$LFS bin el uso del paquete E2fsprogs de las 04 # swapon -v /dev/hda2 fuentes de LFS, en lugar de las herra-

mientas de nuestra distribucin, para evitar problemas con funciones incompatibles extra. Podemos inicializar la segunda particin (la swap), en caso de haberla creado, mediante mkswap /dev/hda2; montamos entonces la particin principal, que podemos hacer como /mnt/lfs. Y como esta ruta se usa una y otra vez, conviene guardarla en una variable. Lo siguiente es crear un directorio y activar la particin swap (ver Listado 1).

Paquetes y Parches
El captulo 3 del libro de LFS indica los paquetes y parches necesarios para la instalacin mnima. Para nuestros primeros pasos, los autores recomiendan conservar las versiones de paquetes que se sabe que funcionan. Si estamos usando el LiveCD de LFS no tenemos que preocuparnos por la versiones de los paquetes. De no ser as, puede verse la direccin de descarga de cada paquete en la documentacin. Para guardar los paquetes creamos una carpeta nueva y configuramos los permisos. El segundo comando aade el sticky bit, especificando +t en conjuncin con el permiso de escritura.
# mkdir -v $LFS/sources # chmod -v a+wt $LFS/sources

En caso de usar el LiveCD, copiamos todo al directorio recin creado: cp /lfs-sources/* $LFS/sources. De lo contrario, usamos ese directorio como destino para las descargas.

Preparacin
La cadena de herramientas que comentbamos ms arriba necesita su propio directorio, $LFS/tools, que podemos crear mediante mkdir -v $LFS/tools. Luego ejecutamos ln -sv $LFS/tools / para crear un enlace hacia $LFS/tools como /tools. La extraa sintaxis es en realidad correcta. La ventaja es que la cadena de herramientas siempre ser capaz de hacer referencia a /tools, tanto si est en el sistema anfitrin como si

GLOSARIO
Sticky bit: Este bit supone que slo el propietario del archivo pueda eliminarlo, no importa quin tenga permisos de escritura sobre la carpeta.

WWW.LINUX- MAGAZINE.ES

Nmero 37

21

PORTADA Linux From Scratch

est en la particin LFS, que convertiremos posteriormente en nuestra carpeta raz temporal mediante chroot. Para compilar los paquetes fuente hemos de asegurarnos de usar una cuenta de usuario sin privilegios; de otro modo podramos daar el sistema anfitrin. Siempre es buena idea crear un usuario lfs y darle acceso total a $LFS/ sources y $LFS/tools, para cambiar luego con su a la nueva cuenta:
# groupadd lfs # useradd -s /bin/bash -g lfs U -m -k /dev/null lfs # passwd lfs # chown -v lfs $LFS/tools # chown -v lfs $LFS/sources # su - lfs

Creacin de una Cadena de Herramientas


El siguiente paso es instalar un Linux mnimo temporal en el que compilar el sistema LFS. El captulo 5.1 del manual de LFS ofrece una visin general que suele espantar a la gente debido a la complejidad del proceso, pero no hay que desfallecer!. Las subsiguientes secciones del manual proporcionan detalles para cada paso. La variable $LFS debera apuntar a la carpeta de LFS. Adems necesitamos conocer la plataforma del sistema anfitrin, tambin llamada target triplet. Normalmente, en los PCs actuales se trata de i686-pc-linux-gnu. El nombre del enlazador dinmico es muy importante para lo que resta del proceso. La mayora de sistemas Linux usan ld-linux.so.2, pero podemos determinarlo mediante readelf -l /bin/ls | grep interpreter. El siguiente paso es descomprimir, compilar e instalar los numerosos paquetes bsicos auxiliares. El Captulo 5 del manual indica los paquetes a instalar y el orden en el que hacerlo. El howto presupone que las fuentes de los paquetes se encuentran en $LFS/ sources, que escribimos tar -xjf nombre_del_paquete para descomprimirlas, y que cambiamos a la carpeta $LFS/sources/nombre_del_paquete. A veces las referencias a rutas son relativas en el manual, como en mkdir -v ../gcc-build; la carpeta desde la que operamos es crtica por tanto. La compilacin de algunos paquetes puede tardar bastante. Para crear la cadena de herramientas instalamos en primer lugar las herramientas crticas de desarrollo (el compilador, el enlazador, el ensamblador), instalando los paquetes Binutils y GCC, la librera estndar de C glibc y la API del kernel. Para desvincularlos del sistema anfitrin, enlazamos todos los programas con las nuevas libreras, e instalamos un nmero de paquetes necesarios para activar y poder usar las suites de GCC y Binutils. Luego ya podremos ejecutar make para comprobar que compilan limpiamente y que funcionarn los programas.

Figura 2: Creacin de un entorno de instalacin independiente en varios pasos.

La documentacin de LFS explica los comandos para aadir usuarios (Captulo 4.3), aunque siempre podemos leer la pgina de manual del comando (man useradd).

Entorno de Usuario
El siguiente paso es la creacin de un entorno sin variables potencialmente peligrosas. Para hacerlo creamos un ~/ .bash_profile especfico del usuario con:
exec env -i HOME=U $HOME TERM=$TERU M PS1=\u:\w\$ /bin/bash

ejecutamos el comando patch para parchear el cdigo de GCC. Los parches normalmente arreglan problemas de seguridad y modifican lo que los desarrolladores consideran necesario cambiar antes de la publicacin de la siguiente versin. En el transcurso de la instalacin tendremos que instalar parches para varios paquetes.

Optimizacin de Memoria
Despus de instalar los paquetes indicados en el Captulo 5, ya tenemos un entorno funcional independiente del sistema anfitrin que usaremos para construir el sistema LFS en el siguiente paso. De todas formas, no pasa nada si se quiere optimizar la memoria antes. Por ejemplo, podemos ejecutar strip strip-debug /tools/lib/* y strip strip-unneeded /tools/{,s}bin/* para eliminar los smbolos de depuracin de los archivos ejecutables y las libreras. Con esto ahorramos unos 70MB de espacio, y otros 20MB si eliminamos la documentacin con rm -rf /tools/{info,man}. El ltimo paso en la creacin de la cadena de herramientas es cambiar su propietario: chown -R root:root $LFS/tools. Si hemos estado trabajando anteriormente como lfs, ahora tenemos que hacernos root.

Esta lnea simplemente define las variables HOME, TERM y PS1 e inicia una nueva terminal Bash. Como terminal non-login, la terminal Bash analiza el archivo ~/.bashrc, que debera contener solamente lo siguiente:
set +h umask 022 LFS=/mnt/lfs LC_ALL=POSIX PATH=/tools/bin:/bin:/usr/bin export LFS LC_ALL PATH

Una vez ms, estas lneas dan un entorno limpio al usuario lfs. El manual de LFS explica todas estas opciones detalladamente. Analizamos el archivo como usuario lfs mediante source ~/.bashr. El sistema anfitrin ya est preparado para la cadena de herramientas.

Parches
Antes de continuar, instalamos GCC y Binutils una segunda vez para permitir que estas herramientas usen las nuevas libreras y el nuevo enlazador. Entonces

Instalacin del Sistema LFS Bsico


Ya podemos instalar el sistema LFS. El Captulo 6 del manual de LFS explica los pasos a seguir. Para crear los directorios en los que montaremos los sistemas de archivos virtuales necesarios para el ker-

22

Nmero 37

WWW.LINUX- MAGAZINE.ES

PORTADA Linux From Scratch

Listado 2: El Entorno de Chroot


01 chroot $LFS /tools/bin/env -i HOME=/root 02 TERM=$TERM PS1=\u:\w\$ 03 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin /tools/bin/bash login +h

Calentando Motores!
El Captulo 8 comienza con la instalacin del archivo /etc/fstab, que define dnde, en qu orden y con qu opciones monta el sistema las particiones. Despus de editar el archivo ya podemos pasar a instalar el corazn de nuestro sistema Linux: el kernel. Lo que nos falta es un cargador de arranque. El Captulo 8.4 nos ensea cmo configurar Grub. Lo creamos o no, ya est todo, y despus de unas tareas de limpieza (Captulo 9.3) podemos arrancar nuestro nuevo sistema LFS.

Listado 3: Modificando el Chroot


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

nel, escribimos mkdir -pv $LFS/{dev,proc,sys}. Udev necesita adems los archivos de dispositivo /dev/console y /dev/null, que podemos crear mediante:
# mknod -m 600 U $LFS/dev/console c 5 1 # mknod -m 666 U $LFS/dev/null c 1 3

Seguidamente creamos los archivos de dispositivo en /dev. Usamos la opcin bind del comando mount para enlazar la carpeta /dev del sistema anfitrin (mount -v bind /dev $LFS/dev). Se explica detalladamente en el Captulo 6.2.2. Adems, montamos el sistema de archivos virtual del kernel con los siguientes comandos:
# mount -vt devpts devpts U $LFS/dev/pts # mount -vt tmpfs shm U $LFS/dev/shm # mount -vt proc proc U $LFS/proc # mount -vt sysfs sysfs U $LFS/sys

chroot nos permite crear una carpeta raz temporal en la carpeta que elijamos. Despus de ejecutar los comandos del ejemplo, elegimos /mnt/lfs como entorno de chroot (Listado 2). En el listado 2 tambin se configuran los parmetros adecuados del nuevo entorno. Continuamos con las instrucciones del Captulo 6.5 para la creacin de una estructura de directorios (de acuerdo a FHS) para el nuevo sistema LFS. Creamos un par de archivos necesarios (ver Captulo 6.6), como /etc/mtab, /etc/ passwd o /etc/group, y un par de enlaces simblicos hacia varios programas, que otras herramientas necesitarn. Luego instalamos los paquetes sueltos como haramos normalmente. Despus de instalar todos los paquetes, puede que queramos eliminar de todos nuestros binarios los smbolos de depuracin superfluos (Captulo 6.59). Con esto ahorramos otros 90MB de espacio. Decimos adis al entorno funcional temporal (usado por la cadena de herramientas), que se encuentra en /tools. Para conseguirlo, modificamos el comando chroot para que use el nuevo entorno (ver Listado 3). Ahora ya podemos deshacernos del directorio /tools.

Y Ahora Qu?
Con tan slo un par de funciones y programas hemos construido un sistema mnimo con LFS. Aparte de las herramientas estndar, este sistema no ofrece mucho ms. Sin embargo, el subproyecto BLFS (ver el cuadro Recursos Linux From Scratch) nos ofrece mucho ms y nos muestra cmo instalar ms aplicaciones con el fin de conseguir un Linux completamente personalizado. Habiendo llegado hasta aqu, ya podemos pensar en trminos de administracin de paquetes. Precisamente el captulo 6.3 del manual de LFS tiene un par de sugerencias. Si nos interesa una proteccin del sistema adicional, podemos continuar con la documentacin sobre HLFS, tambin disponible en el sitio web I del proyecto.

RECURSOS
[1] Proyecto LFS: http:// linuxfromscratch.org [2] HOWTO Software-building: http:// www.tldp.org/HOWTO/ Software-Building-HOWTO.html [3] Gua del Usuario de Linux: http:// www.linuxhq.com/guides/LUG/ guide.html [4] Para leer antes de comenzar: http:// www.linuxfromscratch.org/hints/ downloads/files/ essential_prereading.txt [5] LFS Live CD: http://www. linuxfromscratch.org/livecd/ download.html [6] Listado de erratas de LFS: http:// www.linuxfromscratch.org/lfs/errata/ [7] FHS: http://en.wikipedia.org/wiki/ Filesystem_Hierarchy_Standard

Ya tenemos todo lo necesario para usar el nuevo entorno funcional. El comando

Instalacin de los Scripts de Arranque


El paquete lfs-bootscripts-6.3 contiene varios scripts para iniciar y parar el sistema en el arranque o al apagar. Probablemente tengamos que adaptar algunos de ellos, pero la mayora deben funcionar tal cual. Para saber ms sobre la correlacin entre los componentes crticos de nuestro sistema Linux, ver el Captulo 7. Hemos de asegurarnos de aadir cualquier archivo de configuracin que falte (para la red por ejemplo).

GLOSARIO
Udev: Las versiones 2.6 y posteriores del kernel usan Udev para la gestin dinmica de dispositivos. Udev reemplaza al antiguo sistema de archivos devfs. El Captulo 7.4 del manual de LFS nos da una introduccin detallada a Udev. FHS: La jerarqua estndar para sistemas de archivos se refiere a una hoja de ruta a la hora de configurar un sistema de archivos de Linux [7].

24

Nmero 37

WWW.LINUX- MAGAZINE.ES

You might also like