diff options
Diffstat (limited to 'client/boot/initrd-generator')
-rwxr-xr-x | client/boot/initrd-generator | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/client/boot/initrd-generator b/client/boot/initrd-generator new file mode 100755 index 00000000..c28a9936 --- /dev/null +++ b/client/boot/initrd-generator @@ -0,0 +1,255 @@ +#!/bin/bash + +DIST="jaunty" +URL=http://archive.ubuntu.com/ubuntu/dists/$DIST/main/installer-i386/current/images/netboot/ubuntu-installer/i386 +if [ "$TMP" = "" ] ; then TMP=/tmp ; fi +TMPINITRD=$TMP/initrd +NEWROOT=$TMPINITRD/newroot +ANTERIORPWD=$PWD +DEST=$PWD +LINUX=1 +CHROOTINITSCRIPT=/oginit +INITSCRIPT=$NEWROOT$CHROOTINITSCRIPT + +# Comprueba los argumentos pasados para modificar los valores por defecto +function parsearParametros +{ + while [ $# -ne 0 ];do + case $1 in + ("-d") + shift + #URL=http://ftp.nl.debian.org/debian/dists/testing/main/installer-i386/current/images/netboot/debian-installer/i386/ + URL=http://people.debian.org/~joeyh/d-i/images/daily/netboot/debian-installer/i386/ + ;; + ("-v") + shift + if [ $# -eq 0 ];then + echo "Error en los argumentos" + return -1 + else + DIST=$1 + URL=http://archive.ubuntu.com/ubuntu/dists/$DIST/main/installer-i386/current/images/netboot/ubuntu-installer/i386 + shift + fi + ;; + ("-l") + shift + ;; + ("-t") + shift + if [ $# -eq 0 ];then + echo "Error en los argumentos" + return -1 + else + DEST=$1 + shift + fi + ;; + esac + done +} + +function descargar +{ + # Borramos si existe el directorio temporal + if [ -d $TMPINITRD ]; then + rm -r $TMPINITRD + fi + # Creamos directorio temporal y nos vamos alli + mkdir -p $TMPINITRD + cd $TMPINITRD + + # Borramos el initrd anterior si existe + if [ -f initrd.gz ]; then rm initrd.gz; fi + + # Nos lo descargamos + wget $URL/initrd.gz + if [ $? = 1 ] ; then + echo Error no se ha podido descarga el initrd.gz + exit -1 + fi + + # Si la opcion de descargar el nucleo tambien esta habilitado nos lo descargamos + if [ $LINUX ] ; then + if [ -f linux ] ; then + rm linux + fi + wget $URL/linux + if [ $? = 1 ] ; then + echo Error no se ha podido descargar el nucleo linux + exit -1 + fi + fi +} + +# Descomprimimos el initrd +function descomprimir +{ + if [ ! -f $TMPINITRD/initrd.gz ]; then + echo No se encuentra el initrd.gz + exit -1 + fi + + if [ -f $NEWROOT ];then + rm -rf $NEWROOT + fi + + mkdir -p $NEWROOT + cd $NEWROOT + + gzip -dc $TMPINITRD/initrd.gz | cpio -id +} + +# Borrar todos los scripts del directorio actual +function borrarScripts +{ + # Primero los hacemos con los enlaces para que no se produzcan errores si borramos a lo que apunta primero + for i in `ls -F -1 | grep @ | awk -F @ '{print $1}'`; do + if [ $(file $i -L | grep "shell script" | wc -l) -gt 0 ]; then + rm $i + fi + done + + # Ahora lo hacemos con todos los ejecutables + for i in `ls`; do + if [ $(file $i | grep "shell script" | wc -l) -gt 0 ]; then + rm $i + fi + done +} + +# Borra todos los ejecutables que enlacen con la libreria debian-installer +function borrarEjecutablesDebinstall +{ + # Primero lo hacemos con los enlaces para que no se produzcan errores si borramos a lo que apunta primero + for i in `ls -F -1 | grep @ | awk -F @ '{print $1}'`; do + if [ $(ldd $i | grep -e libdebian-installer -e libdebconf | wc -l) -gt 0 ]; then + rm $i + fi + done + + # Ahora lo hacemos con todos los ejecutables + for i in `ls`; do + if [ $(ldd $i | grep -e libdebian-installer -e libdebconf | wc -l) -gt 0 ]; then + rm $i + fi + done +} + +# Elimina todos los fichero innecesarios del initrd +function purgarFicherosDebian +{ + mkdir -p $NEWROOT + cd $NEWROOT + + rm init + + # Pasamos por todos los directorios y vamos borrando lo innecesario + cd bin/ + borrarScripts + borrarEjecutablesDebinstall + + cd ../etc/ + rm -rf cdebconf.conf default-release lsb-release preseed_aliases udebs-source + + cd ../lib/ + rm -rf chroot-setup.sh debian-installer* kickseed main-menu.d preseed libdebian-installer* + + cd ../sbin/ + borrarScripts + borrarEjecutablesDebinstall + + cd ../usr/bin/ + borrarScripts + borrarEjecutablesDebinstall + + cd ../lib/ + rm -rf base-installer.d debian-installer finish-install.d libdebconfclient* cdebconf fetch-url net-retriever post-base-installer.d + + # Solo queda un enlace simbolico que ya no apunta a nada + cd ../sbin/ + rm -rf * + + cd ../share/ + rm -rf debconf keyrings save-logs + + cd ../../var/ + rm -rf cache/anna/ spool/kickseed/ + + cd lib/ + rm -rf apt-install cdebconf dpkg + + cd ../.. +} + +# Le agrega los archivos necesarios para que arranque de otra manera +function agregarNuevoArranque +{ + cd $NEWROOT + + cd etc/ + #echo "s/debian-installer$/${OGINIT//\//\\\/}/" + #cat inittab | sed "s/debian-installer$/${OGINIT//\//\\\/}/" > inittab + perl -i -p -e "s/\/sbin\/debian-installer\$/${CHROOTINITSCRIPT//\//\/}/" inittab + + # Script inicial que ejecuta el resto de scripts de /etc/rcS.d/ + #echo "#! /bin/sh" >> rc + #echo "for script in /etc/rcS.d/S[0-9][0-9]*; do if [ -x $script ]; then $script fi done" >> rc + #chmod +x rc + + # Agregamos para que ejecute el script anterior lo primero + #echo "::sysinit:/etc/init.d/rc" > inittab + # Que ejecute el fichero /init cuando se reinicio el proceso init + #echo "::restart:/sbin/init" >> inittab + # Que funciona el control alt supr + #echo "::ctrlaltdel:/sbin/reboot" >> inittab + + # Cosas que hacer si se apaga + #echo "::shutdown:/bin/umount -a -r" >> inittab + #echo "::shutdown:/sbin/swapoff -a" >> inittab + + # Primero ejecutamos el dhcp + echo '#! /bin/sh' > $INITSCRIPT + echo 'set -e' >> $INITSCRIPT + echo 'mkdir -p /var/state/dhcp' >> $INITSCRIPT + echo '/sbin/dhclient' >> $INITSCRIPT + + # Montamos NFS y ejecutamos el script con nombre nuestra ip + echo "DHCP_SERVER=\`grep -h dhcp-server-identifier /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1\`" >> $INITSCRIPT + echo "IP=\`grep -h fixed-address /var/lib/dhcp3/dhclient.* | sed 's/[^0-9]*\(.*\);/\1/' | head -1\`" >> $INITSCRIPT + echo "mkdir -p /opt/opengnsys" >> $INITSCRIPT + echo "mount -t nfs -onolock \$DHCP_SERVER:/opt/opengnsys/client/ /opt/opengnsys/" >> $INITSCRIPT + echo "/opt/opengnsys/etc/preinit/default.sh" >> $INITSCRIPT + + chmod +x $INITSCRIPT +} + +function comprimir +{ + cd $NEWROOT + + if [ $? = 1 ] ; then + exit -1 + fi + + find ./ | cpio -H newc -o > $TMPINITRD/new-initrd + cd $TMPINITRD + gzip -9 new-initrd +} + +function finalizar +{ + cd $ANTERIORPWD + mv $TMPINITRD/new-initrd.gz $DEST/initrd.gz + if [ $LINUX ] ; then + mv $TMPINITRD/linux $DEST/linux + fi +} + +parsearParametros $@ +descargar +descomprimir +#purgarFicherosDebian +agregarNuevoArranque +comprimir +finalizar |