summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/boot-tools/INSTALL.es.txt2
-rwxr-xr-xclient/boot-tools/boottoolsfunctions.lib2
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions59
-rwxr-xr-xclient/boot-tools/ogclientImg2Sqfs55
-rwxr-xr-xclient/boot-tools/ogclientSqfs2Img120
-rwxr-xr-xclient/engine/Boot.lib20
-rwxr-xr-xclient/engine/FileSystem.lib15
-rwxr-xr-xclient/engine/Inventory.lib9
-rwxr-xr-xclient/engine/Protocol.lib33
-rwxr-xr-xclient/engine/Rsync.lib58
-rwxr-xr-xclient/engine/String.lib7
-rwxr-xr-xclient/engine/System.lib3
-rw-r--r--client/shared/etc/engine.cfg7
-rwxr-xr-xclient/shared/etc/init/default.sh17
-rw-r--r--client/shared/etc/lang.ca_ES.conf4
-rw-r--r--client/shared/etc/lang.en_GB.conf2
-rw-r--r--client/shared/etc/lang.es_ES.conf5
-rwxr-xr-xclient/shared/etc/preinit/loadenviron.sh2
-rwxr-xr-xclient/shared/etc/preinit/mountrepo.sh23
-rwxr-xr-xclient/shared/scripts/cloneRemoteFromMaster53
-rwxr-xr-xclient/shared/scripts/configureOs14
-rwxr-xr-xclient/shared/scripts/createBaseImage3
-rwxr-xr-xclient/shared/scripts/createDiffImage12
-rwxr-xr-xclient/shared/scripts/deployImage51
-rwxr-xr-xclient/shared/scripts/generateMenuDefault13
-rwxr-xr-xclient/shared/scripts/installOfflineMode60
-rwxr-xr-xclient/shared/scripts/poweroff2
-rwxr-xr-xclient/shared/scripts/reboot3
-rwxr-xr-xclient/shared/scripts/restoreBaseImage3
-rwxr-xr-xclient/shared/scripts/restoreDiffImage16
-rwxr-xr-xclient/shared/scripts/restoreImage2
-rwxr-xr-xclient/shared/scripts/updateCache13
32 files changed, 537 insertions, 151 deletions
diff --git a/client/boot-tools/INSTALL.es.txt b/client/boot-tools/INSTALL.es.txt
index 3b7cd89d..afbf1de8 100644
--- a/client/boot-tools/INSTALL.es.txt
+++ b/client/boot-tools/INSTALL.es.txt
@@ -23,7 +23,7 @@ mv /opt/opengnsys/tftpboot/ogclient /opt/opengnsys/tftpboot/ogclient-old;
#1. Descargar del Subversion las herramientas del cliente
apt-get install subversion wget
-svn checkout http://www.opengnsys.es/svn/branches/version1.0/client /tmp/opengnsys_installer/opengnsys/client/;
+svn checkout http://www.opengnsys.es/svn/branches/version1.1/client /tmp/opengnsys_installer/opengnsys/client/;
find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
#2. Ejecutar el instalador:
diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib
index 936b02a7..5027c650 100755
--- a/client/boot-tools/boottoolsfunctions.lib
+++ b/client/boot-tools/boottoolsfunctions.lib
@@ -92,7 +92,7 @@ case "${1,,}" in
export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
;;
esac
-SVNURL="http://opengnsys.es/svn/branches/version1.0/client"
+SVNURL="http://opengnsys.es/svn/branches/version1.1/client"
VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Rev:/ {print "r"$4}')
NAMEISOCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$OSRELEASE-$VERSIONSVN"
NAMEHOSTCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$VERSIONSVN"
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
index 56b5187e..991ec890 100644
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
@@ -74,6 +74,8 @@ ogExportVarEnvironment ()
{
export CFGINITRD="/tmp/initrd.cfg"
OGPROTOCOL="${ogprotocol:-smb}"
+ # OPTIONS Para samba y local (a nfs no le afecta)
+ export OPTIONS=" -o user=opengnsys,pass=og"
case "$OGPROTOCOL" in
nfs|NFS)
export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
@@ -82,14 +84,17 @@ ogExportVarEnvironment ()
export SRCOGIMAGES="/opt/opengnsys/images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
;;
smb|SMB|cifs|CIFS|samba|SAMBA)
- export OPTIONS=" -o user=opengnsys,pass=og"
export SRCOGLIVE="tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
export SRCOGIMAGES="ogimages" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
;;
local|LOCAL)
+ # Ponemos variables SRC compatibles con smb y nfs.
export SRCOGLIVE="local"
+ export SRCOGSHARE="client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
+ export SRCOGLOG="log" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
+ export SRCOGIMAGES="images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
;;
esac
#punto de acceso al boot-tools live
@@ -214,8 +219,39 @@ ogPostConfigureFS()
#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 $DSTOGLIVE /opt/opengnsys/cache
- [ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/
+ #[ "$LOCALMEDIA" == "CACHE" ] && ln -s $DSTOGLIVE /opt/opengnsys/cache
+ #[ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/
+ if [ "$ogprotocol" == "local" ]; then
+ # Creamos los subdirectorios de /opt/opengnsys/
+ [ "$ogstatus" == "offline" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/
+ # Montamos CACHE
+ # Si existe particion identificada como CACHE se monta.
+ DEVICECACHE=$(blkid -L "CACHE")
+ if [ "$DEVICECACHE" != "" ]; then
+ # Se monta diferente segun el dispositivo de cache igual o no al de ogclient.
+ DEVICEOGLIVE=$(df |grep $DSTOGLIVE|awk '{print $1}')
+ if [[ "$DEVICECACHE" == "*$DEVICEOGLIVE*" ]];then
+ mount --bind $DSTOGLIVE /opt/opengnsys/cache
+ else
+ mount $DEVICECACHE /opt/opengnsys/cache
+ fi
+ if [ "$ogstatus" == "offline" ]; then
+ [ -d /opt/opengnsys/cache/log ] || mkdir /opt/opengnsys/cache/log
+ mount --bind /opt/opengnsys/cache/log /opt/opengnsys/log
+ fi
+ fi
+ # Montamos REPO
+ if [ "$ogstatus" == "offline" ]; then
+ # Si estatus distinto de online buscamos un dispositivo con etiqueta repo
+ # y si no existe montamos la cache como repo (si existe).
+ TYPE=$(blkid | grep REPO | awk -F"TYPE=" '{print $2}' | tr -d \")
+ if [ "$TYPE" == "" ]; then
+ [ -d "/opt/opengnsys/cache$DSTOGIMAGES" ] && mount --bind /opt/opengnsys/cache$DSTOGIMAGES $DSTOGIMAGES
+ else
+ mount -t $TYPE LABEL=REPO $DSTOGIMAGES &>/dev/null
+ fi
+ fi
+ fi
#Montamos un directorio temporal para el apt-get
mount tmpfs /var/cache/apt/archives -t tmpfs -o size=15M
@@ -361,6 +397,17 @@ ogConnect ()
smb)
mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS}${READONLY}
;;
+ local)
+ # Comprobamos que estatus sea online y que la variable del server no esta vacia.
+ if [ "$ogstatus" != "offline" -a "$SERVER" != "" -a "$SRC" != "" ]; then
+ # Comprobamos que existe un servicio de samba.
+ smbclient -L $SERVER -N &>/dev/null
+ if [ $? -eq 0 ]; then
+ mount.cifs //${SERVER}/og${SRC} ${DST} ${OPTIONS}${READONLY}
+ fi
+ # TODO: buscar condicion para NFS
+ fi
+ ;;
esac
}
@@ -387,11 +434,11 @@ ogConnectOgLive ()
then
# Si local es particion CACHE es identificada como CACHE
mount LABEL=CACHE $DSTOGLIVE
- export LOCALMEDIA=CACHE
+ #export LOCALMEDIA=CACHE
fi
else
-# Si ogprotocol es remoto. TODO en smb rw y en nfs ro??
- ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE
+ # 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
diff --git a/client/boot-tools/ogclientImg2Sqfs b/client/boot-tools/ogclientImg2Sqfs
new file mode 100755
index 00000000..5dfb2b00
--- /dev/null
+++ b/client/boot-tools/ogclientImg2Sqfs
@@ -0,0 +1,55 @@
+#!/bin/bash
+#/**
+#@brief Comprime el fichero ogclient.img en ogclient.sqfs.
+#@param none
+#@exeption 1 No es usuario root
+#@exeption 2 No existe el fichero ogclient.img
+#@date 2013-11.27
+#*/
+PROG="$(basename $0)"
+# Mostrar ayuda: Si se solicita, si faltan parametros o $3 no es SYNC1 o SYNC2.
+if [ "$*" == "help" ]; then
+ echo -e "$PROG: Comprime el fichero ogclient.img en ogclient.sqfs. \n"
+ " Uso: $PROG (sin parametros)"
+ exit 0
+fi
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+
+DATE=$(date +%y-%m-%d)
+OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
+OGCLIENTBASEDIR=$OPENGNSYS/tftpboot/ogclient/;
+OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img;
+OGCLIENTSQFS=${OGCLIENTBASEDIR}ogclient.sqfs
+OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount;
+OGCLIENTSIZEMB=1900;
+OGCLIENTLABEL=ogClient;
+
+# Comprobamos que existe el cliente .sqfs
+! [ -f $OGCLIENTFILE -a -d $OGCLIENTMOUNT ] && echo "No existe $OGCLIENTFILE o $OGCLIENTMOUNT" && exit 3
+# Montamos ogclient.img.
+echo "Montamos ogclient.img."
+mkdir -p $OGCLIENTMOUNT;
+mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256;
+
+# Si existe ogclient.sqfs hacemos copia de seguridad.
+echo "Si existe ogclient.sqfs hacemos copia de seguridad."
+[ -f ${OGCLIENTSQFS} ] && mv ${OGCLIENTSQFS} ${OGCLIENTSQFS}.$DATE
+
+# Comprimimos el cliente.
+echo "Comprimimos el cliente."
+echo "mksquashfs $OGCLIENTMOUNT ${OGCLIENTSQFS}"
+mksquashfs $OGCLIENTMOUNT ${OGCLIENTSQFS}
+
+# Desmontamos el ogclient.img
+echo "Desmontamos el ogclient.img"
+umount $OGCLIENTMOUNT
+
+# Generamos nuevo archivo de suma de comprobación.
+echo "Generamos nuevo archivo de suma de comprobacion."
+mv ${OGCLIENTSQFS}.sum ${OGCLIENTSQFS}.sum.$DATE
+md5sum ${OGCLIENTSQFS} |awk '{print $1}' >${OGCLIENTSQFS}.sum
diff --git a/client/boot-tools/ogclientSqfs2Img b/client/boot-tools/ogclientSqfs2Img
new file mode 100755
index 00000000..4f8447da
--- /dev/null
+++ b/client/boot-tools/ogclientSqfs2Img
@@ -0,0 +1,120 @@
+#!/bin/bash
+#/**
+#@brief Descomprime el fichero ogclient.sqfs en ogclient.img con un formato donde podemos escribir.
+#@param none
+#@note Copiado del wiki: http://opengnsys.es/wiki/ClienteInitrdDSGenerarlo
+#@note para "entrar" en ogclient: schroot -c ogclient.img o mount ogclient.img ogclientmount -o loop,offset=32256
+#@exeption 1 No es usuario root
+#@exeption 2 No existe el fichero ogclient.sqfs
+#@date 2013-11.27
+#*/
+PROG="$(basename $0)"
+# Mostrar ayuda si se solicita.
+if [ "$*" == "help" ]; then
+ echo -e "$PROG: Descomprime el fichero ogclient.sqfs en ogclient.img con un formato donde podemos escribir. \n" \
+ " Uso: $PROG (sin parametros)"
+ exit 0
+fi
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+
+
+DATE=$(date +%y-%m-%d)
+OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
+OGCLIENTBASEDIR=$OPENGNSYS/tftpboot/ogclient/;
+OGCLIENTSQFS=${OGCLIENTBASEDIR}ogclient.sqfs
+OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img;
+OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount;
+OGCLIENTSIZEMB=1900;
+OGCLIENTLABEL=ogClient;
+
+# Comprobamos que existe el cliente .sqfs
+! [ -f $OGCLIENTSQFS ] && echo "No existe $OGCLIENTSQFS" && exit 3
+
+# instalamos los paquetes necesarios.
+echo "Si no existen, instalamos los paquetes necesarios: squashfs-tools schroot."
+if ! which schroot unsquashfs 2>&1 >/dev/null; then
+ apt-get update
+ apt-get -y install squashfs-tools schroot
+fi
+
+# Creamos el archivo.
+echo -e "\nCreamos el archivo."
+echo dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB;
+dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB;
+DISKLOOP=$(losetup -f);
+losetup $DISKLOOP $OGCLIENTFILE;
+echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP;
+losetup -d $DISKLOOP ;
+
+# Creamos el sistema de ficheros.
+echo "Creamos el sistema de ficheros."
+echo "mkfs.ext4 -b 4096 -L $OGCLIENTLABEL $PARTLOOP"
+PARTLOOP=$(losetup -f);
+losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext4 -b 4096 -L $OGCLIENTLABEL $PARTLOOP;
+losetup -d $PARTLOOP ;
+
+# Descomprimimos el ogclient.sqfs en el sistema de ficheros.
+mkdir -p $OGCLIENTMOUNT;
+echo "Descomprimimos el ogclient.sqfs en el sistema de ficheros."
+mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256;
+echo "unsquashfs -d ${OGCLIENTMOUNT}/ -f $OGCLIENTSQFS"
+unsquashfs -d ${OGCLIENTMOUNT}/ -f $OGCLIENTSQFS
+umount $OGCLIENTMOUNT;
+
+# Creamos los archivos de configuracion de schroot.
+echo "Creamos los archivos de configuracion de schroot."
+cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.$DATE
+cat << EOF > /etc/schroot/schroot.conf
+[ogclient.img]
+type=loopback
+file=${OGCLIENTBASEDIR}ogclient.img
+description=ogclient ubuntu luc IMGi
+#priority=1
+users=root
+groups=root
+root-groups=root
+mount-options=-o offset=32256
+root-users=root
+#[DIRogclient]
+#type=directory
+#directory=${OGCLIENTBASEDIR}ogclientmount
+#description=ogclient ubuntu lucid DIR
+#priority=2
+#users=root
+#groups=root
+#root-groups=root
+#root-users=root
+EOF
+
+cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.$DATE
+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
+
+# Si existen dispositivos loop los eliminamos.
+echo "Si existen dispositivos loop los eliminamos."
+LOOPDEVICES=$(losetup -a|grep $OGCLIENTFILE |cut -d: -f1)
+for DEVICE in $LOOPDEVICES
+do
+ echo "losetup -d $DEVICE"
+ losetup -d $DEVICE
+done
+
+echo -e "Para \"entrar\" en ogclient: \n \t schroot -c ogclient.img o \n \t mount ogclient.img ogclientmount -o loop,offset=32256"
+echo "El servicio schroot montará el cliente automaticamente, si no queremos que pase hay que apagarlo."
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib
index 47a6f420..ea3badb7 100755
--- a/client/engine/Boot.lib
+++ b/client/engine/Boot.lib
@@ -990,11 +990,12 @@ rm -f ${MNTDIR}/etc/udev/rules.d/70-persistent-net.rules
}
#/**
-# ogGrubAddOgclient num_disk num_part [ timeout ]
+# ogGrubAddOgclient num_disk num_part [ timeout ] [ offline ]
#@brief Crea entrada de menu grub para ogclient, tomando como paramentros del kernel los actuales del cliente.
#@param 1 Numero de disco
#@param 2 Numero de particion
-#@param 3 timeout: Segundos de espera para iniciar el sistema operativo por defecto.
+#@param 3 timeout Segundos de espera para iniciar el sistema operativo por defecto (opcional)
+#@param 4 offline configura el modo offline [offline|online] (opcional)
#@return (nada)
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND No existe kernel o initrd en cache.
@@ -1003,18 +1004,19 @@ rm -f ${MNTDIR}/etc/udev/rules.d/70-persistent-net.rules
#*/
ogGrubAddOgclient () {
- local TIMEOUT DIRMOUNT GRUBGFC PARTTABLETYPE NUMDISK NUMPART KERNEL NUMLINE MENUENTRY
+ local TIMEOUT DIRMOUNT GRUBGFC PARTTABLETYPE NUMDISK NUMPART KERNEL STATUS NUMLINE MENUENTRY
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition time_out" \
- "$FUNCNAME 1 6 15"
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition [ time_out ] [ offline|online ] " \
+ "$FUNCNAME 1 1" \
+ "$FUNCNAME 1 6 15 offline"
return
fi
# Error si no se reciben 2 parámetros.
[ $# -lt 2 ] && return $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part [ timeout ]"; echo $?)
- TIMEOUT="$3"
+ [[ "$3" =~ ^[0-9]*$ ]] && TIMEOUT="$3"
# Error si no existe el kernel y el initrd en la cache.
# Falta crear nuevo codigo de error.
@@ -1038,6 +1040,12 @@ ogGrubAddOgclient () {
let NUMDISK=$NUMDISK-1
# kernel y sus opciones. Pasamos a modo usuario
KERNEL="/boot/ogvmlinuz $(sed -e s/^.*linuz//g -e s/ogactiveadmin=true/ogactiveadmin=false/g /proc/cmdline)"
+
+ # Configuracion offline si existe parametro
+ echo "$@" |grep offline &>/dev/null && STATUS=offline
+ echo "$@" |grep online &>/dev/null && STATUS=online
+ [ -z "$STATUS" ] || KERNEL="$(echo $KERNEL | sed s/"ogprotocol=[a-z]* "/"ogprotocol=local "/g ) ogstatus=$STATUS"
+
# Numero de línea de la primera entrada del grub.
NUMLINE=$(grep -n -m 1 "^menuentry" $GRUBGFC|cut -d: -f1)
# Texto de la entrada de opengnsys
diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib
index d3e164d6..257c5a23 100755
--- a/client/engine/FileSystem.lib
+++ b/client/engine/FileSystem.lib
@@ -227,7 +227,7 @@ esac
function ogFormatFs ()
{
# Variables locales
-local PART ID TYPE LABEL PROG PARAMS LABELPARAM ERRCODE
+local PART TYPE LABEL PROG PARAMS LABELPARAM ERRCODE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -244,7 +244,7 @@ fi
PART="$(ogDiskToDev $1 $2)" || return $?
# Error si la partición está montada o bloqueada.
if ogIsMounted $1 $2; then
- ogRaiseError $OG_ERR_PARTITION "$1 $2" # Indicar nuevo error
+ ogRaiseError $OG_ERR_DONTFORMAT "$MSG_MOUNT: $1 $2"
return $?
fi
if ogIsLocked $1 $2; then
@@ -384,7 +384,7 @@ echo ${SIZE%.0*}
function ogGetFsType ()
{
# Variables locales.
-local PART ID TYPE
+local PART TYPE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
@@ -396,16 +396,13 @@ fi
# Detectar tipo de sistema de archivo (independientemente del tipo de partición).
PART=$(ogDiskToDev "$1" "$2") || return $?
-TYPE=$(blkid -o export $PART | awk -F= '$1~/^TYPE/ { print toupper($2) }')
+TYPE=$(blkid -o export $PART | awk -F= '$1=="TYPE" { print toupper($2) }')
# Componer valores correctos.
case "$TYPE" in
EXT4) # Comprobar si es caché o Ext4.
- if [ "$1 $2" == "$(ogFindCache)" ]; then
- ogIsFormated $1 $2 2>/dev/null && TYPE="CACHE"
- fi
- ;;
- VFAT) TYPE="$(blkid -po export $PART | awk -F= '$1~/^VERSION$/ { print toupper($2) }')" ;;
+ [ "$1 $2" == "$(ogFindCache)" ] && TYPE="CACHE" ;;
+ VFAT) TYPE="$(blkid -po export $PART | awk -F= '$1=="VERSION" { print toupper($2) }')" ;;
SWAP) TYPE="LINUX-SWAP" ;;
LVM*) TYPE="LINUX-LVM" ;;
*RAID*) TYPE="LINUX-RAID" ;;
diff --git a/client/engine/Inventory.lib b/client/engine/Inventory.lib
index 03e9b589..4cbdcabb 100755
--- a/client/engine/Inventory.lib
+++ b/client/engine/Inventory.lib
@@ -68,7 +68,7 @@ ogGetOsVersion "$@" | cut -sf1 -d:
#@version 1.0.5 - Incluir tipos GrubLoader, Hurd y WinLoader, leer por defecto fichero /etc/os-release.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2013-10-07
-#@version 1.0.6 - Detectar GrubLoader al final.
+#@version 1.0.6 - Detectar GrubLoader al final y sistemas basados en EFI.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2014-08-27
#*/ ##
@@ -133,12 +133,11 @@ fi
if [ -z "$VERSION" ]; then
TYPE="WinLoader"
FILE="$(ogGetPath $MNTDIR/boot/bcd)"
+ [ -z "$FILE" ] && FILE="$(ogGetPath $MNTDIR/EFI/Microsoft/boot/bcd)"
if [ -n "$FILE" ]; then
- for DISTRIB in "Windows 8" "Windows 7" "Windows Vista" \
- "Windwos Server 2008" "Windwos Server 2008 R2" \
- "Windwos Recovery Environment"; do
+ for DISTRIB in "Windows Recovery" "Windows Boot"; do
if grep -qs "$(echo "$DISTRIB" | sed 's/./&./g')" $FILE; then
- VERSION="$DISTRIB loader"
+ VERSION="$DISTRIB loader"
fi
done
fi
diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib
index 75755fa4..8c0b4c61 100755
--- a/client/engine/Protocol.lib
+++ b/client/engine/Protocol.lib
@@ -984,8 +984,8 @@ ctorrent -t `basename $SOURCE` -u http://$IPTORRENT:6969/announce -s $SOURCE.tor
#@param 1 str_REPO
#@param 2 str_Relative_path_file_OGIMG_with_/
#@param 3 md5 to check: use full to check download image torrent
-#@return 0 (true)si es necesario actualizar el fichero.
-#@return 1 (false) si la imagen ya esta en la cache, por lo tanto no es necesario actualizar el fichero
+#@return 0 (true) cache sin imagen, SI es necesario actualizar el fichero.
+#@return 1 (false) imagen en la cache, NO es necesario actualizar el fichero
#@return >1 (false) error de sintaxis (TODO)
#@note
#@todo: Proceso en el caso de que el fichero tenga el mismo nombre, pero su contenido sea distinto.
@@ -1016,37 +1016,34 @@ fi
#Control de la cache
ogFindCache || return $(ogRaiseError $OG_ERR_NOTCACHE; echo $?)
-
-#TODO: return 0->true, 1->false; si error, aunque sintaxis devuelve > 1
-
#Control de parametros: ahora admite tres.
[ $# > "3" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
ogCheckStringInGroup "$1" "REPO repo" || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
FILESOURCE=`ogGetPath $1 $2` || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
-#echo "paso 1. si no existe la imagen, confirmamos que es necesaria la actualizacion de la cache."
+#echo "paso 1. si no existe la imagen, confirmar que es necesario actualizar la cache."
FILETARGET=`ogGetPath CACHE $2`
if [ -z $FILETARGET ]
then
# borramos el fichero bf del torrent, en el caso de que se hubiese quedado de algun proceso fallido
- ogDeleteFile CACHE "/$2.torrent.bf" &> /dev/null
- ogDeleteFile CACHE "/$2.sum" &> /dev/null
- ogDeleteFile CACHE "/$2.full.sum" &> /dev/null
- echo "TRUE=0, es necesario actualizar. Paso 1, la cache no contiene esa imagen "
+ ogGetPath CACHE "/$2.torrent.bf" && ogDeleteFile CACHE "/$2.torrent.bf" &> /dev/null
+ ogGetPath CACHE "/$2.sum" && ogDeleteFile CACHE "/$2.sum" &> /dev/null
+ ogGetPath CACHE "/$2.full.sum" && ogDeleteFile CACHE "/$2.full.sum" &> /dev/null
+ echo "TRUE(0), es necesario actualizar. Paso 1, la cache no contiene esa imagen "
return 0
fi
#echo "Paso 2. Comprobamos que la imagen no estuviese en un proceso previo torrent"
if ogGetPath $FILETARGET.torrent.bf > /dev/null
then
- #TODO: comprobar los md5 para asegurarnos que la imagen es la misma.
- echo "TRUE=0, es necesario actualizar. Paso 2, la imagen esta en un estado de descarga torrent interrumpido"
+ #TODO: comprobar los md5 del fichero .torrent para asegurarnos que la imagen a descarga es la misma.
+ echo "TRUE(0), es necesario actualizar. Paso 2, la imagen esta en un estado de descarga torrent interrumpido"
return 0
fi
## En este punto la imagen en el repo y en la cache se llaman igual,
-#echo "paso 4. recuperamos o calculamos los md5 de los ficheros segun PROTOCOLO"
+#echo "paso 4. Obtener los md5 del fichero imagen en la cacha segun PROTOCOLO $3"
case "$3" in
full|FULL|torrent|TORRENT)
#Buscamos MD5 en el REPO SOURCE
@@ -1087,15 +1084,15 @@ case "$3" in
fi
esac
-#echo "Paso 5. comparamos los md5"
-#TODO: que hacer cuando los md5 son distintos. Por defecto borrar.
+#echo "Paso 5. comparar los md5"
if [ "$MD5SOURCE" == "$MD5TARGET" ]
then
- echo "FALSE=1, No es neceario actualizar. Paso5.A la imagen esta en cache"
+ echo "FALSE (1), No es neceario actualizar. Paso5.A la imagen esta en cache"
return 1
else
- echo "TRUE=0, Si es necesario actualizar. paso 5.b la imagen en cache es distinta, borramos la imagen anterior y devolvemos 0 para confirmar la actualizacion"
- rm -f $FILETARGET $FILETARGET.sum $FILETARGET.torrent
+ echo "imagen en cache distinta, borramos la imagen anterior"
+ rm -f $FILETARGET $FILETARGET.sum $FILETARGET.torrent $FILETARGET.full.sum
+ echo "TRUE (0), Si es necesario actualizar."
return 0
fi
}
diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib
index 3435a119..70f5bbcc 100755
--- a/client/engine/Rsync.lib
+++ b/client/engine/Rsync.lib
@@ -100,7 +100,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
#Formateamos imagen
losetup $LOOPDEVICE $IMGFILE
# FS de la imagen segun la configuracion y la version del kernel: < 3.7 ext4, si >= btrfs
- [ $KERNELVERSION \< 3.07 ] && IMGFS = "EXT4" || IMGFS=${IMGFS:-"BTRFS"}
+ [ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"}
if [ "$IMGFS" == "EXT4" ]; then
echo " mkfs.ext4 -i 4096 -b 4096 -L "${2##*\/}" $LOOPDEVICE"
@@ -195,7 +195,7 @@ SIZEDATA=${SIZEDATA:-"SIZEDATA"}
# Incluimos información de la imagen. Segun el kernel sera ext4 o btrfs.
KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
-[ $KERNELVERSION \< 3.07 ] && IMGFS = "EXT4" || IMGFS=${IMGFS:-"BTRFS"}
+[ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS=${IMGFS:-"BTRFS"}
echo "#$IMGFS:NO:$FSTYPE:$SIZEDATA" > $IMGINFO
if [ "$IMGTYPE" == "img" ]; then
@@ -241,14 +241,14 @@ fi
#/**
# ogAclFilter
-#@brief Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial
+#@brief Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial (falla: no se usa)
#@param No.
#@return (nada)
#*/
function ogAclFilter () {
local IMGACL IMGINFO FILES ACLTMP
-# Ayuda o menos de 5 parametros y la imagen no es basica
+# Ayuda
if [ "$*" == "help" ]; then
ogHelp "$MSG_HELP_ogAclFilter" \
"$FUNCNAME [ no parameters ] "
@@ -267,14 +267,12 @@ ACLFILES="/tmp/aclfiles$$"
echo "" > $ACLTMP
grep -n -e "File" -e "Directory" $IMGACL > $ACLFILES
-# Al fichero le quitamos las líneas sobrantes: comentarios y lineas vacias.
-sed -e s/"^#.*$"//g $IMGINFO > $FILES
-sed -i '/^$/d' $FILES
+# Al listado de ficheros le quitamos las líneas sobrantes: comentarios y lineas vacias.
+sed -e s/"^#.*$"//g -e '/^$/d' $IMGINFO > $FILES
# Recorremos el listado y extraemos la acl correspondiente al fichero o directorio.
while read LINE; do
- #read END INI <<< "$(grep -n -e "File" -e "Directory" $IMGACL| grep -A 1 "$LINE"| awk -F : '!(NR%2){print $1" "p}{p=$1}' )"
read END INI <<< "$(grep -A 1 "$LINE" $ACLFILES | awk -F : '!(NR%2){print $1" "p}{p=$1}' )"
let NUM=$END-$INI-1
# Si algún archivo no se encuentra, el error lo mandamos a /dev/null
@@ -316,12 +314,16 @@ DEST=$(ogMount $1 $2) || return $?
IMGACL="ogimg.acl"
IMGLN="ogimg.ln"
+IMGINFO="ogimg.info"
+
+# Copiamos informacion de la imagen a /tmp (para basicas)
+[ -r $DEST/$IMGACL ] && cp $DEST/ogimg.* /tmp
#Creamos o modificamos los enlaces.
# La imagen diferencial tiene ogimg.ln
# para la completa lo generamos con los enlaces que contengan /mnt/
-[ -r "$DEST/$IMGLN" ] || grep -e "->" -e "=>" "$DEST/ogimg.info"|grep "/mnt/" > "$DEST/$IMGLN"
-if [ $(wc -l "$DEST/$IMGLN"|cut -f1 -d" ") -ne 0 ]; then
+[ -r "/tmp/$IMGLN" ] || grep -e "->" -e "=>" "/tmp/$IMGINFO"|grep "/mnt/" > "/tmp/$IMGLN"
+if [ $(wc -l "/tmp/$IMGLN"|cut -f1 -d" ") -ne 0 ]; then
while read LINEA
do
ORIGLN="${LINEA#*> }"
@@ -342,15 +344,26 @@ if [ $(wc -l "$DEST/$IMGLN"|cut -f1 -d" ") -ne 0 ]; then
rm -f "$(basename "$DESTLN")"
ln $OPTLN "$ORIGLN" "$(basename "$DESTLN")"
echo -n "."
- done < "$DEST/$IMGLN" 2>/dev/null
+ done < "/tmp/$IMGLN" 2>/dev/null
echo ""
fi
+cd /
+}
+#/**
+# ogRestoreAclImage
+#@brief Restaurar las ACL. La informacion esta ya copiada al directorio /tmp
+#@param 1 num_disk
+#@param 2 num_part
+#*/
+function ogRestoreAclImage () {
+local PART IMGACL
+PART=$(ogDiskToDev "$1" "$2") || return $?
+IMGACL="ogimg.acl"
# Restauramos acl
-if [ "$(ogGetFsType $1 $2)" == "NTFS" -a -f "$DEST/$IMGACL" ] ; then
+if [ "$(ogGetFsType $1 $2)" == "NTFS" -a -f "/tmp/$IMGACL" ] ; then
cd /
- cp "$DEST/$IMGACL" /tmp
ogUnmount "$1" "$2"
echo "ntfs-3g.secaudit -se $PART /tmp/$IMGACL"
ntfs-3g.secaudit -se $PART /tmp/$IMGACL
@@ -457,6 +470,7 @@ DESTRSYNC=$(ogGetMountPoint $4 $5)
# Borramos ficheros de informacion de restauraciones antiguas
rm -rf $DESTRSYNC/ogimg.*
+rm -rf /tmp/ogimg.*
# Origen y destino de la sincronizacion y en REPO opciones rsync
if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
@@ -482,23 +496,25 @@ ogEcho log session " $MSG_SYNC_RESTORE"
if [ "$3" == "diff" ]; then
# Lista de archivos a copiar:
IMGINFO="ogimg.info"
- FILESFROM=" --files-from=$DESTRSYNC/$IMGINFO"
+ FILESFROM=" --files-from=/tmp/$IMGINFO"
- echo " rsync -aHAX$OPTRSYNC --progress $ORIG/ogimg* $DESTRSYNC"
- rsync -aHAX$OPTRSYNC $PASSWORD --progress "$ORIG"/ogimg* $DESTRSYNC
+ echo " rsync -aHAX$OPTRSYNC --progress $ORIG/ogimg* /tmp"
+ rsync -aHAX$OPTRSYNC $PASSWORD --progress "$ORIG"/ogimg* /tmp
# Borramos linea de información de la imagen, sino busca un fichero con ese nombre
- sed -i '/^\#/d' $DESTRSYNC/$IMGINFO
+ sed -i '/^\#/d' /tmp/$IMGINFO
cd $DESTRSYNC
# Diferencial: Borramos archivos sobrantes.
ogEcho log session " $MSG_SYNC_DELETE"
- cat "$DESTRSYNC/ogimg.rm" 2>/dev/null | xargs rm -rf
+ sed -e s/^/\"/g -e s/$/\"/g "/tmp/ogimg.rm" 2>/dev/null | xargs rm -rf
fi
echo " rsync -aHAX$OPTRSYNC --progress $FILESFROM $ORIG/ $DESTRSYNC"
rsync -aHAX$OPTRSYNC $PASSWORD --progress $FILESFROM "$ORIG/" "$DESTRSYNC" 2>$OGLOGCOMMAND | egrep "^deleting|^sent|^sending|^total|%" |tee -a $OGLOGCOMMAND
-return ${PIPESTATUS[0]}
+RETVAL=${PIPESTATUS[0]}
+cd /
+return $RETVAL
}
@@ -684,7 +700,7 @@ echo -n -e " $MSG_SYNC_SLEEP: $DIRMOUNT\n #" | tee -a $OGLOGSESSION $
let TIMEOUT=$SIZE/$CREATESPEED
[ $TIMEOUT -lt 60 ] && TIMEOUT=60
until $(grep -i $STATE $LOCKFILE &>/dev/null) ; do
- [ $STATE = "mounted" -a -f "$DIRMOUNT/ogimg.info" ] && ogEcho session "" && return 0
+ [ $STATE = "mounted" -a -f "$DIRMOUNT/ogimg.info" ] && ogEcho log session "" && return 0
TIMEAUX=$[SECONDS-TIME]
[ "$TIMEAUX" -lt "$TIMEOUT" ] || return $(ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
echo -n "#" | tee -a $OGLOGSESSION $OGLOGFILE
@@ -856,7 +872,7 @@ if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
else
[ -f "$OGIMG/mount/$2${IMGEXT#img}/ogimg.info" ] && ISMOUNT=TRUE
fi
-[ "$ISMOUNT" == TRUE ] && ogEcho session warning "$MSG_SYNC_NOCHECK" && return 0
+[ "$ISMOUNT" == TRUE ] && ogEcho log session warning "$MSG_SYNC_NOCHECK" && return 0
DIRMOUNT="/tmp/ogCheckImage$$"
mkdir "$DIRMOUNT"
diff --git a/client/engine/String.lib b/client/engine/String.lib
index a81e3b07..3c4430e6 100755
--- a/client/engine/String.lib
+++ b/client/engine/String.lib
@@ -15,8 +15,9 @@
#@date 2010/05/09
#*/ ##
#/**
-ogCheckStringInGroup ()
+function ogCheckStringInGroup ()
{
+local i
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME str_elemento str_grupo" \
@@ -56,7 +57,7 @@ return 1
#/**
-ogCheckStringInReg()
+function ogCheckStringInReg()
{
local REG
@@ -91,7 +92,7 @@ REG=$2
#@date 2010/05/09
#*/ ##
#/**
-ogCheckIpAddress()
+function ogCheckIpAddress()
{
local REG IP arrIP
diff --git a/client/engine/System.lib b/client/engine/System.lib
index 70a1b066..cbadd952 100755
--- a/client/engine/System.lib
+++ b/client/engine/System.lib
@@ -107,6 +107,8 @@ fi
# Ejecutar comando.
eval $COMMAND $REDIREC | tee -a $FILES
+# Salida de error del comando ejecutado.
+return ${PIPESTATUS[0]}
}
@@ -210,6 +212,7 @@ case "$CODE" in
$OG_ERR_EXTENDFS) MSG="$MSG_ERR_EXTENDFS \"$2\"" ;;
$OG_ERR_IMGSIZEPARTITION) MSG="$MSG_ERR_IMGSIZEPARTITION \"$2\"" ;;
$OG_ERR_UPDATECACHE) MSG="$MSG_ERR_UPDATECACHE \"$2\"" ;;
+ $OG_ERR_DONTFORMAT) MSG="$MSG_ERR_DONTFORMAT \"$2\"" ;;
$OG_ERR_UCASTSYNTAXT) MSG="$MSG_ERR_UCASTSYNTAXT \"$2\"" ;;
$OG_ERR_UCASTSENDPARTITION) MSG="$MSG_ERR_UCASTSENDPARTITION \"$2\"" ;;
$OG_ERR_UCASTSENDFILE) MSG="$MSG_ERR_UCASTSENDFILE \"$2\"" ;;
diff --git a/client/shared/etc/engine.cfg b/client/shared/etc/engine.cfg
index 82766a2f..895881be 100644
--- a/client/shared/etc/engine.cfg
+++ b/client/shared/etc/engine.cfg
@@ -10,8 +10,8 @@ OGWINCHKDISK=TRUE
#Configuracion de interface restauracion
#Que hacer cuando la cache no tenga espacio libre. [ NONE | FORMAT ] ]
ACTIONCACHEFULL=NONE
-# Protocolo a usar en el caso de que no exita cache o no haya espacio sufiencie.
-RESTOREPROTOCOLNOCACHE=UNICAST
+#Que protocolo de restauracion usar en el caso de que no exista cache o no exista espacio sufiente. [NONE | UNICAST | MULTICAST].NONE retorna error
+RESTOREPROTOCOLNOTCACHE=UNICAST
#script Creacion imagen
IMGPROG="partclone"
@@ -35,3 +35,6 @@ IMGFS=EXT4
# Tiempo de sleep antes de realizar el reboot
OGSLEEP="20"
+
+# Indica si se instala automáticamente el cliente OpenGnSys en el despliegue de un SO (por defecto, no instalar).
+INSTALLOSCLIENT=FALSE
diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh
index 29a8cc04..e87b4b61 100755
--- a/client/shared/etc/init/default.sh
+++ b/client/shared/etc/init/default.sh
@@ -20,13 +20,20 @@ if [ -x $OPENGNSYS/job_executer/init.d/job_executer ]; then
fi
# Arranque de OpenGnSys Client daemon (socket).
-if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then
- echo "${MSG_LAUNCHCLIENT:-.}"
- [ "$ogactiveadmin" == "true" ] && boot="admin"
- # Indicar fichero de teclado de Qt para el idioma especificado (tipo "es.qmap").
- [ -f /usr/local/etc/${LANG%_*}.qmap ] && export QWS_KEYBOARD="TTY:keymap=/usr/local/etc/${LANG%_*}.qmap"
+echo "${MSG_LAUNCHCLIENT:-.}"
+[ "$ogactiveadmin" == "true" ] && boot="admin"
+# Indicar fichero de teclado de Qt para el idioma especificado (tipo "es.qmap").
+[ -f /usr/local/etc/${LANG%_*}.qmap ] && export QWS_KEYBOARD="TTY:keymap=/usr/local/etc/${LANG%_*}.qmap"
+
+if [ -x "$OPENGNSYS/bin/ogAdmClient" -a "$ogstatus" != "offline" ]; then
# Ejecutar servicio cliente.
$OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d $LOGLEVEL
+else
+ for FILE in index $OGGROUP $(ogGetIpAddress)
+ do
+ [ -f $OGCAC/menus/$FILE.html ] && OGMENU="$OGCAC/menus/$FILE.html"
+ done
+ $OPENGNSYS/bin/browser -qws $OGMENU
fi
# Si fallo en cliente y modo "admin", cargar shell; si no, salir.
diff --git a/client/shared/etc/lang.ca_ES.conf b/client/shared/etc/lang.ca_ES.conf
index d6257dc0..5220ff6e 100644
--- a/client/shared/etc/lang.ca_ES.conf
+++ b/client/shared/etc/lang.ca_ES.conf
@@ -31,6 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion"
MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_PROTOCOLJOINMASTER="Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER"
+MSG_ERR_DONTFORMAT="Error al formatear"
MSG_ERR_DONTMOUNT_IMAGE="Error al montar/reducir la imagen"
MSG_ERR_DONTUNMOUNT_IMAGE="Error al desmontar la imagen"
MSG_ERR_DONTSYNC_IMAGE="Imagen no sincronizable"
@@ -40,6 +41,7 @@ MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restaurac
# Mensajes de avisos.
MSG_DONTMOUNT="Sistema de archivos no montado"
MSG_DONTUNMOUNT="El sistema de archivos no se puede desmontar o no está montado"
+MSG_MOUNT="Sistema de archivos montado"
# Mensajes complementarios para las ayudas.
MSG_64BIT="64 bits"
@@ -233,7 +235,7 @@ MSG_SCRIPTS_FILE_RENAME=" Renombrar fichero-imagen previo: "
MSG_SCRIPTS_CREATE_SIZE=" Calcular espacio (KB) requerido para almacenarlo y el disponible: "
# Script updateCache.
-MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum-"
+MSG_SCRIPTS_UPDATECACHE_DOUPDATE="comprovar si es necessari actualitzar el fitxer imatge"
MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la cache es mayor que el fichero a descargar."
# Script updateCache: para las imágenes sincronizadas tipo dir.
MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR="Calculamos el tamaño de la imagen."
diff --git a/client/shared/etc/lang.en_GB.conf b/client/shared/etc/lang.en_GB.conf
index 42a39b9c..737da340 100644
--- a/client/shared/etc/lang.en_GB.conf
+++ b/client/shared/etc/lang.en_GB.conf
@@ -31,6 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion"
MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_PROTOCOLJOINMASTER="Error in connecting a Unicast|Multicast session to the master"
+MSG_ERR_DONTFORMAT="Error al formatear"
MSG_ERR_DONTMOUNT_IMAGE="Failed to mount/reduce image"
MSG_ERR_DONTUNMOUNT_IMAGE="Failed to unmount image"
MSG_ERR_DONTSYNC_IMAGE="Not synchronized image"
@@ -40,6 +41,7 @@ MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restaurac
# Warning messages.
MSG_DONTMOUNT="Unmounted filesystem"
MSG_DONTUNMOUNT="Cannot unmount the filesystem"
+MSG_MOUNT="Sistema de archivos montado"
# Help auxiliary menssages.
MSG_64BIT="64 bit"
diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf
index 524e95cf..46b87890 100644
--- a/client/shared/etc/lang.es_ES.conf
+++ b/client/shared/etc/lang.es_ES.conf
@@ -31,6 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepción Multicast de un fichero"
MSG_ERR_MCASTSENDPARTITION="Error en envío Multicast de una partición"
MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepción Multicast de un fichero"
MSG_ERR_PROTOCOLJOINMASTER="Error en la conexión de una sesión Unicast|Multicast con el Master"
+MSG_ERR_DONTFORMAT="Error al formatear"
MSG_ERR_DONTMOUNT_IMAGE="Error al montar/reducir la imagen"
MSG_ERR_DONTUNMOUNT_IMAGE="Error al desmontar la imagen"
MSG_ERR_DONTSYNC_IMAGE="Imagen no sincronizable"
@@ -40,6 +41,7 @@ MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restaurac
# Mensajes de avisos.
MSG_DONTMOUNT="Sistema de archivos no montado"
MSG_DONTUNMOUNT="El sistema de archivos no se puede desmontar o no está montado"
+MSG_MOUNT="Sistema de archivos montado"
# Mensajes complementarios para las ayudas.
MSG_64BIT="64 bits"
@@ -210,6 +212,7 @@ MSG_HELP_ogWaitMountImage="Se espera un tiempo estimado a que se monte la imagen
MSG_HELP_configureOs="Post-configura de arranque del sistema"
MSG_HELP_createBaseImage="Genera imagen básica de la partición"
MSG_HELP_createDiffImage="Genera imagen diferencial de la partición respecto a la imagen básica"
+MSG_HELP_installOfflineMode="Prepara el equipo cliente para el modo offline."
MSG_HELP_partclone2sync="Convierte imagen de partclone en imagen sincronizable."
MSG_HELP_restoreBaseImage="Restaura una imagen básica en una partición"
MSG_HELP_restoreDiffImage="Restaura una imagen diferencial en una partición"
@@ -233,7 +236,7 @@ MSG_SCRIPTS_FILE_RENAME=" Renombrar fichero-imagen previo: "
MSG_SCRIPTS_CREATE_SIZE=" Calcular espacio (KB) requerido para almacenarlo y el disponible: "
# Script updateCache.
-MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobar si actualización -existe una imagen con igual nombre pero distinto sum-"
+MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobar si es necesario actualizar el fichero imagen "
MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la caché es mayor que el fichero a descargar."
# Script updateCache: para las imágenes sincronizadas tipo dir.
MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR="Calcular el tamaño de la imagen."
diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh
index f5f45628..b165ecfd 100755
--- a/client/shared/etc/preinit/loadenviron.sh
+++ b/client/shared/etc/preinit/loadenviron.sh
@@ -119,6 +119,7 @@ export OG_ERR_NOGPT=22 # El disco indicado no contiene una particion GPT
export OG_ERR_IMGSIZEPARTITION=30 # Error al restaurar partición más pequeña que la imagen
export OG_ERR_UPDATECACHE=31 # Error al realizar el comando updateCache
+export OG_ERR_DONTFORMAT=32 # Error al formatear
export OG_ERR_GENERIC=40 # Error imprevisto no definido
export OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica UNICAST
export OG_ERR_UCASTSENDPARTITION=51 # Error en envío UNICAST de partición
@@ -137,3 +138,4 @@ export OG_ERR_DONTSYNC_IMAGE=71 # Imagen no sincronizable (es monolitica)
export OG_ERR_DONTUNMOUNT_IMAGE=72 # Error al desmontar la imagen
export OG_ERR_NOTDIFFERENT=73 # No se detectan diferencias entre la imagen basica y la particion.
export OG_ERR_SYNCHRONIZING=74 # Error al sincronizar, puede afectar la creacion/restauracion de la imagen
+
diff --git a/client/shared/etc/preinit/mountrepo.sh b/client/shared/etc/preinit/mountrepo.sh
index e12990fd..62b1107e 100755
--- a/client/shared/etc/preinit/mountrepo.sh
+++ b/client/shared/etc/preinit/mountrepo.sh
@@ -25,6 +25,29 @@ if [ "$ogactiveadmin" == "true" ]; then
PASS=${PASS:-"og"}
mount.cifs //${ROOTREPO}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS
;;
+ local) # TODO: hacer funcion dentro de este script que monte smb
+ # Comprobamos que estatus sea online.
+ if [ "$ogstatus" == "offline" -o "$SERVER" == "" ]; then
+ # Si estatus es offline buscamos un dispositivo con etiqueta repo
+ # y si no existe montamos la cache como repo (si existe).
+ TYPE=$(blkid | grep REPO | awk -F"TYPE=" '{print $2}' | tr -d \")
+ if [ "$TYPE" == "" ]; then
+ [ -d $OGCAC/$OGIMG ] && mount --bind $OGCAC/$OGIMG $OGIMG
+ else
+ mount -t $TYPE LABEL=REPO $OGIMG &>/dev/null
+ fi
+ else
+ # Comprobamos que existe un servicio de samba.
+ smbclient -L $SERVER -N &>/dev/null
+ if [ $? -eq 0 ]; then
+ PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | \
+ sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
+ PASS=${PASS:-"og"}
+ mount.cifs //${ROOTREPO}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS
+ fi
+ # TODO: buscar condicion para NFS
+ fi
+ ;;
esac
fi
diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster
index c8575915..9aedefde 100755
--- a/client/shared/scripts/cloneRemoteFromMaster
+++ b/client/shared/scripts/cloneRemoteFromMaster
@@ -54,6 +54,9 @@
#@version 1.0.3 - Habilita el uso de la variable OGWINREDUCE=TRUE|TRUE para reducir el sistema de archivos a enviar
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011/12/22
+#@version 1.0.6 - Uso de la funcion ogExecuteAndLog
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2012/02/12
#*/ ##
#test 1. cliente sin particiones. Detectado TODO: crear estrucutras de particiones
@@ -63,25 +66,35 @@
#test 5. master sin origen particion.
#test 6. master sin origen fichero.
-#Carga del configurador del engine
-[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
-
+TIME1=$SECONDS
+PROG="$(basename $0)"
trap "pkill faucet; exit 1" 0 1 2 3 6 9 14 15
-TIME1=$SECONDS
-PROG="$(basename $0)"
+#AYUDA
if [ $# -lt 1 -o "$1" == "help" ]; then
- echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp"
- exit 1
+ echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp"
+ exit 1
fi
-if [ $# -lt 6 ]; then
- ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAT|UNICAST] SESSION TARGER_disck TARGET_partition"
+#ERROR
+if [ $# -lt 6 ]; then
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAST|UNICAST] SESSION TARGET_disk TARGET_partition"
exit $?
fi
-# Obtener información de los parámetros de entrada.
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+# Valores por defecto: #IMGPROG="partclone" ; #IMGCOMP="lzop" ; #IMGEXT="img" #IMGREDUCE="TRUE"
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo " " > $OGLOGCOMMAND
+
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# Procesar parámetros de entrada
HOSTIP=`ogGetIpAddress`
if [ -z "$HOSTIP" ]
then
@@ -115,7 +128,7 @@ pkill faucet
# Preparando Instrucción según sea Master o Client
case $MASTERIP in
$HOSTIP)
- echo "[1] Equipo Master preparando el origen de los datos a enviar"
+ ogEcho log session "[1] Equipo Master preparando el origen de los datos a enviar"
ogGetPath $2 $3.img &>/dev/null; RC=$?;
ogDiskToDev $2 $3 &>/dev/null; RETVAL=$?;
@@ -168,15 +181,13 @@ case $MASTERIP in
fi
case "${PROTOCOL^^}" in
MULTICAST)
- ogEcho log session "[29] Transferencia Multicast"
- ogEcho log "ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR"
- ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
+ ogEcho log session "[29] Transferencia Multicast: ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR "
+ ogExecAndLog session "ogMcastSendPartition" "$DISKSOURCE" "$PARTSOURCE" "$SESSIONMCASTSERVER" "$TOOLCLONE" "$COMPRESOR" || RETVAL=$?
;;
UNICAST)
sleep 60
- ogEcho log session "[29] Transferencia Unicast"
- ogEcho log "ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR"
- ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
+ ogEcho log session "[29] Transferencia Unicast: ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR"
+ ogExecAndLog session "ogUcastSendPartition" "$DISKSOURCE" "$PARTSOURCE" "$SESSIONUCASTSERVER" "$TOOLCLONE" "$COMPRESOR" || RETVAL=$?
;;
esac
@@ -264,8 +275,8 @@ case $MASTERIP in
SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}')
ogEcho log "$INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE"
ogMount $DISKTARGET $PARTTARGET || ogFormat $DISKTARGET $PARTTARGET
- SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | grep Disk | awk -F" " '{print $3}' | tr -d kB);
-
+ #SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | grep Disk | awk -F" " '{print $3}' | tr -d kB);
+ SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET )
ogEcho log session "[28] comprobando que el tamaño de la imagen $SIZEIMAGE es menor que el de la particion destino $SIZEPARTTARGET"
# comprobamos que el tamaño de a imagen es menor que la del cliente.
if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
@@ -274,11 +285,11 @@ case $MASTERIP in
case "${PROTOCOL^^}" in
MULTICAST)
ogEcho log session "ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR"
- ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?)
+ ogExecAndLog command "ogMcastReceiverPartition" "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?)
;;
UNICAST)
ogEcho log session "ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR"
- ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?)
+ ogExecAndLog command "ogUcastReceiverPartition" "$DISKTARGET" "$PARTTARGET" "$SESSIONUCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?)
;;
esac
if which configureOsCustom &>/dev/null; then
diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs
index 45a2de86..2aa5288d 100755
--- a/client/shared/scripts/configureOs
+++ b/client/shared/scripts/configureOs
@@ -69,15 +69,19 @@ case "$OSTYPE" in
# Registrar en Windows que la partición indicada es su nueva unidad C:\
ogWindowsRegisterPartition $1 $2 C $1 $2
#ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows
- # Instalar cliente para Windows (no activar en sistema en produccion ver ticket 604).
- ogInstallMiniSetup $1 $2 postconf.cmd
- ogInstallWindowsClient $1 $2 postconf.cmd
+ # Instalar cliente para Windows si se indica en la variable INSTALLOSCLIENT.
+ if [ "${INSTALLOSCLIENT^^}" == "TRUE" ]; then
+ ogInstallMiniSetup $1 $2 postconf.cmd
+ ogInstallWindowsClient $1 $2 postconf.cmd
+ fi
;;
Linux) # Postconfiguración de GNU/Linux.
## Install and Configure Grub based on OS installed and Grub 1st stage location.
ogGrubInstallPartition $1 $2
- # Instalar cliente para Linux.
- ogInstallLinuxClient $1 $2
+ # Instalar cliente para GNU/Linux si se indica en la variable INSTALLOSCLIENT.
+ if [ "${INSTALLOSCLIENT^^}" == "TRUE" ]; then
+ ogInstallLinuxClient $1 $2
+ fi
;;
MacOS) # Postconfiguración de Mac OS X.
# Fichero indicador de activación de postconfiguración.
diff --git a/client/shared/scripts/createBaseImage b/client/shared/scripts/createBaseImage
index 1e35aff4..ed9255b4 100755
--- a/client/shared/scripts/createBaseImage
+++ b/client/shared/scripts/createBaseImage
@@ -102,8 +102,9 @@ TIME2=$SECONDS
ogEcho log session "[40] $MSG_HELP_ogCreateImage $1 $2 $3 $4 "
# Si existe el fichero de la imagen se hace copia de seguridad y se redimensiona, si no existe se crea.
+# Bloqueo la imagen. Si esta en modo lectura dara error y nos salimos
ogEcho log session "[50] $MSG_HELP_ogCreateFileImage."
-ogLockImage "$3" "/$4.$IMGEXT"
+ogLockImage "$3" "/$4.$IMGEXT" || exit $?
ogCreateFileImage $3 "$4" $IMGEXT $SIZEREQUIRED
# Creamos la lista del contenido y lo situamos en la particion a copiar.
diff --git a/client/shared/scripts/createDiffImage b/client/shared/scripts/createDiffImage
index 69b90166..862c05c8 100755
--- a/client/shared/scripts/createDiffImage
+++ b/client/shared/scripts/createDiffImage
@@ -95,8 +95,9 @@ ORIG=$(ogMount $1 $2) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2"
DIFFDIR="$(ogGetParentPath "$3" "/$5")"
DIFFFILE="$DIFFDIR/$5.$DIFFEXT"
-ogLockImage "$3" "/$4.$IMGEXT"
-ogLockImage "$3" "/$5.$DIFFEXT"
+# Bloqueo las imagenes -> Si no hay acceso de escritura dara error y nos saldremos.
+ogLockImage "$3" "/$4.$IMGEXT" || exit $?
+ogLockImage "$3" "/$5.$DIFFEXT" || exit $?
# Comprobar consistencia del sistema de archivos.
echo " " > $OGLOGCOMMAND
@@ -138,13 +139,6 @@ ogLock $1 $2
TIMEAUX3=$[SECONDS-TIME2]
ogEcho log session " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
-# Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial
-if [ "$FSTYPE" == "NTFS" ]; then
- ogEcho log session "[55] $MSG_HELP_ogAclFilter "
- ogAclFilter
- TIMEAUX4=$[SECONDS-TIMEAUX3]
- ogEcho log session " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX4/60]m $[TIMEAUX4%60]s"
-fi
TIMEAUX5=$[SECONDS-TIMEAUX3]
# Configuro la informacion del tamaño de los datos en /tmp/ogimg.info
diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage
index 724d515e..89d776a6 100755
--- a/client/shared/scripts/deployImage
+++ b/client/shared/scripts/deployImage
@@ -14,6 +14,8 @@
#@exception OG_ERR_LOCKED 4 partición bloqueada por otra operación.
#@exception OG_ERR_IMAGE 5 error al restaurar la imagen del sistema.
#@exception OG_ERR_IMGSIZEPARTITION 30 Tamaño de la particion es menor al tamaño de la imagen.
+#@exception OG_ERR_NOTCACHE No existe cache -15-
+#@exception OG_ERR_CACHESIZE Tamaño de la paticion menor al archivo a descargar -16-
#@version 1.0.1 - Separación en protocolos de transferencia y postconfiguracion
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2011-05-11
@@ -26,15 +28,16 @@
#@version 1.0.5 - Renominación del script como "deployImage".
#@author Antonio J. Doblas Viso y Ramón M. Gómez.
#@date 2013-12-04
+#@version 1.0.6 - Se añade la gestión de errores de la CACHE cuando en el engine.cfg se define RESTOREPROTOCOLNOCACHE=NONE.
+#@author Antonio J. Doblas Viso.
+#@date 2015-02-23
#**/
#Descripcion:
-# La interfaz detecta:
-# Si Repositorio es el global (REPO) realiza un deploy.
-# Si Repositorio es local (CACHE) realiza un restoreImage CACHE
-# El deploy, si detecta que el cliente no tiene una cache con espacio suficiente
-# -- reazlia un ogRestore REPO
+# Si Repositorio es el global (REPO) realiza un deploy.
+# Si Repositorio es local (CACHE) realiza un restoreImage CACHE
+# El deploy, si detecta que el cliente no tiene una CACHE o no tiene espacio suficiente consulta el engine.cfg RESTOREPROTOCOLNOCACHE
@@ -111,17 +114,35 @@ case "$REPO" in
NEXTOPERATION=CACHE
;;
15|16)
+ # no se permite usar la cache (no existe(15) o no espacio sufiente (16). Se consulta engine.cfg para RESTOREPROTOCOLNOCACHE [ multicast unicast none ]
ogEcho log session "[50] $MSG_ERR_NOTCACHE ; $MSG_ERR_CACHESIZE "
- ogEcho log session "[50] $MSG_SCRIPTS_CHECK_ENGINE "
- if [ "$RESTOREPROTOCOLNOCACHE" == "MULTICAST" ]; then
- case "$PROTO" in
- MULTICAST) NEXTOPERATION=MULTICAST ;;
- TORRENT) NEXTOPERATION=UNICAST ;;
- UNICAST) NEXTOPERATION=UNICAST ;;
- esac
- else
- NEXTOPERATION=UNICAST
- fi
+ ogEcho log session "[50] $MSG_SCRIPTS_CHECK_ENGINE: RESTOREPROTOCOLNOTCACHE=$RESTOREPROTOCOLNOTCACHE "
+ case "$RESTOREPROTOCOLNOTCACHE" in
+ MULTICAST)
+ case "$PROTO" in
+ MULTICAST) NEXTOPERATION=MULTICAST ;;
+ TORRENT) NEXTOPERATION=UNICAST ;;
+ UNICAST) NEXTOPERATION=UNICAST ;;
+ esac
+ ;;
+ UNICAST)
+ NEXTOPERATION=UNICAST
+ ;;
+ NONE)
+ case $RETVAL in
+ 15)
+ ogEcho log session "[100] $MSG_ERR_NOTCACHE"
+ ogRaiseError session $OG_ERR_NOTCACHE "NOT CACHE"
+ exit $?
+ ;;
+ 16)
+ ogEcho log session "[100] $MSG_ERR_CACHESIZE "
+ ogRaiseError session $OG_ERR_CACHESIZE "CACHE FULL"
+ exit $?
+ ;;
+ esac # del segundo RETAVAL
+ ;;
+ esac # del RESTOREPROTOCOLNOTCACHE
;;
esac
;;
diff --git a/client/shared/scripts/generateMenuDefault b/client/shared/scripts/generateMenuDefault
index 7a9abd6e..09e4300f 100755
--- a/client/shared/scripts/generateMenuDefault
+++ b/client/shared/scripts/generateMenuDefault
@@ -9,7 +9,7 @@ source /tmp/net-$DEVICE.conf
FILEINFOHTML=$OGLOG/`ogGetIpAddress`.info.html
FILEINFOCACHE=$OGLOG/`ogGetIpAddress`.cache.txt
ogMountCache 2>/dev/null
-CACHECONTENIDO=`ls -m $OGCAC/$OGIMG 2>/dev/null`
+CACHECONTENIDO="ls -m $OGCAC/$OGIMG 2>/dev/null"
SPEED=$(LANG=C ethtool $DEVICE 2>/dev/null | awk '$1~/Speed/ {print $2}')
case "${SPEED,,}" in
@@ -23,8 +23,13 @@ case "${DUPLEX,,}" in
full) ;;
*) DUPLEX="<font color=\"red\">$DUPLEX</font>"
esac
+
CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
-expr $CACHESIZEFREE / 1024 > $FILEINFOCACHE 2>/dev/null && echo '.MB,' >> $FILEINFOCACHE
+if [ $CACHESIZEFREE == 0 ]; then
+ echo '0.MB,' > $FILEINFOCACHE
+else
+ expr $CACHESIZEFREE / 1024 > $FILEINFOCACHE 2>/dev/null && echo '.MB,' >> $FILEINFOCACHE
+fi
# Crear menú por defecto.
cat > $FILEINFOHTML << EOT
@@ -72,7 +77,5 @@ cat >> $FILEINFOHTML << EOT
EOT
# Crear contenido de la caché.
-cat >> $FILEINFOCACHE << EOT
-$CACHECONTENIDO
-EOT
+eval $CACHECONTENIDO >> $FILEINFOCACHE
diff --git a/client/shared/scripts/installOfflineMode b/client/shared/scripts/installOfflineMode
new file mode 100755
index 00000000..d9ff2459
--- /dev/null
+++ b/client/shared/scripts/installOfflineMode
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+#/**
+# installOfflineMode
+#@brief Prepara el equipo cliente para el modo offline.
+#@param no
+#@return
+#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
+#@exception OG_ERR_NOTCACHE No existe cache.
+#@author Irina Gomez. ETSII. Universidad de Sevilla
+#@date 2013/12/5
+#*/ ##
+
+PROG="$(basename $0)"
+if [ "$*" == "help" ]; then
+ ogHelp "$PROG $MSG_HELP_installOfflineMode" \
+ "$PROG [ no param ]"
+ exit 0
+fi
+
+ogEcho log session "$MSG_HELP_installOfflineMode"
+# Cargamos las variables de entorno.
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+DIRTFTP="/opt/oglive/tftpboot"
+DIROGCLIENT="$DIRTFTP/ogclient"
+# Comprobamos que el DIROGCLIENT esta montado desde repo
+df |grep "$(ogGetRepoIp).*$DIRTFTP" &>/dev/null || ogRaiseError $OG_ERR_NOTFOUND "REPO OGclient" || exit $?
+
+# Copiamos el kernel y el initrd.
+ogEcho log session " [10] updateBootCache"
+updateBootCache || ogRaiseError $OG_ERR_NOTCACHE || exit $?
+
+# Creamos los dir necesarios.
+ogEcho log session " [40] mkdir -p $OGCAC/{ogclient, menus, log}."
+[ -d $OGCAC/menus/images/iconos ] || mkdir -p $OGCAC/menus/images/iconos
+[ -d $OGCAC/ogclient ] || mkdir -p $OGCAC/ogclient
+[ -d $OGCAC/log ] || mkdir -p $OGCAC/log
+[ -d $OGCAC/opt/opengnsys/images ] || mkdir -p $OGCAC/opt/opengnsys/images
+
+# Comparamos el cliente en el server y en cache
+ogEcho log session " [60] cp $DIROGCLIENT/ogclient.sqfs $OGCAC/ogclient/"
+SERVEROGCLIENT=$(cat $DIROGCLIENT/ogclient.sqfs.sum 2>/dev/null)
+CACHEOGCLIENT=$(cat $OGCAC/ogclient/ogclient.sqfs.sum 2>/dev/null)
+
+if [ "$CACHEOGCLIENT" != "$SERVEROGCLIENT" ]; then
+ cp $DIROGCLIENT/ogclient.sqfs $OGCAC/ogclient/
+ cp $DIROGCLIENT/ogclient.sqfs.sum $OGCAC/ogclient/
+fi
+
+# Si se ha generado el menu de inicio lo copiamos a cache.
+IPCLIENT=$(ogGetIpAddress)
+MENU=$OGLOG/$IPCLIENT.info.html
+ICONO="images/iconos/logoopengnsys.png"
+[ -f $MENU ] || generateMenuDefault
+ogEcho log session " [90] cp $MENU $OGCAC/menus/$IPCLIENT.html"
+cp $MENU $OGCAC/menus/$IPCLIENT.html
+sed -i s/"..\/images"/"images"/g $OGCAC/menus/$IPCLIENT.html
+wget --no-check-certificate https://$(ogGetRepoIp)/opengnsys/$ICONO -O $OGCAC/menus/$ICONO
+
+
diff --git a/client/shared/scripts/poweroff b/client/shared/scripts/poweroff
index 9af4d669..c108e08e 100755
--- a/client/shared/scripts/poweroff
+++ b/client/shared/scripts/poweroff
@@ -21,7 +21,7 @@ BUSYBOX=${BUSYBOX:-"busybox"}
# Retardo para dar lugar al registro en cola de acciones.
sleep 5
# Parar Browser para evitar "cuelgues".
-pkill browser
+[ "$ogstatus" == "offline" ] || pkill browser
# Apagar.
$BUSYBOX poweroff
diff --git a/client/shared/scripts/reboot b/client/shared/scripts/reboot
index 87df09d0..87e30e21 100755
--- a/client/shared/scripts/reboot
+++ b/client/shared/scripts/reboot
@@ -34,7 +34,8 @@ BUSYBOX=${BUSYBOX:-"busybox"}
# Retardo para dar lugar al registro en cola de acciones.
sleep $TIME
# Parar Browser para evitar "cuelgues".
-pkill browser
+[ "$ogstatus" == "offline" ] || pkill browser
# Reiniciar.
$BUSYBOX reboot
+
diff --git a/client/shared/scripts/restoreBaseImage b/client/shared/scripts/restoreBaseImage
index e424baa8..c4e87ba4 100755
--- a/client/shared/scripts/restoreBaseImage
+++ b/client/shared/scripts/restoreBaseImage
@@ -137,6 +137,7 @@ ogExecAndLog command ogRestoreInfoImage $3 $4
# Llamar al script de post-configuración del sistema operativo.
# Si a este script lo ha llamado el script restoreDiffImage no post-configuramos
if [ "$(ogGetCaller)" != "restoreDiffImage" ];then
+ ogExecAndLog command ogRestoreAclImage $3 $4
if which configureOsCustom &>/dev/null; then
ogEcho log session "[90] configureOsCustom"
configureOsCustom "$3" "$4" "$1" "$2"
@@ -145,6 +146,8 @@ if [ "$(ogGetCaller)" != "restoreDiffImage" ];then
configureOs $3 $4
fi
fi
+TIMEAUX3=$[SECONDS-TIMEAUX2]
+ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
TIME=$[SECONDS-TIME1]
ogEcho log session "[100] $MSG_SCRIPTS_END $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m $[TIME%60]s"
diff --git a/client/shared/scripts/restoreDiffImage b/client/shared/scripts/restoreDiffImage
index 20745b3e..e10a395a 100755
--- a/client/shared/scripts/restoreDiffImage
+++ b/client/shared/scripts/restoreDiffImage
@@ -1,15 +1,15 @@
#!/bin/bash
#/**
-# restoreiDiffSquash
+# restoreDiffImage
#@brief Script de ejemplo para restaurar una imagen diferencial.
#@brief (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin).
#@param 1 REPO|CACHE
#@param 2 imagen basica
-#@param 2 imagen diferencial
-#@param 3 disco
-#@param 4 particion
-#@param 5 protocolo
-#@param 6 opciones protocolo
+#@param 3 imagen diferencial
+#@param 4 disco
+#@param 5 particion
+#@param 6 protocolo
+#@param 7 opciones protocolo
#@return
#@exception OG_ERR_FORMAT # 1 formato incorrecto.
#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
@@ -122,6 +122,9 @@ ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[T
# creando enlaces y restableciendo ACL (en windows)
ogEcho log session "[70] $MSG_HELP_ogRestoreInfoImage"
ogExecAndLog command ogRestoreInfoImage "$4" "$5"
+ogExecAndLog command gRestoreAclImage "$4" "$5"
+TIMEAUX3=$[SECONDS-TIMEAUX2]
+ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
# Llamar al script de post-configuración del sistema operativo.
if which configureOsCustom &>/dev/null; then
@@ -136,4 +139,3 @@ ogEcho log session "[100] $MSG_SCRIPTS_END $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m
# Si ha habido problema al sincronizar nos salimos con error
[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
-
diff --git a/client/shared/scripts/restoreImage b/client/shared/scripts/restoreImage
index 4575bf6c..6d5198aa 100755
--- a/client/shared/scripts/restoreImage
+++ b/client/shared/scripts/restoreImage
@@ -54,7 +54,7 @@ case "$PROTO" in
ogEcho log session "[40] ogMcastReceiverPartition $DISK $PART $PORT $TOOL $COMPRESS"
ogMcastRequest "$IMGNAME.img" "$PROTOOPT"
ogExecAndLog command ogMcastReceiverPartition "$DISK" "$PART" "$PORT" "$TOOL" "$COMPRESS"
- RETVAL=${PIPESTATUS[0]}
+ RETVAL=$?
;;
*) # Protocolo desconocido.
ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST opciones ]"
diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache
index 889b9bf4..8760ddd2 100755
--- a/client/shared/scripts/updateCache
+++ b/client/shared/scripts/updateCache
@@ -75,7 +75,6 @@ else
# Si la imagen es monolitica y ha elegido protocolo = RSYNC salimos con error.
[ $PROTOCOLO == "RSYNC" ] && exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "REPO $2"; echo $?)
IMGSYNC=FALSE
- #TODO: ogUpdateCacheIsNecesary debe borrar la imagen que tenga igual nombre pero distinto sum-
ogUpdateCacheIsNecesary "$1" "$2" "$PROTOCOLO"
RETVAL=$?
fi
@@ -115,7 +114,7 @@ else
SIZEREQUIRED=$FILESIZE
fi
-#ERROR CACHESIZE 16
+#ERROR CACHESIZE 16 (tamanyo de la CACHE insuficiente)
if [ "$SIZEREQUIRED" -ge "$CACHESIZE" ]
then
ogEcho log session "$MSG_WARNING: $MSG_ERR_CACHESIZE: $2 = $SIZEREQUIRED > CACHE = $CACHESIZE"
@@ -123,14 +122,16 @@ then
exit $?
fi
-ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO"
-#ERROR CACHESIZE 16
+
+#ERROR CACHESIZE 16 (Espacio libre en CACHE insuficiente)
if [ "$SIZEREQUIRED" -ge "$CACHESIZEFREE" ]
then
- # ogEcho log session "[ ] No hay espacio sufiente en la CACHE, detectar que hacer con engine.cfg"
+ ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO: ACTIONCACHEFULL=$ACTIONCACHEFULL"
case "$ACTIONCACHEFULL" in
NONE)
- NEXTOPERATION=UNICAST
+ ogEcho log session "$MSG_WARNING: $MSG_ERR_CACHESIZE: $2 = $SIZEREQUIRED > FREE SPACE CACHE = $CACHESIZEFREE"
+ ogRaiseError session $OG_ERR_CACHESIZE "CACHE FULL, NO SPACE FREE"
+ exit $?
;;
FORMAT)
ogEcho log session "[51] $MSG_HELP_ogFormatCache "