#!/bin/bash #/** #@file boottoolsfunctions.lib #@brief Librería o clase Boot-Tools #@class Boot-Tools #@brief Funciones para generar un sistema operativo cliente para opengnsys #@version 1.1.1 #@warning License: GNU GPLv3+ #*/ # btGetVariables: define las constantes a utilizar # Autor: Antonio J. Doblas Viso. Universidad de Málaga. function btogGetVar() { export BTDIR=/tmp/opengnsys_installer/opengnsys/client/boot-tools export BTTARGETDIR=/var/lib/tftpboot/ogclient/ export BTROOTFSIMG=${BTTARGETDIR}ogclient.img export BTROOTFSMNT=${BTTARGETDIR}ogclientmount if [ "$OSARCH" = "i386" ]; then # tamaño maximo limitado por schroot 2GB para 32 bits export BTVIRTUALDISKSIZE=2000 else export BTVIRTUALDISKSIZE="3G" fi export BTROOTFSIMGLABEL=ogClient export LOG_FILE=/tmp/boot-tools_installation.log export VERSIONBOOTTOOLS="ogLive" } # btGetOsInfo: detecta la version del host, para tenerla de referencia en el boot-tools a generar. #@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2010/05/24 #@version 1.0 - Compatibilidad OpengGnsys X. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/08/03 #@version 1.0.5 - Fichero general de configuración, Kernel 3.7 para Ubuntu 12.10. #@author Ramón Gómez, ETSII Univ. Sevilla #@date 2013/02/06 function btogGetOsInfo () { OGCLIENTCFG=/tmp/ogclient.cfg case "${1,,}" in precise) # ogLive 1.0.4-rc2 basado en Ubuntu 12.04 LTS. OSDISTRIB="ubuntu" OSCODENAME="precise" OSRELEASE="3.2.0-23-generic" #OSRELEASE="3.11.0-26-generic" OSARCH="i386" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; wheezy) # ogLive basado en Debian 7.3. OSDISTRIB="debian" OSCODENAME="wheezy" OSRELEASE="3.2.0-4-i386" OSARCH="i386" OSHTTP="http://ftp.es.debian.org/debian/" ;; quantal) # ogLive 1.0.5-rc2 basado en Ubuntu 12.10 con Kernel descargado. OSDISTRIB="ubuntu" OSCODENAME="quantal" OSRELEASE="3.7.6-030706-generic" OSARCH="i386" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; raring) # ogLive 1.0.5-rc3 basado en Ubuntu 13.04. OSDISTRIB="ubuntu" OSCODENAME="raring" OSRELEASE="3.8.0-22-generic" OSARCH="i386" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; trusty) # ogLive 1.0.5-rc4 basado en Ubuntu 14.04. OSDISTRIB="ubuntu" OSCODENAME="trusty" OSRELEASE="3.13.0-24-generic" OSARCH="i386" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; vivid) # ogLive 1.1.0-rc2 basado en Ubuntu 15.04. OSDISTRIB="ubuntu" OSCODENAME="vivid" OSRELEASE="3.19.0-49-generic" OSARCH="i386" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; wily) # ogLive 1.1.0-rc1 basado en Ubuntu 15.10. OSDISTRIB="ubuntu" OSCODENAME="wily" OSRELEASE="4.2.0-35-generic" OSARCH="i386" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; xenial|xenial-4.4) # ogLive 1.1.0-rc4 basado en Ubuntu 16.04 y Kernel 4.4. OSDISTRIB="ubuntu" OSCODENAME="xenial" OSRELEASE="4.4.0-34-generic" OSARCH="i386" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; xenial-4.8) # ogLive 1.1.0-rc5 basado en Ubuntu 16.04 y Kernel 4.8. OSDISTRIB="ubuntu" OSCODENAME="xenial" OSRELEASE="4.8.0-39-generic" OSARCH="amd64" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; xenial-4.13) # ogLive 1.1.0-rc6 basado en Ubuntu 16.04 y Kernel 4.13. OSDISTRIB="ubuntu" OSCODENAME="xenial" OSRELEASE="4.13.0-17-generic" OSARCH="amd64" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; bionic|bionic-4.15) # ogLive 1.1.1-rc1 basado en Ubuntu 18.04 y Kernel 4.15. OSDISTRIB="ubuntu" OSCODENAME="bionic" OSRELEASE="4.15.0-32-generic" OSARCH="amd64" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; bionic-4.18) # ogLive 1.1.1-rc3 basado en Ubuntu 18.04 y Kernel 4.18. OSDISTRIB="ubuntu" OSCODENAME="bionic" OSRELEASE="4.18.0-20-generic" OSARCH="amd64" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; bionic-5.0) # ogLive 1.1.1-rc5 basado en Ubuntu 18.04 y Kernel 5.0. OSDISTRIB="ubuntu" OSCODENAME="bionic" OSRELEASE="5.0.0-27-generic" OSARCH="amd64" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; focal) # ogLive 1.2.0-rc1 basado en Ubuntu 20.04 y Kernel 5.4. OSDISTRIB="ubuntu" OSCODENAME="focal" OSRELEASE="5.4.0-42-generic" OSARCH="amd64" OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; host) # ogLive basado en la distribución del servidor. OSDISTRIB=$(lsb_release -is) OSCODENAME=$(lsb_release -cs) OSRELEASE=$(uname -r) OSARCH=$(dpkg --print-architecture) export OSHTTP="http://es.archive.ubuntu.com/ubuntu/" ;; *) # Parámetro desconocido echo "Parámetro no válido." exit 1 ;; esac BRANCH="master" GITURL="https://api.github.com/repos/opengnsys/OpenGnsys/commits?sha=$BRANCH&path=/client" GITRELEASE=$(curl -s "$GITURL" | jq -r '"r" + (.[0].commit.committer.date | split("-") | join("")[:8]) + "." + (.[0].sha[:7])') NAMEISOCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$OSRELEASE-$OSARCH-$GITRELEASE" NAMEHOSTCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$GITRELEASE" export OSDISTRIB OSCODENAME OSRELEASE OSARCH OSHTTP export TYPECLIENT GITRELEASE NAMEISOCLIENT NAMEHOSTCLIENT ### El fichero de configuración debe sustituir a estos 3 ficheros (borrar las 3 líneas siguientes). echo "$NAMEISOCLIENT" > /tmp/opengnsys_info_rootfs echo "$NAMEHOSTCLIENT" > /tmp/opengnsys_chroot # Generar fichero de configuración. cat << EOT > $OGCLIENTCFG TYPECLIENT="$1" OSDISTRIB="$OSDISTRIB" OSCODENAME="$OSCODENAME" OSRELEASE="$OSRELEASE" OSARCH="$OSARCH" OSHTTP="$OSHTTP" GITRELEASE="$GITRELEASE" NAMEISOCLIENT="$NAMEISOCLIENT" NAMEHOSTCLIENT="$NAMEHOSTCLIENT" EOT } # btogSetFsVirtual: Crea y formatea el fichero - disco duro virtual #@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2010/05/24 #@version 1.0 - Compatibilidad OpengGnsys X. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/08/03 # error code return 2 function btogSetFsVirtual () { local RERROR DISKLOOP PARTLOOP #return code error #Dependencias. [ -z "$BTROOTFSIMG" ] && btogGetVar echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $BTVIRTUALDISKSIZE MB " #Desmontamos el dispositivo virtual mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT #echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $BTROOTFSMNT" mkdir -p $BTROOTFSMNT if [ $? -ne 0 ] then errorAndLog "$FUNCNAME(): Creando directorio $BTROOTFSMNT : ERROR" return 1 fi # Permisos para el usuario opengnsys. chown -R root:opengnsys $BTTARGETDIR #echo "$FUNCNAME(): Creando el disco virtual con tamaño máximo de $BTVIRTUALDISKSIZE MB" if [ "$OSARCH" = "i386" ]; then dd if=/dev/zero of=$BTROOTFSIMG bs=1048576 count=$BTVIRTUALDISKSIZE #dd if=/dev/zero of=$BTROOTFSIMG bs=1k count=$OGCLIENTSIZEKB # necesita 500MB else qemu-img create $BTROOTFSIMG $BTVIRTUALDISKSIZE fi if [ $? -ne 0 ] then errorAndLog "$FUNCNAME(): Creando el disco virtual con tamaño maxima $BTVIRTUALDISKSIZE MB : ERROR" return 2 fi # Particionamos el disco virtual con una sola particion primaria. DISKLOOP=$(losetup -f) #TODO: si no DISKLOOP error losetup $DISKLOOP $BTROOTFSIMG #echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria" echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP #echoAndLog "$FUNCNAME(): Liberamos Desmontando $DISKLOOP despues del particionado " sleep 10 losetup -d $DISKLOOP if [ $? -ne 0 ] then errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR" return 2 fi PARTLOOP=$(losetup -f) #echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP" losetup -o 32256 $PARTLOOP $BTROOTFSIMG && mkfs.ext4 -b 4096 -L $BTROOTFSIMGLABEL $PARTLOOP if [ $? -ne 0 ] then errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR" return 2 fi #echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo " sleep 10 losetup -d $PARTLOOP if [ $? -ne 0 ] then errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR" return 2 else echoAndLog "$FUNCNAME(): $BTROOTFSIMG $BTVIRTUALDISKSIZE MB : OK" fi } # btogSetfsBase: Genera el sistema root base con debootstrap #@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2010/05/24 #@version 1.0 - Compatibilidad OpengGnsys X. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/08/03 # error code return 3 function btogSetFsBase () { # Dependencias [ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos " #Montamos el dispositivo virtual en su punto de montaje. mount | grep $BTROOTFSMNT || mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256 mount | grep $BTROOTFSMNT && echoAndLog "$FUNCNAME: mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256 : FAILURE " debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${BTROOTFSMNT} ${OSHTTP} #debootstrap --arch=$OSARCH ${OSCODENAME} ${BTROOTFSMNT} http://archive.ubuntu.com/ubuntu/ if [ $? -ne 0 ]; then errorAndLog "$FUNCNAME: debootstrap --arch=$OSARCH --components=main,universe $OSCODENAME $BTROOTFSMNT $OSHTTP : ha fallado!" mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT return 3 else echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $BTROOTFSMNT $OSHTTP : ok" mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT return 0 fi sleep 5 ##preubas revisar OSRELEASE #debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP} #debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/ } #btogSetFsAcces: habilita el acceso al sistema root del cliente con schroot #@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2010/05/24 #@version 1.0 - Compatibilidad OpengGnsys X. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/08/03 function btogSetFsAccess() { echoAndLog "$FUNCNAME: Iniciando la configuración del schroot " cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime` cat << EOF > /etc/schroot/schroot.conf [IMGogclient] type=loopback file=/var/lib/tftpboot/ogclient/ogclient.img description=ogclient Ubuntu image #priority=1 users=root groups=root root-groups=root mount-options=-o offset=32256 root-users=root EOF cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime` cat << EOF > /etc/schroot/mount-defaults # mount.defaults: static file system information for chroots. # Note that the mount point will be prefixed by the chroot path # (CHROOT_PATH) # # proc /proc proc defaults 0 0 #procbususb /proc/bus/usb usbfs defaults 0 0 #/dev /dev none rw,bind 0 0 /dev/pts /dev/pts none rw,bind 0 0 /dev/shm /dev/shm none rw,bind 0 0 #/home /home none rw,bind 0 0 /tmp /tmp none rw,bind 0 0 EOF rm /etc/schroot/setup.d/*chrootname echoAndLog "$FUNCNAME: Finalizado: OK " return 0 } #btogFsInitr genera un initrd. #@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2010/05/24 #@version 1.0 - Compatibilidad OpengGnsys X. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/08/03 function btogFsInitrd () { #DEPENDENCIAS [ -z "$BTROOTFSIMG" ] && btogGetVar [ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT cd / schroot -c IMGogclient -- /usr/bin/boot-tools/boottoolsInitrdGenerate.sh echo "cp /tmp/*-${OSRELEASE} ${BTTARGETDIR}" cp /tmp/*-${OSRELEASE} ${BTTARGETDIR} #Creando copias de las version oginitr y ogvmlinux previas TIMEMOD=`date +%Y%m%d-%H%M%S` [ -f $BTTARGETDIR/oginitrd.img ] && mv $BTTARGETDIR/oginitrd.img $BTTARGETDIR/oginitrd.img.$TIMEMOD; mv $BTTARGETDIR/oginitrd.img.sum $BTTARGETDIR/oginitrd.img.sum.$TIMEMOD [ -f $BTTARGETDIR/ogvmlinuz ] && mv $BTTARGETDIR/ogvmlinuz $BTTARGETDIR/ogvmlinuz.$TIMEMOD; mv $BTTARGETDIR/ogvmlinuz.sum $BTTARGETDIR/ogvmlinuz.sum.$TIMEMOD #copiando cp /tmp/initrd.img-${OSRELEASE} ${BTTARGETDIR}/oginitrd.img cp /tmp/vmlinuz-${OSRELEASE} ${BTTARGETDIR}/ogvmlinuz #generamos md5 del kernel y del initrd. DATASUM=`md5sum "${BTTARGETDIR}/oginitrd.img" | cut -f1 -d" "` echo $DATASUM > ${BTTARGETDIR}/oginitrd.img.sum DATASUM=`md5sum "${BTTARGETDIR}/ogvmlinuz" | cut -f1 -d" "` echo $DATASUM > ${BTTARGETDIR}/ogvmlinuz.sum #Damos permisos cd - chmod -R 755 $BTTARGETDIR } #btogFsSqfs convierte el sistema root en sqfs #@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2010/05/24 #@version 1.0 - Compatibilidad OpengGnsys X. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/08/03 function btogFsSqfs () { #Dependencias. [ -z "$BTROOTFSIMG" ] && btogGetVar [ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs " # si ya existe un sqfs lo renombramos [ -f $BTTARGETDIR/ogclient.sqfs ] && mv $BTTARGETDIR/ogclient.sqfs $BTTARGETDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S` mount | grep $BTROOTFSMNT || mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256 mksquashfs $BTROOTFSMNT $BTTARGETDIR/ogclient.sqfs mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT chmod 744 $BTTARGETDIR/ogclient.sqfs DATASUM=`md5sum "${BTTARGETDIR}/ogclient.sqfs" | cut -f1 -d" "` echo $DATASUM > ${BTTARGETDIR}/ogclient.sqfs.sum } # btogIsoGenerator genera la iso del cliente #@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2010/05/24 #@version 1.0 - Compatibilidad OpengGnsys X. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/08/03 function btogIsoGenerator { #Dependencias. #[ -z "$BTROOTFSIMG" ] && btogGetVar btogGetVar #Preparamos los gestores de arranque mkdir -p /tmp/iso/isolinux cp -av /usr/lib/syslinux/* /tmp/iso/isolinux/ if [ -d /usr/share/gpxe ]; then cp -av /usr/share/gpxe/* /tmp/iso/isolinux PXE=gpxe elif [ -d /usr/lib/ipxe ]; then cp -av /usr/lib/ipxe/* /tmp/iso/isolinux PXE=ipxe fi # Si existe el fichero ISO, montarlo para extraer isolinux.bin. if [ -f /tmp/iso/isolinux/$PXE.iso ]; then mkdir -p /tmp/iso/isolinux/mount mount -o loop /tmp/iso/isolinux/$PXE.iso /tmp/iso/isolinux/mount cp -va /tmp/iso/isolinux/mount/* /tmp/iso/isolinux umount /tmp/iso/isolinux/mount rmdir /tmp/iso/isolinux/mount rm -f /tmp/iso/isolinux/$PXE.iso fi cat << FIN > /tmp/iso/isolinux/isolinux.cfg DEFAULT menu.c32 PROMPT 0 ALLOWOPTIONS 1 MENU TITLE OpenGnsys ${NAMEISOCLIENT} LABEL 0 MENU LABEL ogLive vga irqpool acpi ogdebug ip:none KERNEL /ogclient/linuxISO APPEND initrd=/ogclient/oginitrd.img ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none LABEL 1 MENU LABEL ogLive irqpoll acpi ip:none KERNEL /ogclient/linuxISO APPEND initrd=/ogclient/oginitrd.img ro irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=none LABEL 2 MENU LABEL ogLive acpi debug ip=dhcp KERNEL /ogclient/linuxISO APPEND initrd=/ogclient/oginitrd.img ro acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=dhcp LABEL 3 MENU LABEL ogLive ip=dhcp KERNEL /ogclient/linuxISO APPEND initrd=/ogclient/oginitrd.img ro acpi=off boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=dhcp LABEL 4 MENU LABEL local localboot 0x80 append - label 5 MENU LABEL Network boot via gPXE lkrn KERNEL $PXE.lkrn label 6 MENU LABEL Network boot via gPXE usb KERNEL $PXE.usb label 7 MENU LABEL Network boot via gPXE pxe KERNEL $PXE.pxe label 8 MENU LABEL Network boot via gPXE iso KERNEL $PXE.iso label 9 MENU LABEL pxe KERNEL /clonezilla/live/vmlinuz1 APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia FIN # preparamos el directorio boot-tools. mkdir -p /tmp/iso/ogclient cp ${BTTARGETDIR}/ogclient.sqfs /tmp/iso/ogclient/ cp ${BTTARGETDIR}/ogclient.sqfs.sum /tmp/iso/ogclient/ cp ${BTTARGETDIR}/ogvmlinuz /tmp/iso/ogclient/ cp ${BTTARGETDIR}/ogvmlinuz.sum /tmp/iso/ogclient/ cp ${BTTARGETDIR}/ogvmlinuz /tmp/iso/ogclient/linuxISO cp ${BTTARGETDIR}/ogvmlinuz.sum /tmp/iso/ogclient/linuxISO.sum cp ${BTTARGETDIR}/oginitrd.img /tmp/iso/ogclient/ cp ${BTTARGETDIR}/oginitrd.img.sum /tmp/iso/ogclient/ #el ogclienteToISO debe tener una copia del ogvmlinuz como linuxISO #cp -prv /var/lib/tftpboot/ogclientToIso/* /tmp/iso/ogclient cd /tmp #TIMEMOD=`date +%Y%m%d-%H%M%S` ####Generamos la iso echo "mkisofs -V ogClient -o ${NAMEISOCLIENT}.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table /tmp/iso" mkisofs -V ogClient -o ${NAMEISOCLIENT}.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table /tmp/iso ##Generamos el md5 DATASUM=`md5sum ${NAMEISOCLIENT}.iso | cut -f1 -d" "` echo $DATASUM > ${NAMEISOCLIENT}.iso.sum mv /tmp/${NAMEISOCLIENT}.iso /var/lib/tftpboot/ogclient/ mv /tmp/${NAMEISOCLIENT}.iso.sum /var/lib/tftpboot/ogclient/ ### vi /etc/grub.d/40_custom ## #menuentry "og cache " { #set root=(hd0,4) #linux /ogvmlinuz ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none #initrd /oginitrd.img #} } #@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2010/05/24 #@version 1.0 - Compatibilidad OpengGnsys X. #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/08/03 function btogIsoTest { #/tmp/iso qemu -m 256 -boot d -cdrom ogClient.iso } function getDateTime() { echo `date +%Y%m%d-%H%M%S` } # Escribe a fichero y muestra por pantalla function echoAndLog() { echo $1 FECHAHORA=`getDateTime` echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE } function errorAndLog() { echo "ERROR: $1" FECHAHORA=`getDateTime` echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE } ############### No usados en el instalador, solo en actualizaciones. #/** # ogClientMount [str_program] #@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys #@param 1 Opciona: scripts o programa a ejecutar para automatizaciones #@return Si no hay parametros: login de acceso. #@return con un parametro: La salida del programa ejecutado #@exception #@note #@todo #@version 0.9 - Primera versión para OpenGnSys #@author Antonio J. Doblas Viso, Universidad de Málaga #@date 2010/02/15 #*/ ## function ogClientMount () { #TODO comprobar que OGFILE y OGFILEMOUNT existe. mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`) [ $# = 1 ] && chroot $OGCLIENTMOUNT $1 } #/** # ogClientUnmount #@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys #@param #@return #@exception #@note #@todo #@version 0.9 - Primera versión para OpenGnSys #@author Antonio J. Doblas Viso, Universidad de Málaga #@date 2010/02/15 #*/ ## function ogClientUnmount () { cd /tmp echo "desmontando cliente espere" sleep 5 mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount #-d -f -l }