#!/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)
#
# <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 $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

}
