Changes between Version 2 and Version 3 of InitrdCliente
- Timestamp:
- Jul 15, 2009, 11:07:57 AM (15 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
InitrdCliente
v2 v3 1 = C rear un nuevo initrd.gz=1 = Cliente Initrd = 2 2 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. 3 El 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. 4 7 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 == 11 Nos 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: 7 12 {{{ 8 13 mkdir /tmp/initrd … … 11 16 wget http://archive.ubuntu.com/ubuntu/dists/jaunty/main/installer-i386/current/images/netboot/ubuntu-installer/i386/linux 12 17 }}} 18 19 El núcleo linux no hace falta modificarlo, se usa tal cual. 20 13 21 == Descomprimirlo == 22 14 23 Una vez obtenido vamos a descomprimirlo para modificarlo para suplir nuestras necesidades. 15 24 {{{ … … 18 27 gzip -dc ../initrd.gz | cpio -id 19 28 }}} 20 Esto te crea en /tmp/initrd/newroot el sistema de ficheros que tendrías al arrancar .29 Esto 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. 21 30 22 31 == Modificar el arranque == 23 32 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:33 En 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: 25 34 26 35 * S01dhclient … … 31 40 }}} 32 41 33 * S02 install42 * S02montarnfs 34 43 {{{ 35 # Hacemos un ejemplo de montar NFS y luego una shell para poder interactuar44 # Montamos por NFS para ejecutar el script de inicio que tendrá en nombre de nuestra ip 36 45 37 46 DHCP_SERVER=`grep -h dhcp-server-identifier /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1` 47 IP=`grep -h fixed-address /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1` 38 48 mount -t nfs -onolock $DHCP_SERVER:/var/netboot/ /mnt 39 sh49 /mnt/$IP.sh 40 50 }}} 41 51 … … 46 56 reboot 47 57 }}} 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/kernel58 cd /tmp/kernel59 sudo apt-get -d --reinstall install linux-image-2.6.28-11-generic60 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/65 58 66 59 == Recomprimir initrd.gz == … … 75 68 = Compilaciones estáticas de los principales programas = 76 69 77 Lo haré el Lunes pero está subido al subversion.