lunes, 13 de septiembre de 2010

Etc en una particion separada


Bueno primero que nada pues espero les sirva este pequeño tutorial, si es que alguien lo lee. Pero eso es otra cuestión. Básicamente como hobby estoy jugando un poco con sistemas “embebidos” y como mi sistema embebido usa una compact flash para lectura y escritura de datos y debido a que estas tarjetitas tienen un tiempo de vida correspondiente al nivel de escritura que se haga, pues me tome un tiempo en hacer un pequeño diseño de que es lo que necesito para mejorar este sistema y llegue a la conclusión de separar la partición etc del sistema base:

Una pequeña recomendación es que siempre es bueno hacer esto sobre una maquina virtual con la ayuda de los snapshots podemos regresar la configuración sin tener que hacer todo de nuevo.


Básicamente creamos un particionado en donde la partición de etc se encuentre separada, algo como esto:


/dev/sda5 on / type ext3

/dev/sda8 on /etc type ext3 (rw,relatime,errors=continue,data=ordered)

/dev/sda1 on /boot type ext3 (ro,nosuid,nodev)

/dev/sda6 on /home type ext3 (rw,noexec,nosuid,nodev)

/dev/sda3 on /var type ext3 (rw)

  1. Usamos un live cd (de preferencia alguno de ubuntu) para hacer todo nuestro trabajo.

  2. Ejecutamos un Shell e instalamos el debootstrap

    apt-get install debootstrap

  3. Bueno ahora es necesario que montemos nuestro sistema, por lo cual haremos los siguiente, crearemos una carpeta en mnt llamada grip:

    mkdir /mnt/grip

    mount /dev/sda5 /mnt/grip

    mkdir /mnt/grip/boot

    mkdir /mnt/grip/home

    mkdir /mnt/grip/var

    mkdir /mnt/grip/etc

    mount /dev/sda1 /mnt/grip/boot

    mount /dev/sda6 /mnt/grip/home

    mount /dev/sda7 /mnt/grip/var

    mount /dev/sda8 /mnt/grip/etc

  4. Ya una vez creada nuestra estructura de archivos pues instalaremos nuestro sistema base para esto les recomiendo seguir el siguiente link:

    http://wiki.soekris.info/Installing_Ubuntu_7.04_Server_via_debootstrap
  5. Es bueno después de haber instalado el grub probar que arranque el sistema base, para esto reiniciamos el sistema quitando el CD.

  6. Si por algún motivo al arranque te muestra la Shell de grub, será necesario que entres con un live cd de nuevo al sistema montes por lo menos la partición de boot ya una vez montada la partición corre los siguientes comandos:

  7. Si por algún motivo al arranque te muestra la Shell de grub, será necesario que entres con un live cd de nuevo al sistema montes por lo menos la partición de boot ya una vez montada la partición corre los siguientes comandos:

    #grub

    Una vez dentro de esta Shell ejecutamos

    root (hd0,0) - > varía dependiendo del sistema

    setup (hd0)

  8. Bueno una vez que el sistema haya logrado arrancar, bueno parcialmente debido a que la partición en etc no se encuentra activa.
    Debido a que la imagen no se distingue mucho el error dice "Enter runlevel:"
  9. Insertamos de nuevo nuestro Live CD, y procederemos a un nuevo initramfs.

  10. Montamos de nuevo nuestro sistema base “paso 4 (Solo montar ya están creadas las carpetas)”.

  11. Montamos nuestro dev

    Mount - -bind /dev /mnt/grip/dev

  12. Hacemos de Nuevo el CHROOT al sistema base.

  13. Una vez dentro del sistema ejecutamos:

    cd /usr/share/initramfs-tools/scripts/init-bottom/

  14. Con algún editor creamos un script como el siguiente.

    #!/bin/sh

    # Example frobnication boot script

    PREREQ="udev"

    prereqs()

    {

    echo "$PREREQ"

    }

    case $1 in

    prereqs)

    prereqs

    exit 0

    ;;

    esac

    # Begin real processing below this line

    log_begin_msg "Starting frobnication"

    mount -t ext3 /dev/sda8 ${rootmnt}/etc

    log_end_msg

    exit 0

  15. Cambiamos los permisos de ejecución de este archivo:

    chmod +x

  16. Procederemos a crear nuestro initramfs en este caso usamos un kernel 2.6.32

    mkinitramfs -o /boot/initrd.img-2.6.32-5-686-custom /lib/modules/2.6.32-5-686/

  17. Solo para comprobar que el script se encuentra ejecutamos:

    mkdir /tmp/init

    cd /tmp/init

    gunzip –c /boot/initrd.img-2.6.32-5-686-custom | cpio –i –d –H newc –no-absolute-filenames

    Nos quedara un sistema de archivos parecidos a este:

    ubuntu:/tmp/init# ls

    bin conf etc init lib sbin scripts

    cd scripts/init-bottom

    Tiene que estar el script que creamos.

  18. Editamos nuestro archivo en /boot/grub/menu.lst para que tome nuestra nueva imagen de initramfs.

    title Debian GNU/Linux, kernel 2.6.32-5-686

    root (hd0,0)

    kernel /vmlinuz-2.6.32-5-686 root=/dev/sda5 ro

    initrd /initrd.img-2.6.32-5-686-custom

  19. Reiniciamos y con esto debe de quedar etc montado al arranque en una partición diferente

    Espero esto les sirva.

    Saludos.