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:
-
Compilar un kernel básico personalizado
-
Crear un sistema de ficheros para tu disco
-
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! : )
|