wiki:InitrdCliente

Version 1 (modified by alecasdel, 15 years ago) (diff)

--

Crear un nuevo initrd.gz

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.

Descargarlo

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:

mkdir /tmp/initrd
cd /tmp/initrd
wget http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/ubuntu-installer/i386/initrd.gz
wget http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/ubuntu-installer/i386/linux

Descomprimirlo

Una vez obtenido vamos a descomprimirlo para modificarlo para suplir nuestras necesidades.

mkdir -p /tmp/initrd/newroot
cd /tmp/initrd/newroot
gzip -dc ../initrd.gz | cpio -id

Esto te crea en /tmp/initrd/newroot el sistema de ficheros que tendrías al arrancar.

Modificar el arranque

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:

  • S01dhclient
    # It gets an IP from the DHCP server.
    mkdir -p /var/state/dhcp
    /sbin/dhclient
    
  • S02install
    # Hacemos un ejemplo de montar NFS y luego una shell para poder interactuar
    
    DHCP_SERVER=`grep -h dhcp-server-identifier /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1`
    mount -t nfs -onolock $DHCP_SERVER:/var/netboot/ /mnt
    sh
    
  • S99restart
    # Reiniciamos
    
    reboot
    

Añadir ejecutables

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.

Añadir más driver al initrd.gz

Hay que saber que kernel está usando el initrd.gz y sustituirlo por en este ejemplo:

mkdir /tmp/kernel
cd /tmp/kernel
sudo apt-get -d --reinstall install linux-image-2.6.28-11-generic
dpkg -x /var/cache/apt/archives/linux-image-2.6.28-11-generic_2.6.28-11.42_i386.deb .
cd lib/modules/2.6.28-11-generic/kernel/

En ese directorio encontraremos todos los driver que queramos y los pondremos en /tmp/initrd/newroot/lib/modules/2.6.28-11-generic/

Recomprimir initrd.gz

cd /tmp/initrd/
find newroot | cpio -H newc -o > /tmp/initrd-netboot
gzip -9 /tmp/initrd-netboot

Eso genera un /tmp/initrd-netboot.gz que podremos sustituir al initrd.gz original por él.

Compilaciones estáticas de los principales programas

Lo haré el Lunes pero está subido al subversion.