Home Indice Búsqueda Enlace About us
[LinuxFocus Image]
[Navegation Bar]
 Noticias  Archivos  Compañías  Consejos 

Crear una versión práctica de Linux

por Mooneer Salem


Introducción

¿Habéis visto alguno de esos sitios Web donde te prometen una versión de Linux muy útil con sólo uno o dos diskettes? En ellos no suelen haber demasiados programas ni tener acceso a ciertas aplicaciones. Trataré de mostrar cómo se hacen un disco de boot/root, que tendrá prácticamente todo lo que vayais a necesitar o a usar.

Antes de nada, necesitas uno o dos discos vírgenes, dependiendo de cuánto software vayas a poner en tu versión de Linux. Básicamente esta versión de Linux tendrá un disco boot/root y quizá un disco de utilidades. Si no conoces estos términos, te sugiero que eches un vistazo al capítulo 2 del Bootdisk-HOWTO antes de comenzar.

¡Ahora vamos a empezar! Estos son los pasos básicos para crear la versión de Linux en diskette:

  1. Compilar un kernel básico personalizado
  2. Crear un sistema de ficheros para tu disco
  3. Copiar todo en el/los diskette/s

Compilar el Kernel

Dado que un diskette sólo almacena 1.44 Megabytes (1440 Kilobytes) de datos, no puedes copiar el mismo kernel que utilizas al diskette. Primero debes conseguir los fuentes del núcleo y descomprimirlos en /usr/src/linux. Luego ejecuta la siguiente orden desde el directorio /usr/src/linux:

make config

Configura solamente aquello que realmente necesites. Yo, personalmente, sólo configuro el soporte para "ext2", soporte para la disquetera (floppy disk), y soporte para "PPP". Tus elecciones pueden se diferentes en función de lo que decidas incluir. Ahora introduce el siguiente comando:

make dep; make clean; make zImage

¡make zImage es muy importante! Comprime el kernel definitivo. Después de que termine la compilación, deberás buscar el nuevo núcleo en /usr/src/linux/arch/i386/boot bajo el nombre de zImage.

El sistema de ficheros: No es solamente un conjunto de ficheros

Ahora hemos de crear el sistema de ficheros (en inglés: filesystem, fs) para el diskette. En vez de copiar los ficheros tal cual directamente al diskette, los comprimiremos antes de copiarlos. Esto nos hará un poco más difícil la faena de modificar todo permanentemente. Primero tecleamos el siguiente comando:

dd if=/dev/zero of=[DEVICE] bs=1k count=3000

Donde [DEVICE] es "lugar" en el disco duro donde vas a guardar el sistema de ficheros descomprimido. Luego, introduce el siguiente comando y pulsa ENTER, sustituyendo [DEVICE] por el directorio en tu disco duro donde estás guardando el sistema de ficheros descomprimido:

mke2fs -m 0 [DEVICE]

Si make2fs te pregunta si realmente quieres hacer esto (Do you really want to do this?), acepta tecleando "y" (yes).

Después tenemos que montar este sistema de ficheros que hemos creado. Para ello, el núcleo que utilices tiene que permitir "montar ficheros", en otras palabras, ha de tener habilitada la posibilidad de "loopback devices". Para ello has de compilar el núcleo de tu máquina (no el núcleo que hemos creado, sino el de tu propia máquina) con la opción:

Loopback device support (CONFIG_BLK_DEV_LOOP) [M/n/y/?]
bien como módulo (M) o en el mismo núcleo (Y). Si lo compilas como módulo (lo más recomendable) luego tienes que insertar el módulo modprobe loop !No olvides rearrancar la máquina si has tenido que recompilar el núcleo!
mount -t ext2 DEVICE /mnt
Si se queja la orden mount puedes intentar con la siguiente orden:
mount -o loop -t ext2 DEVICE /mnt

Ahora debes copiar todos los ficheros que necesites en el nuevo sistema de ficheros. Primero, ponte en el directorio /mnt, (cd /mnt), y crea los siguientes directorios:

/dev
/pro
/etc
/bin
/lib
/mnt
/usr

Ahora crearemos el directorio /dev tecleando lo siguiente:

cp -dpR /dev /mnt/dev

Si se te acaban los i-nodos del diskette, puedes ir a /mnt/dev y borrar los archivos de dispositivo que no necesites. Cuando acabes de copiar los ficheros necesarios para /dev, ves a /etc. Para estar seguro copia todos los ficheros de /etc a /mnt/etc:

cp -dpR /etc /mnt/etc

Luego copia todo del directorio /lib en /mnt:

cp -dpR /lib /mnt/lib

Para el directorio /bin, copia sólo aquello que creas que necesitas en /mnt/bin.

Copiar todo a tu diskette

Ahora hemos de copiar todo en el/los diskette/s. Para hacer esto, debemos comprimir ahora el sistema de ficheros tecleando las siguientes ordenes:

cd /
umount /mnt
dd if=[DEVICE] bs=1k | gzip -9 > rootfs.gz

Ahora es importante comprobar el tamaño del núcleo. Ponte en /usr/src/linux/arch/i386/boot y teclea "ls -l". Luego divide el tamaño del núcleo entre 1024. Por ejemplo, si el tamaño es de 250000 bytes, entonces son 245 KB. En adelante, reemplaza [ROOTBEGIN] en las ordenes que aparezca por el número total de kilobytes que has calculado. Ahora copia el kernel al diskette usando el siguiente comando:

dd if=zImage of=/dev/fd0

Este comando grabará el kernel en el diskette. Luego introduce el siguiente comando para que el kernel pueda encontrar la raíz del sistema de ficheros en el diskette.

rdev /dev/fd0 /dev/fd0

Ahora tendrás que hacer un pequeño cálculo en hexadecimal. Suma 4000 al equivalente en hexadecimal de [ROOTBEGIN] (que en nuestro ejemplo es F5). Convierte el resultado a decimal y teclea el siguiente comando, sustituyendo 16629 con el resultado que tú has obtenido:

rdev -r /dev/fd0 16629

Finalmente, teclea lo siguiente para copiar el sistema de ficheros al diskette:

dd if=/rootfs.gz of=/dev/fd0 bs=1k seek=[ROOTBEGIN]

El sistema de ficheros raíz será copiado al diskette justo después del kernel. ¡Ya lo tienes! Para el segundo diskette, el proceso es más fácil. Copia los ficheros que quieras en el diskette. No obstante, para poder usar los ficheros que hay en el segundo disco, tendrás que entrar lo siguiente después de arrancar con el diskette:

mount /dev/fd0 /usr

Una nota final: si puedes perder un poco de tiempo, probablemente serás capaz de hacer una versión que puedes ofrecer al público como una "distribución" separada de Linux. ¡Piénsalo! : )


Traducido por Pedro Molla

Más información:
© 1998 Mooneer Salem
Páginas web mantenidaqs por Miguel A Sepulveda.