summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2011-06-15 11:32:53 +0000
committerramon <ramongomez@us.es>2011-06-15 11:32:53 +0000
commitecd8d9ac7a4419618f471815d748a51923d90aea (patch)
tree5e4e60b889df53993b557f907e00d468bc7fde71 /client
parent61dabee7d4cd985599233fd3e9c07a76e5e85f84 (diff)
Integrar OpenGnSys 1.0.1 en rama principal (modifica #413).
git-svn-id: https://opengnsys.es/svn/trunk@2065 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client')
-rwxr-xr-xclient/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks4
-rw-r--r--client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions250
-rw-r--r--client/boot-tools/clientstructure/etc/ssh/sshd_config2
-rw-r--r--client/boot-tools/kernelParameterOG.es.txt5
-rw-r--r--client/boot-tools/ogClientManager.lib111
-rwxr-xr-xclient/engine/Boot.lib440
-rwxr-xr-xclient/engine/Disk.lib25
-rwxr-xr-xclient/engine/File.lib9
-rwxr-xr-xclient/engine/FileSystem.lib31
-rwxr-xr-xclient/engine/Image.lib54
-rwxr-xr-xclient/engine/PostConfEAC.lib575
-rwxr-xr-xclient/engine/Protocol.lib44
-rw-r--r--client/engine/README.es.txt4
-rwxr-xr-xclient/engine/Registry.lib397
-rwxr-xr-x[-rw-r--r--]client/engine/String.lib0
-rwxr-xr-xclient/engine/System.lib32
-rwxr-xr-xclient/shared/etc/init/default.sh3
-rw-r--r--client/shared/etc/lang.es_ES.conf19
-rw-r--r--client/shared/lib/grub4dos/badgrub.exebin210827 -> 235441 bytes
-rw-r--r--[-rwxr-xr-x]client/shared/lib/grub4dos/bootlace.combin37092 -> 37092 bytes
-rw-r--r--client/shared/lib/grub4dos/grldrbin195435 -> 220049 bytes
-rw-r--r--client/shared/lib/grub4dos/grldr.mbrbin9216 -> 9216 bytes
-rw-r--r--client/shared/lib/grub4dos/grub.exebin212363 -> 236977 bytes
-rw-r--r--client/shared/lib/grub4dos/menu.lst83
-rwxr-xr-xclient/shared/scripts/cloneRemoteFromMaster142
-rwxr-xr-xclient/shared/scripts/configureOs46
-rwxr-xr-xclient/shared/scripts/createImage88
-rwxr-xr-xclient/shared/scripts/deployImage19
-rwxr-xr-xclient/shared/scripts/generateMenuDefault30
-rwxr-xr-xclient/shared/scripts/updateBootCache7
-rwxr-xr-xclient/shared/scripts/updateCache35
31 files changed, 1973 insertions, 482 deletions
diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks
index 51f452ff..67f807ab 100755
--- a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks
+++ b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks
@@ -43,6 +43,8 @@ mkdir -p ${DESTDIR}/boot;
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
@@ -54,5 +56,7 @@ 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/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions
index ef6f00c8..16539dd6 100644
--- a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions
+++ b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions
@@ -20,25 +20,31 @@ return 0
ogExportVarEnvironment ()
{
- #puntos de accesos al servidor ogprotocol=nfs
- export NFSROOTBOOT="/var/lib/tftpboot"
- export NFSCLIENTDIR="/opt/opengnsys/client"
- export NFSLOGDIR="/opt/opengnsys/log/clients"
- export NFSIMGDIR="/opt/opengnsys/images"
- #puntos de accesos al servidor ogprotocol=smb
- export SMBROOTBOOT="tftpboot"
- export SMBCLIENTDIR="ogclient"
- export SMBLOGDIR="oglog"
- export SMBIMGDIR="ogimages"
-
- #puntos de montaje local ram o cache
- export LOCALCLIENTDIR="/opt/opengnsys"
- export LOCALLOGDIR="/opt/opengnsys/log"
- export LOCALIMGDIR="/opt/opengnsys/images"
- export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot
- export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop
- export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs
- export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM
+ export CFGINITRD="/tmp/initrd.cfg"
+ echo "puntos de accesos al servidor ogprotocol=nfs" >> $CFGINITRD
+ export NFSROOTBOOT="/var/lib/tftpboot" && echo "NFSROOTBOOT=$NFSROOTBOOT" >> $CFGINITRD
+ export NFSCLIENTDIR="/opt/opengnsys/client" && echo "NFSCLIENDIR=$NFSCLIENTDIR" >> $CFGINITRD
+ export NFSLOGDIR="/opt/opengnsys/log/clients" && echo "NFSLOGDIR=$NFSLOGDIR" >> $CFGINITRD
+ export NFSIMGDIR="/opt/opengnsys/images" && echo "NFSIMGDIR=$NFSIMGDIR" >> $CFGINITRD
+ echo "puntos de accesos al servidor ogprotocol=smb" >> $CFGINITRD
+ export SMBROOTBOOT="tftpboot" && echo "SMBROOTBOOT=$SMBROOTBOOT" >> $CFGINITRD
+ export SMBCLIENTDIR="ogclient" && echo "SMBCLIENTDIR=$SMBCLIENTDIR" >> $CFGINITRD
+ export SMBLOGDIR="oglog" && echo "SMBLOGDIR=$SMBLOGDIR" >> $CFGINITRD
+ export SMBIMGDIR="ogimages" && echo "SMBIMGDIR=$SMBIMGDIR" >> $CFGINITRD
+
+ echo "puntos de montaje local para los contenedores" >> $CFGINITRD
+ export LOCALROOTBOOT="/opt/og2fs/tftpboot" && echo "LOCALROOTBOOT=$LOCALROOTBOOT" >> $CFGINITRD
+ export LOCALCLIENTDIR="/opt/opengnsys" && echo "LOCALCLIENTDIR=$LOCALCLIENTDIR" >> $CFGINITRD
+ export LOCALLOGDIR="/opt/opengnsys/log" && echo "LOCALLOGDIR=$LOCALLOGDIR" >> $CFGINITRD
+ export LOCALIMGDIR="/opt/opengnsys/images" && echo "LOCALIMGDIR=$LOCALIMGDIR" >> $CFGINITRD
+
+ echo "puntos de montajes para realizar la integración unionfs entre el initrd y el sistema root" >> $CFGINITRD
+ #punto de montaje donde se accede al 2nd FS mediante loop
+ export LOCALROOTIMG="/opt/og2fs/2ndfs" && echo "LOCALROOTIMG=$LOCALROOTIMG" >> $CFGINITRD
+ #punto de montaje para unionfs
+ export LOCALROOTRAM="/opt/og2fs/1stfs" && echo "LOCALROOTRAM=$LOCALROOTRAM" >> $CFGINITRD
+ #punto de union entreo LOCALROOTIMG y LOCALROOTRAM
+ export LOCALROOTUNION="/opt/og2fs/unionfs" && echo "LOCALROOTUNION=$LOCALROOTUNION" >> $CFGINITRD
##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES.
#ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd.
#IPV4DDR
@@ -92,6 +98,14 @@ ogPostConfigureFS()
echo "link-local 169.254.0.0" >> /etc/networks
echo "localnet $NETIP" >> /etc/networks
#route
+
+ #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/og2fs/tftpboot /opt/opengnsys/cache
+ [ "$ogprotocol" == "local" ] && ln -s /opt/og2fs/2ndfs/opt/opengnsys/* /opt/opengnsys/
+
+
}
@@ -120,6 +134,7 @@ ogGetROOTSERVER ()
fi
fi
export ROOTSERVER
+ echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD
return 0
}
@@ -136,10 +151,15 @@ else
fi
case "$ogprotocol" in
- cdrom)
- echo "Montar imagen de CD-ROM"
- blkid /dev/s*
- mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT
+ 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"
@@ -240,77 +260,104 @@ ifconfig lo 127.0.0.1
ogconfigure_networking()
{
-IP=$IPOPTS
-# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000
- if [ -n "${BOOTIF}" ]; then
- # pxelinux sets BOOTIF to a value based on the mac address of the
- # network card used to PXE boot, so use this value for DEVICE rather
- # than a hard-coded device name from initramfs.conf. this facilitates
- # network booting when machines may have multiple network cards.
- # pxelinux sets BOOTIF to 01-$mac_address
-
- # strip off the leading "01-", which isn't part of the mac
- # address
- 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
+#echo "ogconfigure_networking: 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"
+ ogconfigure_networking
+fi
- # networking already configured thus bail out
- [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0
-
- # 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
+[ -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
+ ogconfigure_networking
+fi
- case ${IP} in
- none|off)
- # Do nothing
- ;;
- ""|on|any)
+# 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 kernel params $IP: ipconfig -t ${ROUNDTTT} ${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 (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${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 kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP "
+ ;;
+ *)
+ 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
@@ -322,18 +369,23 @@ IP=$IPOPTS
if [ -n "${NEW_DEVICE}" ]; then
DEVICE="${NEW_DEVICE}"
fi
- ;;
- esac
- done
-
- # source ipconfig output
- if [ -n "${DEVICE}" ]; then
- # source specific bootdevice
- . /tmp/net-${DEVICE}.conf
- else
- # source any interface as not exaclty specified
- . /tmp/net-*.conf
- fi
+ ;;
+ esac
+done
+
+# source ipconfig output
+if [ -n "${DEVICE}" ]; then
+ . /tmp/net-${DEVICE}.conf
+ DEVICECFG="/tmp/net-${DEVICE}"
+ 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
}
#####################################################################
diff --git a/client/boot-tools/clientstructure/etc/ssh/sshd_config b/client/boot-tools/clientstructure/etc/ssh/sshd_config
index ea0303b3..80900684 100644
--- a/client/boot-tools/clientstructure/etc/ssh/sshd_config
+++ b/client/boot-tools/clientstructure/etc/ssh/sshd_config
@@ -11,7 +11,7 @@ Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
-UsePrivilegeSeparation yes
+UsePrivilegeSeparation no
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
diff --git a/client/boot-tools/kernelParameterOG.es.txt b/client/boot-tools/kernelParameterOG.es.txt
index 4ec96c8a..66d7fcfa 100644
--- a/client/boot-tools/kernelParameterOG.es.txt
+++ b/client/boot-tools/kernelParameterOG.es.txt
@@ -28,7 +28,10 @@ ip=
og2nd=sqfs|img
#protocolo de acceso al og2nd.
- ogprotocol=smb|nfs
+ ogprotocol=smb|nfs|local
+ #local para cdrom, usb a partir de la iso. labelparticionusbUNETBOOTIN=ogClient
+ #loacl tambien para fichero.sqfs en cache.
+
# modo de funcionalidad del browser con shell root activa.
ogactiveadmin=true|false
diff --git a/client/boot-tools/ogClientManager.lib b/client/boot-tools/ogClientManager.lib
index 438ee56a..9f56ec4a 100644
--- a/client/boot-tools/ogClientManager.lib
+++ b/client/boot-tools/ogClientManager.lib
@@ -385,6 +385,117 @@ rm /tmp/id_dsa.pub
}
+
+function ogCrearISO {
+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
+#}
+
+
+}
+
+function ogprobarISO {
+#/tmp/iso
+qemu -m 256 -boot d -cdrom ogClient.iso
+}
+
+
+
+
+
+
+
ogClientConfpxe()
{
################## DEJAMOS FICHERO DE EJEMPLOS PARA:
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib
index 424bee3a..8731580f 100755
--- a/client/engine/Boot.lib
+++ b/client/engine/Boot.lib
@@ -68,9 +68,21 @@ case "$TYPE" in
[ -z "$LOADER" ] && ogRaiseError $OG_ERR_NOTOS && return $?
# Activar la partición y copiar Grub4DOS.
ogSetPartitionActive $1 $2
- cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
- #kexec -l $MNTDIR/grub.exe --append=--config-file="find --set-root /$LOADER; chainloader /$LOADER; tpm --init"
- kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
+ #FIXME: activar seguimiento inicio sesion XP con grub4dos
+ #if `ogGetOsVersion $1 $2 | grep "XP" > /dev/null`
+ #then
+ # dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3
+ # dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3
+ # dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3
+ # ogLoadHiveWindows $1 $2
+ # ogHiveNTRunMachine "cmd /c del c:\ogboot.* " ogcleanboot
+ # ogUpdateHiveWindows
+ # reboot
+ #else
+ cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
+ ##kexec -l $MNTDIR/grub.exe --append=--config-file="find --set-root /$LOADER; chainloader /$LOADER; tpm --init"
+ kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
+ #fi
;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2"
return $?
@@ -83,54 +95,6 @@ kexec -e
#/**
-# ogGetRegistryValue path_mountpoint str_registrytype str_valuename
-#@brief Devuelve el dato de un valor del registro de Windows.
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_registrytype tipo de registro a leer
-#@param str_valuename valor de registro
-#@return str_valuedata - valor de la clave.
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo.
-#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@note registrytype = { default, sam, security, software, system, components }
-#@warning Requisitos: chntpw, awk
-#@warning La partición de Windows debe estar montada previamente.
-#@version 0.9 - Adaptación para OpenGNSys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009-09-11
-#*/ ##
-function ogGetRegistryValue ()
-{
-# Variables locales.
-local FILE FILENT FILEXP
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key"
- return
-fi
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-
-# Camino del fichero de registro en NT/2000 o XP/Vista/7.
-FILENT=$(ogGetPath "/$1/winnt/system32/config/$2")
-[ -f $FILENT ] && FILE="$FILENT"
-FILEXP=$(ogGetPath "/$1/windows/system32/config/$2")
-[ -f $FLEHXP ] && FILE="$FILEXP"
-[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $?
-
-# Devolver el dato del valor de registro.
-# /* (comentario Doxygen)
-chntpw $FILE << FIN 2>/dev/null | awk '/> Value/ {getline;print $0;}'
-cd ${3%\\*}
-cat ${3##*\\}
-q
-FIN
-# (comentario Doxygen) */
-}
-
-
-#/**
# ogGetWindowsName int_ndisk int_npartition
#@brief Muestra el nombre del equipo en el registro de Windows.
#@param int_ndisk nº de orden del disco
@@ -167,51 +131,6 @@ ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerN
#/**
-# ogListRegistryKeys path_mountpoint str_registrytype str_key
-#@brief Lista los nombres de claves de una determinada clave del registro de Windows.
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_registrytype tipo de registro a leer
-#@param str_key clave de registro
-#@return str_key ... - lista de claves de registro
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
-#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@note registrytype = { default, sam, security, software, system, components }
-#@warning Requisitos: chntpw, awk
-#@warning La partición de Windows debe estar montada previamente.
-#@version 0.9 - Adaptación para OpenGNSys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009-09-23
-#*/ ##
-function ogListRegistryKeys ()
-{
-# Variables locales.
-local FILE FILENT FILEXP
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key"
- return
-fi
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-
-# Camino del fichero de registro en NT/2000 o XP/Vista/7.
-FILENT=$(ogGetPath "/$1/winnt/system32/config/$2")
-[ -f $FILENT ] && FILE="$FILENT"
-FILEXP=$(ogGetPath "/$1/windows/system32/config/$2")
-[ -f $FLEHXP ] && FILE="$FILEXP"
-[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $?
-
-# Devolver la lista de claves de registro.
-chntpw $FILE << FIN 2>/dev/null | awk 'BEGIN {FS="[<>]"} $1~/^ $/ {print $2}'
-ls $3
-q
-FIN
-}
-
-
-#/**
# ogLinuxBootParameters int_ndisk int_npartition
#@brief Muestra los parámetros de arranque de un sistema de archivos Linux.
#@param int_ndisk nº de orden del disco
@@ -273,55 +192,6 @@ awk 'BEGIN {cont=-1;}
}
-
-#/**
-# ogSetRegistryValue path_mountpoint str_registrytype str_valuename str_valuedata
-#@brief Establece el dato asociado a un valor del registro de Windows.
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_registrytype tipo de registro
-#@param str_valuename nombre del valor de registro
-#@param str_valuedata dato del valor de registro
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo.
-#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@note registrytype = { default, sam, security, software, system, components }
-#@warning Requisitos: chntpw, awk
-#@warning La partición de Windows debe estar montada previamente.
-#@version 0.9 - Adaptación para OpenGNSys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009-09-24
-#*/ ##
-function ogSetRegistryValue ()
-{
-# Variables locales.
-local FILE FILENT FILEXP
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key"
- return
-fi
-# Error si no se reciben 4 parámetros.
-[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-
-# Camino del fichero de registro en NT/2000 o XP/Vista/7.
-FILENT=$(ogGetPath "/$1/winnt/system32/config/$2")
-[ -f $FILENT ] && FILE="$FILENT"
-FILEXP=$(ogGetPath "/$1/windows/system32/config/$2")
-[ -f $FLEHXP ] && FILE="$FILEXP"
-[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $?
-
-# Cambiar el dato del valor de registro.
-chntpw $FILE << FIN &>/dev/null
-ed $3
-$4
-q
-y
-FIN
-}
-
-
#/**
# ogSetWindowsName int_ndisk int_npartition str_name
#@brief Establece el nombre del equipo en el registro de Windows.
@@ -403,7 +273,7 @@ ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlog
#/**
-# ogNewMbrXP int_ndisk
+# ogBootMbrXP int_ndisk
#@brief Genera un nuevo Master Boot Record en el disco duro indicado, compatible con los SO tipo Windows
#@param int_ndisk nº de orden del disco
#@return salida del programa my-sys
@@ -414,7 +284,7 @@ ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlog
#@date 2009-09-24
#*/ ##
-function ogNewMbrXP ()
+function ogBootMbrXP ()
{
# Variables locales.
local PART
@@ -433,3 +303,279 @@ ms-sys -z -f $PART
ms-sys -m -f $PART
}
+
+#/**
+# ogBootMbrGeneric int_ndisk
+#@brief Genera un nuevo Codigo de arranque en el MBR del disco indicado, compatible con los SO tipo Windows, Linux.
+#@param int_ndisk nº de orden del disco
+#@return salida del programa my-sys
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Tipo de partición desconocido o no se puede montar.
+#@version 0.9 - Adaptación a OpenGNSys.
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2009-09-24
+#*/ ##
+
+function ogBootMbrGeneric ()
+{
+# Variables locales.
+local PART
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk " \
+ "$FUNCNAME 1 "
+ return
+fi
+# Error si no se reciben 1 parámetros.
+[ $# == 1 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+PART="$(ogDiskToDev $1)" || return $(ogRaiseError $OG_ERR_NOTFOUND; echo $?)
+ms-sys -z -f $PART
+ms-sys -s -f $PART
+}
+
+
+
+
+#/**
+# ogFixBootSector int_ndisk int_parition
+#@brief Corrige el boot sector de una particion activa para MS windows/dos -fat-ntfs
+#@param int_ndisk nº de orden del disco
+#@param int_partition nº de particion
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@version 0.9 - Adaptación a OpenGNSys.
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2009-09-24
+#*/ ##
+
+function ogFixBootSector ()
+{
+# Variables locales.
+local PART DISK FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition " \
+ "$FUNCNAME 1 1 "
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+#TODO, solo si la particion existe
+#TODO, solo si es ntfs o fat
+PARTYPE=$(ogGetPartitionId $1 $2)
+case $PARTYPE in
+ 1|4|6|7|b|c|e|f)
+ ;;
+ *)
+ return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
+ ;;
+esac
+
+ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
+
+#Preparando instruccion
+let DISK=$1-1
+PART=$2
+FILE=/tmp/temporal
+cat > $FILE <<EOF
+disk=$DISK
+main_part=$PART
+fix_first_sector=yes
+EOF
+
+spartlnx.run -cui -nm -a -f $FILE
+
+}
+
+
+
+#/**
+# ogWindowsBootParameters int_ndisk int_parition
+#@brief Configura el gestor de arranque de windows 7 / vista / XP / 2000
+#@param int_ndisk nº de orden del disco
+#@param int_partition nº de particion
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@version 0.9 - Integración desde EAC para OpenGNSys.
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2009-09-24
+#@version 1.0.1 - Adapatacion para OpenGnsys.
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2011-05-20
+#*/ ##
+
+
+function ogWindowsBootParameters ()
+{
+# Variables locales.
+local PART DISK FILE
+#Preparando variables adaptadas a sintaxis windows.
+let DISK=$1-1
+PART=$2
+FILE=/tmp/temporal
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition " \
+ "$FUNCNAME 1 1 "
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+ogDiskToDev $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
+
+VERSION=$(ogGetOsVersion $1 $2)
+
+if echo "$VERSION" | grep "Windows 7"
+then
+ WINVER="Windows 7"
+elif echo "$VERSION" | grep "Windows Seven"
+then
+ WINVER="Windows Vista"
+elif echo "$VERSION" | grep "XP"
+then
+ MOUNT=$(ogMount $1 $2)
+ [ -f ${MOUNT}/boot.ini ] || return $(ogRaiseError $OG_ERR_NOTOS; echo $?)
+ cat ${MOUNT}/boot.ini | sed s/partition\([0-9]\)/partition\($PART\)/g | sed s/rdisk\([0-9]\)/rdisk\($DISK\)/g > ${MOUNT}/tmp.boot.ini; mv ${MOUNT}/tmp.boot.ini ${MOUNT}/boot.ini
+ return 0
+else
+ return $(ogRaiseError $OG_ERR_NOTOS; echo $?)
+fi
+
+ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
+
+
+#Preparando instruccion Windows Resume Application
+cat > $FILE <<EOF
+boot_disk=$DISK
+boot_main_part=$PART
+disk=$DISK
+main_part=$PART
+boot_entry=Windows Resume Application
+EOF
+spartlnx.run -cui -nm -w -f $FILE
+
+#Preparando instruccion tipo windows
+cat > $FILE <<EOF
+boot_disk=$DISK
+boot_main_part=$PART
+disk=$DISK
+main_part=$PART
+boot_entry=$WINVER
+EOF
+spartlnx.run -cui -nm -w -f $FILE
+
+##Preparando instruccion Ramdisk Options
+#cat > $FILE <<EOF
+#boot_disk=$DISK
+#boot_main_part=$PART
+#disk=$DISK
+#main_part=$PART
+#boot_entry=Ramdisk Options
+#EOF
+#spartlnx.run -cui -nm -w -f $FILE
+
+#Preparando instruccion Windows Boot Manager
+cat > $FILE <<EOF
+boot_disk=$DISK
+boot_main_part=$PART
+disk=$DISK
+main_part=$PART
+boot_entry=Windows Boot Manager
+EOF
+spartlnx.run -cui -nm -w -f $FILE
+
+#Preparando instruccion Herramienta de diagnóstico de memoria de Windows
+#cat > $FILE <<EOF
+#boot_disk=$DISK
+#boot_main_part=$PART
+#disk=$DISK
+#main_part=$PART
+#boot_entry=Herramienta de diagnóstico de memoria de Windows
+#EOF
+#spartlnx.run -cui -nm -w -f $FILE
+
+}
+
+
+# ogWindowsRegisterPartition int_ndisk int_partiton str_volume int_disk int_partition
+#@brief Registra una partición en windows con un determinado volumen.
+#@param int_ndisk nº de orden del disco a registrar
+#@param int_partition nº de particion a registrar
+#@param str_volumen volumen a resgistar
+#@param int_ndisk_windows nº de orden del disco donde esta windows
+#@param int_partition_windows nº de particion donde esta windows
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@version 0.9 - Adaptación a OpenGNSys.
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2009-09-24
+#*/ ##
+
+
+function ogWindowsRegisterPartition ()
+{
+# Variables locales.
+local PART DISK FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk_TO_registre int_partition_TO_registre str_NewVolume int_disk int_parition " \
+ "$FUNCNAME 1 1 c: 1 1"
+ return
+fi
+
+# Error si no se reciben 5 parámetros.
+[ $# == 5 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+REGISTREDDISK=$1
+REGISTREDPART=$2
+REGISTREDVOL=$(echo $3 | cut -c1 | tr '[:lower:]' '[:upper:]')
+DISK=$4
+PART=$5
+FILE=/tmp/temporal
+
+ogDiskToDev $REGISTREDDISK $REGISTREDPART || return $(ogRaiseError $OG_ERR_PARTITION "particion a registrar "; echo $?)
+ogDiskToDev $DISK $PART || return $(ogRaiseError $OG_ERR_PARTITION "particion de windows"; echo $?)
+
+ogGetOsType $DISK $PART | grep "Windows" || return $(ogRaiseError $OG_ERR_NOTOS "no es windows"; echo $?)
+
+VERSION=$(ogGetOsVersion $DISK $PART)
+
+#Systemroot
+
+if ogGetPath $DISK $PART WINDOWS
+then
+ SYSTEMROOT="Windows"
+elif ogGetPath $DISK $PART WINNT
+then
+ SYSTEMROOT="winnt"
+else
+ return $(ogRaiseError $OG_ERR_NOTOS; echo $?)
+fi
+
+ogUnmount $DISK $PART
+let DISK=$DISK-1
+let REGISTREDDISK=$REGISTREDDISK-1
+#Preparando instruccion Windows Boot Manager
+cat > $FILE <<EOF
+windows_disk=$DISK
+windows_main_part=$PART
+windows_dir=$SYSTEMROOT
+disk=$REGISTREDDISK
+main_part=$REGISTREDPART
+;ext_part
+part_letter=$REGISTREDVOL
+EOF
+spartlnx.run -cui -nm -u -f $FILE
+}
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index 8f7fd0d7..7d4f0642 100755
--- a/client/engine/Disk.lib
+++ b/client/engine/Disk.lib
@@ -332,6 +332,31 @@ sfdisk -s $DISK
#/**
+# ogGetDiskType path_device
+#@brief Muestra el tipo de disco (real, RAID, meta-disco, etc.).
+#@warning Función en pruebas
+#*/ ##
+function ogGetDiskType ()
+{
+local DEV MAJOR TYPE
+
+# Obtener el driver del dispositivo de bloques.
+[ -b "$1" ] || ogRaiseError $OG_ERR_FORMAT || return $?
+DEV=${1#/dev/}
+MAJOR=$(awk -v D="$DEV" '{if ($4==D) print $1;}' /proc/partitions)
+TYPE=$(awk -v D=$MAJOR '/Block/ {bl=1} {if ($1==D&&bl) print toupper($2)}' /proc/devices)
+# Devolver mnemónico del driver de dispositivo.
+case "$TYPE" in
+ SD) TYPE="DISK" ;;
+ SR|IDE*) TYPE="CDROM" ;; # FIXME Comprobar discos IDE.
+ MD|CCISS*) TYPE="RAID" ;;
+ DEVICE-MAPPER) TYPE="MAPPER" ;; # FIXME Comprobar LVM y RAID.
+esac
+echo $TYPE
+}
+
+
+#/**
# ogGetPartitionActive int_ndisk
#@brief Muestra que particion de un disco esta marcada como de activa.
#@param int_ndisk nº de orden del disco
diff --git a/client/engine/File.lib b/client/engine/File.lib
index bb91a6d1..52b48075 100755
--- a/client/engine/File.lib
+++ b/client/engine/File.lib
@@ -259,11 +259,14 @@ ogGetPath $PARENT
# ogIsNewerFile [ str_repo | int_ndisk int_npart ] path_source [ str_repo | int_ndisk int_npart ] path_target
#@brief Metafunción que indica se un fichero es más nuevo que otro.
#@see ogGetPath
-#@return int_code Código de salida
+#@return Código de salida: 0 - nuevo, 1 - antiguo o error
#@warning Deben existir tanto el fichero origen como el destino.
#@version 0.9.2 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-07-24
+#@version 1.0.1 - Devolver falso en caso de error.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-18
#*/ ##
function ogIsNewerFile ()
{
@@ -289,9 +292,9 @@ case "$1" in
shift 2 ;;
esac
# Comprobar que existen los ficheros origen y destino.
-[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $?
+[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return 1
TARGET=$(ogGetPath "$@")
-[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return $?
+[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return 1
# Devolver si el primer fichero se ha modificado después que el segundo.
test "$SOURCE" -nt "$TARGET"
}
diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib
index b54854b3..ca4486b0 100755
--- a/client/engine/FileSystem.lib
+++ b/client/engine/FileSystem.lib
@@ -367,10 +367,13 @@ mount | awk -v P=$PART '{if ($1==P) {print $3}}'
#@brief Comprueba si un sistema de archivos está formateado.
#@param int_ndisk nº de orden del disco o volumen.
#@param int_npartition nº de orden del sistema de archivos.
-#@return int_code Código de salida
+#@return Código de salida: 0 - formateado, 1 - sin formato o error.
#@version 0.91 - Adaptación inicial para comprobar que existe caché.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-03-18
+#@version 1.0.1 - Devolver falso en caso de error.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-18
#*/ ##
function ogIsFormated ()
{
@@ -381,10 +384,10 @@ if [ "$*" == "help" ]; then
"if $FUNCNAME 1 1; then ... ; fi"
return
fi
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Falso, en caso de error.
+[ $# == 2 ] || return 1
-DISK=$(ogDiskToDev "$1")
+DISK=$(ogDiskToDev "$1") || return 1
test -n "$(parted -sm $DISK print 2>/dev/null | \
awk -F: -v fs=$2 '{if ($1==fs) print $5}')"
}
@@ -395,10 +398,13 @@ test -n "$(parted -sm $DISK print 2>/dev/null | \
#@brief Comprueba si un sistema de archivos está montado.
#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
-#@return Código de salida: 0 - sin montar, 1 - montado.
+#@return Código de salida: 0 - montado, 1 - sin montar o error.
#@version 0.9 - Primera versión para OpenGNSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-15
+#@version 1.0.1 - Devolver falso en caso de error.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-18
#*/ ##
function ogIsMounted ()
{
@@ -408,8 +414,8 @@ if [ "$*" == "help" ]; then
"if $FUNCNAME 1 1; then ... ; fi"
return
fi
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Falso, en caso de error.
+[ $# == 2 ] || return 1
test -n "$(ogGetMountPoint $1 $2)"
}
@@ -420,11 +426,14 @@ test -n "$(ogGetMountPoint $1 $2)"
#@brief Comprueba si una partición está bloqueada por una operación de uso exclusivo.
#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
-#@return Código de salida: 0 - sin bloquear, 1 - bloqueada.
+#@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error.
#@note El fichero de bloqueo se localiza en \c /var/lock/part, siendo \c part el dispositivo de la partición, sustituyendo el carácter "/" por "-".
#@version 0.9 - Primera versión para OpenGNSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-03
+#@version 1.0.1 - Devolver falso en caso de error.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-18
#*/ ##
function ogIsLocked ()
{
@@ -437,11 +446,11 @@ if [ "$*" == "help" ]; then
"if $FUNCNAME 1 1; then ... ; fi"
return
fi
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Falso, en caso de error.
+[ $# == 2 ] || return 1
# Obtener partición.
-PART="$(ogDiskToDev $1 $2)" || return $?
+PART="$(ogDiskToDev $1 $2)" || return 1
# Comprobar existencia del fichero de bloqueo.
LOCKFILE="/var/lock/lock${PART//\//-}"
diff --git a/client/engine/Image.lib b/client/engine/Image.lib
index 399e3da1..a4b82b02 100755
--- a/client/engine/Image.lib
+++ b/client/engine/Image.lib
@@ -387,12 +387,15 @@ dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IM
#@brief Comprueba si una imagen está bloqueada para uso exclusivo.
#@param str_repo repositorio de imágenes (opcional)
#@param path_image camino de la imagen (sin extensión)
-#@return Código de salida: 0 - sin bloquear, 1 - bloqueada.
+#@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error.
#@note repo = { REPO, CACHE }
#@exception OG_ERR_FORMAT formato incorrecto.
#@version 1.0 - Adaptación a OpenGnSys 1.0
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011/03/10
+#@version 1.0.1 - Devolver falso en caso de error.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-18
#*/ ##
function ogIsImageLocked ()
{
@@ -404,7 +407,7 @@ if [ "$*" == "help" ]; then
return
fi
# Error si no se reciben 1 o 2 parámetros.
-[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+[ $# -lt 1 -o $# -gt 2 ] && return 1
# Comprobar si existe el fichero de bloqueo.
test -n "$(ogGetPath $@.lock)"
@@ -453,10 +456,12 @@ touch $IMGDIR/$(basename "${!#}").lock
#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
#@return (por determinar)
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados.
-#@exception OG_ERR_LOCKED partición bloqueada por otra operación.
-#@exception OG_ERR_IMAGE error al restaurar la imagen del sistema.
+#@exception OG_ERR_FORMAT 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados.
+#@exception OG_ERR_PARTITION 3 # Error en partición de disco.
+#@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.
#@todo Comprobar incongruencias partición-imagen, control de errores, definir parámetros, caché/repositorio, etc.
#@version 0.1 - Integracion para Opengnsys - HIDRA:RestaurarImagen{EXT3, NTFS}.sh; EAC: RestorePartitionFromImage() en Deploy.lib
#@author Ramon Gomez, ETSII Universidad de Sevilla
@@ -466,6 +471,12 @@ touch $IMGDIR/$(basename "${!#}").lock
#@version 0.9 - Primera version muy en pruebas para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/09/10
+#@version 1.0 - generacion sintaxis de restauracion
+#@author Antonio J. Doblas Viso, Universidad de Malaga
+#@date 2011/02/01
+#@version 1.0.1 - Control errores, tamaño particion, fichero-imagen
+#@author Antonio J. Doblas Viso, Universidad de Malaga
+#@date 2011/05/11
#*/ ##
function ogRestoreImage ()
{
@@ -479,21 +490,26 @@ if [ "$*" == "help" ]; then
return
fi
# Error si no se reciben 4 parámetros.
-[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+[ $# -lt 4 ] && return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
# Procesar parámetros.
-PART="$(ogDiskToDev "$3" "$4")" || return $?
+PART="$(ogDiskToDev $3 $4)" || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?)
#IMGTYPE=$(ogGetImageType "$1" "$2")
IMGTYPE=img
-IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE")
-[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $?
+IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE")
+[ -r "$IMGFILE" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?)
+# comprobamos consistencia de la imagen
+ogGetImageInfo $IMGFILE >/dev/null || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?)
+
# Error si la imagen no cabe en la particion.
-IMGSIZE=$(ogGetImageSize "$1" "$2")
-PARTSIZE=$(ogGetPartitionSize $3 $4)
+IMGSIZE=$(ogGetImageSize "$1" "$2") || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?)
+#TODO:
+#Si la particion no esta formateado o tiene problemas formateamos
+ogMount $3 $4 || ogFormat $3 $4
+PARTSIZE=$(parted `ogDiskToDev $3 $4` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB)
if [ $IMGSIZE -gt $PARTSIZE ]; then
- ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE"
+ ogRaiseError $OG_ERR_IMGSIZEPARTITION " $PARTSIZE < $IMGSIZE"
return $?
fi
-
# Comprobar el bloqueo de la imagen y de la partición.
if ogIsImageLocked "$IMGFILE"; then
ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2.$IMGTYPE"
@@ -504,8 +520,8 @@ if ogIsLocked $3 $4; then
return $?
fi
# Desmontar y bloquear partición.
-ogUnmount $3 $4 2>/dev/null || return $?
-ogLock $3 $4 || return $?
+ogUnmount $3 $4 2>/dev/null || return $(ogRaiseError $OG_ERR_PARTITION " $3 $4"; echo $?)
+ogLock $3 $4 || return $(ogRaiseError $OG_ERR_PARTITION " $3 $4"; echo $?)
trap "ogUnlock $3 $4" 1 2 3 6 9
# Restaurar según el tipo de imagen.
@@ -677,7 +693,7 @@ then
then
TOOLS=PARTCLONE
FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}')
- echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1048576 || SIZEFACTOR=1024
+ echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1000000 || SIZEFACTOR=1024
SIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{gsub(/\: /,"\n"); printf "%d\n", $11*FACTOR;}')
IMGDETECT="TRUE"
fi
@@ -751,8 +767,8 @@ local IMGFILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME testing path_dir str_image int_ndisk int_npart" \
- "$FUNCNAME 1 1 REPO /aula1/winxp ==> 5642158"
+ ogHelp "$FUNCNAME" "$FUNCNAME REPO|CACHE /str_image" \
+ "$FUNCNAME REPO /aula1/winxp ==> 5642158"
return
fi
# Error si no se reciben menos de 2 parámetros.
diff --git a/client/engine/PostConfEAC.lib b/client/engine/PostConfEAC.lib
new file mode 100755
index 00000000..642b9118
--- /dev/null
+++ b/client/engine/PostConfEAC.lib
@@ -0,0 +1,575 @@
+#!/bin/bash
+
+# ogLoadHiveWindows int_ndisk int_partiton
+#@brief Localiza los hive del registro de windows (de sistema y usuarios)
+#@param int_ndisk nº de orden del disco
+#@param int_partition nº de particion
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@version 0.9 - Adaptación a OpenGNSys.
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2009-09-24
+#*/ ##
+
+
+function ogLoadHiveWindows () {
+# Variables locales.
+local PART DISK
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition" \
+ "$FUNCNAME 1 1 "
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+DISK=$1; PART=$2;
+
+#Comprobaciones redundantes: borrar"
+#ogDiskToDev $DISK $PART || return $(ogRaiseError $OG_ERR_PARTITION "particion de windows no detectada"; echo $?)
+#ogGetOsType $DISK $PART | grep "Windows" || return $(ogRaiseError $OG_ERR_NOTOS "no es windows"; echo $?)
+#VERSION=$(ogGetOsVersion $DISK $PART)
+#Fin Comprobaciones redundantes: borrar"
+
+if ogGetPath $DISK $PART WINDOWS
+then
+ SYSTEMROOT="Windows"
+elif ogGetPath $DISK $PART WINNT
+then
+ SYSTEMROOT="winnt"
+else
+ return $(ogRaiseError $OG_ERR_NOTOS "version windows no detectada"; echo $?)
+fi
+
+hiveSAM=$(ogGetPath $DISK $PART /${SYSTEMROOT}/system32/config/SAM) && export hiveSAM || return $(ogRaiseError $OG_ERR_NOTOS " hive SAM no detectada"; echo $?)
+hiveSYSTEM=$(ogGetPath $DISK $PART /${SYSTEMROOT}/system32/config/system) && export hiveSYSTEM || return $(ogRaiseError $OG_ERR_NOTOS "hive SYSTEM no detectada"; echo $?)
+hiveSOFTWARE=$(ogGetPath $DISK $PART /${SYSTEMROOT}/system32/config/software) && export hiveSOFTWARE || return $(ogRaiseError $OG_ERR_NOTOS "hive SOFTWARE no detectada"; echo $?)
+export TEMPhive=/tmp/tmpregistry
+
+## borrar elementos de la primera integracion
+#export particion=`ogMount $DISK $PART`
+#mkfifo pipe 2>/dev/null
+#declare -i count
+#declare -A HivePathUser
+#count=3
+# fin borrar elementos de la primera integracion
+
+declare -i COUNT
+COUNT=3
+BASEHOMEDIR=$(ogGetPath 1 1 /"Documents and Settings")
+TMPUSERFILE="/tmp/WuserRegAndDAT.tmp"
+find "$BASEHOMEDIR/" -type f -name NTUSER.DAT > $TMPUSERFILE
+LISTUSERS=$(drbl-chntpw -l $hiveSAM | grep RID | awk -F"<" '{print $2}' | awk -F">" '{print $1}')
+#echo "$BASEHOMEDIR" $LISTUSERS
+for user in $LISTUSERS
+do
+ # borrar elementos de la primera integracion.
+ #if find ${particion}/ -type f -name NTUSER.DAT > pipe| cat pipe | grep $user > /tmp/path.txt.$count
+ #then
+ #echo pefil de $user encontrado, para utilizar este usuario con funciones utilizar id_hive= $count o \$usuario
+ #read camino < /tmp/path.txt.$count
+ #echo $camino | sed -e 's/ /\\ /g' > /tmp/path.txt.$count
+ #camino2=$(echo $camino | sed -e 's/ /\\ /g')
+ #echo $camino2 | sed -e 's/\\/\\\\/g' > /tmp/path.txt.$count
+ #export `echo $user=hiveUSER$count`
+ #export `echo hiveUSER$count`="$camino2"
+ #count=${count}+1
+ #fiecho $user
+ # Fin borrar elementos de la primera integracion.
+
+ # Comprobamos que el usuario registrado tiene .DAT
+ if HOMEDIR=$(cat $TMPUSERFILE | grep -w $user)
+ then
+ #echo "$user exportamos los usuarios de windows como variables, y como valor hiveUSERX; donde la X es 3 4 5 6 ... X"
+ export `echo $user=hiveUSER$COUNT`
+ #echo "$user exportamos la variable hiveUSERX con el valor del home de la variable-usuario_windows"
+ ##export `echo hiveUSER$COUNT`="$(echo $HOMEDIR | sed -e 's/ /\\ /'g | sed -e 's/\\/\\\\/g')"
+ export `echo hiveUSER$COUNT`="$(echo $HOMEDIR)"
+ #echo " estas variables \$USUARIO -> Identificador del HIVE ; \${!USUARIO} -> path del HIVE "
+ COUNT=${COUNT}+1
+ fi
+
+done
+COUNT=0
+}
+
+
+# ogUpdateHiveWindows
+#@brief Actualiza los hive de windows.
+#@param int_ndisk
+#@param int_partition
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@version 0.9 - Adaptación a OpenGNSys.
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2009-09-24
+#*/ ##
+
+
+function ogUpdateHiveWindows (){
+# Variables locales.
+local PART DISK FILE
+
+#TODO detectar llamada a ogLoadHiveWindows
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME " \
+ "$FUNCNAME "
+ return
+fi
+
+echo drbl-chntpw -f $TEMPhive $hiveSAM $hiveSYSTEM $hiveSOFTWARE \"${hiveUSER3}\" \"${hiveUSER4}\" \"${hiveUSER5}\" \"${hiveUSER6}\" \"${hiveUSER7}\" \"${hiveUSER8}\" \"${hiveUSER9}\" > /tmp/run.sh
+cat /tmp/run.sh; sh /tmp/run.sh; rm -fr $TEMPhive; rm /tmp/run.sh
+
+unset hiveSAM hiveSYSTEM hiveSOFTWARE TEMPhive hiveUSER3 hiveUSER4 hiveUSER5 hiveUSER6 hiveUSER7 hiveUSER8 hiveUSER9
+
+
+}
+
+
+
+function ogHiveNTRunMachine () {
+#echo sintaxis: PathScripts idScripts
+#echo ejemplo: c:\\\\WINDOSWS\\\\crearusuarios.bat scripts1
+#echo IMPORTANTE: el path debe llevar dos barras \\, pero como se deben 'escapar' debes poner cuatro \\\\
+#echo "identifica 0=$hiveSAM 1=$hiveSystem 2=$hiveSoftware 3=$HiveUser3"
+
+local PART DISK FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME PathScripts|command keyName " \
+ "$FUNCNAME c:\\\\Windows\\\\crearusuarios.cmd scripts_crearUsuarios "\
+ "$FUNCNAME "cmd /c del c:\ogboot.*" ogcleanboot "\
+ "$FUNCNAME Requiere la previa ejecución de ogLoadHive int_disk int_part"\
+ "$FUNCNAME Despues requiere el ogUpdateHive"
+ return
+fi
+
+
+# Error si no se reciben al menos 1 parámetros.
+[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+
+cat >> $TEMPhive << EOF
+h 2
+cd \Microsoft\Windows\CurrentVersion\Run
+nv 1 $2
+ed $2
+$1
+EOF
+#ogGetRegistryValue /mnt/sda1 software '\Microsoft\Windows\CurrentVersion\Run\og3'
+}
+
+function ogNTPolUserOn () {
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME id_hive_user " \
+ "$FUNCNAME NombreUsuario"\
+ "$FUNCNAME "
+ return
+fi
+
+# TODO: error si no se ha llamado previamente a ogLoadHiveWindows
+[ -n $hiveSAM ] || return $(ogRaiseError $OG_ERR_FORMAT "se debe utilizar primero la utilidad ogLoadHiveWindows"; echo $?)
+
+# TODO: error si el usuario no tiene cuenta en windows.
+drbl-chntpw -l $hiveSAM | grep RID | grep -w $1 || return $(ogRaiseError $OG_ERR_FORMAT "el usuario $1 no tiene cuenta en este windows: Compruebe mayusculas o minusculas"; echo $?)
+
+# TODO: error si no el usario no no tiene HIVE asociado.
+[ -n "${!1}" ] || return $(ogRaiseError $OG_ERR_FORMAT "el usuario no tiene hive creado"; echo $?)
+
+
+HIVEID=$(echo ${!1} | tr -d "hiveUSER")
+
+
+#echo "IMPORTANTE: la variable HiveUser3=/mnt/windows/Document/\ and/\ Seeting\alumnmos\NTUSER.dat"
+echo $HIVEID
+#cp /var/EAC/admin/utilswin/Fondo.BMP ${particion}/WINDOWS/
+
+cat >> $TEMPhive << EOF
+h $HIVEID
+cd \Control Panel\Desktop
+ed Wallpaper
+C:\\WINDOWS\\fondo.bmp
+
+cd \Software\Microsoft\Windows\CurrentVersion\Policies
+nk Explorer
+cd Explorer
+
+nv 4 NoDesktop
+ed NoDesktop
+1
+
+nv 4 NoSimpleStartMenu
+ed NoSimpleStartMenu
+1
+nv 4 NoWindowsUpdate
+ed NoWindowsUpdate
+1
+
+nv 4 NoSMConfigurePrograms
+ed NoSMConfigurePrograms
+1
+
+nv 4 NoChangeStartMenu
+ed NoChangeStartMenu
+1
+
+nv 4 Intellimenus
+ed Intellimenus
+1
+
+nv 4 NoRun
+ed NoRun
+1
+
+nv 4 NoRecentDocsHistory
+ed NoRecentDocsHistory
+1
+EOF
+}
+
+
+
+
+
+##########################################################
+##########################################################
+#####librerias de PostConfiguracion v0.1para Advanced Deploy enViorenment###########
+# Liberado bajo licencia GPL <http://www.gnu.org/licenses/gpl.html>################
+############# 2008 Antonio Jes�s Doblas Viso adv@uma.es ##########################
+########### Universidad de Malaga (Spain)############################
+##########################################################
+
+
+
+
+
+function NTChangeName () {
+if [ $# = 0 ]
+then
+echo sintaxis: NTChangeNAME str_$var
+echo ejemplos: NTCHangeName adi${IPcuatro}-xp
+fi
+cat >> $temporal << EOF
+h 1
+ed ControlSet001\Control\ComputerName\ComputerName\ComputerName
+$1
+ed ControlSet001\Services\Tcpip\Parameters\Hostname
+$1
+ed ControlSet001\Services\Tcpip\Parameters\NV Hostname
+$1
+h 2
+cd \Microsoft\Windows NT\CurrentVersion\Winlogon
+ed DefaultDomainName
+$1
+EOF
+}
+
+
+
+function NTSetGroupName () {
+if [ $# = 0 ]
+then
+echo sintaxis: NTSetGroupName str_$var
+echo ejemplos: NTSetGroupName adi
+fi
+cat >> $temporal << EOF
+h 2
+ed \Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName
+$1
+EOF
+}
+
+
+function NTSetOwner (){
+if [ $# = 0 ]
+then
+echo sintaxis: NtSetOwner str_propietario str_organizacion
+echo ejemplos: NTSetOwner eu\ politecnica universidad\ de\ malaga
+fi
+cat >> $temporal << EOF
+h 2
+ed \Microsoft\Windows NT\CurrentVersion\RegisteredOwner
+$1
+ed \Microsoft\Windows NT\CurrentVersion\RegisteredOrganization
+$2
+EOF
+}
+
+
+function NTAutoLogon (){
+if [ $# = 0 ]
+then
+echo sintaxis: Int_Activar Int_nves str_usuario str_passwd str_equipo
+echo ejemplos: 1 2 administrador 3451 $equipo
+echo IMPORTANTE: cuando AutoLogonCount llegue a 0, activa el AutoAdminLogon a 0. Pero no borra los valores de DefaultPassword
+return 2
+fi
+echo la pass es $4
+export temporal=/tmp/tmpregistry
+cat >> $temporal << EOF
+hive 2
+cd \Microsoft\Windows NT\CurrentVersion\Winlogon
+nv 1 AutoAdminLogon
+ed AutoAdminLogon
+$1
+nv 1 AutoLogonCount
+ed AutoLogonCount
+$2
+nv 1 DefaultUserName
+ed DefaultUserName
+$3
+nv 1 DefaultDomainName
+ed DefaultDomainName
+$5
+EOF
+if [ "$4" == none ]
+then
+echo "debe aparecer done" $4
+cat >> $temporal << EOF
+dv DefaultPassword
+
+
+EOF
+else
+cat >> $temporal << EOF
+nv 1 DefaultPassword
+ed DefaultPassword
+$4
+EOF
+fi
+}
+
+function NTStatusRatonTeclado (){
+if [ $# = 0 ]
+then
+echo sintaxis: Int-StatusRaton Int-StatusTeclado
+echo ejemplos: int=1 activo int=4 desactivado
+return 2
+fi
+cat >> $temporal << EOF
+hive 1
+cd \ControlSet001\Services\Mouclass
+ed Start
+$1
+cd \ControlSet001\Services\Kbdclass
+ed Start
+$2
+EOF
+}
+
+function NTRunOnceMachine () {
+if [ $# = 0 ]
+then
+echo sintaxis: PathScripts idScripts
+echo "ejemplo: c:\\\\WINDOSWS\\\\crearusuarios.bat scripts1"
+echo "IMPORTANTE: el path debe llevar dos barras \\, pero como se deben 'escapar' debes poner cuatro \\\\"
+return 2
+fi
+export temporal=/tmp/tmpregistry
+cat >> $temporal << EOF
+h 2
+cd \Microsoft\Windows\CurrentVersion\RunOnce
+nv 1 $2
+ed $2
+$1
+EOF
+}
+
+function NTRunMachine () {
+if [ $# = 0 ]
+then
+echo sintaxis: PathScripts idScripts
+echo ejemplo: c:\\\\WINDOSWS\\\\crearusuarios.bat scripts1
+echo IMPORTANTE: el path debe llevar dos barras \\, pero como se deben 'escapar' debes poner cuatro \\\\
+return 2
+fi
+export temporal=/tmp/tmpregistry
+cat >> $temporal << EOF
+h 2
+cd \Microsoft\Windows\CurrentVersion\Run
+nv 1 $2
+ed $2
+$1
+EOF
+}
+
+function NTRunUser () {
+if [ $# = 0 ]
+then
+echo sintaxis: str_PathWINScripts str_idScripts Int_hive||\$usuario
+echo ejemplo: c:\\\\WINDOSWS\\\\crearusuarios.bat scripts1 3
+echo IMPORTANTE: el pathWIN debe llevar dos barras \\, pero como se deben 'escapar' debes poner cuatro \\\\
+echo IMPORTANTE: el pathLinux si lleva espacios debe escaparse con una barra \\
+echo IMPORTANTE Int_hive: 3 para el primer usuario, 4 para el segundo usuario
+echo requiere export un HiveUser3=/mnt/windows/Document\ and\ Seeting\alumnmos\NTUSER.dat
+return 2
+fi
+cat >> $temporal << EOF
+h $3
+cd \Software\Microsoft\Windows\CurrentVersion\Run
+nv 1 $2
+ed $2
+$1
+EOF
+}
+
+
+
+function NTPolUserOn () {
+if [ $# = 0 ]
+then
+Msg "requiere LoadRegistryUser str_user1 str_user2..." orange
+echo "sintaxis: Int_hive"
+echo "ejemplo: NTPolUserOn 3"
+echo "IMPORTANTE: la variable HiveUser3=/mnt/windows/Document/\ and/\ Seeting\alumnmos\NTUSER.dat"
+return 2
+fi
+cp /var/EAC/admin/utilswin/Fondo.BMP ${particion}/WINDOWS/
+cat >> $temporal << EOF
+h $1
+cd \Control Panel\Desktop
+ed Wallpaper
+C:\\WINDOWS\\fondo.bmp
+
+cd \Software\Microsoft\Windows\CurrentVersion\Policies
+nk Explorer
+cd Explorer
+
+nv 4 NoDesktop
+ed NoDesktop
+1
+
+nv 4 NoSimpleStartMenu
+ed NoSimpleStartMenu
+1
+nv 4 NoWindowsUpdate
+ed NoWindowsUpdate
+1
+
+nv 4 NoSMConfigurePrograms
+ed NoSMConfigurePrograms
+1
+
+nv 4 NoChangeStartMenu
+ed NoChangeStartMenu
+1
+
+nv 4 Intellimenus
+ed Intellimenus
+1
+
+nv 4 NoRun
+ed NoRun
+1
+
+nv 4 NoRecentDocsHistory
+ed NoRecentDocsHistory
+1
+EOF
+}
+
+function NTPolUserOFF () {
+if [ $# = 0 ]
+then
+Msg "requiere LoadRegistryUser str_user1 str_user2..." orange
+echo "sintaxis: Int_hive"
+echo "ejemplo: NTPolUserOFF 3"
+echo "IMPORTANTE: la variable HiveUser3=/mnt/windows/Document/\ and/\ Seeting\alumnmos\NTUSER.dat"
+return 2
+fi
+cat >> $temporal << EOF
+h $1
+cd \Control Panel\Desktop
+ed Wallpaper
+C:\\WINDOWS\\web\\wallpaper\\Felicidad.bmp
+
+cd \Software\Microsoft\Windows\CurrentVersion\
+rdel Policies
+nk Policies
+1
+EOF
+}
+
+
+function NTStatusBootChk () {
+if [ $# = 0 ]
+then
+echo sintaxis: Int-Status
+echo ejemplos: int=0 desactivado int=1 activado
+return 2
+fi
+[ $1 = 0 ] && valor="none"
+[ $1 = 1 ] && valor="autocheck autochk *"
+cat >> $temporal << EOF
+hive 1
+cd \ControlSet001\Control\Session Manager
+ed BootExecute
+$valor
+--n
+EOF
+}
+
+
+function ogSchrootLinux () {
+
+# Variables locales.
+local PART DISK DIRCONF SCHROOTDEVICE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition" \
+ "$FUNCNAME 1 1 "
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+DISK=$1; PART=$2; DIRCONF="/etc/schroot"
+
+
+VERSION=$(ogGetOsVersion $DISK $PART)
+echo $VERSION | grep "Linux" || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?)
+
+ogUnmount $DISK $PART || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?)
+
+SCHROOTDEVICE=$(ogDiskToDev $DISK $PART)
+
+
+rm ${DIRCONF}/mount-defaults
+rm ${DIRCONF}/schroot.conf
+
+cat >> ${DIRCONF}/mount-defaults << EOF
+# <file system> <mount point> <type> <options> <dump> <pass>
+proc /proc proc 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
+EOF
+
+
+cat >> ${DIRCONF}/schroot.conf << EOF
+[linux]
+description=$VERSION
+type=block-device
+device=$SCHROOTDEVICE
+EOF
+
+
+
+
+schroot -c linux
+
+schroot -end-sessiona --all-sessions
+}
+
diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib
index 8fa1d85c..ecc0d43b 100755
--- a/client/engine/Protocol.lib
+++ b/client/engine/Protocol.lib
@@ -853,7 +853,7 @@ then
case "$MODE" in
peer|PEER)
echo "Donwloading Torrent as peer" ### echo "ctorrent -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 $SOURCE -s $TARGET -b ${SOURCE}.bf"
- ctorrent -f -X "sleep 15; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf >> $OGLOGFILE
+ ctorrent -f -X "sleep 15; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf
;;
leecher|LEECHER)
echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 -U 0"
@@ -969,64 +969,66 @@ if [ "$*" == "help" ]; then
return
fi
+#TODO: return 0->true, 1->false; si error, aunque sintaxis devuelve > 1
+
# Error si no se reciben los argumentos ARG necesarios según la opcion.
-[ $# == "2" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $?
+#[ $# == "2" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $?
+#ogCheckStringInGroup "$1" "REPO repo" || ogRaiseError $OG_ERR_FORMAT "El contendor $1 no es valido, solo se admite REPO" || return $?
+[ $# == "2" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
+ogCheckStringInGroup "$1" "REPO repo" || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
-ogCheckStringInGroup "$1" "REPO repo" || ogRaiseError $OG_ERR_FORMAT "El contendor $1 no es valido, solo se admite REPO" || return $?
-FILESOURCE=`ogGetPath $1 $2`
-FILETARGET=`ogGetPath CACHE $2`
+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, confirmamos que es necesaria la actualizacion de 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
- echo "Salida con valor 0, paso 1, la cache no contiene esa imagen "
+ 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"
+
+#echo "Paso 2. Comprobamos que la imagen no estuviese en un proceso previo torrent"
if ogGetPath $FILETARGET.torrent.bf > /dev/null
then
- echo "Salida con valor 0, paso 2 la imagen esta en un estado de descarga torrent interrumpido."
#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"
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"
+#echo "paso 4. recuperamos o calculamos los md5 de los ficheros"
if [ -f $FILESOURCE.sum ]
then
- echo "leyendo el sum del fichero sum del repo"
+ # echo "leyendo el sum del fichero sum del repo"
MD5SOURCE=$(cat $FILESOURCE.sum)
-#elif [ -f $FILETARGET.torrent ]
-#then
-# echo "leyendo el sum del fichero torrent de la cache"
-# MD5SOURCE=$(ctorrent -x $FILETARGET.torrent | grep Comment | awk -F": " '{print $2}')
else
- echo "calculando el sun del repo"
+ # echo "calculando el sun del repo"
MD5SOURCE=$(md5sum $FILESOURCE | cut -f1 -d" ")
fi
if [ -f $FILETARGET.sum ]
then
- echo "leyendo el sum de la cache"
+ #echo "leyendo el sum de la cache"
MD5TARGET=$(cat $FILETARGET.sum)
else
- echo "calculando el sum de la cache"
+ #echo "calculando el sum de la cache"
md5sum $FILETARGET | cut -f1 -d" " > $FILETARGET.sum
MD5TARGET=$(cat $FILETARGET.sum)
fi
-echo "Paso 5. comparamos los md5"
+#echo "Paso 5. comparamos los md5"
#TODO: que hacer cuando los md5 son distintos. Por defecto borrar.
if [ "$MD5SOURCE" == "$MD5TARGET" ]
then
- echo "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 "paso 5.b la imagen en cache es distinta, borramos la imagen anterior y devolvemos 0 para confirmar la actualizacion"
+ 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 $FILETARGET
return 0
fi
diff --git a/client/engine/README.es.txt b/client/engine/README.es.txt
index 10b20779..9fc6862b 100644
--- a/client/engine/README.es.txt
+++ b/client/engine/README.es.txt
@@ -19,11 +19,15 @@ Librerías:
- Boot.lib funciones de arranque y posconfiguración de
sistemas operativos.
+- Cache.lib funciones de gestión de la caché local del cliente.
- Disk.lib funciones de control de dispositivos de disco.
- File.lib funciones de manipulación de ficheros.
- FileSystem.lib funciones de gestión de sistemas de ficheros.
- Image.lib funciones de administración de imágenes de
sistemas operativos.
- Inventory.lib funciones de control de inventario e informes.
+- Net.lib funciones básicas de control de acceso a la red.
+- Protocol.lib funciones de implementación de protocolos de comunicación.
+- Registry.lib funciones básicas de gestión del registro de Windows.
- System.lib funciones básicas del sistema.
diff --git a/client/engine/Registry.lib b/client/engine/Registry.lib
new file mode 100755
index 00000000..437f5102
--- /dev/null
+++ b/client/engine/Registry.lib
@@ -0,0 +1,397 @@
+#!/bin/bash
+#/**
+#@file Registry.lib
+#@brief Librería o clase Registry
+#@class Boot
+#@brief Funciones para gestión del registro de Windows.
+#@version 1.0.1
+#@warning License: GNU GPLv3+
+#*/
+
+
+#/**
+# ogAddRegistryKey path_mountpoint str_hive str_keyname
+#@brief Añade una nueva clave al registro de Windows.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@param str_keyname nombre de la clave
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@warning Requisitos: chntpw
+#@warning El sistema de archivos de Windows debe estar montada previamente.
+#@version 1.0.1 - Nueva función
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-25
+#*/ ##
+function ogAddRegistryKey ()
+{
+# Variables locales.
+local FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_key" \
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey'"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Camino del fichero de registro.
+FILE=$(ogGetHivePath "$1" "$2") || return $?
+
+# Añadir nueva clave.
+chntpw "$FILE" << EOT 2>/dev/null
+cd ${3%\\*}
+nk ${3##*\\}
+q
+y
+EOT
+}
+
+#/**
+# ogAddRegistryValue path_mountpoint str_hive str_valuename [str_valuetype]
+#@brief Añade un nuevo valor al registro de Windows, indicando su tipo de datos.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@param str_valuename nombre del valor
+#@param str_valuetype tipo de datos del valor (opcional)
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@note valuetype = { string, binary, dword }, por defecto: string
+#@warning Requisitos: chntpw
+#@warning El sistema de archivos de Windows debe estar montada previamente.
+#@version 1.0.1 - Nueva función
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-25
+#*/ ##
+function ogAddRegistryValue ()
+{
+# Variables locales.
+local FILE TYPE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_valuename [str_valuetype]" \
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1'" \
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1' DWORD"
+ return
+fi
+# Error si no se reciben 3 o 4 parámetros.
+[ $# == 3 -o $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Camino del fichero de registro.
+FILE=$(ogGetHivePath "$1" "$2") || return $?
+case "$4" in
+ string|STRING|"") TYPE=1 ;;
+ binary|BINARY) TYPE=3 ;;
+ dword|DWORD) TYPE=4 ;;
+ *) ogRaiseError $OG_ERR_OUTOFLIMIT "$4"
+ exit $? ;;
+esac
+
+# Devolver el dato del valor de registro.
+# /* (comentario Doxygen)
+chntpw "$FILE" << EOT 2>/dev/null
+cd ${3%\\*}
+nv $TYPE ${3##*\\}
+q
+y
+EOT
+# (comentario Doxygen) */
+}
+
+
+#/**
+# ogDeleteRegistryKey path_mountpoint str_hive str_keyname
+#@brief Elimina una clave del registro de Windows con todo su contenido.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@param str_keyname nombre de la clave
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@warning Requisitos: chntpw
+#@warning El sistema de archivos de Windows debe estar montada previamente.
+#@warning La clave debe estar vacía para poder ser borrada.
+#@version 1.0.1 - Nueva función
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-25
+#*/ ##
+function ogDeleteRegistryKey ()
+{
+# Variables locales.
+local FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_key" \
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey'"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Camino del fichero de registro.
+FILE=$(ogGetHivePath "$1" "$2") || return $?
+
+# Añadir nueva clave.
+chntpw "$FILE" << EOT 2>/dev/null
+cd ${3%\\*}
+dk ${3##*\\}
+q
+y
+EOT
+}
+
+#/**
+# ogDeleteRegistryValue path_mountpoint str_hive str_valuename
+#@brief Elimina un valor del registro de Windows.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@param str_valuename nombre del valor
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@warning Requisitos: chntpw
+#@warning El sistema de archivos de Windows debe estar montada previamente.
+#@version 1.0.1 - Nueva función
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-25
+#*/ ##
+function ogDeleteRegistryValue ()
+{
+# Variables locales.
+local FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_valuename" \
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1'"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Camino del fichero de registro.
+FILE=$(ogGetHivePath "$1" "$2") || return $?
+
+# Devolver el dato del valor de registro.
+# /* (comentario Doxygen)
+chntpw "$FILE" << EOT 2>/dev/null
+cd ${3%\\*}
+dv ${3##*\\}
+q
+y
+EOT
+# (comentario Doxygen) */
+}
+
+
+#/**
+# ogGetHivePath path_mountpoint str_hive
+#@brief Función básica que devuelve el camino del fichero con una sección del registro.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@return str_path - camino del fichero de registro
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@warning El sistema de archivos de Windows debe estar montada previamente.
+#@version 1.0.1 - Nueva función
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-18
+#*/ ##
+function ogGetHivePath ()
+{
+# Variables locales.
+local FILE FILENT FILEXP
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive"
+ "$FUNCNAME /mnt/sda1 SOFTWARE"
+ return
+fi
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Camino del fichero de registro en NT/2000 o XP/Vista/7.
+FILENT=$(ogGetPath "/$1/winnt/system32/config/$2")
+[ -f $FILENT ] && FILE="$FILENT"
+FILEXP=$(ogGetPath "/$1/windows/system32/config/$2")
+[ -f $FLEHXP ] && FILE="$FILEXP"
+[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $?
+
+echo "$FILE"
+}
+
+
+#/**
+# ogGetRegistryValue path_mountpoint str_hive str_valuename
+#@brief Devuelve el dato de un valor del registro de Windows.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@param str_valuename nombre del valor
+#@return str_valuedata - datos del valor.
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@warning Requisitos: chntpw, awk
+#@warning El sistema de archivos de Windows debe estar montado previamente.
+#@version 0.9 - Adaptación para OpenGNSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-11
+#*/ ##
+function ogGetRegistryValue ()
+{
+# Variables locales.
+local FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_valuename" \
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1' ==> 1"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Camino del fichero de registro.
+FILE=$(ogGetHivePath "$1" "$2") || return $?
+
+# Devolver el dato del valor de registro.
+# /* (comentario Doxygen)
+chntpw "$FILE" << EOT 2>/dev/null | awk '/> Value/ {getline;print $0;}'
+cd ${3%\\*}
+cat ${3##*\\}
+q
+EOT
+# (comentario Doxygen) */
+}
+
+
+#/**
+# ogListRegistryKeys path_mountpoint str_hive str_key
+#@brief Lista los nombres de subclaves de una determinada clave del registro de Windows.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@param str_key clave de registro
+#@return str_subkey ... - lista de subclaves
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@warning Requisitos: chntpw, awk
+#@warning El sistema de archivos de Windows debe estar montado previamente.
+#@version 0.9 - Adaptación para OpenGNSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-23
+#*/ ##
+function ogListRegistryKeys ()
+{
+# Variables locales.
+local FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_key" \
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\Windows\CurrentVersion'"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Camino del fichero de registro.
+FILE=$(ogGetHivePath "$1" "$2") || return $?
+
+# Devolver la lista de claves de registro.
+chntpw "$FILE" << EOT 2>/dev/null | awk 'BEGIN {FS="[<>]"} $1~/^ $/ {print $2}'
+ls $3
+q
+EOT
+}
+
+
+#/**
+# ogListRegistryValues path_mountpoint str_hive str_key
+#@brief Lista los nombres de valores de una determinada clave del registro de Windows.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@param str_key clave de registro
+#@return str_value ... - lista de valores
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@warning Requisitos: chntpw, awk
+#@warning El sistema de archivos de Windows debe estar montado previamente.
+#@version 1.0.1 - Nueva función.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-26
+#*/ ##
+function ogListRegistryValues ()
+{
+# Variables locales.
+local FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_key" \
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\Windows\CurrentVersion'"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Camino del fichero de registro.
+FILE=$(ogGetHivePath "$1" "$2") || return $?
+
+# Devolver la lista de claves de registro.
+chntpw "$FILE" << EOT 2>/dev/null | awk 'BEGIN {FS="[<>]"} $1~/REG_/ {print $2}'
+ls $3
+q
+EOT
+}
+
+
+#/**
+# ogSetRegistryValue path_mountpoint str_hive str_valuename str_valuedata
+#@brief Establece el dato asociado a un valor del registro de Windows.
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_hive sección del registro
+#@param str_valuename nombre del valor de registro
+#@param str_valuedata dato del valor de registro
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
+#@note hive = { default, sam, security, software, system, components }
+#@warning Requisitos: chntpw
+#@warning El sistema de archivos de Windows debe estar montado previamente.
+#@version 0.9 - Adaptación para OpenGNSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-09-24
+#*/ ##
+function ogSetRegistryValue ()
+{
+# Variables locales.
+local FILE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_valuename str_data"
+ "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1' 1"
+ return
+fi
+# Error si no se reciben 4 parámetros.
+[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Camino del fichero de registro.
+FILE=$(ogGetHivePath "$1" "$2") || return $?
+
+# Cambiar el dato del valor de registro.
+chntpw "$FILE" << EOT &>/dev/null
+ed $3
+$4
+q
+y
+EOT
+}
+
diff --git a/client/engine/String.lib b/client/engine/String.lib
index a81e3b07..a81e3b07 100644..100755
--- a/client/engine/String.lib
+++ b/client/engine/String.lib
diff --git a/client/engine/System.lib b/client/engine/System.lib
index 9973b596..020692d5 100755
--- a/client/engine/System.lib
+++ b/client/engine/System.lib
@@ -74,7 +74,24 @@ case "$CODE" in
$OG_ERR_IMAGE) MSG="$MSG_ERR_IMAGE \"$2\"" ;;
$OG_ERR_NOTOS) MSG="$MSG_ERR_NOTOS \"$2\"" ;;
$OG_ERR_NOTEXEC) MSG="$MSG_ERR_NOTEXEC \"$2\"" ;;
- *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
+ $OG_ERR_NOTWRITE) MSG="$MSG_ERR_NOTWRITE \"$2\"" ;;
+ $OG_ERR_NOTCACHE) MSG="$MSG_ERR_NOTCACHE \"$2\"" ;;
+ $OG_ERR_CACHESIZE) MSG="$MSG_ERR_CACHESIZE \"$2\"" ;;
+ $OG_ERR_REDUCEFS) MSG="$MSG_ERR_REDUCEFS \"$2\"" ;;
+ $OG_ERR_EXTENDFS) MSG="$MSG_ERR_EXTENDFS \"$2\"" ;;
+ $OG_ERR_IMGSIZEPARTITION) MSG="$MSG_ERR_IMGSIZEPARTITION \"$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\"" ;;
+ $OG_ERR_UCASTRECEIVERPARTITION) MSG="$MSG_ERR_UCASTRECEIVERPARTITION \"$2\"" ;;
+ $OG_ERR_UCASTRECEIVERFILE) MSG="$MSG_ERR_UCASTRECEIVERFILE \"$2\"" ;;
+ $OG_ERR_MCASTSYNTAXT) MSG="$MSG_ERR_MCASTSYNTAXT \"$2\"" ;;
+ $OG_ERR_MCASTSENDFILE) MSG="$MSG_ERR_MCASTSENDFILE \"$2\"" ;;
+ $OG_ERR_MCASTRECEIVERFILE) MSG="$MSG_ERR_MCASTRECEIVERFILE \"$2\"" ;;
+ $OG_ERR_MCASTSENDPARTITION) MSG="$MSG_ERR_MCASTSENDPARTITION \"$2\"" ;;
+ $OG_ERR_MCASTRECEIVERPARTITION) MSG="$MSG_ERR_MCASTRECEIVERPARTITION \"$2\"" ;;
+ $OG_ERR_PROTOCOLJOINMASTER) MSG="$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;;
+ *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
esac
# Mostrar mensaje de error y salir con el código indicado.
@@ -104,23 +121,26 @@ basename $(ps hlp $PPID | awk '{if ($13~/bash/ && $14!="") print $14;
# ogIsRepoLocked
#@brief Comprueba si el repositorio está siendo usado (tiene ficheros abiertos).
#@param No.
-#@return Código de salida: 0 - sin bloquear (libre), 1 - bloqueado.
+#@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error.
#@version 0.10 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011-01-17
+#@version 1.0.1 - Devolver falso en caso de error.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-05-18
#*/
-function ogIsRepoLocked () {
-
+function ogIsRepoLocked ()
+{
# Variables locales.
local f FILES
# No hacer nada, si no está definido el punto de montaje del repositorio.
-[ -z "$OGIMG" ] && return
+[ -z "$OGIMG" ] && return 1
# Comprobar si alguno de los ficheros abiertos por los procesos activos está en el
# punto de montaje del repositorio de imágenes.
FILES=$(for f in /proc/[0-9]*/fd/*; do readlink -f "$f"; done | grep "^$OGIMG") # */ (comentario Doxygen)
-[ -n "$FILES" ]
+test -n "$FILES"
}
diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh
index fe43dacc..51f31dc0 100755
--- a/client/shared/etc/init/default.sh
+++ b/client/shared/etc/init/default.sh
@@ -3,7 +3,8 @@
# TODO Separar esta sección en otro script
# Lanzar servicios complementarios del cliente.
echo -ne "og\nog\n" | passwd root
-/etc/init.d/ssh restart
+#Compatibilidad ssh con el boot-tools 1.0.2
+/etc/init.d/ssh restart || /usr/sbin/sshd
#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1
ethtool -s $DEVICE wol g 2>/dev/null
diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf
index 061ccef8..305ed9c9 100644
--- a/client/shared/etc/lang.es_ES.conf
+++ b/client/shared/etc/lang.es_ES.conf
@@ -14,7 +14,7 @@ MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema"
MSG_ERR_NOTEXEC="Programa o función no ejecutable"
MSG_ERR_NOTWRITE="No hay acceso de escritura"
MSG_ERR_NOTCACHE="No existe particion Cache en el cliente"
-MSG_ERR_CACHESIZE="No existe particion Cache en el cliente"
+MSG_ERR_CACHESIZE="El espacio de la cache local o remota no es suficiente"
MSG_ERR_REDUCEFS="Error al reducir el sistema de archivos"
MSG_ERR_EXTENDFS="Error al expandir el sistema de archivos"
MSG_ERR_IMGSIZEPARTITION="Error al restaurar: Particion mas pequeña que la imagen"
@@ -63,6 +63,8 @@ MSG_MAKELINKS="Crear enlaces simbólicos."
MSG_MOUNTREPO="Montar repositorio por %s en modo %s."
MSG_OFFLINEMODE="Modo de arranque sin conexión."
+MSG_HELP_ogAddRegistryKey="Añade una nueva clave al registro de Windows."
+MSG_HELP_ogAddRegistryValue="Añade un nuevo valor al registro de Windows."
MSG_HELP_ogBoot="Arranca un sistema operativo instalado."
MSG_HELP_ogCalculateChecksum="Calcula la suma de comprobación (checksum) de un fichero."
MSG_HELP_ogCheckFs="Comprueba la consistencia de un sistema de archivos."
@@ -73,6 +75,8 @@ MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instala
MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)."
MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco."
MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento."
+MSG_HELP_ogDeleteRegistryKey="Borra una clave vacía del registro de Windows."
+MSG_HELP_ogDeleteRegistryValue="Borra un valor del registro de Windows."
MSG_HELP_ogDeleteTree="Borra un árbol de directorios de un espacio de almacenamiento."
MSG_HELP_ogDevToDisk="Devuelve el nº de orden de dicso o de partición correspondiente al camino del fichero de dispositivo."
MSG_HELP_ogDiskToDev="Devuelve el camino del fichero de dispositivo correspondiente al nº de orden de dicso o de partición."
@@ -82,10 +86,12 @@ MSG_HELP_ogFindCache="Indica la partición reservada para caché local."
MSG_HELP_ogFormat="Formatea o reformatea un sistema de archivos."
MSG_HELP_ogFormatCache="Formatea (inicia) el sistema de caché local."
MSG_HELP_ogFormatFs=$MSG_HELP_ogFormat
+MSG_HELP_ogGetArch="Devuelve el tipo de arquitectura del cliente."
MSG_HELP_ogGetCacheSize="Devuelve el tamaño de la partición de caché local."
MSG_HELP_ogGetCacheSpace="Devuelve el espacio máximo disponible que puede ser reservado para la partición de caché local."
MSG_HELP_ogGetFsSize="Devuelve el tamaño de un sistema de archivos."
MSG_HELP_ogGetFsType="Devuelve el mnemónico de tipo de sistema de archivos."
+MSG_HELP_ogGetHivePath="Devuelve el camino completo del fichero de una sección del registro de Windows."
MSG_HELP_ogGetHostname="Devuelve el nombre de la máquina local."
MSG_HELP_ogGetIpAddress="Devuelve la dirección IP del cliente."
MSG_HELP_ogGetImageSize="Devuelve el tamaño de una imagen de sistema."
@@ -100,20 +106,25 @@ MSG_HELP_ogGetPartitionSize="Devuelve el tamaño de una partición."
MSG_HELP_ogGetPartitionType="Devuelve el mnemónico de tipo de una partición."
MSG_HELP_ogGetPath="Devuelve el camino completo de un fichero de sistema OpenGnSys."
MSG_HELP_ogGetRegistryValue="Devuelve el dato de un valor del registro de Windows."
+MSG_HELP_ogGetRepoIp="Devuelve la dirección IP del repositorio de datos."
+MSG_HELP_ogGetServerIp="Devuelve la dirección IP del servidor principal."
MSG_HELP_ogGetWindowsName="Devuelve el nombre del cliente guardado en el registro de Windows."
MSG_HELP_ogHelp="Muestra mensajes de ayudas para las funciones."
MSG_HELP_ogHidePartition="Oculta una partición de Windows."
MSG_HELP_ogIdToType="Devuelve el mnemónico asociado al identificador de tipo de partición."
+MSG_HELP_ogIsFormated="Comprueba si un sistema de archivos está formateado."
MSG_HELP_ogIsLocked="Comprueba si una partición está bloqueada por una operación de uso exclusivo."
MSG_HELP_ogIsImageLocked="Comprueba si una imagen está bloqueada por una operación de uso exclusivo."
MSG_HELP_ogIsPartitionLocked=$MSG_HELP_ogIsLocked
-MSG_HELP_ogIsMounted="Comprueba si un sistema operativo está montado."
-MSG_HELP_ogIsNewerFile="Comprueba si un fichero es más nuevo (se modificado después) que otro."
+MSG_HELP_ogIsMounted="Comprueba si un sistema de archivos está montado."
+MSG_HELP_ogIsNewerFile="Comprueba si un fichero es más nuevo (se ha modificado después) que otro."
MSG_HELP_ogIsValidType="Comprueba si el tipo de sistema de archivos es válido para un identificador de partición."
MSG_HELP_ogLinuxBootParameters="Devuelve los parámetros de arranque de un sistema operativo Linux instalado."
MSG_HELP_ogListHardwareInfo="Lista el inventario de dispositivos del cliente."
MSG_HELP_ogListPartitions="Lista la estructura de particiones de un disco."
-MSG_HELP_ogListRegistryKeys="Lista los nombres de las claves incluidas en una clave del registro de Windows."
+MSG_HELP_ogListRegistryKeys="Lista los nombres de las subclaves incluidas en una clave del registro de Windows."
+MSG_HELP_ogListRegistryValues="Lista los nombres de los valores incluidos en una clave del registro de Windows."
+MSG_HELP_ogListSoftware="Lista el inventario de programas instalados en un sistema operativo."
MSG_HELP_ogLock="Bloquea una partición para operación de uso exclusivo."
MSG_HELP_ogLockImage="Bloquea una imagen para operación de uso exclusivo."
MSG_HELP_ogLockPartition=$MSG_HELP_ogLock
diff --git a/client/shared/lib/grub4dos/badgrub.exe b/client/shared/lib/grub4dos/badgrub.exe
index 3cd26a61..92b924d2 100644
--- a/client/shared/lib/grub4dos/badgrub.exe
+++ b/client/shared/lib/grub4dos/badgrub.exe
Binary files differ
diff --git a/client/shared/lib/grub4dos/bootlace.com b/client/shared/lib/grub4dos/bootlace.com
index 199831f6..58ae01f9 100755..100644
--- a/client/shared/lib/grub4dos/bootlace.com
+++ b/client/shared/lib/grub4dos/bootlace.com
Binary files differ
diff --git a/client/shared/lib/grub4dos/grldr b/client/shared/lib/grub4dos/grldr
index a31e27bd..16ed4c77 100644
--- a/client/shared/lib/grub4dos/grldr
+++ b/client/shared/lib/grub4dos/grldr
Binary files differ
diff --git a/client/shared/lib/grub4dos/grldr.mbr b/client/shared/lib/grub4dos/grldr.mbr
index 6130129d..7af7ed3c 100644
--- a/client/shared/lib/grub4dos/grldr.mbr
+++ b/client/shared/lib/grub4dos/grldr.mbr
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub.exe b/client/shared/lib/grub4dos/grub.exe
index 8df2433f..57b890d2 100644
--- a/client/shared/lib/grub4dos/grub.exe
+++ b/client/shared/lib/grub4dos/grub.exe
Binary files differ
diff --git a/client/shared/lib/grub4dos/menu.lst b/client/shared/lib/grub4dos/menu.lst
deleted file mode 100644
index e7641534..00000000
--- a/client/shared/lib/grub4dos/menu.lst
+++ /dev/null
@@ -1,83 +0,0 @@
-# This is a sample menu.lst file. You should make some changes to it.
-# The old install method of booting via the stage-files has been removed.
-# Please install GRLDR boot strap code to MBR with the bootlace.com
-# utility under DOS/Win9x or Linux.
-
-color black/cyan yellow/cyan
-timeout 30
-default /default
-
-title find and load NTLDR of Windows NT/2K/XP
-fallback 1
-find --set-root /ntldr
-chainloader /ntldr
-savedefault --wait=2
-
-title find and load CMLDR, the Recovery Console of Windows NT/2K/XP
-fallback 2
-find --set-root /cmldr
-chainloader /cmldr
-#####################################################################
-# write string "cmdcons" to memory 0000:7C03 in 2 steps:
-#####################################################################
-# step 1. Write 4 chars "cmdc" at 0000:7C03
-write 0x7C03 0x63646D63
-# step 2. Write 3 chars "ons" and an ending null at 0000:7C07
-write 0x7C07 0x00736E6F
-savedefault --wait=2
-
-title find and load IO.SYS of Windows 9x/Me
-fallback 3
-find --set-root /io.sys
-chainloader /io.sys
-savedefault --wait=2
-
-title find and boot Mandriva with menu.lst already installed
-fallback 4
-find --set-root /etc/mandriva-release
-savedefault --wait=2
-configfile /boot/grub/menu.lst
-
-title find and boot Linux with menu.lst already installed
-fallback 5
-find --set-root /sbin/init
-savedefault --wait=2
-configfile /boot/grub/menu.lst
-
-title commandline
-savedefault --wait=2
-commandline
-
-title floppy (fd0)
-chainloader (fd0)+1
-rootnoverify (fd0)
-savedefault --wait=2
-
-title back to dos
-savedefault --wait=2
-quit
-
-title reboot
-savedefault --wait=2
-reboot
-
-title halt
-savedefault --wait=2
-halt
-
-title memdrive duplicated from floppy image file (hd0,0)/sbm.bin
-map --mem (hd0,0)/sbm.bin (fd0)
-map --hook
-chainloader (fd0)+1
-rootnoverify (fd0)
-savedefault --wait=2
-
-title memdrive based on win98 partition (hd0,6)
-map --mem (hd0,6)+1 (hd0)
-# map --mem (hd0,0)/win98.gz (hd0)
-map --hook
-chainloader (hd0)+1
-rootnoverify (hd0)
-savedefault --wait=2
-
-
diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster
index a7a5e11b..6516b587 100755
--- a/client/shared/scripts/cloneRemoteFromMaster
+++ b/client/shared/scripts/cloneRemoteFromMaster
@@ -44,12 +44,29 @@
#@version 1.0 - control de errores para el ogAdmServer
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011/04/24
+#@version 1.0 - Uso de parted para controlar tamaño particion destino. Requiere Formateo FS previo -parted usa FS para el tamanyo".
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/04/24
+#@version 1.0.1 - Se elimina la operación de reducir la particion.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/05/16
+
#*/ ##
+#test 1. cliente sin particiones. Detectado TODO: crear estrucutras de particiones
+#test 2. cliente con particion mas pequeña. Detectado.
+#test 3. cleinte con particion destinio no formateado. Detectado.
+#test 4. cliente con particion destino ocupado por el usuario pwd . FALLO.
+#test 5. master sin origen particion.
+#test 6. master sin origen fichero.
+
+
+
+trap "pkill faucet; exit 1" 0 1 2 3 6 9 14 15
TIME1=$SECONDS
PROG="$(basename $0)"
-if [ $# -lt 1 ]; then
+if [ $# -lt 1 -o "$1" == "help" ]; then
echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp"
exit 1
fi
@@ -76,7 +93,10 @@ case $PROTOCOL in
UNICAST|unicast)
SESSIONUCASTSERVER=$5
SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP
- ;;
+ ;;
+ *)
+ exit $(ogRaiseError $OG_ERR_FORMAT "Protocolo $PROTOCOL no soportado en esta operacion"; echo $?)
+ ;;
esac
# contenedor destino (disco particion)
DISKTARGET=$6
@@ -102,29 +122,36 @@ case $MASTERIP in
ogRaiseError $OG_ERR_NOTFOUND "$2 $3"; exit $?
fi
echo $MODEMASTER
- # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
-
+ # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
case "$MODEMASTER" in
SENDPARTITION)
echo "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves"
- faucet 4000 --out echo "WORKING" &
+ if ps aux | grep -v grep | grep "faucet 4000"
+ then
+ ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 118"; exit $?
+ else
+ faucet 4000 --out echo "WORKING" &
+ fi
echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE"
- ogUnmount $2 $3 || exit $?
- echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE"
+ ogUnmount $2 $3 || exit $(ogRaiseError $OG_ERR_LOCKED "no se puede desmontar $2 $3 l124"; echo $?)
#Obtener tamaño de la partición.
- SIZE=$(ogGetPartitionSize $2 $3)
- # Reducir el sistema de archvios.
- ogReduceFs $2 $3 || exit $?
- REDSIZE=$(ogGetFsSize $2 $3)
+ SIZE=$(ogGetPartitionSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar tamaño partcion $2 $3 l127"; echo $?)
+ echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE"
+ ogReduceFs $2 $3 || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al reducir el FS $2 $3 l129"; echo $?)
+ REDSIZE=$(ogGetFsSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar el nuevo FS $2 $3 l130"; echo $?)
echo "[20]: Reducido el sistema de archivos a $REDSIZE $DISKSOURCE $PARTSOURCE"
- if [ $REDSIZE -lt $SIZE ]; then
- echo "[24] Redimensionar partición a $REDSIZE KB."
- ogSetPartitionSize $2 $3 $REDSIZE
- fi
+ #if [ $REDSIZE -lt $SIZE ]; then
+ # echo "[24] Redimensionar partición a $REDSIZE KB."
+ # ogSetPartitionSize $2 $3 $REDSIZE
+ #fi
echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
pkill faucet
- faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
-
+ if ps aux | grep -v grep | grep "faucet 4000"
+ then
+ ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 140"; exit $?
+ else
+ faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
+ fi
case $PROTOCOL in
MULTICAST|multicast)
echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR"
@@ -137,22 +164,34 @@ case $MASTERIP in
;;
esac
- if [ $REDSIZE -lt $SIZE ]; then
- echo "[85] Redimensionar partición a $SIZE KB."
- ogSetPartitionSize $2 $3 $SIZE
+ #if [ $REDSIZE -lt $SIZE ]; then
+ # echo "[85] Redimensionar partición a $SIZE KB."
+ # ogSetPartitionSize $2 $3 $SIZE
echo "[90] Extender sistema de archivos."
ogExtendFs $2 $3
- fi
+ #fi
pkill faucet
+ if [ $RETVAL == 0 ]
+ then
+ exit 0
+ else
+ exit $(ogRaiseError $OG_ERR_MCASTSENDPARTITION "Error al enviar la particion $2 $3 con protocolo $PROTOCOL l167"; echo $?)
+ fi
+
;;
SENDFILE)
echo "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves"
echo "[10]: Preparando Imagen: $IMG"
- TOOLCLONE=$(ogGetImageProgram $2 $3)
- COMPRESOR=$(ogGetImageCompressor $2 $3)
- REDSIZE=$(ogGetImageSize $2 $3)
+ TOOLCLONE=$(ogGetImageProgram $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "TOOLCLONE no detectado l174"; echo $?)
+ COMPRESOR=$(ogGetImageCompressor $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "COMPRESOR NO DETECTADO l175"; echo $?)
+ REDSIZE=$(ogGetImageSize $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "REDSIZE NO DETECTADO l176"; echo $?)
echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
- faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
+ if ps aux | grep -v grep | grep "faucet 4000"
+ then
+ ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 140"; exit $?
+ else
+ faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
+ fi
case $PROTOCOL in
MULTICAST|multicast)
echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER "
@@ -165,15 +204,27 @@ case $MASTERIP in
;;
esac
pkill faucet
+ if [ $RETVAL == 0 ]
+ then
+ exit 0
+ else
+ exit $(ogRaiseError $OG_ERR_MCASTSENDFILE "Error al enviar la image $2 $3.img con protocolo $PROTOCOL l200"; echo $?)
+ fi
;;
esac
- #exit $RETVAL
- exit 0
# FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
;;
*)
- echo "[1] Equipo -Client- preparando para recibir datos"
- ogUnmount $DISKTARGET $PARTTARGET || exit $?
+ echo "[1] Equipo -Client- preparando para recibir datos $PROTOCOL"
+ ogDiskToDev $DISKTARGET $PARTTARGET &>/dev/null || exit $(ogRaiseError $OG_ERR_LOCKED "El cliente no tiene esas particiones $DISKTARGET $PARTTARGET l211"; echo $?)
+ # TODO: si el cliente no está en la lista de clientes UNICAST salir.
+ case $PROTOCOL in
+ UNICAST|unicast)
+ echo "$SESSIONUCASTSERVER" | grep $HOSTIP || exit $(ogRaiseError $OG_ERR_PROTOCOLJOINMASTER "Este cliente no pertence a la sesion UNICAST l214"; echo $?)
+ ;;
+ esac
+ echo "[2] Desmontando particion destino"
+ ogUnmount $DISKTARGET $PARTTARGET || exit $(ogRaiseError $OG_ERR_LOCKED "no se puede desmontar la particion destino $2 $3 l218"; echo $?)
echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: "
sleep 10
TIMEWAITMASTER=120
@@ -183,9 +234,9 @@ case $MASTERIP in
do
INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null`
sleep 10; echo -n "."
- #Si no consigue conectar con Master, comienza el timeout $TIMEWAITMASTER para abortar
+ echo comienza el timeout $TIMEWAITMASTER para abortar
[ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10
- [ "$TIMEWAITMASTER" -gt "0" ] || ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " " || exit $?
+ [ "$TIMEWAITMASTER" -gt "0" ] || exit $(ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " l230 "; echo $?)
#Si primer parametro desde el server es READY, salimos del bucle
GETINFO=$(echo $INFOEXTRA | awk '{print $1}')
[ "$GETINFO" == "READY" ] && GETINFO=OK
@@ -194,36 +245,29 @@ case $MASTERIP in
TOOLCLONE=$(echo $INFOEXTRA | awk '{print $2}')
COMPRESOR=$(echo $INFOEXTRA | awk '{print $3}')
SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}')
- echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE "
+ echo -n "[26] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE "
+ ogMount $DISKTARGET $PARTTARGET || ogFormat $DISKTARGET $PARTTARGET
+ SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB)
+ echo "[29] 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.
- SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET)
if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
then
echo "[30] Iniciando Cliente $PROTOCOL "
case $PROTOCOL in
MULTICAST|multicast)
echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR
- ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $?
- ;;
+ ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?)
+ ;;
UNICAST|unicast)
echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR
- ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $?
+ ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?)
;;
- esac
-
-
- echo "[90] Extender sistema de archivos"
- ogExtendFs $DISKTARGET $PARTTARGET
- # Cambiar nombre en sistemas Windows.
- if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then
- HOST=$(ogGetHostname)
- HOST=${HOST:-"UNKNOWN"}
- echo "[90] Cambiar nombre Windows a \"$HOST\"."
- ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST"
- fi
+ esac
+ echo "[90] llamando a configureOS $DISKTARGET $PARTTARGET"
+ configureOs $DISKTARGET $PARTTARGET
else
# Si el tamaño de los datos recibidos es más grande que la particion destino
- ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET tamanio de la imagen= $SIZEIMAGE"; exit $?
+ ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET menor que la imagen= $SIZEIMAGE"; exit $?
fi
;;
esac
diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs
new file mode 100755
index 00000000..64249c9b
--- /dev/null
+++ b/client/shared/scripts/configureOs
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+#/**
+# configureOS
+#@brief Scirpt de ejemplo para realizar la configuracion del sistema operativo restaurado.
+#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin).
+#@param 1 disco
+#@param 2 particion
+#@return
+#@TODO comprobar que el tipo de particion corresponde con el sistema de archivos.
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@version 1.0.1 - Integracion cambio de nombre, extender fs, chequear particion activa
+#@author
+#@date 2011-05-11
+#@version 1.0.1 - Configura el sector de la particion y el gestor de windows para iniciarse desde cualquier particion.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011-05-20
+
+
+
+# Si el sistema de archivos no esta extendido. Realizar.
+PARTSIZE=$(ogGetPartitionSize $1 $2)
+FSSIZE=$(ogGetFsSize $1 $2)
+if [ $FSSIZE -lt $PARTSIZE ]; then
+ echo "Extender sistema de archivos."
+ ogExtendFs $1 $2
+fi
+
+#Si no existe particion activa, activar este sistema.
+FLAGACTIVE=$(ogGetPartitionActive $1)
+[ -z $FLAGACTIVE ] && ogSetPartitionActive $1 $2
+
+# Cambiar nombre en sistemas Windows y quitar usuario de acceso por defecto.
+if [ "$(ogGetOsType $1 $2)" = "Windows" ]; then
+ HOST=$(ogGetHostname)
+ HOST=${HOST:-"pc"}
+ echo " Cambiar nombre Windows a \"$HOST\" "
+ ogSetWindowsName $1 $2 "$HOST"
+ #ogSetWinlogonUser $1 $2 " " # Descomentar para cambiar usuario de inicio.
+ # Configurar el boot sector de la particion windows.
+ ogFixBootSector $1 $2
+ # Configura el gestor de arranque de windows xp vista seven
+ ogWindowsBootParameters $1 $2
+ # Registra en windows que la particion indicada es su nueva unidad c:\
+ ogWindowsRegisterPartition $1 $2 C $1 $2
+fi \ No newline at end of file
diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage
index 8e98113a..3643d1af 100755
--- a/client/shared/scripts/createImage
+++ b/client/shared/scripts/createImage
@@ -1,6 +1,39 @@
#!/bin/bash
-# createImage - Scirpt de ejemplo para crear una imagen de un sistema de archivos.
-# (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin).
+
+#/**
+# createImage
+#@brief Scirpt de ejemplo para crear una imagen de un sistema de archivos.
+#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin).
+#@param 1 disco
+#@param 2 particion
+#@param 3 REPO|CACHE
+#@param 4 imagen
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_PARTITION # 3 Error en partición de disco o en su sistema de archivos
+#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage.
+#@exception OG_ERR_NOTWRITE # 14 error de escritura
+#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15
+#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16
+#@exception OG_ERR_REDUCEFS # 17 error al reducir sistema de archivos.
+#@exception OG_ERR_EXTENDFS # 18 Errror al expandir el sistema de archivos.
+#@note
+#@todo: que hacer, si el tamaño de la cache es sufciente, pero no tiene espacio libre
+#@todo: que hacer, si hay una imagen con igual nombre en la cache
+#@version 1.0 - control de errores para el ogAdmServer
+#@author
+#@date 2011-04-10
+#@version 1.0.1 - Fin de control de errores para el ogAdmServer
+#@author
+#@date 2011-05-10
+
+#*/ ##
+
+# Test 1. crear una imagen en un REPO sin espacio libre.
+# test 2. crear una imagen en un REPO en modo solo lectura.
+# test 3. intentar crear una imagen en la cache de un equipo que no la disponga.
+# test 4. crear una imagen en la Cache sin espacio sufiente.
+# test 5. intentar crear una imagen, en la que no se puede reducir el FS.
TIME1=$SECONDS
PROG="$(basename $0)"
@@ -16,20 +49,22 @@ IMGEXT="img"
# Si el repositorio es CACHE comprobamos que exista
if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
- if ! $(ogFindCache >/dev/null); then
- ogRaiseError $OG_ERR_NOTFOUND "CACHE"
- exit $?
- fi
+ ! ogFindCache >/dev/null && exit $(ogRaiseError $OG_ERR_NOTCACHE "CACHE "; echo $?)
fi
# Obtener información de los parámetros de entrada.
-PART=$(ogDiskToDev "$1" "$2") || exit $?
+PART=$(ogDiskToDev "$1" "$2" 2>/dev/null) || exit $(ogRaiseError $OG_ERR_PARTITION "$1 $2"; echo $?)
+
+#Comprobamos acceso de escritura.
+DIRTEMP=$(date +%Y%m%d-%H%M%S)
+ogMakeDir $3 /$4$DIRTEMP 2>/dev/null || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3"; echo $?) && ogDeleteTree $3 /$4$DIRTEMP
+
IMGDIR=$(ogGetParentPath "$3" "/$4")
# Si no existe, crear subdirectorio de la imagen.
if [ $? != 0 ]; then
echo "[5] Crear subdirectorio de la imagen \"$3 $(dirname "$4")."
- ogMakeDir "$3" $(dirname "/$4")
- IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $?
+ ogMakeDir "$3" $(dirname "/$4") || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
+ IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
fi
IMGFILE=$IMGDIR/$(basename "/$4").$IMGEXT
# Renombrar el fichero de imagen si ya existe.
@@ -38,24 +73,47 @@ if [ -f "$IMGFILE" ]; then
mv "$IMGFILE" "$IMGFILE.ant"
mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
fi
+
+#Comprobar espacio que requerira la imagen para ser almacenada
+if ogMount $1 $2 &>/dev/null
+then
+ SIZEDATA=$(df -k | grep $PART | awk '{print $3}')
+ #Aplicar factor de compresion
+ FACTORGZIP=55/100
+ FACTORLZOP=65/100
+ let SIZEREQUIRED=$SIZEDATA*$FACTORLZOP
+ #Comprobar espacio libre en el contenedor.
+ [ "$3" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`)
+ [ "$3" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $3}')
+else
+ ogRaiseError $OG_ERR_PARTITION "$1 $2"
+ exit $?
+fi
+
# Mostrar información.
echo "[15] $PROG: Origen=$PART, Destino=$IMGFILE"
+echo "[16] $PROG: TamañoRequerido=$SIZEREQUIRED EspacioDisponible=$SIZEFREE"
+
+[ "$SIZEREQUIRED" -gt "$SIZEFREE" ] && exit $(ogRaiseError $OG_ERR_CACHESIZE "$3" || echo $?)
+
+
+# TODO: que hacer si la cache no tiene espacio libre.
# Comprobar consistencia del sistema de archivos.
echo "[20] Comprobar sistema de archivos."
ogUnmount $1 $2
-ogCheckFs $1 $2
+ogCheckFs $1 $2 || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $1 $2" && echo $?)
echo "[30]: Reducir sistema de archivos."
-ogReduceFs $1 $2 || exit 1
+ogReduceFs $1 $2 || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?)
# Crear la imagen.
-echo "[40] Crear imagen."
-ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $?
-#ogCreateImage $1 "$2" $3 $4 || exit $?
+echo "[40] Crear imagen con: ogCreateImage $1 $2 $3 $4 $IMGPROG $IMGCOMP"
+ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $(ogRaiseError $OG_ERR_IMAGE "ogCreteImage"; echo $?)
echo "[90] Extender sistema de archivos."
-ogExtendFs $1 $2
+ogExtendFs $1 $2 || exit $(ogRaiseError $OG_ERR_EXTENDFS "$1 $2"; echo $?)
+
TIME=$[SECONDS-TIME1]
echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage
index 15392ec7..16a403cc 100755
--- a/client/shared/scripts/deployImage
+++ b/client/shared/scripts/deployImage
@@ -8,13 +8,20 @@ if [ $# -lt 4 ]; then
fi
#controlar param1 REPO
-
+echo "Realizando un updateCache REPO $2.img $5 $6"
updateCache REPO $2.img $5 $6
-if [ $? != "0" ]
+RETVAL=$?
+if [ "$RETVAL" != "0" ]
then
- echo "fin del updateCache REPO $2.img $5 $6 con errores"
- exit 1
+ echo "fin del updateCache REPO $2.img $5 $6 con error $RETVAL"
+ # RC=15 No hay cache
+ # RC=16 no hay espacio sufiente
+ exit $RETVAL
+
else
- echo "comenzamos con restoreImage CACHE $2 $3 $4"
- restoreImage CACHE $2 $3 $4
+ echo "iniciando un ogRestore CACHE desde deployImage"
+ ogRestoreImage CACHE /$2 $3 $4
+ RETVAL=$?
+ [ "$RETVAL" == "0" ] && configureOs $3 $4
+ exit $RETVAL
fi \ No newline at end of file
diff --git a/client/shared/scripts/generateMenuDefault b/client/shared/scripts/generateMenuDefault
new file mode 100755
index 00000000..0437cd3d
--- /dev/null
+++ b/client/shared/scripts/generateMenuDefault
@@ -0,0 +1,30 @@
+#ª/bin/bash
+
+source /tmp/net-eth0.conf
+FILEINFOHTML=/opt/opengnsys/log/`ogGetIpAddress`.info.html
+
+SPEED=$(ethtool $DEVICE | grep Speed | awk -F": " '{print $2}')
+DUPLEX=$(ethtool $DEVICE | grep Duplex | awk -F": " '{print $2}')
+
+#
+# echo '';
+#
+
+cat > $FILEINFOHTML << EOF
+<div align="center" style="font-family: Arial, Helvetica, sans-serif;">'
+<p style="color:#999999; font-size: 16px; margin: 2em;">
+
+<table border=1>
+<tr>
+<TD rowspan=2><P align=left><IMG border=0 src="../images/iconos/logoopengnsys.png"><P> </td>
+<td> Hostname: </td> <td> IP </td> <td> MAC </td> <td> Speed </td> <td> duplex </td> </tr>
+<tr> <td> $HOSTNAME </td> <td> $(ogGetIpAddress) </td> <td> $(ogGetMacAddress) </td> <td> $SPEED </td> <td> $DUPLEX </td> </tr>
+</table>
+
+
+</p>
+<p style="font-size: 14px; margin: 2em;">
+</p>
+</div>
+
+EOF \ No newline at end of file
diff --git a/client/shared/scripts/updateBootCache b/client/shared/scripts/updateBootCache
new file mode 100755
index 00000000..af2267a2
--- /dev/null
+++ b/client/shared/scripts/updateBootCache
@@ -0,0 +1,7 @@
+#!/bin/bash
+OGBTFTP="/opt/og2fs/tftpboot/ogclient/"
+ogMountCache || exit 1
+echo $OGCAC
+[ -d $OGCAC/boot ] || mkdir -p $OGCAC/boot
+[ -f ${OGCAC}/boot/ogvmlinuz ] || cp ${OGBTFTP}ogvmlinuz ${OGCAC}/boot/ogvmlinuz
+[ -f ${OGCAC}/boot/oginitrd.img ] || cp ${OGBTFTP}oginitrd.img ${OGCAC}/boot/oginitrd.img \ No newline at end of file
diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache
index f6f61e34..bebb1153 100755
--- a/client/shared/scripts/updateCache
+++ b/client/shared/scripts/updateCache
@@ -14,7 +14,7 @@
PROG="$(basename $0)"
-if [ $# -lt 4 ]; then
+if [ $# -lt 3 ]; then
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_Relative_Path_OGIMG_with_/ PROTOCOLO OPCIONES_PROTOCOLO OPCIONES_UPDATECACHE"
exit $?
fi
@@ -26,13 +26,17 @@ REPOIP=$(ogGetRepoIp)
echo $REPOSITORIO $REPOIP $PROTOCOLO $OPTPROTOCOLO
# Si el repositorio local CACHE no existe salimos.
if ! $(ogFindCache >/dev/null); then
- ogRaiseError $OG_ERR_NOTFOUND "CACHE"
+ ogRaiseError $OG_ERR_NOTCACHE "CACHE"
exit $?
fi
#Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum-
#TODO: ogUpdateCacheIsNecesary debe borrar la imagen que tenga igual nombre pero distinto sum-
-ogUpdateCacheIsNecesary $1 $2 || exit 0
+ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
+# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1
+[ "$RETVAL" == "1" ] && exit 0
+[ "$RETVAL" -gt "1" ] && exit 1
+
CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
FILESIZE=$(ls -sk $(ogGetPath $1 $2) | cut -f1 -d" ")
@@ -40,10 +44,14 @@ FILESIZE=$(ls -sk $(ogGetPath $1 $2) | cut -f1 -d" ")
if [ "$FILESIZE" -ge "$CACHESIZEFREE" ]
then
echo "el tamanio del fichero $2 = $FILESIZE es mayor que el espacio dispinible en la cache = $CACHESIZEFREE"
- exit 1
+ ogRaiseError $OG_ERR_CACHESIZE "CACHE"
+ exit $?
fi
-ogUpdateCacheIsNecesary $1 $2 || exit 0
+ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
+# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1
+[ "$RETVAL" == "1" ] && exit 0
+[ "$RETVAL" -gt "1" ] && exit 1
ogMountCache
@@ -96,18 +104,13 @@ case "$PROTOCOLO" in
;;
unicast | UNICAST )
echo "unicast"
+ ogCopyFile $1 $2 $OGCAC$OGIMG
;;
esac
-if ogUpdateCacheIsNecesary $1 $2
-then
- echo "algo ha fallado"
- exit 1
-else
- echo "updateCache ok"
- exit 0
-fi
-
-
-# \ No newline at end of file
+ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
+# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1
+[ "$RETVAL" == "0" ] && exit 1
+[ "$RETVAL" == "1" ] && exit 0
+[ "$RETVAL" -gt "1" ] && exit 1 \ No newline at end of file