Boot-CD

TÍTULO:			Boot-CD
VERSIÓN LFS:	Todas
AUTOR:			Nicholas Dille <webmaster@rakshas.de>
TRADUCTOR:	Proyecto LFS-ES

SINOPSIS:
	Cómo crear un CD de Arranque desde un sistema LFS

RECETA:
ver 1.4
25/07/2001

ÍNDICE
--------

    0. Prefacio
    1. Por qué crear un CD de Arranque
    2. Personalización del Núcleo
    3. Preparación del sistema LFS
        3.1 Introducción
        3.2 Enlazando /tmp y /var al disco duro
             3.2.1 Manejo de /tmp
             3.2.2 Manejo de /var
        3.3 Enlazando /tmp y /var a ramdisk
             3.3.1 Manejo de /tmp
             3.3.2 Manejo de /var
        3.4 Guiones de Arranque: Boot script(s)
    4. Guión de Instalación
    5. Creando un disco de arranque
    6. Tostando
    7. Listados de
        7.1  /
        7.2  /etc/init.d
        7.3  /etc/rc0.d
        7.4  /etc/rc1.d
        7.5  /etc/rc2.d
        7.6  /etc/rc3.d
        7.7  /etc/rc4.d
        7.8  /etc/rc5.d
        7.9  /etc/rc6.d
        7.10 /etc/rcS.d
        7.11 /etc/inittab
    8. Historia


1. Por qué crear un CD de Arranque
   -------------------------------

    Aunque no esté desde hace tiempo con LFS, ya leí varios asuntos en lfs-discuss 
    sobre gente que tiene problemas compilando ciertas partes de un sistema
    LFS debido a la versión beta de gcc u otros paquetes importantes incluidos en
    su distribución favorita.
    Además no me gusta la idea de instalar una distribución "comercial"  sino
    instalar un sistema LFS personalizado. No estaría bien ;-)

    Por tanto, creí que seríamos capaces de crear un CD arrancable con alguna 
    clase de sistema Linux dentro que provea un entorno apropiado para la instalación.

    ¿Y qué mejor que un LFS? (Te dejaría uno a ti ...)

    Esto también da alguna pistas sobre arrancar automáticamente la instalación,
    la cual es dada para que tú la programes/configures. Pero probablemente 
    empezaríamos usando lfs (¿para dar a los probadores?).

    Así que esto sería todo.


2. Personalización del núcleo (kernel)
   -----------------------------------

    Puesto que estamos involucrados en el arranque desde cd y en el uso del
    cd imagen como una partición root, necesitamos soporte para ISO9660 compilado
    en el núcleo. ¡Esta parte es absolutmamente vital!
    Cuando intentamos montar la partición raíz el núcleo no tiene ningún acceso a
    cualquier clase de módulos (ya que están en la partición raíz que será montada)
    y por tanto nos hemos de fiar en el soporte ya compilado en el núcleo.

    Después de que el sistema haya arrancado, también querremos particionar 
    nuestro disco duro. Por consiguiente, deberías incluir todos los sistemas de 
    ficheros que podrías necesitar durante la instalación.

    [Hasta ahora no he probado incluir los sistemas de ficheros adicionales como
     módulos pero supongo que funcionarían bien]


3. Preparación del sistema LFS
   ---------------------------

3.1 Introducción
    -------------

    El mayor problema que supone tener una partición raíz sólo-lectura es que
    alguna parte del sistema puede confiar en un acceso de escritura a
    determinados directorios.

    Echemos un vistazo al contenido de $LFS de un sistema típico:

        drwxr-xr-x   2 root     root         1603 Oct 15 22:16 bin
        drwxr-xr-x   4 root     root         4096 Dec  5 00:12 boot
        drwxr-xr-x   8 root     root        44096 Feb 11 10:02 dev
        drwxr-xr-x  45 root     root         5334 Feb 11 11:02 etc
        drwxr-xr-x  13 root     root          250 Jan  9 00:39 home
        drwxr-xr-x   5 root     root         1869 Jan  4 23:58 lib
        drwxr-xr-x   5 root     root           95 Aug 27 22:12 mnt
        dr-xr-xr-x  54 root     root            0 Feb 11 11:02 proc
        drwx--x--x  20 root     root          679 Jan 30 17:27 root
        drwxr-xr-x   5 root     root         5068 Jan  4 23:58 sbin
        drwxrwxrwt   5 root     root          200 Feb 11 10:03 tmp
        drwxr-xr-x  27 root     root          663 Dec 13 17:34 usr
        drwxr-xr-x  26 root     root          541 Sep  5 23:53 var

    Los siguientes directorios no deberían causar ningún problema:
        bin, boot, etc, lib, root, sbin, usr
    [¿necesitas una explicación del por qué no hay problema?]
    El contenido de esos directorios debería ser estático y raramente cambiado.

    Los puntos de montaje para otros sistemas de ficheros no causarán problemas,
    porque puedes montar un sistema de ficheros con permisos de escritura en un
    punto de montaje de un sitema de ficheros en modo sólo-lectura.
    Supongo que el núcleo guarda esos mapas en la memoria y no en los inodos.
    Eso significa que podemos anular los problemas causados por: dev, home, mnt, 
    proc.

    Nos quedan tmp y var.


3.2 Enlazando /tmp y /var al disco duro
    -----------------------------------

    Hasta ahora hemos preferido esta versión ya que intantamos construir un cd
    arrancable que sea útil en la mayoría de los sistemas incluyendo aquellos con
    muy poca memoria ram.


3.2.1 Manejo de /tmp
      --------------

    Como dice su nombre /tmp es utilizado para almacenar datos temporales. 
    Desafortunadamente no está bajo nuestro control cómo es usado este directorio
    y, por tanto, necesita un manejo especial.

    Ya que hay una estructura no estandarizada para esta ubicación podemos 
    simplemente enlazarlo al directorio tmp en la partición que usaremos para la
    instalación.

    Por ejemplo, si pretendes compilar tu sistema en /lfs (que entonces será $LFS
    durante la instalación) necesitas incluir un enlace simbólico para /tmp en el CD
    apuntando a /lfs/tmp.
    Si te decides por una versión de enlace simbólico para la manipulación de /tmp,
    tendrás que decidir en qué directorio instalarás ¡antes de tostar el CD!


3.2.2 Manejo de /var
      --------------

    /var normalmente contiene tiempos de ejecución o tareas de estado y también
    pueden ser cambiados [¿correcto? ¿expresado un poco chapuzas?].

    Ya que /var puede contener directorios de colas de correo, ficheros pid y tiene 
    una estructura de directorio predefinida, no podemos tan sólo enlazarlo a nuestra 
    partición de instalación, ya que puede provocar colisiones con progarmas en 
    ejecución en nuestro entorno chroot o quizás incluso antes.

    Así que podríamos comprimir /var y ponerlo en / lo que se hará ejecutando el 
    siguiente comando en el directorio raíz de tu CD:

        tar cfz var/ var.tar.gz

    Después del arranque y después de montada nuestra partición de instalación 
    (digamos en  /lfs), creamos un directorio "el_que_sea" y descomprimiremos /var 
    en "el_que_sea".

    El /var original tendría un enlace a este directorio, por ejemplo
        var -> /lfs/el_que_sea/var


3.3 Enlazando /tmp y /var al disco virtual en memoria (ramdisk)
    -----------------------------------------------------------

    Antes de nada necesitamos crear el disco virtual en memoria (ramdisk) que yo 
    hago con los siguientes comandos:

        dd if=/dev/zero of=/dev/rd/0 bs=1k count=4096
        mke2fs -m 0 /dev/rd/0
        mount /dev/rd/0 /rd

    Por favor, recuerda que tienes que cambiar el nombre del dispositivo al nombre
    apropiado en tu sistema.¡Este fue creado usando devfs!

    Los próximos dos sub-capítulos apenas han cambiado ya que /tmp y /var 
    simplemente están enlazados a /rd/tmp y /rd/var


3.3.1 Manejo de /tmp
      --------------

    Crea un enlace en tu directorio raíz para que /tmp apunte a /rd/tmp/.

    Durante el arranque necesitas crear el directorio /rd/tmp/ para que el
    enlace desde /tmp no apunte a nirvana.


3.3.2 Manejo de /var
      --------------

    Crea un enlace en tu directorio raíz para que /var apunte a /rd/var/.
    Necesitarás también un tarball de tu /var original y colocarlo en / 
    lo cual ha sido descrito en 3.2.2.

    Durante el arranque necesitarás desempaquetar el paquete tar
    de /var en /rd.


3.4 Guiones de arranque
    ------------------------

    Despojé /etc/init.d y /etc/rc?.d de todo aquello que no fuese absolutamente
    vital. La única tarea dejada es la carga del mapa del teclado.

    Por favor, dirígete al listado de directorio (capítulo 5) al final del documento.


4. Guión de Instalación
   --------------------

    Esta parte depende absolutamente de ti. Podrías querer incluir un LFS o algún
    sistema compilado que hayas escrito tú mismo. Quizá incluso abandones esta
    parte e instales manualmente los paquetes.
    Pero de todos modos tendrás que poner los paquetes en el CD y tenerlos a mano
    para cuando los necesites.

    Házte una idea de lo que mi CD hace: Pongo un guión en /etc/init.d/install
    que será lanzado desde inittab durante el arranque. Esto preguntará al usuario
    alguna cosa importante, es decir, cual será la partición a instalar.
    Entonce arrancará la compilación.

    Incluso podrías querer arrancar una bash y dejar fuera toda clase de instalación
    automática. Esto sucederá si pasas un parámetro adicional al núcleo desde el 
    cargador del arranque "init=/bin/bash".


5. Creando un disquete de arranque
   -------------------------------

    Aunque algunos de vosotros podríais tener la tentación de preguntar el por qué no
    empiece a argumentar; de todas formas, describiré ahora el proceso para crear 
    un disquete de arranque utilizando grub. Es una cuestión de fe ;-)

    Primero necesitas conseguir grub de http://www.gnu.org e instalarlo en tu sistema
    con los siguientes comandos:

            ./configure --prefix=/usr &&
            make &&
            make install

        a) Puedes crear un sistema de ficheros ext2 en un disquete.
            (Por favor usa un disquete vacío o estate seguro de comprender que 
	    perderás todos los datos del disquete. Demasiado para renunciar a hacerlo)

        b) Monta este disquete en tu directorio de montaje de disquete favorito
            (llamémoslo $FLOPPY)

        c) Crea /boot y /boot/grub en tu disquete:

                mkdir -p $FLOPPY/boot/grub

        d) Copia el cargador de arranque de grub al disquete:

                cp /usr/share/grub/i386-pc/stage* $FLOPPY/boot/grub

        e) Pon tu núcleo en $FLOPPY/boot y llámalo "linux"

        f) Arranca el intérprete de comandos de grub ejecutando "grub"

        g) Instala grub en tu disquete de arranque (todavía en el intérprete de 
	    comandos de grub):

                install (fd0)/boot/grub/stage1 (fd0) (fd0)/boot/grub/stage2

        h) Ahora necesitas crear el archivo $FLOPPY/boot/grub/menu.lst con los si-
	   guientes contenidos:

                default 0
                timeout 2

                title        template
                root (fd0)
                kernel (fd0)/boot/linux devfs=mount root=/dev/cdroms/cdrom0

            Si no usas devfs, por favor borra "devfs=mount" de la última línea
            de menu.lst y reemplaza "/dev/cdroms/cdrom0" con el nombre de tu 
            dispositivo de cdrom.

    Si quisieras mantener el cd arrancable tan genérico como fuera posible no
    necesitas preocuparte del nombre del dispositivo cdrom ya que serás capaz de
    editar las entradas de menú del grub en tiempo de arranque para que refleje
    el sistema subyacente.

    Ahora ya estás preparado para tostar la instalación de tu LFS en un CD que sea
    capaz de arrancar.


6. Tostando
   --------

    Después de crear un apropiado disquete de arraque con tu núcleo personalizado 
    (mira 2) pon la imagen en /boot.
    Para hacerlo ejecuta este comando en el directorio raíz de tu sistema lfs:

        dd if=/dev/floppy/0 of=boot/image bs=1024

    Los que no uséis devfs tendréis que sustituir
    /dev/floppy/0 por /dev/fd0.

    Para tostar todo el conjunto en el CD yo utilizo el siguiente comando:

        mkisofs -rlDJLV "LFS" /lfscd -b boot/image -c boot/catalog \
            | cdrecord -v -eject dev=/dev/cdroms/cdrom0 speed=4 -data -

    Cosas a verificar:

        a) No uses -f. Provoca que los enlaces del sistema sean ignorados.

        b) Sustituye dev=...  por tu dispositivo cdrom.


7. Listados
   --------

7.1  /
     --

        drwxr-xr-x   2 root  root    35 Feb  9 21:10 alfs
        drwxr-xr-x   2 root  root  1250 Feb  9 20:10 bin
        drwxr-xr-x   3 root  root   295 Feb 10 14:05 boot
        drwxr-xr-x   3 root  root    54 Feb  9 17:33 dev
        drwxr-xr-x  12 root  root   795 Feb 12 13:48 etc
        drwxr-xr-x   2 root  root    35 Feb  9 17:33 home
        drwxr-xr-x   3 root  root  2494 Feb  9 20:52 lib
        drwxr-xr-x   2 root  root    35 Feb  9 17:33 mnt
        drwxr-xr-x   2 root  root    35 Feb  9 17:33 proc
        drwxr-x---   2 root  root    64 Feb  9 18:13 root
        drwxr-xr-x   2 root  root  1272 Feb  9 20:10 sbin
        lrwxrwxrwx   1 root  root     8 Feb 10 21:57 tmp -> alfs/tmp
        drwxr-xr-x  14 root  root   346 Feb  9 20:10 usr
        lrwxrwxrwx   1 root  root    14 Feb 10 21:57 var -> alfs/00-rw/var
        -rw-r--r--   1 root  root  1043 Feb 10 21:56 var.tar.gz


7.2  /etc/init.d
     ------------

    Este directorio contiene un nuevo guión "install" que sigue a través del proceso de
    instalación y sería específico para tu configuración.

        -rwxr-xr--   1 root  root  1734 Jan 26 02:05 checkfs
        -rwxr-xr--   1 root  root  1118 Jan 26 02:05 ethnet
        -rwxr-xr--   1 root  root   867 Feb  2 02:46 fcron
        -rwxr-xr--   1 root  root  4940 Jan 26 02:05 functions
        -rwxr-xr--   1 root  root    83 Jan 26 02:05 halt
        -rwxr-xr-x   1 root  root   988 Feb 12 13:51 install
        -rwxr-xr--   1 root  root   200 Jan 26 02:05 loadkeys
        -rwxr-xr--   1 root  root   725 Jan 26 02:05 localnet
        -rwxr-xr--   1 root  root   355 Jan 26 02:05 mountfs
        -rwxr-xr--   1 root  root  4219 Jan 26 02:05 rc
        -rwxr-xr--   1 root  root   235 Jan 26 02:05 rcS
        -rwxr-xr--   1 root  root   123 Jan 26 02:05 reboot
        -rwxr-xr--   1 root  root   276 Jan 26 02:05 sendsignals
        -rwxr-xr--   1 root  root   338 Jan 26 02:05 setclock
        -rwxr-xr--   1 root  root  1062 Jan 26 02:05 sysklogd
        -rwxr-xr--   1 root  root   696 Jan 26 02:05 template
        -rwxr-xr--   1 root  root   234 Jan 26 02:05 umountfs


7.3  /etc/rc0.d
     -----------

        lrwxrwxrwx   1 root  root  21 Feb 12 13:44 S80sendsignals
                                                    -> ../init.d/sendsignals
        lrwxrwxrwx   1 root  root  14 Feb 12 13:44 S99halt -> ../init.d/halt


7.4  /etc/rc1.d
     -----------

    [empty]


7.5  /etc/rc2.d
     -----------

    [empty]


7.6  /etc/rc3.d
     -----------

    [empty]


7.7  /etc/rc4.d
     -----------

    [empty]


7.8  /etc/rc5.d
     -----------

    [empty]


7.9  /etc/rc6.d
     -----------

        lrwxrwxrwx 1 root  root   21 Feb 12 13:44 S80sendsignals
                                                   -> ../init.d/sendsignals
        lrwxrwxrwx 1 root  root   16 Feb 12 13:44 S99reboot -> ../init.d/reboot

7.10 /etc/rcS.d
     -----------

        lrwxrwxrwx 1 root  root   18 Jan 26 02:11 S30loadkeys
                                                   -> ../init.d/loadkeys


7.11 /etc/inittab
     -------------

    Por favor, ten presente que reemplacé la definición para una 'agetty' (terminal) 
    en vc/1 con el guión de instalación /etc/init.d/install que sólo se ejecutará una 
    vez (atento: "una vez").
    También he borrado 4 de las 5 definiciones de 'agetty' restantes ya que la 
    instalación lo hará automáticamente.

        # Comineza /etc/inittab

        id:3:initdefault:

        si::sysinit:/etc/init.d/rcS

        l0:0:wait:/etc/init.d/rc 0
        l1:S1:wait:/etc/init.d/rc 1
        l2:2:wait:/etc/init.d/rc 2
        l3:3:wait:/etc/init.d/rc 3
        l4:4:wait:/etc/init.d/rc 4
        l5:5:wait:/etc/init.d/rc 5
        l6:6:wait:/etc/init.d/rc 6

        ft:06:respawn:/sbin/sulogin

        ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

        su:S1:respawn:/sbin/sulogin
        1:2345:respawn:/sbin/agetty vc/1 9600
        2:2345:respawn:/sbin/agetty vc/2 9600

        # Fin de /etc/inittab


8. Historia
   ---------

    2001-07-25  liberada la versión 1.4:
                De acuerdo con una sugerencia de Gerard añadí una pocas líneas 
		describiendo cómo logar una imagen de arranque para disquete y 
		coloarla en el árbol de lfs para el cd de arranque.
                Correcciones: - Lo más importante era fijar la instrucción de crear un
                               disquete de arranque en donde había olvidado el comando
			       para instalar grub en el disquete.
                             - Borré/cambié algunas instrucciones olvidadas de mi CD
			       original en 4 y 7.11.
                Adiciones: - Añadidas algunas descripciones más a 3.2.1, 3.2.2

    2001-06-22  liberada la versión 1.3:
                Añadí instrucciones para crear un disquete de arranque basado en grub.

    2001-03-10  liberada la versión 1.2:
                Después de tener varios correos de gente preguntando por una nueva 
		versión de este Como con algunas recetas para crear el cd con soporte 
		de memoria en disco (ramdisk).

    2001-02-12  liberada la versión 1.0