Changes between Initial Version and Version 1 of InitrdCliente


Ignore:
Timestamp:
Jun 5, 2009, 2:39:23 PM (15 years ago)
Author:
alecasdel
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • InitrdCliente

    v1 v1  
     1= Crear un nuevo initrd.gz =
     2
     3Vamos a ver como un initrd.gz para que tenga todo lo que necesitamos. En este ejemplo vamos a usar el netboot de ubuntu jaunty.
     4
     5== Descargarlo ==
     6Nos 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:
     7{{{
     8mkdir /tmp/initrd
     9cd /tmp/initrd
     10wget http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/ubuntu-installer/i386/initrd.gz
     11wget http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/ubuntu-installer/i386/linux
     12}}}
     13== Descomprimirlo ==
     14Una vez obtenido vamos a descomprimirlo para modificarlo para suplir nuestras necesidades.
     15{{{
     16mkdir -p /tmp/initrd/newroot
     17cd /tmp/initrd/newroot
     18gzip -dc ../initrd.gz | cpio -id
     19}}}
     20Esto te crea en /tmp/initrd/newroot el sistema de ficheros que tendrías al arrancar.
     21
     22== Modificar el arranque ==
     23
     24En el directorio /tmp/initrd/newroot/etc/rcS.d/ podemos crear los scripts que queremos que se ejecuten al inicio. Yo he creados los siguientes:
     25
     26 * S01dhclient
     27{{{
     28# It gets an IP from the DHCP server.
     29mkdir -p /var/state/dhcp
     30/sbin/dhclient
     31}}}
     32
     33 * S02install
     34{{{
     35# Hacemos un ejemplo de montar NFS y luego una shell para poder interactuar
     36
     37DHCP_SERVER=`grep -h dhcp-server-identifier /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1`
     38mount -t nfs -onolock $DHCP_SERVER:/var/netboot/ /mnt
     39sh
     40}}}
     41
     42 * S99restart
     43{{{
     44# Reiniciamos
     45
     46reboot
     47}}}
     48
     49== Añadir ejecutables ==
     50
     51Para 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
     55Hay que saber que kernel está usando el initrd.gz y sustituirlo por en este ejemplo:
     56{{{
     57mkdir /tmp/kernel
     58cd /tmp/kernel
     59sudo apt-get -d --reinstall install linux-image-2.6.28-11-generic
     60dpkg -x /var/cache/apt/archives/linux-image-2.6.28-11-generic_2.6.28-11.42_i386.deb .
     61cd lib/modules/2.6.28-11-generic/kernel/
     62}}}
     63
     64En ese directorio encontraremos todos los driver que queramos y los pondremos en /tmp/initrd/newroot/lib/modules/2.6.28-11-generic/
     65
     66== Recomprimir initrd.gz ==
     67{{{
     68cd /tmp/initrd/
     69find newroot | cpio -H newc -o > /tmp/initrd-netboot
     70gzip -9 /tmp/initrd-netboot
     71}}}
     72
     73Eso genera un /tmp/initrd-netboot.gz que podremos sustituir al initrd.gz original por él.
     74
     75= Compilaciones estáticas de los principales programas =
     76
     77Lo haré el Lunes pero está subido al subversion.