Version 2 (modified by 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/newroot/ find ./ | 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.