summaryrefslogtreecommitdiffstats
path: root/client/boot-tools/boottoolsfunctions.lib
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2011-12-22 13:38:11 +0000
committerramon <ramongomez@us.es>2011-12-22 13:38:11 +0000
commitc3c7cb3ae6f6600223111a572050f34f2df6fa71 (patch)
tree96fce1db6bf64fee2845d3a48abcbe07d9937562 /client/boot-tools/boottoolsfunctions.lib
parent4caea352de0d0a19d4e0a2e2dd04980dd28e6be0 (diff)
Congelar versión 1.0.2 en tags/opengnsys-1.0.2 (modifica #446).opengnsys-1.0.2
git-svn-id: https://opengnsys.es/svn/tags/opengnsys-1.0.2@2405 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/boot-tools/boottoolsfunctions.lib')
-rw-r--r--client/boot-tools/boottoolsfunctions.lib518
1 files changed, 518 insertions, 0 deletions
diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib
new file mode 100644
index 00000000..2f7aff65
--- /dev/null
+++ b/client/boot-tools/boottoolsfunctions.lib
@@ -0,0 +1,518 @@
+#!/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 0.9
+#@warning License: GNU GPLv3+
+#*/
+
+
+# btGetVariables: define las constantes a utilizar
+# Autor: Antonio J. Doblas Viso. Universidad de Málaga.
+function btogGetVar()
+{
+
+export BTSVNBOOTTOOLS=/tmp/opengnsys_installer/opengnsys/client/boot-tools
+export BTSVNSHARE=/tmp/opengnsys_installer/opengnsys/client/shared
+export BTSVNENGINE=/tmp/opengnsys_installer/opengnsys/client/engine
+
+export BTSVNOG2=/tmp/opengnsys_installer/opengnsys2
+
+export BTTARGETDIR=/var/lib/tftpboot/ogclient/
+export BTROOTFSIMG=${BTTARGETDIR}ogclient.img
+export BTROOTFSMNT=${BTTARGETDIR}ogclientmount
+# tamaño maximo limitado por schroot 2GB
+export BTVIRTUALDISKSIZE=2000
+export BTROOTFSIMGLABEL=ogClient
+
+export LOG_FILE=/tmp/boot-tools_installation.log
+
+NAMEISOCLIENT=`cat /tmp/opengnsys_info_rootfs`
+NAMEHOSTCLIENT=`cat /tmp/opengnsys_chroot`
+
+export NAMEISOCLIENT
+export NAMEHOSTCLIENT
+}
+
+
+# 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
+function btogGetOsInfo ()
+{
+ case $1 in
+ lenny|LENNY)
+ export OSDISTRIB=debian
+ export OSCODENAME=lenny
+ export OSRELEASE="2.6.28-11-generic"
+ export OSARCH=i386
+ export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
+ ;;
+ lucid|LUCID)
+ export OSDISTRIB=ubuntu
+ export OSCODENAME=lucid
+ export OSRELEASE="2.6.32-21-generic-pae"
+ export OSARCH=i386
+ export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
+ ;;
+ host | HOST | *)
+ export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
+ export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
+ export OSRELEASE=$(uname -a | awk '{print $3}')
+ uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386
+ export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
+ ;;
+ esac
+ echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP
+}
+
+# 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 $BTROOTFSMNTT && 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"
+dd if=/dev/zero of=$BTROOTFSIMG bs=1048576 count=$BTVIRTUALDISKSIZE
+ #qemu-img create $BTROOTFSIMG 3G
+ #dd if=/dev/zero of=$BTROOTFSIMG bs=1k count=$OGCLIENTSIZEKB # necesita 500MB
+
+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 "
+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.ext3 -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 "
+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
+
+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}
+
+
+if [ $? -ne 0 ]; then
+ errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --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 luc IMGi
+#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)
+#
+# <file system> <mount point> <type> <options> <dump> <pass>
+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
+
+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
+
+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 -prv /usr/lib/syslinux/* /tmp/iso/isolinux/
+cp -prv /usr/share/gpxe/* /tmp/iso/isolinux/
+
+cat << FIN > /tmp/iso/isolinux/isolinux.cfg
+DEFAULT menu.c32
+PROMPT 0
+ALLOWOPTIONS 1
+
+MENU TITLE OpenGnsys ${NAMEISOCLIENT}
+
+LABEL gpxe
+MENU LABEL gpxe
+KERNEL /clonezilla/live/vmlinuz1
+APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
+
+LABEL 0
+MENU LABEL ogClient 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 ogClient 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 ogClient 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 ogClient 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 gpxe.lkrn
+
+label 6
+MENU LABEL Network boot via gPXE usb
+KERNEL gpxe.usb
+
+label 7
+MENU LABEL Network boot via gPXE pxe
+KERNEL gpxe.pxe
+
+label 8
+MENU LABEL Network boot via gPXE iso
+KERNEL gpxe.iso
+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
+
+}