Documente Academic
Documente Profesional
Documente Cultură
Debian PORTADA
go4design, photocase.com
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].
20
Nmero 37
WWW.LINUX- MAGAZINE.ES
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
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
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
22
Nmero 37
WWW.LINUX- MAGAZINE.ES
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.
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
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