Changes between Version 2 and Version 3 of InitrdCliente


Ignore:
Timestamp:
Jul 15, 2009, 11:07:57 AM (15 years ago)
Author:
adelcastillo
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • InitrdCliente

    v2 v3  
    1 = Crear un nuevo initrd.gz =
     1= Cliente Initrd =
    22
    3 Vamos a ver como un initrd.gz para que tenga todo lo que necesitamos. En este ejemplo vamos a usar el netboot de ubuntu jaunty.
     3El cliente initrd.gz es sistema muy liviano que nos permitirá instalar sistemas con un arranque muy rápido. El initrd.gz es un archivo comprimido que tiene un sistema de ficheros completo. Modificar el initrd.gz puede ser bastante molesto, así que nuestro objetivo es modificarlo lo menos posible, pero que funcione en todos los ordenadores posibles sin que haya que actualizarlo continuamente. Para ello lo que vamos a hacer es usar el initrd.gz de Ubuntu y modificarle simplemente el arranque. Cualquier cosa que querramos agregarle al sistema lo haremos a través de NFS. Ejemplos de cosas que se podrían agregar a través NFS sería:
     4 * Arranques polimórficos. El cliente buscará que hacer en el servidor, que puede ofrecerle un script distinto cada vez.
     5 * Ejecutables compilados estáticamente. Estáticamente para que no haya que mantener todos los programas compilados con las misma libreria, menos manteniento.
     6 * Módulos para el kernel. Podriamos coger módulos de la propia Ubuntu para que haya incompatibilidad y poder hacer insmod a través de NFS, por ejemplo el del ratón que no viene por defecto.
    47
    5 == Descargarlo ==
    6 Nos descargamos el nuevo initrd.gz y linux de una distribición. Cambiando en la url jaunty por otra versión obtendremos los initrd.gz y linux de otras versiones:
     8= ¿Cómo se ha creado el initrd.gz? =
     9
     10== Descargar ==
     11Nos descargamos un initrd.gz base y el núcleo linux de la distribición. En la primera versión usamos la versión del instalador de red de Ubuntu/Jaunty:
    712{{{
    813mkdir /tmp/initrd
     
    1116wget http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/ubuntu-installer/i386/linux
    1217}}}
     18
     19El núcleo linux no hace falta modificarlo, se usa tal cual.
     20
    1321== Descomprimirlo ==
     22
    1423Una vez obtenido vamos a descomprimirlo para modificarlo para suplir nuestras necesidades.
    1524{{{
     
    1827gzip -dc ../initrd.gz | cpio -id
    1928}}}
    20 Esto te crea en /tmp/initrd/newroot el sistema de ficheros que tendrías al arrancar.
     29Esto te crea en /tmp/initrd/newroot el sistema de ficheros que tendrías al arrancar con el núcleo y el initrd. Cualquier modificación que le hagamos al sistema de ficheros se verá afectado cuando se vuelva a comprimir.
    2130
    2231== Modificar el arranque ==
    2332
    24 En el directorio /tmp/initrd/newroot/etc/rcS.d/ podemos crear los scripts que queremos que se ejecuten al inicio. Yo he creados los siguientes:
     33En el directorio /tmp/initrd/newroot/etc/rcS.d/ podemos crear los scripts que queremos que se ejecuten al inicio. Se crean ficheros dentro que empicen por SxxNombreDescriptivo siendo xx dos números con el orden de ejecución. Yo he creado los siguientes tres archivos:
    2534
    2635 * S01dhclient
     
    3140}}}
    3241
    33  * S02install
     42 * S02montarnfs
    3443{{{
    35 # Hacemos un ejemplo de montar NFS y luego una shell para poder interactuar
     44# Montamos por NFS para ejecutar el script de inicio que tendrá en nombre de nuestra ip
    3645
    3746DHCP_SERVER=`grep -h dhcp-server-identifier /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1`
     47IP=`grep -h fixed-address /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1`
    3848mount -t nfs -onolock $DHCP_SERVER:/var/netboot/ /mnt
    39 sh
     49/mnt/$IP.sh
    4050}}}
    4151
     
    4656reboot
    4757}}}
    48 
    49 == Añadir ejecutables ==
    50 
    51 Para añadir ejecutables podemos agregarlos a /tmp/initrd/newroot/sbin/ y ya estarán disponibles desde la linea de comandos. Los ejecutables deberían estar compilados estáticamente. En el repositorio de subversion están los que más se usan ya compilados.
    52 
    53 == Añadir más driver al initrd.gz ==
    54 
    55 Hay que saber que kernel está usando el initrd.gz y sustituirlo por en este ejemplo:
    56 {{{
    57 mkdir /tmp/kernel
    58 cd /tmp/kernel
    59 sudo apt-get -d --reinstall install linux-image-2.6.28-11-generic
    60 dpkg -x /var/cache/apt/archives/linux-image-2.6.28-11-generic_2.6.28-11.42_i386.deb .
    61 cd lib/modules/2.6.28-11-generic/kernel/
    62 }}}
    63 
    64 En ese directorio encontraremos todos los driver que queramos y los pondremos en /tmp/initrd/newroot/lib/modules/2.6.28-11-generic/
    6558
    6659== Recomprimir initrd.gz ==
     
    7568= Compilaciones estáticas de los principales programas =
    7669
    77 Lo haré el Lunes pero está subido al subversion.