summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradv <adv@uma.es>2011-08-02 17:10:03 +0000
committeradv <adv@uma.es>2011-08-02 17:10:03 +0000
commit00a2c2cb92d8fe71b0048a93ba996cd942a69f97 (patch)
tree4c4e79a08fa07ddc6b829305f2422849e529df45
parent6ddbb9e51116cf3ddbf1729776e38427b60e0f34 (diff)
version 1.0.2 boot-tools #404 #420
git-svn-id: https://opengnsys.es/svn/branches/version1.0@2250 a21b9725-9963-47de-94b9-378ad31fedc9
-rw-r--r--client/boot-tools/boottoolsfunctions.lib497
-rwxr-xr-xclient/boot-tools/boottoolsgenerator.sh158
-rw-r--r--client/boot-tools/includes/etc/apt/sources.list.debian4
-rw-r--r--client/boot-tools/includes/etc/apt/sources.list.ubuntu56
-rw-r--r--client/boot-tools/includes/etc/environment4
-rw-r--r--client/boot-tools/includes/etc/fstab13
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/hooks/oghooks62
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/modules14
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions631
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/scripts/oginit133
-rw-r--r--client/boot-tools/includes/etc/inittab14
-rw-r--r--client/boot-tools/includes/etc/modprobe.d/blacklist-framebuffer.conf30
-rw-r--r--client/boot-tools/includes/etc/mtab0
-rw-r--r--client/boot-tools/includes/etc/network/interfaces4
-rwxr-xr-xclient/boot-tools/includes/etc/profile.d/loadenviron.sh93
-rw-r--r--client/boot-tools/includes/etc/ssh/ssh_config56
-rw-r--r--client/boot-tools/includes/etc/ssh/sshd_config86
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/box.pngbin0 -> 870 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/bullet.pngbin0 -> 296 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/entry.pngbin0 -> 350 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/lock.pngbin0 -> 1896 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/logoopengnsys.pngbin0 -> 13331 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.plymouth11
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.pngbin0 -> 13331 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.script203
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_bar.pngbin0 -> 285 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_box.pngbin0 -> 285 bytes
-rwxr-xr-xclient/boot-tools/includes/root/CompileSoftware.sh40
-rwxr-xr-xclient/boot-tools/includes/root/ConfFS.sh24
-rw-r--r--client/boot-tools/includes/root/GenerateGraphicBoot.sh17
-rwxr-xr-xclient/boot-tools/includes/root/GenerateInitrd.generic.sh16
-rwxr-xr-xclient/boot-tools/includes/root/InstallSoftware.sh80
-rwxr-xr-xclient/boot-tools/includes/root/ReconfigureLocales.sh4
-rwxr-xr-xclient/boot-tools/includes/root/generateSshKeysClient.sh23
-rw-r--r--client/boot-tools/includes/root/importSVNboot-tools.sh118
-rwxr-xr-xclient/boot-tools/includes/root/importSshKeys.sh17
-rwxr-xr-xclient/boot-tools/includes/root/qemu.sh9
-rw-r--r--client/boot-tools/includes/var/lib/locales/supported.d/local5
38 files changed, 2422 insertions, 0 deletions
diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib
new file mode 100644
index 00000000..a5d951b2
--- /dev/null
+++ b/client/boot-tools/boottoolsfunctions.lib
@@ -0,0 +1,497 @@
+#!/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.
+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=1000
+export BTROOTFSIMGLABEL=ogClient
+
+export LOG_FILE=/tmp/boot-tools_installation.log
+}
+
+
+# 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
+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
+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
+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
+
+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
+btogFsInitrd ()
+{
+#DEPENDENCIAS
+ogClientVar
+ogClientOsInfo
+# $1
+#TODO generara md5 del kernel y del initrd.
+
+cd /
+schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh
+echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR"
+cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR
+cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img
+cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz
+cd -
+chmod -R 755 $OGCLIENTBASEDIR
+}
+
+#btogFsToSqfs 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
+btogFsSqfs ()
+{
+#Dependencias.
+ogClientVar
+
+echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs "
+# si ya existe un sqfs lo renombramos
+[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S`
+mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
+
+mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs
+chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs
+
+mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
+}
+
+
+
+
+
+# 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 {
+apt-get install syslinux genisoimage
+#TODO: deb http://free.nchc.org.tw/drbl-core drbl stable
+#apt-get install gpxe
+mkdir -p /tmp/iso/isolinux
+#cd tmp/iso/
+cp -prv /usr/lib/syslinux/* /tmp/iso/isolinux/
+cp -prv /usr/share/gpxe/* /tmp/iso/isolinux/
+mkdir -p /tmp/iso/ogclient
+#el ogclienteToISO debe tener una copia del ogvmlinuz como linuxISO
+cp -prv /var/lib/tftpboot/ogclientToIso/* /tmp/iso/ogclient
+
+
+cat << FIN > /tmp/iso/isolinux/isolinux.cfg
+DEFAULT menu.c32
+PROMPT 0
+ALLOWOPTIONS 1
+
+MENU TITLE OpenGnsys 1.0.1 v00
+
+LABEL gpxe
+MENU LABEL gpxe
+KERNEL /clonezilla/live/vmlinuz1
+APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
+
+
+#default 0
+#prompt 1
+#timeout 100
+
+#display mensaje.txt
+
+
+
+
+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 ogclient
+#KERNEL /ogclient/linuxISO
+#APPEND initrd=/ogclient/initrdISO.img
+
+#KERNEL linuxISO
+#APPEND initrd=initrdISO.img
+
+LABEL 4
+MENU LABEL local
+localboot 0x80
+append -
+
+
+label 5
+MENU LABEL Network boot via gPXE lkrn
+KERNEL gpxe.lkrn
+
+label 5
+MENU LABEL Network boot via gPXE usb
+KERNEL gpxe.usb
+
+label 5
+MENU LABEL Network boot via gPXE pxe
+KERNEL gpxe.pxe
+
+label 5
+MENU LABEL Network boot via gPXE iso
+KERNEL gpxe.iso
+FIN
+#### /tmp/iso#
+mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso
+
+### 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
+
+}
diff --git a/client/boot-tools/boottoolsgenerator.sh b/client/boot-tools/boottoolsgenerator.sh
new file mode 100755
index 00000000..ce37eff3
--- /dev/null
+++ b/client/boot-tools/boottoolsgenerator.sh
@@ -0,0 +1,158 @@
+#!/bin/bash
+#@file boottoolsgenerator.sh
+#@brief Script generación del sistema opertativo cliente OpenGnSys
+#@warning
+#@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
+#*/
+
+
+#Variables
+TYPECLIENT=host
+WORKDIR=/tmp/opengnsys_installer
+INSTALL_TARGET=/opt/opengnsys
+PROGRAMDIR=$(readlink -e $(dirname "$0"))
+
+# Solo ejecutable por usuario root
+if [ "$(whoami)" != 'root' ]
+then
+ echo "ERROR: this program must run under root privileges!!"
+ exit 1
+fi
+
+
+#funciones especificas del cliente.
+source $PROGRAMDIR/boottoolsfunctions.lib
+
+
+echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
+
+##########################################################################
+## FASE 1 - Instalación de software adicional.
+DEPENDENCIES=( debootstrap subversion schroot squashfs-tools)
+apt-get update
+# Instalación de dependencias (paquetes de sistema operativo).
+declare -a notinstalled
+checkDependencies DEPENDENCIES notinstalled
+if [ $? -ne 0 ]; then
+ installDependencies notinstalled
+ if [ $? -ne 0 ]; then
+ echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
+ exit 1
+ fi
+fi
+########### FIN FASE 1
+
+##### FASE 2 - Asignación de variables
+#obtenemos las variables necesarias.
+btogGetVar
+#obtenemos la información del host.
+btogGetOsInfo
+##### FIN fase 2
+
+############# FASE 3: Creación del Sistema Root (Segundo Sistema archivos (img))
+##3.1 creación y formateo del disco virtual. generamos el dispositivo loop.
+file $BTROOTFSIMG | grep "partition 1: ID=0x83"
+if [ $? == 1 ]
+then
+ btogSetFsVirtual || exit 2
+fi
+#3.2 generamos el Sistema de archivos con debootstrap
+schroot -p -c IMGogclient -- touch /tmp/ogclientOK
+if [ -f /tmp/ogclientOK ]
+then
+ rm /tmp/ogclientOK
+else
+ btogSetFsBase || exit 3
+fi
+
+
+############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot
+cat /etc/schroot/schroot.conf | grep $BTROOTFSIMG || btogSetFsAccess
+
+
+
+
+############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys
+cp ${BTSVNBOOTTOOLS}/includes/root/* /tmp/
+chmod 777 /tmp/*.sh
+schroot -p -c IMGogclient -- /tmp/importSVNboot-tools.sh
+
+
+
+
+
+
+############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot
+### 6.1 instalacion de software con apt-get
+schroot -p -c IMGogclient -- /root/InstallSoftware.sh
+echo "saltando"
+ if [ $? -ne 0 ]; then
+ errorAndLog "Instalando sofware adicional OG : ERROR"
+ exit
+else
+ echoAndLog "Instalando sofware adicional OG: OK"
+fi
+#### 6.2 compilación de software.
+cd /
+schroot -p -c IMGogclient -- /root/CompileSoftware.sh
+cd -
+
+### 6.3 configuracion hostname passroot securety
+cd /
+schroot -c IMGogclient -- /root/ConfFS.sh
+cd -
+#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root
+# schroot -c IMGogclient -- passwd root | echo "root"
+
+
+### 6.4 incorporamos la clave publica del servidor
+cd /
+ssh-keygen -q -f /root/.ssh/id_rsa -N ""
+cp /root/.ssh/id_rsa.pub /tmp
+schroot -p -c IMGogclient -- /root/importSshKeys.sh
+cd -
+############ y la del propio cliente.
+schroot -c IMGogclient -- /root/generateSshKeysClient.sh
+
+## configuramos los locales.
+schroot -c IMGogclient -- /root/ReconfigureLocales.sh
+
+exit 99
+################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img)
+
+
+
+
+
+
+
+
+
+
+
+
+################## FASE 7. Generamos el 1er sistema de archivos. INITRD
+btogFsInitrd
+
+
+################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs)
+# generamos el 2sistema de archivos en squashfs
+ogClient2ndSqfs
+################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs)
+
+
+##################### FASE 9. algunos detallas del pxe
+#dejamos ficheros de ejemplo para el pxe y el nfs
+#ogClientConfpxe
+##################### FIN FASE 9. algunos detallas del pxe
+
+
+# Mostrar sumario de la instalación e instrucciones de post-instalación.
+installationSummary
+
+echoAndLog "OpenGnSys installation finished at $(date)"
diff --git a/client/boot-tools/includes/etc/apt/sources.list.debian b/client/boot-tools/includes/etc/apt/sources.list.debian
new file mode 100644
index 00000000..495e48d4
--- /dev/null
+++ b/client/boot-tools/includes/etc/apt/sources.list.debian
@@ -0,0 +1,4 @@
+deb http://ftp.us.debian.org/debian lenny main contrib non-free
+
+deb http://security.debian.org/ lenny/updates main contrib non-free
+deb-src http://security.debian.org/ lenny/updates main contrib non-free
diff --git a/client/boot-tools/includes/etc/apt/sources.list.ubuntu b/client/boot-tools/includes/etc/apt/sources.list.ubuntu
new file mode 100644
index 00000000..29348ccc
--- /dev/null
+++ b/client/boot-tools/includes/etc/apt/sources.list.ubuntu
@@ -0,0 +1,56 @@
+deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted
+deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME main restricted
+## Major bug fix updates produced after the final release of the
+## distribution.
+deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted
+deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates main restricted
+## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
+## team. Also, please note that software in universe WILL NOT receive any
+## review or updates from the Ubuntu security team.
+deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe
+deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME universe
+deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe
+deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates universe
+
+## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
+## team, and may not be under a free licence. Please satisfy yourself as to
+## your rights to use the software. Also, please note that software in
+## multiverse WILL NOT receive any review or updates from the Ubuntu
+## security team.
+deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse
+deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME multiverse
+deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse
+deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-updates multiverse
+
+## Uncomment the following two lines to add software from the 'backports'
+## repository.
+## N.B. software from this repository may not have been tested as
+## extensively as that contained in the main release, although it includes
+## newer versions of some applications which may provide useful features.
+## Also, please note that software in backports WILL NOT receive any review
+## or updates from the Ubuntu security team.
+# deb http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse
+# deb-src http://es.archive.ubuntu.com/ubuntu/ OSCODENAME-backports main restricted universe multiverse
+
+## Uncomment the following two lines to add software from Canonical's
+## 'partner' repository.
+## This software is not part of Ubuntu, but is offered by Canonical and the
+## respective vendors as a service to Ubuntu users.
+# deb http://archive.canonical.com/ubuntu OSCODENAME partner
+# deb-src http://archive.canonical.com/ubuntu OSCODENAME partner
+
+
+deb http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted
+deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security main restricted
+deb http://security.ubuntu.com/ubuntu OSCODENAME-security universe
+deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security universe
+deb http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse
+deb-src http://security.ubuntu.com/ubuntu OSCODENAME-security multiverse
+
+
+deb http://archive.ubuntu.com/ubuntu OSCODENAME main
+deb http://free.nchc.org.tw/drbl-core drbl stable
+deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe multiverse
+deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main
+deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main
+deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main
diff --git a/client/boot-tools/includes/etc/environment b/client/boot-tools/includes/etc/environment
new file mode 100644
index 00000000..bb529d99
--- /dev/null
+++ b/client/boot-tools/includes/etc/environment
@@ -0,0 +1,4 @@
+LC_TYPE=es_ES@euro
+LC_ALL=es_ES@euro
+LANG=es_ES@euro
+LANGUAGE=es_ES@euro \ No newline at end of file
diff --git a/client/boot-tools/includes/etc/fstab b/client/boot-tools/includes/etc/fstab
new file mode 100644
index 00000000..d7473df4
--- /dev/null
+++ b/client/boot-tools/includes/etc/fstab
@@ -0,0 +1,13 @@
+# /etc/fstab: static file system information.
+#
+# Use 'blkid -o value -s UUID' to print the universally unique identifier
+# for a device; this may be used with UUID= as a more robust way to name
+# devices that works even if disks are added and removed. See fstab(5).
+#
+# <file system> <mount point> <type> <options> <dump> <pass>
+proc /proc proc 0 0
+/dev/sda1 ext3 errors=remount-ro 0 1
+
+
+
+
diff --git a/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
new file mode 100755
index 00000000..67f807ab
--- /dev/null
+++ b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
@@ -0,0 +1,62 @@
+#!/bin/sh -e
+# initramfs hook for OpenGnsys
+
+#@file oghooks
+#@brief configuración initrd para OpenGnSys
+#@warning
+#@version 0.9 - estrucura opengnsys, bash-static, unionfs, atheros
+#@author Antonio J. Doblas Viso.
+#@date 2010/05/24
+#*/
+
+PREREQ="og"
+
+# Output pre-requisites
+prereqs()
+{
+ echo "$PREREQ"
+}
+
+case "$1" in
+ prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+
+. /usr/share/initramfs-tools/hook-functions
+
+mkdir -p ${DESTDIR}/scripts/og-top
+mkdir -p ${DESTDIR}/scripts/og-premount
+mkdir -p ${DESTDIR}/scripts/og-bottom
+mkdir -p ${DESTDIR}/mnt/
+mkdir -p ${DESTDIR}/net/
+mkdir -p ${DESTDIR}/usr
+mkdir -p ${DESTDIR}/var/lock
+mkdir -p ${DESTDIR}/var/log
+mkdir -p ${DESTDIR}/opt/opengnsys;
+mkdir -p ${DESTDIR}/ogboot;
+mkdir -p ${DESTDIR}/boot;
+
+# Insert basic binaries
+copy_exec /bin/bash-static /bin/bash
+copy_exec /usr/bin/unionfs-fuse
+copy_exec /sbin/mount.cifs
+copy_exec /sbin/mount.smbfs
+copy_exec /bin/lsmod
+
+
+# Insert OpenGnsys Engine
+#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine
+#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine
+
+#rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl*
+manual_add_modules cifs
+manual_add_modules smbfs
+manual_add_modules atl1e
+manual_add_modules squashfs
+manual_add_modules md4
+
+
+
diff --git a/client/boot-tools/includes/etc/initramfs-tools/modules b/client/boot-tools/includes/etc/initramfs-tools/modules
new file mode 100644
index 00000000..8bac1d4b
--- /dev/null
+++ b/client/boot-tools/includes/etc/initramfs-tools/modules
@@ -0,0 +1,14 @@
+# List of modules that you want to include in your initramfs.
+#
+# Syntax: module_name [args ...]
+#
+# You must run update-initramfs(8) to effect this change.
+#
+# Examples:
+#
+# raid1
+# sd_mod
+vga16b
+vesafb
+fbcon
+
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
new file mode 100644
index 00000000..ae76bf2a
--- /dev/null
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
@@ -0,0 +1,631 @@
+#@file ogfunctions.lib
+#@brief Librería o clase para la generación del 1erFS
+#@class client
+#@brief Funciones para la generación del primers sistema (initrd)
+#@version 0.91
+#@warning License: GNU GPLv3+
+
+
+ogExportKernelParameters ()
+{
+ GLOBAL="cat /proc/cmdline"
+ for i in `${GLOBAL}`
+ do
+ echo $i | grep "=" > /dev/null && export $i
+ done
+return 0
+}
+
+ogExportVarEnvironment ()
+{
+ export CFGINITRD="/tmp/initrd.cfg"
+ OGPROTOCOL="${ogprotocol:-smb}"
+ case "$OGPROTOCOL" in
+ nfs|NFS)
+ #export NFSROOTBOOT="/var/lib/tftpboot"
+ export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
+ #export NFSCLIENTDIR="/opt/opengnsys/client"
+ export SRCOGSHARE="/opt/opengnsys/client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
+ #export NFSLOGDIR="/opt/opengnsys/log/clients"
+ export SRCOGLOG="/opt/opengnsys/log/clients" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
+ #export NFSIMGDIR="/opt/opengnsys/images"
+ export SRCOGIMAGES="/opt/opengnsys/images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
+ ;;
+ smb|SMB|cifs|CIFS|samba|SAMBA)
+ export OPTIONS=" -o user=opengnsys,pass=og"
+ #export SMBROOTBOOT="tftpboot" && echo "SMBROOTBOOT=$SMBROOTBOOT" >> $CFGINITRD
+ export SRCOGLIVE="tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
+ #export SMBCLIENTDIR="ogclient" && echo "SMBCLIENTDIR=$SMBCLIENTDIR" >> $CFGINITRD
+ export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
+ #export SMBLOGDIR="oglog" && echo "SMBLOGDIR=$SMBLOGDIR" >> $CFGINITRD
+ export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
+ #export SMBIMGDIR="ogimages" && echo "SMBIMGDIR=$SMBIMGDIR" >> $CFGINITRD
+ export SRCOGIMAGES="ogimages" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
+ ;;
+ local|LOCAL)
+ export SRCOGLIVE="local"
+ ;;
+ esac
+ #punto de acceso al boot-tools live
+ #export LOCALROOTBOOT="/opt/og2fs/tftpboot" && echo "LOCALROOTBOOT=$LOCALROOTBOOT" >> $CFGINITRD
+ export DSTOGLIVE="/opt/oglive/tftpboot"
+ #punto de montaje para unionfs
+ #export LOCALROOTRAM="/opt/og2fs/1stfs" && echo "LOCALROOTRAM=$LOCALROOTRAM" >> $CFGINITRD
+ export OGLIVERAMFS="/opt/oglive/ramfs" && echo "OGLIVERAMFS=$OGLIVERAMFS" >> $CFGINITRD
+ #punto de montaje donde se accede al 2nd FS mediante loop
+ #export LOCALROOTIMG="/opt/og2fs/2ndfs" && echo "LOCALROOTIMG=$LOCALROOTIMG" >> $CFGINITRD
+ export OGLIVEROOTFS="/opt/oglive/rootfs" && echo "OGLIVEROOTFS=$OGLIVEROOTFS" >> $CFGINITRD
+ #punto de union entre LOCALROOTIMG y LOCALROOTRAM
+ #export LOCALROOTUNION="/opt/og2fs/unionfs" && echo "LOCALROOTUNION=$LOCALROOTUNION" >> $CFGINITRD
+ export OGLIVEUNIONFS="/opt/oglive/unionfs" && echo "OGLIVEUNIONFS=$OGLIVEUNIONFS" >> $CFGINITRD
+ #etiquta para los dispositivos offline
+ export OGLIVELABEL="ogClient"
+
+ #echo "puntos de montajes para los demas accesos"
+ #echo "acceso al client, engine, scritps, interfaz"
+ #export LOCALCLIENTDIR="/opt/opengnsys" && echo "LOCALCLIENTDIR=$LOCALCLIENTDIR" >> $CFGINITRD
+ export DSTOGSHARE="/opt/opengnsys" && echo "DSTOGSHARE=$DSTOGSHARE" >> $CFGINITRD
+ #export LOCALLOGDIR="/opt/opengnsys/log" && echo "LOCALLOGDIR=$LOCALLOGDIR" >> $CFGINITRD
+ export DSTOGLOG="/opt/opengnsys/log" && echo "DSTOGLOG=$DSTOGLOG" >> $CFGINITRD
+ #export LOCALIMGDIR="/opt/opengnsys/images" && echo "LOCALIMGDIR=$LOCALIMGDIR" >> $CFGINITRD
+ export DSTOGIMAGES="/opt/opengnsys/images" && echo "DSTOGIMAGES=$DSTOGIMAGES" >> $CFGINITRD
+
+ ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES ogConfigureNetwork.
+ #DEVICE
+ #IPV4DDR
+ #IPV4BROADCAST
+ #IPV4NETMASK
+ #IPV4GATEWAY
+ #HOSTNAME
+ #INFORMACION de otras variasbles obteneidas desde ogGetROOTSERVER
+ #ROOTSERVER si ip=dhcp -> ROOTSERVER=NEXT-SERVER; si ip=host:rootserver:gw:mask:hostname:interfaz -> ROOTSERVER=rootserver
+ #BOOTIF -> si el gestor remoto es pxelinux.0 y se añade una linea más tipo "IPAPPEND 2" esta variable tendrá la mac de la interfaz.
+ #$OGSERVERLIVE
+ #$OGSERVERSHARE
+ #$OGSERVERLOG
+ #$OGSERVERIMAGES
+ return 0
+}
+
+ogConfigureRamfs ()
+{
+ #mkdir -p $LOCALROOTBOOT
+ mkdir -p $DSTOGLIVE
+ #mkdir -p $LOCALROOTRAM
+ mkdir -p $OGLIVERAMFS
+ #mkdir -p $LOCALROOTIMG
+ mkdir -p $OGLIVEROOTFS
+ #mkdir -p $LOCALROOTUNION
+ mkdir -p $OGLIVEUNIONFS
+}
+
+ogLoadNetModule ()
+{
+ if [ -n "$ognetmodule" ]
+ then
+ echo "Cargando modulo de red $netmodule"
+ insmod `find /lib/modules/ -name ${netmodule}*`
+ fi
+}
+
+
+ogPostConfigureFS()
+{
+ # configuramos el /etc/hostname.
+ echo $HOSTNAME > /etc/hostname
+
+ #configuramos el /etc/hosts
+ echo "127.0.0.1 localhost" > /etc/hosts
+ echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts
+
+ #configuramos el host.conf
+ echo "order hosts,bind" > /etc/host.conf
+ echo "multi on" >> /etc/host.conf
+
+ #configuramos el dns
+ echo "nameserver $ogdns" > /etc/resolv.conf
+
+
+ # configuramos el /etc/networks
+ #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}')
+ NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ")
+ echo "default 0.0.0.0" > /etc/networks
+ echo "loopback 127.0.0.0" >> /etc/networks
+ echo "link-local 169.254.0.0" >> /etc/networks
+ echo "localnet $NETIP" >> /etc/networks
+ #route
+
+ echo "ogLive1.0.2" > /etc/debian_chroot
+
+ #enlace si iniciamos desde ogprotocolo=local { cdrom, usb, cache } .
+ # monta el raiz del dispositivo local en /opt/og2fs/tftpboot - acceso al fichero .sqfs
+ # y monta el sistema root sqfs en /opt/og2fs/2ndfs
+ #[ "$LOCALMEDIA" == "CACHE" ] && ln -s /opt/oglive/tftpboot /opt/opengnsys/cache
+ #[ "$ogprotocol" == "local" ] && ln -s /opt/oglive/2ndfs/opt/opengnsys/* /opt/opengnsys/
+ [ "$LOCALMEDIA" == "CACHE" ] && ln -s $DSTOGLIVE /opt/opengnsys/cache
+ [ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/
+
+
+}
+
+
+
+#Requiere ogConfigureNetworking.
+#Exporta ROOTSERVER
+# si la red ha sido configurada con dhcp el valor de ROOTSERVER será el valor de next-server del dhcp
+# si la red ha sido configurada con el parametro de kernel ip, será el segundo valor.
+ ## ip=iphost:ipnext-server:ipgateway:netmask:hostname:iface:none
+ ## ip=172.17.36.21:62.36.225.150:172.17.36.254:255.255.255.0:prueba1:eth0:none
+ogGetROOTSERVER ()
+{
+ # get nfs root from dhcp
+ if [ "x${NFSROOT}" = "xauto" ]; then
+ # check if server ip is part of dhcp root-path
+ if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
+ NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ else
+ NFSROOT=${ROOTPATH}
+ fi
+
+ # nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
+ elif [ -n "${NFSROOT}" ]; then
+ # nfs options are an optional arg
+ if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
+ NFSOPTS="-o ${NFSROOT#*,}"
+ fi
+ NFSROOT=${NFSROOT%%,*}
+ if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
+ NFSROOT=${ROOTSERVER}:${NFSROOT}
+ fi
+ fi
+ export ROOTSERVER
+ echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD
+
+ #si oglive no oglive=R
+ export OGSERVERIMAGES="${ogrepo:-$ROOTSERVER}"
+ export OGSERVERSHARE="${ogshare:-$ROOTSERVER}"
+ export OGSERVERLOG="${oglog:-$ROOTSERVER}"
+ export OGSERVERLIVE="${oglive:-$OGSERVERIMAGES}"
+
+ return 0
+}
+
+#ogConnect
+# parm 1 ip servidor TODO:dns
+# parm 2 protocolo
+# parm 3 punto de acceso remoto
+# parm 4 punto de montaje local
+# parm 5 acceso de lectura tipo ",ro"
+ogConnect ()
+{
+ SERVER=$1
+ PROTOCOL=$2
+ SRC=$3
+ DST=$4
+ READONLY=$5
+
+ case "$PROTOCOL" in
+ nfs)
+ nfsmount -o nolock${READONLY} ${SERVER}:${SRC} ${DST}
+ ;;
+ smb)
+ mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS}${READONLY}
+ ;;
+ esac
+}
+
+ogConnectOgLive ()
+{
+# Si ogprotocol=local, la funcion ogExportVar => SRCOGLIVE=local
+ if [ "$SRCOGLIVE" == "local" ]
+ then
+ echo "Montar imagen del sistema root desde dispositivo local"
+ for i in $(blkid /dev/s* | grep $OGLIVELABEL | awk -F: '{print $2}' | tr -d \"); do export $i; done
+ mount -t $TYPE LABEL=$LABEL $DSTOGLIVE
+ if [ $? != 0 ]
+ then
+ mount -t reiserfs LABEL=CACHE $DSTOGLIVE
+ export LOCALMEDIA=CACHE
+ fi
+ else
+# Si ogprotocol es remoto. TODO en smb rw y en nfs ro??
+ ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE
+ fi
+# Si el montaje ha sido correcto, tanto en local como en remoto. Procedemos con la union
+ ogMergeLive
+}
+
+
+
+ogMergeLive()
+{
+#Si existe en el punto de acceso del del oglive el fichero ogclient.sqfs
+if [ -f $DSTOGLIVE/ogclient/ogclient.sqfs ]
+then
+ cat /proc/mounts > /tmp/mtab.preunion
+ if [ "$og2nd" == "img" ]
+ then
+ #Montamos el ROOTFS tipo img, para desarrolladores
+ losetup /dev/loop0 $DSTOGLIVE/ogclient/ogclient.img -o 32256
+ mount /dev/loop0 $OGLIVEROOTFS
+ else
+ ## Montamos el ROOTFS tipo squashfs
+ mount $DSTOGLIVE/ogclient/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop
+ fi
+# Realizamos la union entre el ogliveram(initrd) y el ogliverootfs(ogclient.sqfs)
+ for i in etc var lib bin sbin usr root boot; do
+ ogUnionLiveDir $i
+ done
+ cat /tmp/mtab.preunion > /etc/mtab
+else
+ echo "Fichero imagen del cliente no encontrado"
+ return 1
+fi
+}
+
+
+
+
+#ogUnionLiveDir
+#par 1 el directorio a unir.
+# para el parmetro 1 (directorio),
+ogUnionLiveDir()
+{
+ TMPDIR=/$1 #dir
+ FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
+ UNION_OPT="-o cow -o noinitgroups"
+ UBIN="unionfs-fuse"
+
+ mkdir -p $OGLIVERAMFS$TMPDIR
+ U1STDIR="${OGLIVERAMFS}${TMPDIR}=RW"
+ U2NDDIR="${OGLIVEROOTFS}${TMPDIR}=RO"
+ UNIONDIR=${OGLIVEUNIONFS}${TMPDIR}
+ mkdir -p $UNIONDIR
+ $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR
+ mount --bind $UNIONDIR $TMPDIR
+}
+
+
+
+
+ogConfigureLoopback()
+{
+# for the portmapper we need localhost
+ifconfig lo 127.0.0.1
+#/etc/init.d/portmap start
+}
+
+ogConfigureNetworking()
+{
+#echo "ogConfigureNetworking: Buscando interfaz a configurar DEVICE"
+if [ -n "${BOOTIF}" ]
+then
+ #echo " variable BOOTIF exportada con pxelinux.0 con valor $BOOTIF"
+ IP=$IPOPTS
+ temp_mac=${BOOTIF#*-}
+ # convert to typical mac address format by replacing "-" with ":"
+ bootif_mac=""
+ IFS='-'
+ for x in $temp_mac ; do
+ if [ -z "$bootif_mac" ]; then
+ bootif_mac="$x"
+ else
+ bootif_mac="$x:$bootif_mac"
+ fi
+ done
+ unset IFS
+ # look for devices with matching mac address, and set DEVICE to
+ # appropriate value if match is found.
+ for device in /sys/class/net/* ; do
+ if [ -f "$device/address" ]; then
+ current_mac=$(cat "$device/address")
+ if [ "$bootif_mac" = "$current_mac" ]; then
+ DEVICE=${device##*/}
+ break
+ fi
+ fi
+ done
+else
+ #echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado"
+ IP=$ip
+ #TODO Detectar que interfaz se ha iniciado
+ case ${IP} in
+ none|off)
+ return 0
+ ;;
+ ""|on|any)
+ # Bring up device
+ DEVICE=eth0
+ ;;
+ dhcp|bootp|rarp|both)
+ DEVICE=eth0
+ ;;
+ *)
+ DEVICE=`echo $IP | cut -f6 -d:`
+ ;;
+ esac
+fi
+if [ -z "${DEVICE}" ]; then
+ echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking"
+ ogConfigureNetworking
+fi
+
+[ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0
+#if [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ]; then
+# echo "variable DEVICE con valor $DEVICE y fichero /tmp/net-$DEVICE encontrados"
+# return 0
+#else
+# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /tmp/net-$DEVICE"
+#fi
+
+# Activamos la interfaz antes de configurar.
+ip address flush $DEVICE
+ip link set dev $DEVICE up
+# Si no se detecta señal portadora volver a configurar.
+sleep 1
+CARRIER=$(cat /sys/class/net/${DEVICE}/carrier)
+if [ "$CARRIER" != "1" ]
+then
+ ogConfigureNetworking
+fi
+
+# support ip options see linux sources
+# Documentation/filesystems/nfsroot.txt
+# Documentation/frv/booting.txt
+for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do
+ # The NIC is to be configured if this file does not exist.
+ # Ip-Config tries to create this file and when it succeds
+ # creating the file, ipconfig is not run again.
+ if [ -e /tmp/net-"${DEVICE}".conf ]; then
+ break;
+ fi
+ case ${IP} in
+ none|off)
+ return 0
+ ;;
+ ""|on|any)
+ # Bring up device
+ echo "Setting $DEVICE with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} "
+ ipconfig -t ${ROUNDTTT} ${DEVICE}
+ ;;
+ dhcp|bootp|rarp|both)
+ echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} "
+ ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE}
+ ;;
+ *)
+ echo "Setting $DEVICE with option * and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP "
+ ipconfig -t ${ROUNDTTT} -d $IP
+ # grab device entry from ip option
+ NEW_DEVICE=${IP#*:*:*:*:*:*}
+ if [ "${NEW_DEVICE}" != "${IP}" ]; then
+ NEW_DEVICE=${NEW_DEVICE%:*}
+ else
+ # wrong parse, possibly only a partial string
+ NEW_DEVICE=
+ fi
+ if [ -n "${NEW_DEVICE}" ]; then
+ DEVICE="${NEW_DEVICE}"
+ fi
+ ;;
+ esac
+done
+
+# source ipconfig output
+if [ -n "${DEVICE}" ]; then
+ . /tmp/net-${DEVICE}.conf
+ DEVICECFG="/tmp/net-${DEVICE}.conf"
+ export DEVICECFG
+ export DEVICE
+ echo "DEVICE=$DEVICE" >> $CFGINITRD
+ echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD
+ echo "exportando variable DEVICE con valor = $DEVICE y el DEVICECFG con valor $DEVICECFG"
+else
+ # source any interface as not exaclty specified
+ . /tmp/net-*.conf
+fi
+}
+
+ #####################################################################
+# Ask yesno question.
+#
+# Usage: yesno OPTIONS QUESTION
+#
+# Options:
+# --timeout N Timeout if no input seen in N seconds.
+# --default ANS Use ANS as the default answer on timeout or
+# if an empty answer is provided.
+#
+# Exit status is the answer. 0=yes 1=no
+
+ogYesNo()
+{
+ local ans
+ local ok=0
+ local timeout=0
+ local default
+ local t
+
+ while [[ "$1" ]]
+ do
+ case "$1" in
+ --default)
+ shift
+ default=$1
+ if [[ ! "$default" ]]; then error "Missing default value"; fi
+ t=$(echo $default | tr '[:upper:]' '[:lower:]')
+
+ if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then
+ error "Illegal default answer: $default"
+ fi
+ default=$t
+ shift
+ ;;
+
+ --timeout)
+ shift
+ timeout=$1
+ if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi
+ #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi
+ shift
+ ;;
+
+ -*)
+ error "Unrecognized option: $1"
+ ;;
+
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [[ $timeout -ne 0 && ! "$default" ]]; then
+ error "Non-zero timeout requires a default answer"
+ fi
+
+ if [[ ! "$*" ]]; then error "Missing question"; fi
+
+ while [[ $ok -eq 0 ]]
+ do
+ if [[ $timeout -ne 0 ]]; then
+ if ! read -t $timeout -p "$*" ans; then
+ ans=$default
+ else
+ # Turn off timeout if answer entered.
+ timeout=0
+ if [[ ! "$ans" ]]; then ans=$default; fi
+ fi
+ else
+ read -p "$*" ans
+ if [[ ! "$ans" ]]; then
+ ans=$default
+ else
+ ans=$(echo $ans | tr '[:upper:]' '[:lower:]')
+ fi
+ fi
+
+ if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then
+ ok=1
+ fi
+
+ if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi
+ done
+ [[ "$ans" = "y" || "$ans" == "yes" ]]
+}
+
+
+### # borrar
+
+ogConectROOTSERVER ()
+{
+local OPTIONS
+#params a detectar
+if [ $ogrepo ]
+then
+ # Validar si la ip es correcta
+ ROOTREPO=$ogrepo
+else
+ ROOTREPO=$ROOTSERVER
+fi
+
+case "$ogprotocol" in
+ local)
+ echo "Montar imagen del sistema root desde dispositivo local"
+ for i in $(blkid /dev/s* | grep ogClient | awk -F: '{print $2}' | tr -d \"); do export $i; done
+ mount -t $TYPE LABEL=$LABEL $LOCALROOTBOOT
+ if [ $? != 0 ]
+ then
+ mount -t reiserfs LABEL=CACHE $LOCALROOTBOOT
+ export LOCALMEDIA=CACHE
+ fi
+ ;;
+ httfs)
+ echo "protocolo httfs aun no soportado"
+ ;;
+ sshfs)
+ echo "protocolo sshfs aun no soportado"
+ ;;
+ smb)
+ echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol"
+ OPTIONS=" -o user=opengnsys,pass=og"
+ mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS
+ mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS
+ mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS
+
+ mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro
+ ;;
+ nfs)
+ echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol"
+ nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT
+ nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR
+ nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR
+
+ nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR
+ ;;
+esac
+}
+
+ ogMerge2ndFile()
+{
+if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ]
+then
+ cat /proc/mounts > /tmp/mtab.preunion
+ if [ "$og2nd" == "img" ]
+ then
+ #para acceder al img
+ losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256
+ mount /dev/loop0 $LOCALROOTIMG
+ else
+ ## para acceder al squashfs
+ mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop
+ fi
+ for i in etc var lib bin sbin usr root boot; do
+ unionmount $i
+ done
+ cat /tmp/mtab.preunion > /etc/mtab
+else
+ echo "Fichero imagen del cliente no encontrado"
+ return 1
+fi
+}
+
+unionmount()
+{
+ tmpdir=/$1 #dir
+ FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
+ UNION_OPT="-o cow -o noinitgroups"
+ UBIN="unionfs-fuse"
+ #UPATH="/unionfs"
+ #LOCALROOTIMG="/opt/og2fs/2ndfs"
+ #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs
+ #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM
+ #mkdir -p $LOCALROOTRAM #/unionfs/host
+ #mkdir -p $LOCALROOTUNION #/unionfs/union
+ mkdir -p $LOCALROOTRAM$tmpdir
+ #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir
+ U1STDIR="${LOCALROOTRAM}${tmpdir}=RW"
+ U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO"
+ UNIONDIR=$LOCALROOTUNION$tmpdir
+ mkdir -p $UNIONDIR
+ $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR
+ mount --bind $UNIONDIR $tmpdir
+}
+
+
+unionmountOLD()
+{
+ FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
+ UNION_OPT="-o cow -o noinitgroups"
+ UPATH="/unionfs"
+ UBIN="unionfs-fuse"
+ mkdir -p /unionfs/host
+ mkdir -p /unionfs/union
+ dir=$1
+ mkdir -p /unionfs/host/$dir
+ #mount --bind /$dir /unionfs/host/$dir
+ mkdir -p /unionfs/union/$dir
+ host="/unionfs/host/${dir}=RW"
+ common="/opt/og2fs/${dir}=RO"
+ $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir
+ mount --bind /unionfs/union/$dir /$dir
+}
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
new file mode 100755
index 00000000..94226a1f
--- /dev/null
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
@@ -0,0 +1,133 @@
+# OpenGnsys oginit -*- shell-script -*-
+
+#@file oginit
+#@brief Guion modificador inicio initrd para OpenGnSys
+#@warning
+#@version 0.1 - basado en ROOTfs
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2009/00/00
+#@version 0.2 - basado en el instalador de ubunto
+#@author Alejandro Castillo
+#@author Ramón Gómez
+#@author Irina
+#@author Antonio Doblas
+#@date 2010/00/00
+#@version 0.7 - Generación limpia con mkinitrd, busybox
+#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
+#@date 2010/05/24
+#@version 0.8 - Integración con FileSystem externo
+#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
+#@date 2010/06/24
+#@version 0.8.1 - UnionFS + squasfs
+#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
+#@date 2010/06/29
+#@version 1.0. - Adaptacion variables. Corrección enlace red
+#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
+#@date 2011/06/16
+#*/
+
+
+
+
+
+# Parameter: Where to mount the filesystem
+mountroot ()
+{
+ [ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top"
+ run_scripts /scripts/og-top
+ [ "$quiet" != "y" ] && log_end_msg
+
+ # If the root device hasn't shown up yet, give it a little while
+ # to deal with removable devices
+
+ . /scripts/functions
+ . /scripts/ogfunctions
+
+ sleep 2
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N "
+ [ $? == 0 ] && sh || echo " "
+ set -a
+ log_success_msg "Checking kernel parameters"
+ ogExportKernelParameters
+ log_success_msg "Checking Opengnys Environmnet"
+ ogExportVarEnvironment
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConfigureRamfs
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure netmoule specified in kernel parameters: y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogLoadNetModule
+
+ #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-premount"
+ #run_scripts /scripts/og-premount
+ #[ "$quiet" != "y" ] && log_end_msg
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConfigureNetworking
+ log_success_msg "config networking"
+ ogConfigureLoopback
+ log_success_msg "config loopback"
+
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogGetROOTSERVER && log_success_msg "Get Info from pxe server and ckeck distribuited OG services "
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect and merging the rootfs -ogLive- : y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConnectOgLive && log_success_msg "Merge the initrd with the remote rootfs -ogLive-" || sh
+ # si es necesario realiza ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with client dir SHARE -engine,scripts,interface, -share- : y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConnect $OGSERVERSHARE $OGPROTOCOL $SRCOGSHARE $DSTOGSHARE
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with client dir LOG STORAGE : y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConnect $OGSERVERLOG $OGPROTOCOL $SRCOGLOG $DSTOGLOG
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with REPOSITORY STORAGE : y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConnect $OGSERVERIMAGES $OGPROTOCOL $SRCOGIMAGES $DSTOGIMAGES
+
+
+
+ #[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N "
+ #[ $? == 0 ] && sh || echo " "
+ #ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh
+
+
+ #[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N "
+ #[ $? == 0 ] && sh || echo " "
+ #ogMerge2ndFile && log_success_msg "Merge onto Second File System"
+
+
+ ####[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom"
+ ####run_scripts /scripts/og-bottom
+ ####[ "$quiet" != "y" ] && log_end_msg
+
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogPostConfigureFS
+ setupcon -k
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before calling oginit with /etc/inittab: y/N "
+ [ $? == 0 ] && sh || echo " "
+
+if [ "$oginit" ]
+then
+ exec $oginit
+else
+ exec init
+fi
+
+
+
+
+
+}
diff --git a/client/boot-tools/includes/etc/inittab b/client/boot-tools/includes/etc/inittab
new file mode 100644
index 00000000..6d3277fc
--- /dev/null
+++ b/client/boot-tools/includes/etc/inittab
@@ -0,0 +1,14 @@
+# This is run first except when booting in single-user mode
+#
+#::sysinit:/opt/opengnsys/etc/preinit/defaultTESTING.sh
+# /bin/sh invocations on selected ttys
+#
+# Start an "askfirst" shell on the console (whatever that may be)
+#::askfirst:/bin/sh
+# Start an "askfirst" shell on /dev/tty2-4
+#tty1::respawn:/sbin/getty 38400 tty1
+tty1::respawn:/opt/opengnsys/etc/preinit/default.sh
+tty2::respawn:/sbin/getty 38400 tty2
+tty3::respawn:/sbin/getty 38400 tty3
+tty4::respawn:/sbin/getty 38400 tty4
+tty5::respawn:/sbin/getty 38400 tty5
diff --git a/client/boot-tools/includes/etc/modprobe.d/blacklist-framebuffer.conf b/client/boot-tools/includes/etc/modprobe.d/blacklist-framebuffer.conf
new file mode 100644
index 00000000..8b047e4e
--- /dev/null
+++ b/client/boot-tools/includes/etc/modprobe.d/blacklist-framebuffer.conf
@@ -0,0 +1,30 @@
+# Framebuffer drivers are generally buggy and poorly-supported, and cause
+# suspend failures, kernel panics and general mayhem. For this reason we
+# never load them automatically.
+blacklist aty128fb
+blacklist atyfb
+#blacklist radeonfb
+blacklist cirrusfb
+blacklist cyber2000fb
+blacklist cyblafb
+blacklist gx1fb
+blacklist hgafb
+blacklist i810fb
+blacklist intelfb
+blacklist kyrofb
+blacklist lxfb
+blacklist matroxfb_base
+blacklist neofb
+blacklist nvidiafb
+blacklist pm2fb
+blacklist rivafb
+blacklist s1d13xxxfb
+blacklist savagefb
+blacklist sisfb
+blacklist sstfb
+blacklist tdfxfb
+blacklist tridentfb
+#blacklist vesafb
+blacklist vfb
+blacklist viafb
+blacklist vt8623fb
diff --git a/client/boot-tools/includes/etc/mtab b/client/boot-tools/includes/etc/mtab
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/client/boot-tools/includes/etc/mtab
diff --git a/client/boot-tools/includes/etc/network/interfaces b/client/boot-tools/includes/etc/network/interfaces
new file mode 100644
index 00000000..dbe43582
--- /dev/null
+++ b/client/boot-tools/includes/etc/network/interfaces
@@ -0,0 +1,4 @@
+auto lo
+iface lo inet loopback
+auto eth0
+iface eth0 inet dhcp \ No newline at end of file
diff --git a/client/boot-tools/includes/etc/profile.d/loadenviron.sh b/client/boot-tools/includes/etc/profile.d/loadenviron.sh
new file mode 100755
index 00000000..083ee54b
--- /dev/null
+++ b/client/boot-tools/includes/etc/profile.d/loadenviron.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+### NOTA este archivo se sobreescribe al conectarse con el ogSHARE
+
+
+
+
+#/**
+#@file loadenviron.sh
+#@brief Script de carga de la API de funciones de OpenGNSys.
+#@warning License: GNU GPLv3+
+#@version 0.9
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-10-10
+#*/
+
+ GLOBAL="cat /proc/cmdline"
+ for i in `${GLOBAL}`
+ do
+ echo $i | grep "=" > /dev/null && export $i
+ done
+
+
+# FIXME Temporal
+export LANG="${LANG:-es_ES}"
+
+#/// Directorios del projecto OpenGNSys.
+export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}"
+if [ -d $OPENGNSYS ]; then
+ export OGBIN=$OPENGNSYS/bin
+ export OGETC=$OPENGNSYS/etc
+ export OGLIB=$OPENGNSYS/lib
+ export OGAPI=$OGLIB/engine/bin
+ export OGSCRIPTS=$OPENGNSYS/scripts
+ export OGIMG=$OPENGNSYS/images
+ export OGCAC=$OPENGNSYS/cache
+ export OGLOG=$OPENGNSYS/log
+
+# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH
+ # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH
+
+ #/// Cargar fichero de idioma.
+ LANGFILE=$OGETC/lang.$LANG.conf
+ if [ -f $LANGFILE ]; then
+ source $LANGFILE
+ #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do
+ for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do
+ export $i
+ done
+ fi
+ #/// Cargar API de funciones.
+ echo "$MSG_LOADAPI"
+ for i in $OGAPI/*.lib; do
+ source $i
+ done
+ for i in $(typeset -F | cut -f3 -d" "); do
+ export -f $i
+ done
+ # Carga de las API testing
+ if [ "$engine" = "testing" ]
+ then
+ for i in $OGAPI/*.testing; do
+ source $i
+ done
+ fi
+
+ source /tmp/net-eth* 2>/dev/null
+
+ # Añadir dependencia de arquitectura
+ ARCH=$(ogGetArch)
+ if [ -n "$ARCH" ]; then
+ # export PATH=$OGBIN/$ARCH:$PATH
+ # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH
+ export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin
+ export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH
+ fi
+ # Fichero de registros.
+ export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log"
+ # FIXME Pruebas para grupos de ordenadores
+ #export OGGROUP=$(ogGetGroup)
+ export OGGROUP=aula3
+fi
+
+#/// Declaración de códigos de error.
+export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto.
+export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado.
+export OG_ERR_PARTITION=3 # Error en partición de disco.
+export OG_ERR_LOCKED=4 # Partición o fichero bloqueado.
+export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen.
+export OG_ERR_NOTOS=6 # Sin sistema operativo.
+export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable.
+
+
diff --git a/client/boot-tools/includes/etc/ssh/ssh_config b/client/boot-tools/includes/etc/ssh/ssh_config
new file mode 100644
index 00000000..7f9319dc
--- /dev/null
+++ b/client/boot-tools/includes/etc/ssh/ssh_config
@@ -0,0 +1,56 @@
+
+# This is the ssh client system-wide configuration file. See
+# ssh_config(5) for more information. This file provides defaults for
+# users, and the values can be changed in per-user configuration files
+# or on the command line.
+
+# Configuration data is parsed as follows:
+# 1. command line options
+# 2. user-specific file
+# 3. system-wide file
+# Any configuration value is only changed the first time it is set.
+# Thus, host-specific definitions should be at the beginning of the
+# configuration file, and defaults at the end.
+
+# Site-wide defaults for some commonly used options. For a comprehensive
+# list of available options, their meanings and defaults, please see the
+# ssh_config(5) man page.
+
+Host *
+# ForwardAgent no
+# ForwardX11 no
+# ForwardX11Trusted yes
+# RhostsRSAAuthentication no
+# RSAAuthentication yes
+# PasswordAuthentication yes
+ HostbasedAuthentication no
+# GSSAPIAuthentication no
+# GSSAPIDelegateCredentials no
+# GSSAPIKeyExchange no
+# GSSAPITrustDNS no
+# BatchMode no
+# CheckHostIP yes
+# AddressFamily any
+# ConnectTimeout 0
+# StrictHostKeyChecking ask
+# IdentityFile ~/.ssh/identity
+# IdentityFile ~/.ssh/id_rsa
+# IdentityFile ~/.ssh/id_dsa
+# Port 22
+# Protocol 2,1
+# Cipher 3des
+# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
+# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
+# EscapeChar ~
+# Tunnel no
+# TunnelDevice any:any
+# PermitLocalCommand no
+# VisualHostKey no
+ SendEnv LANG LC_*
+# HashKnownHosts yes
+ GSSAPIAuthentication yes
+ GSSAPIDelegateCredentials no
+
+ StrictHostKeyChecking no
+ UserKnownHostsFile=/dev/null
+
diff --git a/client/boot-tools/includes/etc/ssh/sshd_config b/client/boot-tools/includes/etc/ssh/sshd_config
new file mode 100644
index 00000000..80900684
--- /dev/null
+++ b/client/boot-tools/includes/etc/ssh/sshd_config
@@ -0,0 +1,86 @@
+# Package generated configuration file
+# See the sshd_config(5) manpage for details
+
+# What ports, IPs and protocols we listen for
+Port 22
+# Use these options to restrict which interfaces/protocols sshd will bind to
+#ListenAddress ::
+#ListenAddress 0.0.0.0
+Protocol 2
+# HostKeys for protocol version 2
+HostKey /etc/ssh/ssh_host_rsa_key
+HostKey /etc/ssh/ssh_host_dsa_key
+#Privilege Separation is turned on for security
+UsePrivilegeSeparation no
+
+# Lifetime and size of ephemeral version 1 server key
+KeyRegenerationInterval 3600
+ServerKeyBits 768
+
+# Logging
+SyslogFacility AUTH
+LogLevel INFO
+
+# Authentication:
+LoginGraceTime 120
+PermitRootLogin yes
+StrictModes yes
+
+RSAAuthentication yes
+PubkeyAuthentication yes
+#AuthorizedKeysFile %h/.ssh/authorized_keys
+
+# Don't read the user's ~/.rhosts and ~/.shosts files
+IgnoreRhosts yes
+# For this to work you will also need host keys in /etc/ssh_known_hosts
+RhostsRSAAuthentication no
+# similar for protocol version 2
+HostbasedAuthentication no
+# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
+#IgnoreUserKnownHosts yes
+
+# To enable empty passwords, change to yes (NOT RECOMMENDED)
+PermitEmptyPasswords no
+
+# Change to yes to enable challenge-response passwords (beware issues with
+# some PAM modules and threads)
+ChallengeResponseAuthentication no
+
+# Change to no to disable tunnelled clear text passwords
+#PasswordAuthentication yes
+
+# Kerberos options
+#KerberosAuthentication no
+#KerberosGetAFSToken no
+#KerberosOrLocalPasswd yes
+#KerberosTicketCleanup yes
+
+# GSSAPI options
+#GSSAPIAuthentication no
+#GSSAPICleanupCredentials yes
+
+X11Forwarding yes
+X11DisplayOffset 10
+PrintMotd no
+PrintLastLog yes
+TCPKeepAlive yes
+#UseLogin no
+
+#MaxStartups 10:30:60
+#Banner /etc/issue.net
+
+# Allow client to pass locale environment variables
+AcceptEnv LANG LC_*
+
+Subsystem sftp /usr/lib/openssh/sftp-server
+
+# Set this to 'yes' to enable PAM authentication, account processing,
+# and session processing. If this is enabled, PAM authentication will
+# be allowed through the ChallengeResponseAuthentication and
+# PasswordAuthentication. Depending on your PAM configuration,
+# PAM authentication via ChallengeResponseAuthentication may bypass
+# the setting of "PermitRootLogin without-password".
+# If you just want the PAM account and session checks to run without
+# PAM authentication, then enable this but set PasswordAuthentication
+# and ChallengeResponseAuthentication to 'no'.
+UsePAM yes
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/box.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/box.png
new file mode 100644
index 00000000..54876e68
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/box.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/bullet.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/bullet.png
new file mode 100644
index 00000000..dd527369
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/bullet.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/entry.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/entry.png
new file mode 100644
index 00000000..a9f4157b
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/entry.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/lock.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/lock.png
new file mode 100644
index 00000000..a0f8c12f
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/lock.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/logoopengnsys.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/logoopengnsys.png
new file mode 100644
index 00000000..c87ca25e
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/logoopengnsys.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.plymouth b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.plymouth
new file mode 100644
index 00000000..a974b70c
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.plymouth
@@ -0,0 +1,11 @@
+[Plymouth Theme]
+Name=Script
+Description=Script example plugin.
+ModuleName=script
+
+[script]
+ImageDir=/lib/plymouth/themes/opengnsys
+ScriptFile=/lib/plymouth/themes/opengnsys/opengnsys.script
+
+[script-env-vars]
+example_env_var=example env var value
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.png
new file mode 100644
index 00000000..c87ca25e
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.script b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.script
new file mode 100644
index 00000000..dc0c8541
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.script
@@ -0,0 +1,203 @@
+# This is an example plymouth plugin script
+
+Window.SetBackgroundTopColor(0, 0, 0);
+Window.SetBackgroundBottomColor(0, 0, 0);
+
+#logo.image = Image("special://logo");
+logo.image = Image ("opengnsys.png");
+logo.sprite = Sprite(logo.image);
+logo.opacity_angle = 0;
+
+fun refresh_callback ()
+ {
+ if (status == "normal")
+ {
+ logo.opacity_angle += ((2 * 3.14) / 50) * 0.5; # 0.5 HZ
+ min_opacity = 0.3;
+ opacity = (Math.Cos(logo.opacity_angle) + 1) / 2;
+ opacity *= 1 - min_opacity;
+ opacity += min_opacity;
+ logo.sprite.SetX (Window.GetX() + Window.GetWidth() / 2 - logo.image.GetWidth() / 2);
+ logo.sprite.SetY (Window.GetY() + Window.GetHeight() / 2 - logo.image.GetHeight() / 2);
+ logo.sprite.SetOpacity (opacity);
+ }
+ else
+ {
+ logo.sprite.SetX (0);
+ logo.sprite.SetY (0);
+ logo.sprite.SetOpacity (1);
+ }
+ }
+
+Plymouth.SetRefreshFunction (refresh_callback);
+
+#----------------------------------------- Dialogue --------------------------------
+
+status = "normal";
+
+fun dialog_setup()
+ {
+ local.box;
+ local.lock;
+ local.entry;
+
+ box.image = Image("box.png");
+ lock.image = Image("lock.png");
+ entry.image = Image("entry.png");
+
+ box.sprite = Sprite(box.image);
+ box.x = Window.GetX() + Window.GetWidth() / 2 - box.image.GetWidth ()/2;
+ box.y = Window.GetY() + Window.GetHeight() / 2 - box.image.GetHeight()/2;
+ box.z = 10000;
+ box.sprite.SetPosition(box.x, box.y, box.z);
+
+ lock.sprite = Sprite(lock.image);
+ lock.x = box.x + box.image.GetWidth()/2 - (lock.image.GetWidth() + entry.image.GetWidth()) / 2;
+ lock.y = box.y + box.image.GetHeight()/2 - lock.image.GetHeight()/2;
+ lock.z = box.z + 1;
+ lock.sprite.SetPosition(lock.x, lock.y, lock.z);
+
+ entry.sprite = Sprite(entry.image);
+ entry.x = lock.x + lock.image.GetWidth();
+ entry.y = box.y + box.image.GetHeight()/2 - entry.image.GetHeight()/2;
+ entry.z = box.z + 1;
+ entry.sprite.SetPosition(entry.x, entry.y, entry.z);
+
+ global.dialog.box = box;
+ global.dialog.lock = lock;
+ global.dialog.entry = entry;
+ global.dialog.bullet_image = Image("bullet.png");
+ dialog_opacity (1);
+ }
+
+fun dialog_opacity(opacity)
+ {
+ dialog.box.sprite.SetOpacity (opacity);
+ dialog.lock.sprite.SetOpacity (opacity);
+ dialog.entry.sprite.SetOpacity (opacity);
+ for (index = 0; dialog.bullet[index]; index++)
+ {
+ dialog.bullet[index].sprite.SetOpacity(opacity);
+ }
+ }
+
+fun display_normal_callback ()
+ {
+ global.status = "normal";
+ if (global.dialog)
+ dialog_opacity (0);
+ }
+
+fun display_password_callback (prompt, bullets)
+ {
+ global.status = "password";
+ if (!global.dialog)
+ dialog_setup();
+ else
+ dialog_opacity(1);
+ for (index = 0; dialog.bullet[index] || index < bullets; index++)
+ {
+ if (!dialog.bullet[index])
+ {
+ dialog.bullet[index].sprite = Sprite(dialog.bullet_image);
+ dialog.bullet[index].x = dialog.entry.x + index * dialog.bullet_image.GetWidth();
+ dialog.bullet[index].y = dialog.entry.y + dialog.entry.image.GetHeight() / 2 - dialog.bullet_image.GetHeight() / 2;
+ dialog.bullet[index].z = dialog.entry.z + 1;
+ dialog.bullet[index].sprite.SetPosition(dialog.bullet[index].x, dialog.bullet[index].y, dialog.bullet[index].z);
+ }
+ if (index < bullets)
+ dialog.bullet[index].sprite.SetOpacity(1);
+ else
+ dialog.bullet[index].sprite.SetOpacity(0);
+ }
+ }
+
+Plymouth.SetDisplayNormalFunction(display_normal_callback);
+Plymouth.SetDisplayPasswordFunction(display_password_callback);
+
+#----------------------------------------- Progress Bar --------------------------------
+
+progress_box.original_image = Image("progress_box.png");
+progress_box.image = progress_box.original_image.Scale(Window.GetWidth (), progress_box.original_image.GetHeight());
+progress_box.sprite = Sprite(progress_box.image);
+
+progress_box.x = Window.GetX() + Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2;
+progress_box.y = Window.GetY() + Window.GetHeight() - progress_box.image.GetHeight();
+progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0);
+
+progress_bar.original_image = Image("progress_bar.png");
+progress_bar.image = progress_bar.original_image.Scale(0, progress_box.image.GetHeight());
+progress_bar.sprite = Sprite();
+
+progress_bar.x = Window.GetX() + Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2;
+progress_bar.y = Window.GetY() + Window.GetHeight() - progress_box.image.GetHeight();
+progress_bar.sprite.SetPosition(progress_bar.x, progress_bar.y, 1);
+
+fun progress_callback (duration, progress)
+ {
+ if (progress_bar.image.GetWidth () != Math.Int (progress_bar.original_image.GetWidth () * progress))
+ {
+ progress_bar.image = progress_bar.original_image.Scale(progress_box.image.GetWidth(progress_box.image) * progress, progress_box.image.GetHeight());
+ progress_bar.sprite.SetImage (progress_bar.image);
+ }
+ }
+
+Plymouth.SetBootProgressFunction(progress_callback);
+
+#----------------------------------------- Quit --------------------------------
+
+fun quit_callback ()
+{
+ logo.sprite.SetOpacity (1);
+}
+
+Plymouth.SetQuitFunction(quit_callback);
+
+#----------------------------------------- Message --------------------------------
+
+message_sprite = Sprite();
+message_sprite.SetPosition(10, 10, 10000);
+
+fun message_callback (text)
+{
+ my_image = Image.Text(text, 0.6, 0.6, 0.6);
+ message_sprite.SetImage(my_image);
+ message_sprite.SetX(Window.GetWidth () / 2 - my_image.GetWidth() / 2);
+ message_sprite.SetY((Window.GetHeight () * 0.7) - (2 * my_image.GetHeight()));
+ message.sprite.SetZ(11);
+}
+
+Plymouth.SetMessageFunction(message_callback);
+
+
+#----------------------------------------- Status Update --------------------------------
+
+statusupdate_sprite = Sprite();
+
+fun StringLength(string) {
+
+ index = 0;
+ str = String(string);
+ while(str.CharAt(index)) index++;
+ return index;
+}
+
+fun status_callback (text)
+{
+ // Truncate the message if too long
+ if (StringLength(text) > (Window.GetHeight () / 4 )) {
+ text = text.SubString(0, (Window.GetHeight () / 4 ) - 3);
+ text += "...";
+ }
+
+ my_image = Image.Text(text, 0.4, 0.4, 0.4);
+ statusupdate_sprite.SetPosition(10, 10 + (i * 20), 10000);
+ statusupdate_sprite.SetImage(my_image);
+ statusupdate_sprite.SetX(Window.GetWidth () / 2 - my_image.GetWidth() / 2);
+ statusupdate_sprite.SetY((Window.GetHeight () * 0.7) - my_image.GetHeight());
+ statusupdate.sprite.SetZ(11);
+}
+
+Plymouth.SetUpdateStatusFunction(status_callback);
+
+
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_bar.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_bar.png
new file mode 100644
index 00000000..fad2e3f9
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_bar.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_box.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_box.png
new file mode 100644
index 00000000..bdc029e1
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_box.png
Binary files differ
diff --git a/client/boot-tools/includes/root/CompileSoftware.sh b/client/boot-tools/includes/root/CompileSoftware.sh
new file mode 100755
index 00000000..a421352b
--- /dev/null
+++ b/client/boot-tools/includes/root/CompileSoftware.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+################################################################
+##################### SOFTWARE #####################
+################################################################
+export LANGUAGE=C
+export LC_ALL=C
+export LANG=C
+
+#dpkg-divert --local --rename --add /sbin/initctl
+#ln -s /bin/true /sbin/initctl
+
+apt-get -y update
+# software to compile code
+apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk
+
+source /opt/opengnsys/lib/engine/bin/ToolsGNU.c
+
+#TODO: comprobar si esta instalado.
+ctorrent install
+
+#TODO: comprobar si esta instalado.
+udpcast install
+
+#ntfs-3g install
+
+#TODO: comprobar si esta instalado.
+ms-sys install
+
+#TODO: comprobar si esta instalado.
+wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh
+gdebi -n partclone_0.2.16_i386.deb
+
+#TODO: comprobar si esta instalado.
+cd /tmp
+wget http://damien.guibouret.free.fr/savepart.zip
+unzip savepart.zip -d /sbin/
+
+
+#apt-get remove build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk
+
diff --git a/client/boot-tools/includes/root/ConfFS.sh b/client/boot-tools/includes/root/ConfFS.sh
new file mode 100755
index 00000000..3e0f4b5c
--- /dev/null
+++ b/client/boot-tools/includes/root/ConfFS.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+dpkg-divert --local --rename --add /sbin/initctl
+ln -s /bin/true /sbin/initctl
+#mv /etc/fstab /etc/fstab.original 2>/dev/null
+#mv /etc/mtab /etc/mtab.original 2>/dev/null
+
+#TODO: fichero etc/hosts
+#TODO: fichero etc/resolv.conf
+echo "ogClient" > /etc/hostname
+
+#export PASSROOT=og
+#dpkg-reconfigure passwd
+#echo "root:$PASSROOT" | chpasswd
+
+
+#for i in pts/0 pts/1 pts/2 pts/3 do
+#
+#
+#done
+#TODO: introducir mas consoluas para el acceso como root.
+echo "pts/0" >> /etc/securetty
+echo "pts/1" >> /etc/securetty
+echo "pts/2" >> /etc/securetty
+echo "pts/3" >> /etc/securetty \ No newline at end of file
diff --git a/client/boot-tools/includes/root/GenerateGraphicBoot.sh b/client/boot-tools/includes/root/GenerateGraphicBoot.sh
new file mode 100644
index 00000000..b12eeb2b
--- /dev/null
+++ b/client/boot-tools/includes/root/GenerateGraphicBoot.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+#TODO Comprobar si esta los source.
+
+#svn checkout http://www.opengnsys.es/svn/branches/version1.0/client /tmp/opengnsys_installer/opengnsys/client/;
+#svn checkout http://www.opengnsys.es/svn/branches/version2/ /tmp/opengnsys_installer/opengnsys2
+find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
+
+#plymouth
+apt-get install plymouth plymouth-theme-script
+
+
+#plymoutyh
+update-alternatives --install /lib/plymouth/themes/default.plymouth default.plymouth /lib/plymouth/themes/opengnsys/opengnsys.plymouth 100
+update-alternatives --set default.plymouth /lib/plymouth/themes/opengnsys/opengnsys.plymouth
+
+mkdir -p /etc/initramfs-tools/conf.d
+echo "FRAMEBUFFER=y" > /etc/initramfs-tools/conf.d/splash \ No newline at end of file
diff --git a/client/boot-tools/includes/root/GenerateInitrd.generic.sh b/client/boot-tools/includes/root/GenerateInitrd.generic.sh
new file mode 100755
index 00000000..eaeb475b
--- /dev/null
+++ b/client/boot-tools/includes/root/GenerateInitrd.generic.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
+#OSCODENAME=$(lsb_release -c | 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/"
+
+
+
+cd /usr/lib/initramfs-tools/bin/
+rm *
+cp /bin/busybox ./
+cd /tmp/
+mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE
+cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file
diff --git a/client/boot-tools/includes/root/InstallSoftware.sh b/client/boot-tools/includes/root/InstallSoftware.sh
new file mode 100755
index 00000000..11838ea3
--- /dev/null
+++ b/client/boot-tools/includes/root/InstallSoftware.sh
@@ -0,0 +1,80 @@
+#!/bin/bash
+################################################################
+##################### SOFTWARE #####################
+################################################################
+export LANGUAGE=C
+export LC_ALL=C
+export LANG=C
+
+export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
+#OSCODENAME=$(lsb_release -c | 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/"
+
+
+
+dpkg-divert --local --rename --add /sbin/initctl
+ln -s /bin/true /sbin/initctl
+
+apt-get clean
+apt-get -y update
+
+
+# software system
+apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static
+
+apt-get -y --force-yes install console-data locales
+
+# sofware networking
+apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils
+
+apt-get clean
+# software services
+apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub lighttpd
+
+# software disk and filesystem
+apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools
+apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools
+apt-get -y --force-yes install hfsplus hfsprogs hfsutils nilfs-tools reiser4progs ufsutils
+
+#btrfs-tools
+
+# software cloning
+apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools
+apt-get -y --force-yes install mbuffer
+
+#monitor
+apt-get install bwbar bmon iftop ifstat dstat hdparm sdparm blktool testdisk ssmping mii-diag
+
+## software postconf
+apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk subversion
+
+# software compressor
+apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip
+
+
+#compatibilidad og2
+apt-get install python-openssl python
+
+
+
+apt-get -y --force-yes remove busybox
+apt-get -y --force-yes install busybox-static bash-static
+apt-get clean
+#apt-get -y --force-yes xorg-dev xorg lxde roxterm
+#
+####################################################################
+###################### Reconfigurando paquetes ######################
+###################################################################
+
+
+#dpkg-reconfigure console-data
+#dpkg-reconfigure console-setup
+#dpkg-reconfigure locales
+apt-get clean
+##TODO################# Borrar algunos binarios del mkinitramfs
+
+
+
diff --git a/client/boot-tools/includes/root/ReconfigureLocales.sh b/client/boot-tools/includes/root/ReconfigureLocales.sh
new file mode 100755
index 00000000..5480d141
--- /dev/null
+++ b/client/boot-tools/includes/root/ReconfigureLocales.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+dpkg-reconfigure console-data
+dpkg-reconfigure console-setup
+dpkg-reconfigure locales \ No newline at end of file
diff --git a/client/boot-tools/includes/root/generateSshKeysClient.sh b/client/boot-tools/includes/root/generateSshKeysClient.sh
new file mode 100755
index 00000000..9857ad40
--- /dev/null
+++ b/client/boot-tools/includes/root/generateSshKeysClient.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+echo "comprobando directorio .ssh del root"
+if [ ! -d /root/.ssh ]
+then
+ echo "creando directorio .ssh 600"
+ mkdir -p /root/.ssh
+ chmod 700 /root/.ssh
+fi
+
+
+echo "comprobando el fichero authorized_keys .ssh del root"
+if [ ! -f /root/.ssh/authorized_keys ]
+then
+ echo "creando el fichero authorized_keys"
+ touch /root/.ssh/authorized_keys
+ chmod 600 /root/.ssh/authorized_keys
+fi
+
+ssh-keygen -q -f /root/.ssh/id_rsa -N ""
+cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
+
+## TODO: exportamos la publica a los repos
+cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file
diff --git a/client/boot-tools/includes/root/importSVNboot-tools.sh b/client/boot-tools/includes/root/importSVNboot-tools.sh
new file mode 100644
index 00000000..0067715f
--- /dev/null
+++ b/client/boot-tools/includes/root/importSVNboot-tools.sh
@@ -0,0 +1,118 @@
+#!/bin/bash
+#TODO Comprobar si esta los source.
+
+#svn checkout http://www.opengnsys.es/svn/branches/version1.0/client /tmp/opengnsys_installer/opengnsys/client/;
+#svn checkout http://www.opengnsys.es/svn/branches/version2/ /tmp/opengnsys_installer/opengnsys2
+find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
+
+
+SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/client/boot-tools
+SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared
+SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine
+SVNOG2=/tmp/opengnsys_installer/opengnsys2
+
+OGCLIENTMOUNT=""
+
+
+OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
+OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
+OSRELEASE=$(uname -a | awk '{print $3}')
+uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386
+OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
+echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP
+
+LERROR=TRUE
+
+echo "$FUNCNAME: Iniciando la personalización con datos del SVN "
+
+# parseamos del apt.source
+sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list
+if [ $? -ne 0 ]
+then
+ echo "$FUNCNAME(): Parsing apt.sources : ERROR"
+ exit 1
+fi
+
+#parseamos el script de generación del initrd.
+#sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh
+#
+#if [ $? -ne 0 ]
+#then
+# echo "$FUNCNAME(): Parsing GenerateInitrd.sh : ERROR"
+# exit 1
+#else
+# rm /root/GenerateInitrd.generic.sh
+#fi
+
+#damos permiso al directorio de scripts
+chmod 775 ${SVNCLIENTDIR}/clientstructure/root/*
+
+# los copiamos
+cp -prv ${SVNCLIENTDIR}/includes/* /
+mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/
+cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/
+cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/
+
+if [ $? -ne 0 ]
+then
+ echo "$FUNCNAME(): Copying client data : ERROR"
+ exit 1
+fi
+
+# copiamos algunas cosas del nfsexport
+
+#### Tipos de letra para el Browser.
+cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/lib/fonts
+#### Crear enlaces para compatibilidad con las distintas versiones del Browser.
+mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/
+mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/
+mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/
+cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts
+cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts
+cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/fonts
+if [ $? -ne 0 ]
+then
+ echo "$FUNCNAME(): Linking Browser fonts : ERROR"
+ exit 1
+fi
+
+#########################################################
+cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc
+if [ $? -ne 0 ]
+then
+ echo "$FUNCNAME(): Copying pci.ids : ERROR"
+ exit 1
+fi
+####### Browsser
+cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin
+if [ $? -ne 0 ]
+then
+ echo "$FUNCNAME(): Copying Browser : ERROR"
+ exit 1
+fi
+
+
+#Compatiblidad con og2
+cp ${SVNCLIENTSTRUCTURE}/bin/browser2 $OGCLIENTMOUNT/bin
+
+cp -prv ${SVNOG2}/ogr/ogr $OGCLIENTMOUNT/opt/opengnsys/bin/
+
+cp -prv ${SVNOG2}/ogr/libogr.py $OGCLIENTMOUNT/usr/lib/python2.7/libogr.py
+cp -prv ${SVNOG2}/ogr/libogr.py $OGCLIENTMOUNT/usr/lib/python2.6/libogr.py
+cp -prv ${SVNOG2}/ogr/libogr.py $OGCLIENTMOUNT/opt/opengnsys/lib/python
+
+
+echo "mkdir -p /opt/opengnsys/lib/engine/"
+mkdir -p /opt/opengnsys/lib/engine/
+echo "cp -prv ${SVNOG2}/engine/2.0/* $OGCLIENTMOUNT/opt/opengnsys/lib/engine/"
+cp -prv ${SVNOG2}/engine/2.0/* $OGCLIENTMOUNT/opt/opengnsys/lib/engine/
+
+
+cp -prv ${SVNOG2}/job_executer $OGCLIENTMOUNT/opt/opengnsys/bin/
+
+
+cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin
+
+
+
+
diff --git a/client/boot-tools/includes/root/importSshKeys.sh b/client/boot-tools/includes/root/importSshKeys.sh
new file mode 100755
index 00000000..17a797f8
--- /dev/null
+++ b/client/boot-tools/includes/root/importSshKeys.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+echo "comprobando directorio .ssh del root"
+if [ ! -d /root/.ssh ]
+then
+ echo "creando directorio .ssh 600"
+ mkdir -p /root/.ssh
+ chmod 700 /root/.ssh
+fi
+echo "creando el fichero authorized_keys"
+touch /root/.ssh/authorized_keys
+chmod 600 /root/.ssh/authorized_keys
+
+echo "importando la clave publica del servidor OG"
+cat /tmp/id_rsa.pub
+
+[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og"
+ \ No newline at end of file
diff --git a/client/boot-tools/includes/root/qemu.sh b/client/boot-tools/includes/root/qemu.sh
new file mode 100755
index 00000000..c5a93cd9
--- /dev/null
+++ b/client/boot-tools/includes/root/qemu.sh
@@ -0,0 +1,9 @@
+#/bin/bash
+
+mount -o rw,remount /
+mount proc /proc -t proc
+export PATH=$PATH dpkg -i *.deb
+modprobe 8139too
+modprobe 8139cp
+dhclient
+/etc/init.d/ssh restart \ No newline at end of file
diff --git a/client/boot-tools/includes/var/lib/locales/supported.d/local b/client/boot-tools/includes/var/lib/locales/supported.d/local
new file mode 100644
index 00000000..be3f2a41
--- /dev/null
+++ b/client/boot-tools/includes/var/lib/locales/supported.d/local
@@ -0,0 +1,5 @@
+es_ES ISO-8859-1
+es_ES@euro ISO-8859-15
+es_ES.UTF-8 UTF-8
+es_ES.UTF-8@euro UTF-8
+en_US.UTF-8 UTF-8 \ No newline at end of file