= 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.