summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2012-07-18 12:00:06 +0000
committerramon <ramongomez@us.es>2012-07-18 12:00:06 +0000
commitd0df50b67a1392f81e6faecd27523c639e1ba845 (patch)
treeab5f37fe113fa7447b92f98e073c8618b64d2215 /client
parent1c93532b21492afae588da93f6ff59dd11a6e6d7 (diff)
Versión 1.0.4, #531: Integrar versión 1.0.4 en rama principal.
git-svn-id: https://opengnsys.es/svn/trunk@3259 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client')
-rwxr-xr-x[-rw-r--r--]client/boot-tools/boottoolsfunctions.lib17
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/hooks/oghooks1
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions5
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/scripts/oginit13
-rwxr-xr-x[-rw-r--r--]client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh0
-rwxr-xr-x[-rw-r--r--]client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh17
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh29
-rwxr-xr-x[-rw-r--r--]client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows0
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic7
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning3
-rwxr-xr-xclient/engine/Boot.lib28
-rwxr-xr-xclient/engine/Cache.lib84
-rwxr-xr-xclient/engine/Disk.lib705
-rwxr-xr-xclient/engine/File.lib15
-rwxr-xr-xclient/engine/FileSystem.lib218
-rwxr-xr-xclient/engine/Image.lib79
-rwxr-xr-xclient/engine/PostConf.lib380
-rwxr-xr-xclient/engine/PostConfEAC.lib141
-rwxr-xr-xclient/engine/Protocol.lib25
-rw-r--r--client/engine/README.es.txt15
-rwxr-xr-xclient/engine/System.lib9
-rw-r--r--client/shared/etc/engine.cfg12
-rw-r--r--client/shared/etc/lang.es_ES.conf27
-rwxr-xr-xclient/shared/etc/preinit/fileslinks.sh6
-rwxr-xr-xclient/shared/etc/preinit/loadenviron.sh2
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/LogCommand.sh0
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/LogSession.sh0
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/bandwidth.sh0
-rwxr-xr-xclient/shared/lib/httpd/cache.sh22
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/httpd-log.sh2
-rwxr-xr-x[-rw-r--r--]client/shared/lib/httpd/httpd-menu.sh0
-rw-r--r--[-rwxr-xr-x]client/shared/lib/httpd/lighttpd.conf0
-rwxr-xr-xclient/shared/lib/ogclient/ogAdmLnxClientbin0 -> 540196 bytes
-rw-r--r--client/shared/lib/ogclient/ogAdmWinClient.exebin0 -> 73728 bytes
-rwxr-xr-xclient/shared/scripts/configureOs63
-rwxr-xr-xclient/shared/scripts/generateMenuDefault42
-rwxr-xr-xclient/shared/scripts/poweroff2
-rwxr-xr-xclient/shared/scripts/reboot2
-rwxr-xr-xclient/shared/scripts/runhttplog.sh18
-rwxr-xr-xclient/shared/scripts/samples/configureGroup65
40 files changed, 1410 insertions, 644 deletions
diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib
index c8fef78c..b1f00d05 100644..100755
--- a/client/boot-tools/boottoolsfunctions.lib
+++ b/client/boot-tools/boottoolsfunctions.lib
@@ -332,28 +332,24 @@ ALLOWOPTIONS 1
MENU TITLE OpenGnsys ${NAMEISOCLIENT}
-LABEL gpxe
-MENU LABEL gpxe
-KERNEL /clonezilla/live/vmlinuz1
-APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
LABEL 0
-MENU LABEL ogClient vga irqpool acpi ogdebug ip:none
+MENU LABEL ogLive vga irqpool acpi ogdebug ip:none
KERNEL /ogclient/linuxISO
APPEND initrd=/ogclient/oginitrd.img ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none
LABEL 1
-MENU LABEL ogClient irqpoll acpi ip:none
+MENU LABEL ogLive irqpoll acpi ip:none
KERNEL /ogclient/linuxISO
APPEND initrd=/ogclient/oginitrd.img ro irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=none
LABEL 2
-MENU LABEL ogClient acpi debug ip=dhcp
+MENU LABEL ogLive acpi debug ip=dhcp
KERNEL /ogclient/linuxISO
APPEND initrd=/ogclient/oginitrd.img ro acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=dhcp
LABEL 3
-MENU LABEL ogClient ip=dhcp
+MENU LABEL ogLive ip=dhcp
KERNEL /ogclient/linuxISO
APPEND initrd=/ogclient/oginitrd.img ro acpi=off boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=dhcp
@@ -377,6 +373,11 @@ KERNEL gpxe.pxe
label 8
MENU LABEL Network boot via gPXE iso
KERNEL gpxe.iso
+
+label 9
+MENU LABEL gpxe
+KERNEL /clonezilla/live/vmlinuz1
+APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
FIN
diff --git a/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
index afe21be6..e3c25677 100755
--- a/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
+++ b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
@@ -51,7 +51,6 @@ copy_exec /bin/lsmod
#mkdir -p ${DESTDIR}/opt/opengnsys/lib/engine
#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine
-#rm -fr ${DESTDIR}/lib/modules/2.6.32-21-generic-pae/kernel/drivers/net/atl*
manual_add_modules cifs
manual_add_modules smbfs
manual_add_modules atl1e
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
index 35b24f9b..89cd2c65 100644
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
@@ -156,8 +156,9 @@ ogPostConfigureFS()
echo "order hosts,bind" > /etc/host.conf
echo "multi on" >> /etc/host.conf
- #configuramos el dns
- echo "nameserver $ogdns" > /etc/resolv.conf
+ #configuramos el dns
+ #echo "nameserver $ogdns" > /etc/resolv.conf
+ echo "nameserver $ogdns" > /etc/resolvconf/resolv.conf.d/tail
# configuramos el /etc/networks
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
index 95efe282..61c68b96 100755
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
@@ -70,7 +70,13 @@ mountroot ()
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N "
[ $? == 0 ] && sh || echo " "
- ogConfigureNetworking
+ if [ -n "$oglive" ]
+ then
+ while !(ping -c 1 $oglive &> /dev/null)
+ do
+ ogConfigureNetworking
+ done
+ fi
log_success_msg "config networking"
ogConfigureLoopback
log_success_msg "config loopback"
@@ -85,7 +91,10 @@ mountroot ()
ogYesNo --timeout 5 --default no "Stop before check updating initrd: y/N "
[ $? == 0 ] && sh || echo " "
fi
- [ "$ogupdateinitrd" == "true" ] && ogUpdateInitrd
+ # Actualizar Initrd si se solicita o si no se corresponde con su kernel.
+ if [ "$ogupdateinitrd" == "true" -o ! -d /lib/modules/$(uname -r) ]; then
+ ogUpdateInitrd
+ fi
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect and merging the rootfs -ogLive- with $OGSERVERLIVE: y/N "
[ $? == 0 ] && sh || echo " "
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh
index edd0dc00..edd0dc00 100644..100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
index 21b7a54d..13f4703e 100644..100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
@@ -6,13 +6,13 @@
find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
apt-get -y --force-yes install subversion
-export SVNURL="http://opengnsys.es/svn/branches/version1.0/client/"
-VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Revision:/ {print "r"$2}')
-
+#export SVNURL="http://opengnsys.es/svn/branches/version1.0/client/"
+#VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Revision:/ {print "r"$2}')
+VERSIONSVN=$(cat /tmp/versionsvn.txt)
VERSIONBOOTTOOLS=ogLive
-NAMEISOCLIENT="/tmp/opengnsys_info_rootfs"
-NAMEHOSTCLIENT="/tmp/opengnsys_chroot"
+NAMEISOCLIENTFILE="/tmp/opengnsys_info_rootfs"
+NAMEHOSTCLIENTFILE="/tmp/opengnsys_chroot"
SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/client/boot-tools
SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared
@@ -115,10 +115,9 @@ cp -prv ${SVNOG2}/job_executer $OGCLIENTMOUNT/opt/opengnsys/bin/
cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${OSRELEASE}-${VERSIONSVN} > $NAMEISOCLIENT
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > $NAMEHOSTCLIENT
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > /etc/debian_chroot
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > /etc/opengnsys_chroot
+echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${OSRELEASE}-${VERSIONSVN} > $NAMEISOCLIENTFILE
+echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > $NAMEHOSTCLIENTFILE
+
history -c
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
index 8d0cede9..ca721c22 100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
@@ -29,11 +29,32 @@ gdebi -n /var/cache/apt/archivesOG/xvesa.deb
echo "partclone"
gdebi -n /var/cache/apt/archivesOG/partclone_0.2.38_i386.deb
-#echo "busybox"
-#gdebi -n /var/cache/apt/archivesOG/busybox_1.17.1-10ubuntu1_i386.deb
-
-echo "busybox-static"
+echo "busybox-static 1.17.1 en rootfs"
+#echo "busybox-static 1.17.1 en ogLive rootfs permite reboot y poweroff
+apt-get remove -y busybox-static
gdebi -n /var/cache/apt/archivesOG/busybox-static_1.17.1-10ubuntu1_i386.deb
+cp /bin/busybox /bin/busyboxOLD
+/bin/busyboxOLD
+echo "busybox-static 1.18.5 en initrd"
+apt-get install -y busybox-static
+cp /bin/busybox /bin/busyboxNEW
+/bin/busyboxNEW
+# en scripts reboot y poweroff hacer llamada a busyboxOLD reboot|poweroff
+
+
+
+#gpt
+apt-get install -y uuid-dev libicu-dev libpopt-dev libpopt0 ncurses-base libncurses5-dev
+wget -O download.tgz http://sourceforge.net/projects/gptfdisk/files/gptfdisk/0.8.2/gptfdisk-0.8.2.tar.gz/download
+mkdir download
+tar xzvf download.tgz -C download
+cd download/gptfdisk-0.8.2
+make
+cp sgdisk gdisk fixparts cgdisk /sbin
+cd ..
+rm -fr download*
+
+
history -c \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows
index 41824f18..41824f18 100644..100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
index e65da70e..358b76ed 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
@@ -4,11 +4,14 @@ install man-db
install fbset
install gdebi-core
install bash-static
-#install busybox-static #la version en oneiric no incluye el reboot y poweroff -> ver compilacion software
+#La gestion del busybox-static (incompatibilidades reboot y poweroff) en boottoolSoftwareCompile.sh
+#install busybox-static
install console-data
install locales
install lshw
install gawk
install subversion
install python-openssl
-install python \ No newline at end of file
+install python
+install dmidecode
+install hwinfo \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
index 9eda4b6b..2585f56f 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
@@ -13,4 +13,5 @@ install reglookup
install libparse-win32registry-perl
install grokevt
install libhivex0
-install libhivex-bin \ No newline at end of file
+install libhivex-bin
+install rsync \ No newline at end of file
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib
index 2b8e1a3a..7a858fac 100755
--- a/client/engine/Boot.lib
+++ b/client/engine/Boot.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Boot
#@class Boot
#@brief Funciones para arranque y post-configuración de sistemas de archivos.
-#@version 0.9
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -26,11 +26,14 @@
#@version 0.9 - Adaptación para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-11
+#@version 1.0.4 - Soporta modo de arranque Windows (parámetro de inicio "winboot").
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-04-12
#*/ ##
function ogBoot ()
{
# Variables locales.
-local PART TYPE MNTDIR PARAMS KERNEL INITRD APPEND FILE LOADER
+local PART TYPE MNTDIR PARAMS KERNEL INITRD APPEND FILE LOADER f
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -58,6 +61,7 @@ case "$TYPE" in
[ -e "$MNTDIR/etc" ] && APPEND=$(echo $APPEND | awk -v P="$PART " '{sub (/root=[-+=_/a-zA-Z0-9]* /,"root="P);print}')
# Configurar kernel Linux con los parámetros leídos de su GRUB.
kexec -l "${MNTDIR}${KERNEL}" --append="$APPEND" --initrd="${MNTDIR}${INITRD}"
+ kexec -e &
;;
NTFS|HNTFS|FAT32|HFAT32)
# Compruebar si hay un cargador de Windows.
@@ -66,10 +70,18 @@ case "$TYPE" in
[ -n "$FILE" ] && LOADER="$f"
done
[ -z "$LOADER" ] && ogRaiseError $OG_ERR_NOTOS && return $?
- # Activar la partición y copiar Grub4DOS.
+ # Activar la partición.
ogSetPartitionActive $1 $2
- #FIXME: activar seguimiento inicio sesion Windows con grub4dos
- if [ "$(ogGetOsType $1 $2)" == "Windows" ]; then
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\Cliente Opengnsys\Start' '2'
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\Cliente Opengnsys\Start' '2'
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet003\services\Cliente Opengnsys\Start' '2'
+ if [ "$winboot" == "kexec" ]; then
+ # Modo de arranque en caliente (con kexec).
+ cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
+ kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
+ kexec -e &
+ else
+ # Modo de arranque por reinicio (con reboot).
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
@@ -77,9 +89,6 @@ case "$TYPE" in
ogHiveNTRunMachine "cmd /c del c:\ogboot.*" ogcleanboot
ogUpdateHiveWindows
reboot
- else
- cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
- 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"
@@ -87,8 +96,7 @@ case "$TYPE" in
;;
esac
-# Arrancar.
-kexec -e &
+# Parar Browser para evitar cuelgues.
pkill browser
}
diff --git a/client/engine/Cache.lib b/client/engine/Cache.lib
index 50cd01de..118bc65b 100755
--- a/client/engine/Cache.lib
+++ b/client/engine/Cache.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Cache
#@class Cache
#@brief Funciones para gestión de la caché local de disco.
-#@version 0.9.1
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -24,40 +24,66 @@
#@version 0.9.2 - Corrección definición de límites.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/06/01
+#@version 1.0.4 - Soporte para discos GPT.
+#@author Universidad de Huelva
+#@date 2012/03/13
#*/ ##
function ogCreateCache ()
{
# Variables locales.
-local DISK PART SECTORS CYLS START END SIZE MINSIZE MAXSIZE ENDPART3
+local FINDCACHE NDSK PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_partsize" "$FUNCNAME 10000000"
return
fi
-# Error si no se recibe 1 parámetro.
+# Error si no se recibe 1 parámetro que sea un número entero.
[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+[[ $1 =~ ([0-9]*) ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $?
-DISK=$(ogDiskToDev 1) || return $?
-PART="4"
-SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
-CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
-END=$[SECTORS/CYLS*CYLS-1] # Sector final del disco
-SIZE=$(echo $1|awk '{print $0*2}') # En sectores de 512 B.
+FINDCACHE="1 4" # Partición de caché (ndisco npart).
+NDSK=${FINDCACHE% *}
+PART=${FINDCACHE#* }
+DISK=$(ogDiskToDev $NDSK) || return $?
+END=$[$(ogGetLastSector $NDSK 2>/dev/null)] # Sector final del disco.
+SIZE=$[$1*2] # Tamaño en sectores de 512 B.
START=$[END-SIZE+1]
-ENDPART3=$(sfdisk -uS -l $DISK | awk -v P="${DISK}3" '{if ($1==P) print $3}')
-# Error si tamaño no está entre límites permitidos o si se solapa con la partición 3.
-MINSIZE=100000 # Error de formateo si tamaño < 50 MB.
+ENDPREVPART=$[$(ogGetLastSector $NDSK $[PART-1] 2>/dev/null)]
+# Error si tamaño no está entre límites permitidos o si se solapa con la partición anterior.
+MINSIZE=25000 # Error de formateo si tamaño < 50 MB.
MAXSIZE=$[END/2] # No permitir tamaño > mitad del disco.
-if [ $SIZE -lt $MINSIZE -o $SIZE -gt $MAXSIZE -o $START -le $ENDPART3 ]; then
+if [ $SIZE -lt $MINSIZE -o $SIZE -gt $MAXSIZE -o $START -le $ENDPREVPART ]; then
ogRaiseError $OG_ERR_FORMAT "$1" || return $?
fi
# Desmontar todos los sistemas de archivos del disco.
ogUnmountAll 1 2>/dev/null
-# Si la tabla de particiones no es valida, volver a generarla.
-[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
# Definir particiones y notificar al kernel.
-sfdisk -f $DISK -uS -N$PART <<<"$START,$SIZE,ca" 2>/dev/null && partprobe
+# En el caso de ser disco GPT, de momento se borra la particion y se vuelve a crear,
+# por lo que se pierden los datos.
+PTTYPE=$(ogGetPartitionTableType $NDSK)
+if [ -z "$PTTYPE" ]; then
+ PTTYPE="MSDOS" # Por defecto para discos vacíos.
+ ogCreatePartitionTable $NDSK $PTTYPE
+fi
+case "$(ogGetPartitionTableType $NDSK)" in
+ GPT)
+ # Si la tabla de particiones no es valida, volver a generarla.
+ [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || echo -e "2\nw\nY\n" | gdisk $DISK
+ # Si existe la cache se borra previamente
+ [ -n $(ogFindCache) && ogDeleteCache
+ # Capturamos el codigo de particion GPT para cache
+ ID=$(ogTypeToId CACHE GPT)
+ sgdisk $DISK -n$PART:$START:$END -c$PART:CACHE -t$PART:$ID 2>/dev/null && partprobe
+ ;;
+ MSDOS)
+ # Si la tabla de particiones no es valida, volver a generarla.
+ [ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
+ # Definir particiones y notificar al kernel.
+ ID=$(ogTypeToId CACHE MSDOS)
+ sfdisk -f $DISK -uS -N$PART <<<"$START,$SIZE,$ID" 2>/dev/null && partprobe
+ ;;
+esac
}
@@ -70,6 +96,9 @@ sfdisk -f $DISK -uS -N$PART <<<"$START,$SIZE,ca" 2>/dev/null && partprobe
#@version 0.91 - Definición de caché local.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/03/11
+#@version 1.0.4 - Soporte para discos GPT.
+#@author Universidad de Huelva
+#@date 2012/03/13
#*/ ##
function ogDeleteCache ()
{
@@ -87,10 +116,19 @@ DISK=$(ogDiskToDev $NDISK)
# Desmontar todos los sistemas de archivos del disco.
ogUnmountAll $NDISK 2>/dev/null
-# Si la tabla de particiones no es valida, volver a generarla.
-[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
-# Eliminar (poner a 0) la partición de caché.
-sfdisk -f $DISK -N$NPART <<<"0,0,0" 2>/dev/null && partprobe
+case "$(ogGetPartitionTableType $1)" in
+ GPT)
+ # Si la tabla de particiones no es valida, volver a generarla.
+ [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || echo -e "2\nw\nY\n" | gdisk $DISK
+ sgdisk $DISK -d$NPART 2>/dev/null && partprobe
+ ;;
+ MSDOS)
+ # Si la tabla de particiones no es valida, volver a generarla.
+ [ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
+ # Eliminar (poner a 0) la partición de caché.
+ sfdisk -f $DISK -N$NPART <<<"0,0,0" 2>/dev/null && partprobe
+ ;;
+esac
# Borrar etiqueta de la caché.
rm -f /dev/disk/by-label/CACHE
}
@@ -123,7 +161,7 @@ fi
# Obtener el sistema de archivos etiquetado con "CACHE".
PART=$(realpath /dev/disk/by-label/CACHE 2>/dev/null)
# Si no, obtener la 1ª partición marcada como de tipo caché.
-PART=${PART:-$(sfdisk -l | awk '$6~/ca|a7/ {print $1}')}
+PART=${PART:-$(sfdisk -l 2>/dev/null | awk '$6~/ca|a7/ {print $1}')}
PART=${PART%% *}
ogDevToDisk $PART 2>/dev/null
@@ -160,10 +198,7 @@ DEV=$(ogDiskToDev $DEV) || return $?
# Formatear sistema de ficheros.
ogUnmountCache 2>/dev/null
- # Orden para formateo Ext4
mkfs.ext4 -q -F $DEV -L "CACHE" -O extent,large_file 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
- # Orden para formateo Reiser 3
- #mkfs.reiserfs -f $DEV -l "CACHE" 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
# Crear estructura básica.
MNTDIR=$(ogMountCache)
mkdir -p $MNTDIR/$OGIMG
@@ -264,7 +299,6 @@ if [ "$*" == "help" ]; then
fi
ogMountFs $(ogFindCache) 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "$MSG_NOCACHE" || return $?
-
}
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index fbedc66d..f9031d55 100755
--- a/client/engine/Disk.lib
+++ b/client/engine/Disk.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Disk
#@class Disk
#@brief Funciones para gestión de discos y particiones.
-#@version 0.9
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -16,8 +16,9 @@
#@param str_parttype mnemónico del tipo de partición
#@param int_partsize tamaño de la partición (en KB)
#@return (nada, por determinar)
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@exception OG_ERR_NOTFOUND disco o partición no detectado (no es un dispositivo).
+#@exception OG_ERR_PARTITION error en partición o en tabla de particiones.
#@attention El nº de partición se indica por el orden de los párametros \c parttype:partsize
#@attention Pueden definirse particiones vacías de tipo \c EMPTY
#@attention No puede definirse partición de cache y no se modifica si existe.
@@ -29,11 +30,14 @@
#@version 0.9.1 - Corrección del redondeo del tamaño del disco.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/03/09
+#@version 1.0.4 - Llamada a función específica para tablas GPT.
+#@author Universidad de Huelva
+#@date 2012/03/30
#*/ ##
function ogCreatePartitions ()
{
# Variables locales.
-local ND DISK PART SECTORS CYLS START SIZE TYPE CACHEPART CACHESIZE EXTSTART EXTSIZE tmpsfdisk
+local ND DISK PTTYPE PART SECTORS START SIZE TYPE CACHEPART CACHESIZE EXTSTART EXTSIZE tmpsfdisk
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_parttype:int_partsize ..." \
@@ -46,14 +50,20 @@ fi
# Nº total de sectores, para evitar desbordamiento (evitar redondeo).
ND="$1"
DISK=$(ogDiskToDev "$ND") || return $?
-SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
-CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
-SECTORS=$[SECTORS/CYLS*CYLS-1]
+PTTYPE=$(ogGetPartitionTableType $1)
+PTTYPE=${PTTYPE:-"MSDOS"} # Por defecto para discos vacíos.
+case "$PTTYPE" in
+ GPT) ogCreateGptPartitions "$@"
+ return $? ;;
+ MSDOS) ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$PTTYPE"
+ return $? ;;
+esac
+SECTORS=$(ogGetLastSector $1)
# Se recalcula el nº de sectores del disco 1, si existe partición de caché.
CACHEPART=$(ogFindCache 2>/dev/null)
[ "$ND" = "${CACHEPART% *}" ] && CACHESIZE=$(ogGetCacheSize 2>/dev/null | awk '{print $0*2}')
[ -n "$CACHESIZE" ] && SECTORS=$[SECTORS-CACHESIZE]
-ENDPART3=$(sfdisk -uS -l $DISK | awk -v P="${DISK}3" '{if ($1==P) print $3}')
# Sector de inicio (la partición 1 empieza en el sector 63).
START=63
PART=1
@@ -77,7 +87,7 @@ while [ $# -gt 0 ]; do
TYPE="${1%%:*}"
SIZE="${1#*:}"
# Obtener identificador de tipo de partición válido.
- ID=$(ogFsToId "$TYPE")
+ ID=$(ogTypeToId "$TYPE" MSDOS)
[ "$TYPE" != "CACHE" -a -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $?
# Comprobar tamaño numérico y convertir en sectores de 512 B.
[[ "$SIZE" == *([0-9]) ]] || ogRaiseError $OG_ERR_FORMAT "$SIZE" || return $?
@@ -121,7 +131,7 @@ ogUnmountAll $ND 2>/dev/null
[ -n "$CACHESIZE" ] && ogUnmountCache 2>/dev/null
# Si la tabla de particiones no es valida, volver a generarla.
-[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
+ogCreatePartitionTable $ND
# Definir particiones y notificar al kernel.
sfdisk -f $DISK < $tmpsfdisk 2>/dev/null && partprobe $DISK
rm -f $tmpsfdisk
@@ -130,6 +140,210 @@ rm -f $tmpsfdisk
#/**
+# ogCreateGptPartitions int_ndisk str_parttype:int_partsize ...
+#@brief Define el conjunto de particiones de un disco GPT
+#@param int_ndisk nº de orden del disco
+#@param str_parttype mnemónico del tipo de partición
+#@param int_partsize tamaño de la partición (en KB)
+#@return (nada, por determinar)
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@exception OG_ERR_NOTFOUND disco o partición no detectado (no es un dispositivo).
+#@exception OG_ERR_PARTITION error en partición o en tabla de particiones.
+#@attention El nº de partición se indica por el orden de los párametros \c parttype:partsize
+#@attention Pueden definirse particiones vacías de tipo \c EMPTY
+#@attention No puede definirse partición de caché y no se modifica si existe.
+#@note Requisitos: sfdisk, parted, partprobe, awk
+#@todo Definir atributos (arranque, oculta) y tamaños en MB, GB, etc.
+#@version 1.0.4 - Primera versión para OpenGnSys
+#@author Universidad de Huelva
+#@date 2012/03/30
+#*/ ##
+function ogCreateGptPartitions ()
+{
+# Variables locales.
+local ND DISK PART SECTORS ALIGN START SIZE TYPE CACHEPART CACHESIZE DELOPTIONS OPTIONS
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_parttype:int_partsize ..." \
+ "$FUNCNAME 1 NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000"
+ return
+fi
+# Error si no se reciben menos de 2 parámetros.
+[ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Nº total de sectores, para evitar desbordamiento (evitar redondeo).
+ND="$1"
+DISK=$(ogDiskToDev "$ND") || return $?
+# Se calcula el ultimo sector del disco (total de sectores usables)
+SECTORS=$(ogGetLastSector $1)
+[ "$ND" = "${CACHEPART% *}" ] && CACHESIZE=$(ogGetCacheSize 2>/dev/null | awk '{print $0*2}')
+[ -n "$CACHESIZE" ] && SECTORS=$[SECTORS-CACHESIZE]
+# Si el disco es GPT empieza en el sector 2048 por defecto, pero podria cambiarse
+ALIGN=$(sgdisk -D $DISK 2>/dev/null)
+START=$ALIGN
+PART=1
+
+# Leer parámetros con definición de particionado.
+shift
+
+while [ $# -gt 0 ]; do
+ # Si PART es la cache, nos la saltamos y seguimos con el siguiente numero para conservar los datos de la partición de caché.
+ if [ "$ND $PART" == "$CACHEPART" -a -n "$CACHESIZE" ]; then
+ PART=$[PART+1]
+ fi
+ # Leer formato de cada parámetro - Tipo:Tamaño
+ TYPE="${1%%:*}"
+ SIZE="${1#*:}"
+ # Error si la partición es extendida (no válida en discos GPT).
+ if [ "$TYPE" == "EXTENDED" ]; then
+ ogRaiseError $OG_ERR_PARTITION "EXTENDED"
+ return $?
+ fi
+ # Comprobar si existe la particion actual, capturamos su tamaño para ver si cambio o no
+ PARTSIZE=$(ogGetPartitionSize $ND $PART 2>/dev/null)
+ # En sgdisk no se pueden redimensionar las particiones, es necesario borrarlas y volver a crealas
+ [ $PARTSIZE ] && DELOPTIONS="$DELOPTIONS -d$PART"
+ # Creamos la particion
+ # Obtener identificador de tipo de partición válido.
+ ID=$(ogTypeToId "$TYPE" GPT)
+ [ "$TYPE" != "CACHE" -a -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $?
+ # Comprobar tamaño numérico y convertir en sectores de 512 B.
+ [[ "$SIZE" == *([0-9]) ]] || ogRaiseError $OG_ERR_FORMAT "$SIZE" || return $?
+ SIZE=$[SIZE*2]
+ # SIZE debe ser múltiplo de ALIGN, si no gdisk lo mueve automáticamente.
+ DIV=$[$SIZE/$ALIGN]
+ SIZE=$[$DIV*$ALIGN]
+ # En el caso de que la partición sea EMPTY no se crea nada
+ if [ "$TYPE" != "EMPTY" ]; then
+ OPTIONS="$OPTIONS -n$PART:$START:+$SIZE -t$PART:$ID "
+ fi
+ START=$[START+SIZE]
+ # Error si se supera el nº total de sectores.
+ [ $START -le $SECTORS ] || ogRaiseError $OG_ERR_FORMAT "$[START/2] > $[SECTORS/2]" || return $?
+ PART=$[PART+1]
+ shift
+done
+
+# Desmontar los sistemas de archivos del disco antes de realizar las operaciones.
+ogUnmountAll $ND 2>/dev/null
+[ -n "$CACHESIZE" ] && ogUnmountCache 2>/dev/null
+
+# Si la tabla de particiones no es valida, volver a generarla.
+ogCreatePartitionTable $ND
+# Definir particiones y notificar al kernel.
+# Borramos primero las particiones y luego creamos las nuevas
+sgdisk $DELOPTIONS $OPTIONS $DISK 2>/dev/null && partprobe $DISK
+[ -n "$CACHESIZE" ] && ogMountCache 2>/dev/null
+}
+
+
+#/**
+# ogCreatePartitionTable int_ndisk [str_tabletype]
+#@brief Genera una tabla de particiones en caso de que no sea valida, si es valida no hace nada.
+#@param int_ndisk nº de orden del disco
+#@param str_tabletype tipo de tabla de particiones (opcional)
+#@return (por determinar)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
+#@note tabletype: { MSDOS, GPT }
+#@note Requisitos: sfdisk, sgdisk
+#@version 1.0.4 - Primera versión compatible con OpenGNSys.
+#@author Universidad de Huelva
+#@date 2012/03/06
+#*/ ##
+function ogCreatePartitionTable ()
+{
+# Variables locales.
+local DISK PTTYPE CREATE CREATEPTT
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME int_ndisk [str_partype]" \
+ "$FUNCNAME 1 GPT" "$FUNCNAME 1"
+ return
+fi
+# Error si no se reciben 1 o 2 parámetros.
+case $# in
+ 1) CREATEPTT="" ;;
+ 2) CREATEPTT="$2" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $? ;;
+esac
+
+# Capturamos el tipo de tabla de particiones actual
+DISK=$(ogDiskToDev $1) || return $?
+PTTYPE=$(ogGetPartitionTableType $1)
+PTTYPE=${PTTYPE:-"MSDOS"} # Por defecto para discos vacíos.
+CREATEPTT=${CREATEPTT:-"$PTTYPE"}
+
+# Si la tabla actual y la que se indica son iguales, se comprueba si hay que regenerarla.
+if [ "$CREATEPTT" == "$PTTYPE" ]; then
+ case "$PTTYPE" in
+ GPT) [ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || CREATE="GPT" ;;
+ MSDOS) [ $(parted -s $DISK print >/dev/null) ] || CREATE="MSDOS" ;;
+ esac
+else
+ CREATE="$CREATEPTT"
+fi
+# Dependiendo del valor de CREATE, creamos la tabla de particiones en cada caso.
+case "$CREATE" in
+ GPT)
+ # Si es necesario crear una tabla GPT pero la actual es MSDOS
+ if [ "$PTTYPE" == "MSDOS" ]; then
+ sgdisk -g $DISK
+ else
+ echo -e "2\nw\nY\n" | gdisk $DISK
+ fi
+ partprobe $DISK 2>/dev/null
+ ;;
+ MSDOS)
+ # Si es necesario crear una tabla MSDOS pero la actual es GPT
+ if [ "$PTTYPE" == "GPT" ]; then
+ sgdisk -Z $DISK
+ fi
+ fdisk $DISK <<< "w"
+ partprobe $DISK 2>/dev/null
+ ;;
+esac
+}
+
+
+#/**
+# ogDeletePartitionTable ndisk
+#@brief Borra la tabla de particiones del disco.
+#@param int_ndisk nº de orden del disco
+#@return la informacion propia del fdisk
+#@version 0.1 - Integracion para OpenGnSys
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date 2008/10/27
+#@version 1.0.4 - Adaptado para su uso con discos GPT
+#@author Universidad de Huelva
+#@date 2012/03/13
+#*/ ##
+function ogDeletePartitionTable ()
+{
+# Variables locales.
+local DISK
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME int_ndisk" "$FUNCNAME 1"
+ return
+fi
+# Error si no se reciben 1 parámetros.
+[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Obteniendo Identificador linux del disco.
+DISK=$(ogDiskToDev $1) || return $?
+# Crear una tabla de particiones vacía.
+case "$(ogGetPartitionTableType $1)" in
+ GPT) sgdisk -o $DISK ;;
+ MSDOS) echo -ne "o\nw" | fdisk $DISK ;;
+esac
+}
+
+
+#/**
# ogDevToDisk path_device
#@brief Devuelve el nº de orden de dicso (y partición) correspondiente al nombre de fichero de dispositivo.
#@param path_device Camino del fichero de dispositivo.
@@ -251,50 +465,111 @@ esac
#/**
# ogFsToId str_fstype
-#@brief Devuelve el identificador de partición correspondiente a un tipo de sistema de archivos.
-#@param str_fstype mnemónico de tipo de sistema de archivos
-#@return int_idpart nº identificador de tipo de partición.
+#@see ogTypeToId
+#*/ ##
+function ogFsToId ()
+{
+ogTypeToId "$@"
+}
+
+
+#/**
+# ogTypeToId str_parttype str_tabletype
+#@brief Devuelve el identificador correspondiente a un tipo de partición.
+#@param str_parttype mnemónico de tipo de partición.
+#@param str_tabletype mnemónico de tipo de tabla de particiones (MSDOS por defecto).
+#@return int_idpart identificador de tipo de partición.
#@exception OG_ERR_FORMAT Formato incorrecto.
+#@note tabletype = { MSDOS, GPT }
#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS () en ATA.lib
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2008/10/27
#@version 0.9 - Primera version para OpenGNSys
#@author Ramon Gomez, ETSII Universidad Sevilla
#@date 2009-12-14
+#@version 1.0.4 - Soportar discos GPT (sustituye a ogFsToId).
+#@author Universidad de Huelva
+#@date 2012/03/30
#*/ ##
-function ogFsToId ()
+function ogTypeToId ()
{
# Variables locales
-local ID
+local PTTYPE ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME str_fstype" "$FUNCNAME EXT3 => 83"
+ ogHelp "$FUNCNAME" "$FUNCNAME str_parttype [str_tabletype]" \
+ "$FUNCNAME LINUX => 83" \
+ "$FUNCNAME LINUX MSDOS => 83"
return
fi
-# Error si no se recibe 1 parámetro.
-[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Error si no se reciben 2 parámetro.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Asociar id. de partición para su mnemónico de sistema de archivos.
-case "$1" in
- EMPTY) ID=0 ;;
- FAT12) ID=1 ;;
- EXTENDED) ID=5 ;;
- FAT16) ID=6 ;;
- NTFS|EXFAT) ID=7 ;;
- FAT32) ID=b ;;
- HFAT12) ID=11 ;;
- HFAT16) ID=16 ;;
- HNTFS) ID=17 ;;
- HFAT32) ID=1b ;;
- LINUX-SWAP) ID=82 ;;
- LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
- ID=83 ;;
- LINUX-LVM) ID=8e ;;
- SOLARIS) ID=bf ;;
- CACHE) ID=ca ;;
- LINUX-RAID) ID=fd ;;
- *) ID="" ;;
+# Asociar id. de partición para su mnemónico.
+PTTYPE=${2:-"MSDOS"}
+case "$PTTYPE" in
+ GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS.
+ case "$1" in
+ EMPTY) ID=0 ;;
+ WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12)
+ ID=0700 ;;
+ WIN-RESERV) ID=0C01 ;;
+ CHROMEOS-KRN) ID=7F00 ;;
+ CHROMEOS) ID=7F01 ;;
+ CHROMEOS-RESERV) ID=7F02 ;;
+ LINUX-SWAP) ID=8200 ;;
+ LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
+ ID=8300 ;;
+ LINUX-RESERV) ID=8301 ;;
+ LINUX-LVM) ID=8E00 ;;
+ FREEBSD-DISK) ID=A500 ;;
+ FREEBSD-BOOT) ID=A501 ;;
+ FREEBSD-SWAP) ID=A502 ;;
+ FREEBSD) ID=A503 ;;
+ HFS|HFS+) ID=AF00 ;;
+ HFS-RAID) ID=AF01 ;;
+ SOLARIS-BOOT) ID=BE00 ;;
+ SOLARIS) ID=BF00 ;;
+ SOLARIS-SWAP) ID=BF02 ;;
+ SOLARIS-DISK) ID=BF03 ;;
+ CACHE) ID=CA00;;
+ EFI) ID=EF00 ;;
+ LINUX-RAID) ID=FD00 ;;
+ *) ID="" ;;
+ esac
+ ;;
+ MSDOS)
+ case "$1" in
+ EMPTY) ID=0 ;;
+ FAT12) ID=1 ;;
+ EXTENDED) ID=5 ;;
+ FAT16) ID=6 ;;
+ WINDOWS|NTFS|EXFAT)
+ ID=7 ;;
+ FAT32) ID=b ;;
+ HFAT12) ID=11 ;;
+ HFAT16) ID=16 ;;
+ HNTFS) ID=17 ;;
+ HFAT32) ID=1b ;;
+ LINUX-SWAP) ID=82 ;;
+ LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
+ ID=83 ;;
+ LINUX-LVM) ID=8e ;;
+ FREEBSD) ID=a5 ;;
+ OPENBSD) ID=a6 ;;
+ HFS|HFS+) ID=af ;;
+ SOLARIS-BOOT) ID=be ;;
+ SOLARIS) ID=bf ;;
+ CACHE) ID=ca ;;
+ DATA) ID=da ;;
+ GPT) ID=ee ;;
+ EFI) ID=ef ;;
+ VMFS) ID=fb ;;
+ LINUX-RAID) ID=fd ;;
+ *) ID="" ;;
+ esac
+ ;;
esac
echo $ID
}
@@ -325,9 +600,9 @@ fi
# Error si no se recibe 1 parámetro.
[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Obtener el tamaño de la partición.
+# Obtener el tamaño del disco.
DISK="$(ogDiskToDev $1)" || return $?
-sfdisk -s $DISK
+awk -v D=${DISK#/dev/} '{if ($4==D) {print $3}}' /proc/partitions
}
@@ -357,6 +632,68 @@ echo $TYPE
#/**
+# ogGetLastSector int_ndisk [int_npart]
+#@brief Devuelve el último sector usable del disco o de una partición.
+#@param int_ndisk nº de orden del disco
+#@param int_npart nº de orden de la partición (opcional)
+#@return Último sector usable.
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o partición no corresponde con un dispositivo.
+#@note Requisitos: sfdisk, sgdisk
+#@version 1.0.4 - Primera versión compatible con OpenGnSys.
+#@author Universidad de Huelva
+#@date 2012/06/03
+#*/ ##
+
+function ogGetLastSector ()
+{
+# Variables locales
+local DISK PART PTTYPE LASTSECTOR SECTORS CYLS
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk [int_npart]" \
+ "$FUNCNAME 1 => 488392064" \
+ "$FUNCNAME 1 1 => 102400062"
+ return
+fi
+# Error si no se reciben 1 o 2 parámetros.
+case $# in
+ 1) DISK=$(ogDiskToDev $1) || return $?
+ ;;
+ 2) DISK=$(ogDiskToDev $1) || return $?
+ PART=$(ogDiskToDev $1 $2) || return $?
+ ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $? ;;
+esac
+
+# Hay que comprobar si el disco es GPT
+PTTYPE=$(ogGetPartitionTableType $1)
+PTTYPE=${PTTYPE:-"MSDOS"} # Por defecto para discos vacíos.
+case "$PTTYPE" in
+ GPT)
+ if [ $# == 1 ]; then
+ LASTSECTOR=$(LANG=C sgdisk -p $DISK | awk '/last usable sector/ {print($(NF))}')
+ else
+ LASTSECTOR=$(LANG=C sgdisk -p $DISK | awk -v P="$2" '{if ($1==P) print $3}')
+ fi
+ ;;
+ MSDOS)
+ if [ $# == 1 ]; then
+ SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
+ CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
+ LASTSECTOR=$[SECTORS/CYLS*CYLS-1]
+ else
+ LASTSECTOR=$(sfdisk -uS -l $DISK 2>/dev/null | \
+ awk -v P="$PART" '{if ($1==P) {if ($2=="*") print $4; else print $3} }')
+ fi
+ ;;
+esac
+echo $LASTSECTOR
+}
+
+
+#/**
# ogGetPartitionActive int_ndisk
#@brief Muestra que particion de un disco esta marcada como de activa.
#@param int_ndisk nº de orden del disco
@@ -399,15 +736,15 @@ parted $DISK print 2>/dev/null | awk '/boot/ {print $1}'
#@note Requisitos: sfdisk
#@version 0.9 - Primera versión compatible con OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 25/03/2009
+#@date 2009/03/25
#@version 1.0.2 - Detectar partición vacía.
#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 23/12/2011
+#@date 2011/12/23
#*/ ##
function ogGetPartitionId ()
{
# Variables locales.
-local DISK ID
+local DISK PART ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -420,7 +757,13 @@ fi
# Detectar id. de tipo de partición y codificar al mnemónico.
DISK=$(ogDiskToDev $1) || return $?
-ID=$(sfdisk --id $DISK $2 2>/dev/null) || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $?
+PART=$(ogDiskToDev $1 $2) || return $?
+case "$(ogGetPartitionTableType $1)" in
+ GPT) ID=$(sgdisk -p $DISK 2>/dev/null | awk -v p="$2" '{if ($1==p) print $6;}') || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $?
+ [ "$ID" == "8301" -a "$1 $2" == "$(ogFindCache)" ] && ID=CA00
+ ;;
+ MSDOS) ID=$(sfdisk --id $DISK $2 2>/dev/null) || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $? ;;
+esac
echo $ID
}
@@ -470,6 +813,78 @@ esac
#/**
+# ogGetPartitionsNumber int_ndisk
+#@brief Detecta el numero de particiones del disco duro indicado.
+#@param int_ndisk nº de orden del disco
+#@return Devuelve el numero paritiones del disco duro indicado
+#@warning Salidas de errores no determinada
+#@attention Requisitos: parted
+#@note Notas sin especificar
+#@version 0.1 - Integracion para Opengnsys - EAC: DetectNumberPartition () en ATA.lib
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date Date: 27/10/2008
+#@version 1.0 - Uso de sfdisk Primera version para OpenGnSys
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009/07/24
+#@version 1.0.4 - Uso de /proc/partitions para detectar el numero de particiones
+#@author Universidad de Huelva
+#@date 2012/03/28
+#*/ ##
+function ogGetPartitionsNumber ()
+{
+# Variables locales.
+local DISK
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
+ "$FUNCNAME 1 => 3"
+ return
+fi
+# Error si no se recibe 1 parámetro.
+[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Contar el nº de veces que aparece el disco en su lista de particiones.
+DISK=$(ogDiskToDev $1) 2>/dev/null
+case "$(ogGetPartitionTableType $1)" in
+ GPT) grep -c "${DISK#/dev/}." /proc/partitions ;;
+ MSDOS) sfdisk -l $DISK 2>/dev/null | grep -c "^$DISK" ;;
+esac
+}
+
+
+#/**
+# ogGetPartitionTableType int_ndisk
+#@brief Devuelve el tipo de tabla de particiones del disco (GPT o MSDOS)
+#@param int_ndisk nº de orden del disco
+#@return str_tabletype - Tipo de tabla de paritiones
+#@warning Salidas de errores no determinada
+#@note tabletype = { MSDOS, GPT }
+#@note Requisitos: parted
+#@version 1.0.4 - Primera versión para OpenGnSys
+#@author Universidad de Huelva
+#@date 2012/03/01
+#*/ ##
+function ogGetPartitionTableType ()
+{
+# Variables locales.
+local DISK
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
+ "$FUNCNAME 1 => MSDOS"
+ return
+fi
+# Error si no se recibe 1 parámetro.
+[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Sustituye n de disco por su dispositivo.
+DISK=`ogDiskToDev $1` || return $?
+parted -sm $DISK print | awk -F: -v D=$DISK '{ if($1 == D) print toupper($6)}'
+}
+
+
+#/**
# ogGetPartitionType int_ndisk int_npartition
#@brief Devuelve el mnemonico con el tipo de partición.
#@param int_ndisk nº de orden del disco
@@ -510,21 +925,42 @@ case "$ID" in
5|f) TYPE="EXTENDED" ;;
6|e) TYPE="FAT16" ;;
7) TYPE="NTFS" ;;
+ 700|0700) TYPE="WINDOWS" ;;
b|c) TYPE="FAT32" ;;
+ C01|0C01) TYPE="WIN-RESERV" ;;
11) TYPE="HFAT12" ;;
12) TYPE="COMPAQDIAG" ;;
16|1e) TYPE="HFAT16" ;;
17) TYPE="HNTFS" ;;
1b|1c) TYPE="HFAT32" ;;
42) TYPE="WIN-DYNAMIC" ;;
- 82) TYPE="LINUX-SWAP" ;;
- 83) TYPE="LINUX" ;;
- 8e) TYPE="LINUX-LVM" ;;
+ 7F00) TYPE="CHROMEOS-KRN" ;;
+ 7F01) TYPE="CHROMEOS" ;;
+ 7F02) TYPE="CHROMEOS-RESERV" ;;
+ 82|8200) TYPE="LINUX-SWAP" ;;
+ 83|8300) TYPE="LINUX" ;;
+ 8301) TYPE="LINUX-RESERV" ;;
+ 8e|8E00) TYPE="LINUX-LVM" ;;
+ a5|A503) TYPE="FREEBSD" ;;
+ A500) TYPE="FREEBSD-DISK" ;;
+ A501) TYPE="FREEBSD-BOOT" ;;
+ A502) TYPE="FREEBSD-SWAP" ;;
+ a6) TYPE="OPENBSD" ;;
a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix)
- af) TYPE="HFS" ;;
- bf) TYPE="SOLARIS" ;;
- ca) TYPE="CACHE" ;;
- fd) TYPE="LINUX-RAID" ;;
+ af|AF00) TYPE="HFS" ;;
+ Af01) TYPE="HFS-RAID" ;;
+ be|BE00) TYPE="SOLARIS-BOOT" ;;
+ bf|BF0[0145]) TYPE="SOLARIS" ;;
+ BF02) TYPE="SOLARIS-SWAP" ;;
+ BF03) TYPE="SOLARIS-DISK" ;;
+ ca|CA00) TYPE="CACHE" ;;
+ da) TYPE="DATA" ;;
+ ee) TYPE="GPT" ;;
+ ef|EF00) TYPE="EFI" ;;
+ EF01) TYPE="MBR" ;;
+ EF02) TYPE="BIOS-BOOT" ;;
+ fb) TYPE="VMFS" ;;
+ fd|FD00) TYPE="LINUX-RAID" ;;
*) TYPE="UNKNOWN" ;;
esac
echo "$TYPE"
@@ -619,31 +1055,37 @@ echo
#/**
# ogListPrimaryPartitions int_ndisk
-#@brief Metafunción que lista las particiones primarias no vacías definidas en un disco.
+#@brief Metafunción que lista las particiones primarias no vacías de un disco.
#@param int_ndisk nº de orden del disco
#@see ogListPartitions
#*/ ##
function ogListPrimaryPartitions ()
{
# Variables locales.
-local PARTS
+local PTTYPE PARTS
+PTTYPE=$(ogGetPartitionTableType $1) || return $?
PARTS=$(ogListPartitions "$@") || return $?
-echo $PARTS | cut -sf1-4 -d" " | sed 's/\( EMPTY:0\)*$//'
+case "$PTTYPE" in
+ GPT) echo $PARTS | sed 's/\( EMPTY:0\)*$//' ;;
+ MSDOS) echo $PARTS | cut -sf1-4 -d" " | sed 's/\( EMPTY:0\)*$//' ;;
+esac
}
#/**
# ogListLogicalPartitions int_ndisk
-#@brief Metafunción que lista las particiones lógicas definidas en un disco.
+#@brief Metafunción que lista las particiones lógicas de una tabla tipo MSDOS.
#@param int_ndisk nº de orden del disco
#@see ogListPartitions
#*/ ##
function ogListLogicalPartitions ()
{
# Variables locales.
-local PARTS
+local PTTYPE PARTS
+PTTYPE=$(ogGetPartitionTableType $1) || return $?
+[ "$PTTYPE" == "MSDOS" ] || ogRaiseError $OG_ERR_PARTITION "" || return $?
PARTS=$(ogListPartitions "$@") || return $?
echo $PARTS | cut -sf5- -d" "
}
@@ -687,9 +1129,54 @@ parted -s $DISK set $2 boot on 2>/dev/null
#/**
+# ogSetPartitionId int_ndisk int_npartition str_type
+#@brief Cambia el identificador de la partición.
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_partid mnemónico de tipo de partición
+#@return (nada)
+#@attention Requisitos: fdisk, sgdisk
+#@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date 2008/10/27
+#@version 1.0.4 - Soporte para discos GPT.
+#@author Universidad de Huelva
+#@date 2012/03/13
+#*/ ##
+function ogSetPartitionId ()
+{
+# Variables locales
+local DISK PART PTTYPE ID
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \
+ "$FUNCNAME 1 1 NTFS"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Sustituye nº de disco por su dispositivo.
+DISK=`ogDiskToDev $1` || return $?
+PART=`ogDiskToDev $1 $2` || return $?
+
+# Elección del tipo de partición.
+PTTYPE=$(ogGetPartitionTableType $1)
+ID=$(ogTypeToId "$3" "$PTTYPE")
+[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$3,$PTTYPE" || return $?
+case "$PTTYPE" in
+ GPT) sgdisk $DISK -t$PART:$ID 2>/dev/null ;;
+ MSDOS) echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK &>/dev/null ;;
+esac
+partprobe $DISK 2>/dev/null
+}
+
+
+#/**
# ogSetPartitionSize int_ndisk int_npartition int_size
#@brief Muestra el tamano en KB de una particion determinada.
-#@param int_ndisk nº de orden del disco
+#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
#@param int_size tamaño de la partición (en KB)
#@return (nada)
@@ -722,9 +1209,10 @@ PART="$(ogDiskToDev $1 $2)" || return $?
SIZE=$[$3*2] || ogRaiseError $OG_ERR_FORMAT || return $?
# Redefinir el tamaño de la partición.
sfdisk -f -uS -N$2 $DISK <<< ",$SIZE" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
-partprobe 2>/dev/null
+partprobe $DISK 2>/dev/null
}
+
#/**
# ogUnhidePartition int_ndisk int_npartition
#@brief Hace visible una partición oculta.
@@ -788,35 +1276,6 @@ done
}
-
-#/**
-# ogGetPartitionsNumber int_ndisk
-#@brief Detecta el numero de particiones del disco duro indicado.
-#@param int_ndisk nº de orden del disco
-#@return Devuelve el numero paritiones del disco duro indicado
-#@warning Salidas de errores no determinada
-#@attention Requisitos: parted
-#@note Notas sin especificar
-#@version 0.1 - Integracion para Opengnsys - EAC: DetectNumberPartition () en ATA.lib
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date Date: 27/10/2008
-#@version 1.0 - Uso de sfdisk Primera version para OpenGnSys
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009/07/24
-#*/ ##
-function ogGetPartitionsNumber ()
-{
- #local disco totalpart
- #disco=`ogDiskToDev $1`
- #totalpart=`parted $disco print | egrep ^" [0123456789] " -c`
- #echo $totalpart
-local DISK
-# Contar el nº de veces que aparece el disco en su lista de particiones.
-DISK=$(ogDiskToDev $1) 2>/dev/null
-sfdisk -l $DISK 2>/dev/null | grep -c "^$DISK"
-}
-
-
#/** @function ogDiskToRelativeDev: @brief Traduce los ID de discos o particiones EAC a ID Linux relativos, es decir 1 1 => sda1
#@param Admite 1 parametro: $1 int_numdisk
#@param Admite 2 parametro: $1 int_numdisk $2 int_partition
@@ -843,71 +1302,6 @@ PART=$(ogDiskToDev|cut -f$1 -d' ')$2
echo $PART | cut -f3 -d \/
}
-#/** @function ogDeletePartitionTable: @brief Borra la tabla de particiones del disco.
-#@param $1 opcion A (identificador LINUX) str_ID_linux (/dev/sda)
-#@param $1 opcion B (Identifiador EAC) int_numdiskEAC(1)
-#@return la informacion propia del fdisk
-#@warning no definidos
-#@attention
-#@note
-#@version 0.1 - Integracion para Opengnsys - EAC: DeletePartitionTable () en ATA.lib
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date 27/10/2008
-#*/
-function ogDeletePartitionTable () {
-if [ $# = 0 ]
-then
- Msg "sintaxis1: ogDeletePartitionTable int_disk" red
- Msg "sintaxis2: ogDeletePartitionTable str_/dev/sdX" red
- return
-fi
-if [ -n "${1%/dev/*}" ]
- then
- dev=`DiskToDev $1`
- else
- dev=$1
-fi
-echo -ne "o\nw" | fdisk $dev
-}
-
-
-#/** @function ogSetPartitionId: @brief Cambia el identificador de la particion, pero no su sistema de archivos.
-#@param $1 int_numdiskEAC
-#@param $2 int_numpartitionEAC
-#@param $3 str_tipoPartition admite EXT2 EXT3 NTFS FAT32 SWAP CACHE
-#@return la propia del fdisk
-#@warning no controla los parametros, si se introducen mal o simplemente no se introducen no muestra mensaje
-#@warning Identifica por nombre del sistema de archivos no por número
-#@attention Requisitos: fdisk
-#@note
-#@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date 27/10/2008
-#*/
-function ogSetPartitionId() {
-# Variables locales
-local DISK PART ID
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \
- "$FUNCNAME 1 1 NTFS"
- return
-fi
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-
-# Sustituye nº de disco por su dispositivo.
-DISK=`ogDiskToDev $1` || return $?
-PART=`ogDiskToDev $1 $2` || return $?
-
-# Elección del tipo de partición.
-ID=$(ogFsToId "$3")
-[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$3" || return $?
-
-echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK 1>/dev/null 2>&1
-}
-
#/** @function ogDeletePartitionsLabels: @brief Elimina la informacion que tiene el kernel del cliente og sobre los labels de los sistemas de archivos
#@param No requiere
@@ -920,6 +1314,13 @@ echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK 1>/dev/null 2>&1
#@date 27/10/2008
#*/
function ogDeletePartitionsLabels () {
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME " \
+ "$FUNCNAME "
+ return
+fi
+
rm /dev/disk/by-label/* # */ COMENTARIO OBLIGATORIO PARA DOXYGEN
}
diff --git a/client/engine/File.lib b/client/engine/File.lib
index b04d2278..ea3956e6 100755
--- a/client/engine/File.lib
+++ b/client/engine/File.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase File
#@class File
#@brief Funciones para gestión de archivos y directorios.
-#@version 0.9.2
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -20,6 +20,9 @@
#@version 0.9.2 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-07-24
+#@version 1.0.4 - Calcula solo el checksum del último MB del fichero.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-03-16
#*/ ##
function ogCalculateChecksum ()
{
@@ -34,7 +37,7 @@ fi
# Comprobar que existe el fichero y devolver sus datos.
FILE=$(ogGetPath "$@")
[ -n "$FILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
-md5sum "$FILE" 2>&1 | cut -f1 -d" "
+tail -c1M "$FILE" | md5sum -b 2>&1 | cut -f1 -d" "
}
@@ -80,10 +83,14 @@ test "$(cat "$SOURCE.sum" 2>/dev/null)" == "$(cat "$TARGET.sum" 2>/dev/null)"
# ogCopyFile [ str_repo | int_ndisk int_npart ] path_source [ str_repo | int_ndisk int_npart ] path_target
#@brief Metafunción para copiar un fichero de sistema OpenGnSys a un directorio.
#@see ogGetPath
+#@return Progreso de la copia.
#@warning Deben existir tanto el fichero origen como el directorio destino.
#@version 0.9 - Pruebas con OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-20
+#@version 1.0.4 - Copiar usando rsync.
+#@author Universidad de Huelva
+#@date 2012-07-06
#*/ ##
function ogCopyFile ()
{
@@ -111,8 +118,8 @@ esac
[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $?
TARGET="$(ogGetPath "$@")"
[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return $?
-# Copiar fichero.
-cp -a "$SOURCE" "$TARGET" # (definir posible error)
+# Copiar fichero (para evitar problemas de comunicaciones las copias se hacen con rsync en vez de cp).
+rsync --progress -avh "$SOURCE" "$TARGET"
}
diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib
index 1af06de8..0f23c91b 100755
--- a/client/engine/FileSystem.lib
+++ b/client/engine/FileSystem.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase FileSystem
#@class FileSystem
#@brief Funciones para gestión de sistemas de archivos.
-#@version 0.9
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -27,7 +27,10 @@
#@version 1.0.2 - Ignorar códigos de salida de comprobación (no erróneos).
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011-09-23
-#*/
+#@version 1.0.4 - Soportar HFS/HFS+.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-05-21
+#*/ ##
function ogCheckFs ()
{
# Variables locales.
@@ -55,6 +58,8 @@ case "$TYPE" in
FAT32) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
FAT16) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
FAT12) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
+ HFS) PROG="fsck.hfs" ;;
+ HFS+) PROG="fsck.hfsplus" ;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
return $? ;;
esac
@@ -69,6 +74,7 @@ if ogIsLocked $1 $2; then
fi
# Comprobar en modo uso exclusivo.
ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
eval $PROG $PARAMS $PART
ERRCODE=$?
case $ERRCODE in
@@ -100,7 +106,7 @@ return $ERRCODE
#@version 0.9 - Primera adaptacion para OpenGNSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-23
-#*/
+#*/ ##
function ogExtendFs ()
{
# Variables locales.
@@ -124,6 +130,7 @@ TYPE=$(ogGetFsType $1 $2)
case "$TYPE" in
EXT[234]) PROG="resize2fs"; PARAMS="-f" ;;
REISERFS) PROG="resize_reiserfs"; PARAMS="-f" ;;
+# BTRFS) PROG="btrfs"; PARAMS="filesystem resize max" ;;
NTFS) PROG="ntfsresize"; PARAMS="<<<\"y\" -f" ;;
*) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
return $? ;;
@@ -139,6 +146,7 @@ if ogIsLocked $1 $2; then
fi
# Redimensionar en modo uso exclusivo.
ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
eval $PROG $PARAMS $PART &>/dev/null
ERRCODE=$?
case $ERRCODE in
@@ -156,7 +164,7 @@ return $ERRCODE
#/**
# ogFormat int_ndisk int_npartition | CACHE
#@see ogFormatFs ogFormatCache
-#*/
+#*/ ##
function ogFormat ()
{
case "$*" in
@@ -183,6 +191,9 @@ esac
#@version 0.9 - Primera versión para OpenGNSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-08
+#@version 1.0.4 - Solucionado error cuando no se detecta tipo de sistema de ficheros pero si se indica
+#@author Universidad de Huelva
+#@date 2012-04-11
#*/ ##
function ogFormatFs ()
{
@@ -202,15 +213,26 @@ fi
[ $# -ge 2 -a $# -le 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Obtener dispositivo y tipo de sisitema de archivos.
PART="$(ogDiskToDev $1 $2)" || return $?
-TYPE="$(ogGetFsType $1 $2)" || return $?
+TYPE="$(ogGetFsType $1 $2)"
+# Si no se detecto el tipo de sistema de ficheros
+if [ -z "$TYPE" ]; then
+ # Si no se indico ningun tipo de sistema de ficheros se retorna
+ if [ -z "$3" ]; then
+ return $?
+ else
+ # Si no se detecto, se asigna el indicado
+ TYPE="$3"
+ fi
+fi
# Elegir tipo de formato segun el tipo de particion.
case "$3" in
- EXT2) ID=83; PROG="mkfs.ext2";;
- EXT3) ID=83; PROG="mkfs.ext3";;
- EXT4) ID=83; PROG="mkfs.ext4";;
+ EXT2) ID=83; PROG="mkfs.ext2" ;;
+ EXT3) ID=83; PROG="mkfs.ext3" ;;
+ EXT4) ID=83; PROG="mkfs.ext4" ;;
+ BTRFS) ID=83; PROG="mkfs.btrfs" ;;
REISERFS) ID=83; PROG="mkfs.reiserfs"; PARAMS="-f" ;;
- REISER4) ID=83; PROG="mkfs.reiser4";;
+ REISER4) ID=83; PROG="mkfs.reiser4" ;;
XFS) ID=83; PROG="mkfs.xfs"; PARAMS="-f" ;;
JFS) ID=83; PROG="mkfs.jfs"; PARAMS="<<<\"y\"";;
NTFS) ID=7; PROG="mkntfs"; PARAMS="-f" ;;
@@ -221,16 +243,20 @@ case "$3" in
HFAT16) ID=16; PROG="mkdosfs"; PARAMS="-F 16" ;;
FAT12) ID=1; PROG="mkdosfs"; PARAMS="-F 12" ;;
HFAT12) ID=11; PROG="mkdosfs"; PARAMS="-F 12" ;;
+ HFS) ID=af; PROG="mkfs.hfs" ;;
+ HFS+) ID=af; PROG="mkfs.hfsplus" ;;
+ UFS) ID=bf; PROG="mkfs.ufs"; PARAMS="-O 2" ;;
*) LABEL="$3" ;;
esac
# Si no se indica explícitamente, detectar el tipo de sistema de archivos.
if [ -z "$PROG" ]; then
case "$TYPE" in
- EXT2) PROG="mkfs.ext2";;
- EXT3) PROG="mkfs.ext3";;
- EXT4) PROG="mkfs.ext4";;
+ EXT2) PROG="mkfs.ext2" ;;
+ EXT3) PROG="mkfs.ext3" ;;
+ EXT4) PROG="mkfs.ext4" ;;
+ BTRFS) PROG="mkfs.btrfs" ;;
REISERFS) PROG="mkfs.reiserfs"; PARAMS="-f" ;;
- REISER4) PROG="mkfs.reiser4";;
+ REISER4) PROG="mkfs.reiser4" ;;
XFS) PROG="mkfs.xfs"; PARAMS="-f" ;;
JFS) PROG="mkfs.jfs"; PARAMS="<<<\"y\"" ;;
LINUX-SWAP) PROG="mkswap" ;;
@@ -238,6 +264,9 @@ if [ -z "$PROG" ]; then
FAT32|HFAT32) PROG="mkdosfs"; PARAMS="-F 32" ;;
FAT16|HFAT16) PROG="mkdosfs"; PARAMS="-F 16" ;;
FAT12|HFAT12) PROG="mkdosfs"; PARAMS="-F 12" ;;
+ HFS) PROG="mkfs.hfs" ;;
+ HFS+) PROG="mkfs.hfsplus" ;;
+ UFS) PROG="mkfs.ufs"; PARAMS="-O 2" ;;
*) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
return $? ;;
esac
@@ -266,6 +295,7 @@ if ogIsLocked $1 $2; then
fi
# Formatear en modo uso exclusivo.
ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
eval $PROG $PARAMS $PART 2>/dev/null
ERRCODE=$?
case $ERRCODE in
@@ -279,6 +309,62 @@ return $ERRCODE
#/**
+# ogGetFsSize int_ndisk int_npartition [str_unit]
+#@brief Muestra el tamanio del sistema de archivos indicado, permite definir la unidad de medida, por defecto GB
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_unit unidad (opcional, por defecto: KB)
+#@return float_size - Tamaño del sistema de archivos
+#@note str_unit = { KB, MB, GB, TB }
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo.
+#@version 0.1 - Integracion para Opengnsys - EAC: SizeFileSystem() en FileSystem.lib
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date 2008-10-27
+#@version 1.0.4 - Adaptación de las salidas.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-06-18
+#*/ ##
+function ogGetFsSize ()
+{
+# Variables locales.
+local MNTDIR UNIT VALUE FACTOR SIZE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition [str_unit]" \
+ "$FUNCNAME 1 1 => 15624188" \
+ "$FUNCNAME 1 1 KB => 15624188"
+ return
+fi
+# Error si no se reciben 2 o 3 parámetros.
+[ $# == 2 ] || [ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Obtener unidad y factor de medida.
+UNIT="$3"
+UNIT=${UNIT:-"KB"}
+case "$UNIT" in
+ [kK]B)
+ FACTOR=1 ;;
+ MB) FACTOR=1024 ;;
+ GB) FACTOR=$[1024*1024] ;;
+ TB) FACTOR=$[1024*1024*1024] ;;
+ *) ogRaiseError $OG_ERR_FORMAT "$3 != { KB, MB, GB, TB }"
+ return $? ;;
+esac
+
+# Obtener el tamaño del sistema de archivo (si no está formateado; tamaño = 0).
+MNTDIR="$(ogMount $1 $2 2>/dev/null)"
+if [ -n "$MNTDIR" ]; then
+ VALUE=$(df -BK "$MNTDIR" | awk '{getline; print $2}')
+ SIZE=$(echo "$VALUE $FACTOR" | awk '{printf "%f\n", $1/$2}')
+else
+ SIZE=0
+fi
+# Devolver el tamaño (quitar decimales si son 0).
+echo ${SIZE%.0*}
+}
+
+
+#/**
# ogGetFsType int_ndisk int_npartition
#@brief Devuelve el mnemonico con el tipo de sistema de archivos.
#@param int_ndisk nº de orden del disco
@@ -313,9 +399,10 @@ fi
# Detectar id. de tipo de partición y codificar al mnemonico.
DISK=$(ogDiskToDev "$1") || return $?
ID=$(ogGetPartitionId "$1" "$2") || return $?
+[ "$ID" == "a7" ] && ID="ca" # Traducir antiguo id. de partición de caché.
TYPE=""
case "$ID" in
- ca|a7) # Detectar Caché local.
+ ca|CA00) # Detectar caché local (revisar detección en tablas GPT).
ogIsFormated $1 $2 2>/dev/null && TYPE="CACHE"
;;
*) # Detectar sistema de ficheros.
@@ -537,6 +624,9 @@ esac
#@version 0.9 - Primera version para OpenGNSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-28
+#@version 1.0.4 - Soportar HFS/HFS+.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-05-21
#*/ ##
function ogMountFs ()
{
@@ -585,6 +675,7 @@ if [ -z "$MNTDIR" ]; then
NTFS|HNTFS) MOUNT=ntfs-3g ;;
FAT16|FAT32|HFAT16|HFAT32)
MOUNT=mount; PARAMS="-t vfat" ;;
+ HFS|HFS+) MOUNT=mount; PARAMS="-o force" ;;
*) #/// Error, si la partición no es montable.
rmdir $MNTDIR
ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
@@ -673,18 +764,18 @@ case "$(ogGetFsType $1 $2)" in
# ;;
NTFS|HNTFS)
ogDeleteFile $1 $2 pagefile.sys
- ogDeleteFile $1 $2 hiberfile.sys
+ ogDeleteFile $1 $2 hiberfil.sys
ogUnmount $1 $2 2>/dev/null
## NTFS: Obtiene tamaño mínimo en MB.
#SIZE=$(ntfsresize -fi $PART | awk '/resize at/ {print int($8*1.1)}')
#ntfsresize -fns "${SIZE}M" $PART >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
#ntfsresize -fs "${SIZE}M" $PART <<<"y" >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
- SIZE=$(ogReduceFsCheck $1 $2)
- [ "$SIZE" == 0 ] && return 1
+ SIZE=$(ogReduceFsCheck $1 $2)
+ [ "$SIZE" == 0 ] && return 1
ntfsresize -fs "${SIZE}M" $PART <<<"y" || ogRaiseError $OG_ERR_PARTITION "error reduciendo $1,$2" || return $?
- ;;
+ ;;
*) ogRaiseError $OG_ERR_PARTITION "$1,$2"
- return $? ;;
+ return $? ;;
esac
ogGetFsSize $1 $2
}
@@ -749,7 +840,7 @@ esac
#/**
# ogUnlock int_ndisk int_npartition
#@see ogUnlockPartition
-#*/
+#*/ ##
function ogUnlock ()
{
ogUnlockPartition "$@"
@@ -794,7 +885,7 @@ rm -f $LOCKFILE
#/**
# ogUnmount int_ndisk int_npartition
#@see ogUnmountFs
-#*/
+#*/ ##
function ogUnmount ()
{
ogUnmountFs "$@"
@@ -883,57 +974,6 @@ for ((PART=1; PART<=$(ogGetPartitionsNumber $1); PART++)); do
done
}
-#/** @function ogGetFsSize: @brief Muestra el tamanio del sistema de archivos indicado, permite definir la unidad de medida, por defecto GB
-#@param $1 int_diskEAC
-#@param $2 int_PartitionEAC
-#@param $3 str_UnidadMediada parametro opcional, admite [ kB MB GB -default GB]
-#@return cadena con int_TotalSize:int_DataSize:int_DataFree
-#@warning Salidas de errores no determinada
-#@warning
-#@attention
-#@version 0.1 - Integracion para Opengnsys - EAC: SizeFileSystem() en FileSystem.lib
-#@author Antonio J. Doblas Viso. Universidad de Malaga
-#@date 2008-10-27
-#*/
-function ogGetFsSize () {
-if [ $# = 0 ]
-then
- echo "sintaxis: ogGetFsSize int_disco int_partition str_SizeOutput [ kB MB GB -default GB]-]" red
- echo "devuelve int_size : int_data : int_free" red
-return
-fi
-if [ $# -ge 2 ]
-then
- particion=`ogMount $1 $2 ` #1>/dev/null 2>&1
- if [ -z $3 ]
- then
- unit=kB # s B kB MB GB TB %
- else
- unit=$3
- fi
- case $unit in
- kB)
- factor="1.024";
- # valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d:%d:%d", size,used,free}'`
- valor=`df | grep $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d", size}'`
- ;;
- MB)
- factor="1.024/1000";
- valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000; used=$3*1.024/1000; free=$4*1.024/1000; printf "%d:%d:%d", size,used,free}'`
- ;;
- GB)
- factor="1.024/1000000";
- valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000000; used=$3*1.024/1000000; free=$4*1.024/1000000; printf "%f:%f:%f", size,used,free}'`
- ;;
- esac
- #echo $valor
- #NumberRound $valor
- #valor=`NumberRound $valor`;
- ogUnmount $1 $2 1>/dev/null 2>&1
- echo $valor
-
-fi
-}
function ogGetFreeSize () {
if [ $# = 0 ]
@@ -975,37 +1015,3 @@ then
fi
}
-
-
-function ogDeletePartitionsLabels ()
-{
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME " \
- "$FUNCNAME "
- return
-fi
-rm /dev/disk/by-label/* 2>/dev/null # */ COMENTARIO OBLIGATORIO PARA DOXYGEN
-}
-
-function ogDeletePartitionTable ()
-{
-
-# Variables locales.
-local DISK
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME int_disk" \
- "$FUNCNAME 1"
- return
-fi
-# Error si no se reciben 1 parámetros.
-[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-
-# Obteniendo Identificador linux de la particion.
-DISK=$(ogDiskToDev $1) || return $?
-
-# Elimando las particiones con fdisk
-echo -ne "o\nw" | fdisk $DISK
-}
diff --git a/client/engine/Image.lib b/client/engine/Image.lib
index 5ce8aa1c..6c53d5da 100755
--- a/client/engine/Image.lib
+++ b/client/engine/Image.lib
@@ -787,82 +787,3 @@ IMGFILE=$(ogGetPath "$1" "$2.img") || return $?
ogGetImageInfo $IMGFILE | awk -F: '{print $4}'
}
-
-#/**
-# ogGetImageFs str_repo path_image
-#@brief Devuelve el tipo de sistema de archivos almacenado en un fichero de imagen.
-#@param str_repo repositorio de imágenes o caché local
-#@param path_image camino de la imagen
-#@return str_imgtype - mnemónico del tipo de sistema de archivos
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@exception OG_ERR_NOTFOUND fichero de imagen no encontrado.
-#@todo Comprobar salidas para todos los tipos de sistemas de archivos.
-#/**
-function ogGetImageFsUS ()
-{
-local IMGFILE IMGTYPE
-IMGTYPE=$(ogGetImageType "$1" "$2")
-IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") || return $?
-[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $?
-case "$IMGTYPE" in
- img) # Partimage.
- partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \
- awk '/^Filesystem/ {sub(/\.\.+/," "); if ($2=="ntfs") print NTFS;
- else { sub(/fs$/,""); print toupper($2);} }'
- ;;
- pgz) # Partclone / GZip
- gzip -dc "$IMGFILE" | partclone.chkimg -C -s - 2>&1 | \
- awk '/^File system/ {if ($2=="EXTFS") print "EXT3"; else print $3;}'
- ;;
- *) # Error si el fichero de imagen no es accesible.
- ogRaiseError OG_ERR_NOTFOUND "$IMGFILE"
- return $? ;;
-esac
-}
-
-
-# ogGetImageSize str_repo path_image
-#@brief Devuelve el tamaño del sistema de archivos almacenado en un fichero de imagen.
-#@param str_repo repositorio de imágenes o caché local
-#@param path_image camino de la imagen
-#@return int_size - tamaño (en KB)
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@exception OG_ERR_NOTFOUND fichero de imagen no encontrado.
-#*/
-#@warning En pruebas iniciales
-#@todo Definición de parámetros y salidas.
-#@version 0.1 - Primera versión muy en pruebas para OpenGNSys
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009/09/11
-#*/ ##
-function ogGetImageSizeUS ()
-{
-# Variables locales
-local IMGFILE IMGTYPE
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_dir str_image int_ndisk int_npart" \
- "$FUNCNAME 1 1 REPO /aula1/winxp ==> 5642158"
- return
-fi
-# Error si no se reciben menos de 2 parámetros.
-[ $# -ne 2 ] && ogRaiseError $OG_ERR_FORMAT && return $?
-# Devuelve el tamaño de la imagen en KB.
-IMGTYPE=$(ogGetImageType "$1" "$2")
-IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE")
-case "$IMGTYPE" in
- img) # Partimage.
- partimage -B gui=no imginfo "$IMGFILE" 2>&1 | \
- awk '/Partition size/ {sub(/\.\.+/," "); ps=$3} END {print ps*1024*1024;}'
- ;;
- pgz) # Partclone / GZip
- gzip -dc "$IMGFILE" | partclone.chkimg -C -s - 2>&1 | \
- awk -F: '/Block size/ {bs=$2} /Used block/ {ub=$2} END {print bs*ub/1024}'
- ;;
- *) # Error si el fichero de imagen no es accesible.
- ogRaiseError OG_ERR_NOTFOUND "$IMGFILE"
- return $? ;;
-esac
-}
-
diff --git a/client/engine/PostConf.lib b/client/engine/PostConf.lib
new file mode 100755
index 00000000..80c0b24f
--- /dev/null
+++ b/client/engine/PostConf.lib
@@ -0,0 +1,380 @@
+#!/bin/bash
+#/**
+#@file PostConf.lib
+#@brief Librería o clase PostConf
+#@class PostConf
+#@brief Funciones para la postconfiguración de sistemas operativos.
+#@version 1.0.4
+#@warning License: GNU GPLv3+
+#*/
+
+
+#/**
+# ogAddCmd int_ndisk int_npartition str_filename str_commands
+#@brief Añade comandos al cmd creado por ogInstalMiniSetup
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema
+#@param str_commands comando o comandos que se añadiran al fichero
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogAddCmd ()
+{
+local MOUNTPOINT CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_commands" \
+ "$FUNCNAME 1 1 filename.cmd command"
+ return
+fi
+# Error si no se reciben 4 parámetros.
+[ $# == 4 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Punto de montaje
+MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
+# Comprobar que existe el fichero de comandos.
+CMDFILE=$(ogGetPath "$MOUNTPOINT/windows/system32/$3")
+[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/windows/system32/$3" || return $?
+
+# Concatenamos el comando en el fichero de comandos
+cat >> "$CMDFILE" << EOF
+$4
+EOF
+}
+
+
+#/**
+# ogDomainScript int_ndisk int_npartition str_domain str_user str_password
+#@brief Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
+#@param str_domain dominio donde se quiere conectar
+#@param str_user usuario con privilegios para unir al dominio
+#@param str_password password del usuario con privilegios
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogDomainScript ()
+{
+local CMDDIR
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" \
+ "$FUNCNAME int_ndisk int_npartition str_filename str_domain str_user str_password" \
+ "$FUNCNAME 1 1 filename.cmd domain user password_user"
+ return
+fi
+# Error si no se reciben 6 parámetros.
+[ $# == 6 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Punto de montaje
+MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
+# Comprobar que existe el directorio de comandos.
+CMDDIR=$(ogGetPath "$MOUNTPOINT/windows/system32")
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
+
+# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio.
+ogAddCmd $1 $2 "$3" "CSCRIPT joindomain.vbs"
+# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
+ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.vbs"
+# Metemos unas claves de registro para que el dominio salga seleccionado por defecto
+ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$3\" /f"
+
+# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
+cat > "$CMDDIR/joindomain.vbs" << EOF
+Const JOIN_DOMAIN = 1
+Const ACCT_CREATE = 2
+Const ACCT_DELETE = 4
+Const WIN9X_UPGRADE = 16
+Const DOMAIN_JOIN_IF_JOINED = 32
+Const JOIN_UNSECURE = 64
+Const MACHINE_PASSWORD_PASSED = 128
+Const DEFERRED_SPN_SET = 256
+Const INSTALL_INVOCATION = 262144
+
+strDomain = "$4"
+strUser = "$5"
+strPassword = "$6"
+
+Set objNetwork = CreateObject("WScript.Network")
+strComputer = objNetwork.ComputerName
+
+Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _
+ strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
+
+ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _
+ strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE)
+EOF
+}
+
+
+#/**
+# ogInstallLinuxClient int_ndisk int_filesys
+#@brief Instala el cliente OpenGnSys para sistemas operativos Linux.
+#@param int_ndisk nº de orden del disco
+#@param int_filesys nº de orden del sistema de archivos
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
+#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
+#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
+#@version 1.0.4 - Primera adaptación para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-04-10
+#*/ ##
+function ogInstallLinuxClient ()
+{
+# Variables locales.
+local PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
+ "$FUNCNAME 1 1"
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Obtener sistema de archvios.
+PART="$(ogDiskToDev $1 $2)" || return $?
+# Comprobar si el sistema de archivos no está bloqueado.
+MNTDIR=$(ogMount $1 $2) 2>/dev/null
+[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $?
+# Comprobar si existe el cliente y los directorios y ficheros destino.
+CLIENTFILE=$OGLIB/ogclient/ogAdmLnxClient
+[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
+for i in /usr/local/sbin /sbin /usr/sbin; do
+ [ -d $MNTDIR/$i ] && SBINDIR=$i
+done
+[ -n "$SBINDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 sbin" || return $?
+for i in /usr/local/etc /etc; do
+ [ -d $MNTDIR/$i ] && ETCDIR=$i
+done
+[ -n "$ETCDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 etc" || return $?
+for i in $ETCDIR/rc.local $ETCDIR/rc.d/rc.local; do
+ [ -f $i ] && RCLOCAL=$i
+done
+[ -n "$RCLOCAL" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 rc.local" || return $?
+# Realizar la instalación en modo uso exclusivo.
+ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
+# Copiar cliente, generar fichero de configuración e incluir en el arranque.
+cp -a $CLIENTFILE $MNTDIR/$SBINDIR
+cat > $MNTDIR/$ETCDIR/ogAdmLnxClient.cfg << EOT
+ServidorAdm=$(ogGetServerIp)
+PUERTO=2008
+IPLOCAL=$(ogGetIpAddress)
+EOT
+cp -a $MNTDIR/$RCLOCAL /tmp/rclocal
+awk -v sbin=$SBINDIR -v etc=$ETCDIR \
+ '{ if (/^#/) { print; }
+ else {
+ if (loc==0) {
+ printf "%s/ogAdmLnxClient -f %s/ogAdmLnxClient.cfg &\n",sbin,etc;
+ loc=1; }
+ print; }
+ }' /tmp/rclocal > $MNTDIR/$RCLOCAL
+rm /tmp/rclocal
+ogUnlock $1 $2
+}
+
+
+#/**
+# ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ]
+#@brief Metafunción para instalar archivo que se ejecutará en el arranque de Windows.
+#@see ogInstallFirstBoot ogInstallRunonce
+#*/ ##
+function ogInstallMiniSetup ()
+{
+case $# in
+ 3) # Ejecución en el primer arranque de la máquina.
+ ogInstallFirstBoot "$@" ;;
+ 6|8) # Ejecución en el "runonce".
+ ogInstallRunonce "$@" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ exit $? ;;
+esac
+}
+
+
+#/**
+# ogInstallFirstBoot int_ndisk int_npartition str_filename
+#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del archivo .cmd a ejecutar en el arranque
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@note El archivo estará en system32 y será visible por el sistema.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup.
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogInstallFirstBoot ()
+{
+local MNTDIR DIR CMDDIR CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \
+ "$FUNCNAME 1 1 filename.cmd"
+ return
+fi
+# Error si no se reciben 2 parámetros.
+[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Comprobar que existe el directorio del fichero de comandos.
+MNTDIR=$(ogMount "$1" "$2") || return $?
+for i in winnt windows; do
+ DIR=$(ogGetPath $MNTDIR/$i/system32)
+ [ -n "$DIR" ] && CMDDIR=$DIR
+done
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MNTDIR/windows/system32" || return $?
+CMDFILE="$CMDDIR/$2"
+
+# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la
+# postconfiguracion resetee el mini setup, sino lo haria en cada arranque.
+cat > "$CMDFILE" << EOF
+REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f
+REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f
+EOF
+
+#Creamos las claves de registro necesarias para que se haga la ejecucion del .cmd al aranque
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $2"
+}
+
+
+#/**
+# ogInstallRunonce int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]
+#@brief Crea el archivo cmd que se ejecutara en el runonce de un usuario administrador
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
+#@param str_adm_user usuario administrador para hacer autologin y ejecutar el runonce
+#@param str_adm_password password del usuario administrador
+#@param bool_autologin si despues de la postconfiguracion queremos que la maquina haga autologin (0 o 1)
+#@param str_auto_user Usuario con el que queremos que haga autologin despues de la postconfiguracion
+#@param str_auto_password Password del usuario que hara autologin
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Heredado de antigua función ogInstallMiniSetup
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogInstallRunonce ()
+{
+local MOUNTPOINT DIR CMDDIR CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]" \
+ "$FUNCNAME 1 1 filename.cmd administrator passadmin 1 userauto passuserauto" \
+ "$FUNCNAME 1 1 filename.cmd administrator passadmin 0"
+ return
+fi
+# Error si no se reciben 6 u 8 parámetros.
+[ $# == 6 -o $# == 8 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Punto de montaje.
+MOUNTPOINT="$(ogGetPath "$1" "$2" /)"
+# Comprobar que existe el directorio del fichero de comandos.
+for i in winnt windows; do
+ DIR=$(ogGetPath $MOUNTPOINT/$i/system32)
+ [ -n "$DIR" ] && CMDDIR=$DIR
+done
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/Windows/System32" || return $?
+CMDFILE="$CMDDIR/$3"
+
+if [ $6 == 0 ]; then
+ # Si no volem fer autologin despres de la postconfiguracio o indiquem a las claus de registre
+ cat > "$CMDFILE" << EOF
+DEL C:\ogboot.*
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f
+REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f
+EOF
+else
+ # Si volem fer autologin despres de la postconfiguracio introduim l'informacio a les claus de registre
+ cat > "$CMDFILE" << EOF
+DEL C:\ogboot.*
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f
+EOF
+fi
+#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null
+}
+
+
+#/**
+# ogInstallWindowsClient int_ndisk int_filesys
+#@brief Instala el cliente OpenGnSys para sistemas operativos Windows.
+#@param int_ndisk nº de orden del disco
+#@param int_filesys nº de orden del sistema de archivos
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
+#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
+#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
+#@version 1.0.4 - Primera adaptación para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-04-11
+#*/ ##
+function ogInstallWindowsClient ()
+{
+# Variables locales.
+local PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Obtener sistema de archvios.
+PART="$(ogDiskToDev $1 $2)" || return $?
+# Comprobar si el sistema de archivos no está bloqueado.
+MNTDIR=$(ogMount $1 $2) 2>/dev/null
+[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $?
+# Comprobar si existe el cliente y los directorios y ficheros destino.
+CLIENTFILE=$OGLIB/ogclient/ogAdmWinClient.exe
+[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
+for i in winnt windows; do
+ DIR=$(ogGetPath $MNTDIR/$i)
+ [ -n "$DIR" ] && WINDIR=$DIR
+done
+[ -n "$WINDIR " ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 windows" || return $?
+# Realizar la instalación en modo uso exclusivo.
+ogLock $1 $2
+trap "ogUnlock $1 $2" 1 2 3 6 9
+# Copiar cliente, generar fichero de configuración e incluir en el arranque.
+cp -a $CLIENTFILE "$WINDIR"
+ogInstallMiniSetup $1 $2 ogclient.cmd
+ogAddCmd $1 $2 ogclient.cmd "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)"
+ogUnlock $1 $2
+}
+
diff --git a/client/engine/PostConfEAC.lib b/client/engine/PostConfEAC.lib
index 33667f47..d950319b 100755
--- a/client/engine/PostConfEAC.lib
+++ b/client/engine/PostConfEAC.lib
@@ -601,144 +601,3 @@ schroot -c linux
schroot -end-sessiona --all-sessions
}
-####################################################################################
-################### Funciones para postconfiguracion windows #######################
-############# 2011 Jonathan Alonso Martinez jonathan.alonso@uab.cat ###############
-#################### Universidad Autonoma de Barcelona (Spain)######################
-####################################################################################
-
-#/**
-# ogInstallMiniSetup path_mountpoint str_filename
-#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_filename nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#*/ ##
-function ogInstallMiniSetup ()
-{
-local CMDDIR CMDFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename" \
- "$FUNCNAME /mnt/sda1 filename.cmd"
- return
-fi
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Comprobar que existe el directorio del fichero de comandos.
-CMDDIR=$(ogGetPath "$1/windows/system32")
-[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
-CMDFILE="$CMDDIR/$2"
-
-# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la
-# postconfiguracion resetee el mini setup, sino lo haria en cada arranque.
-cat > "$CMDFILE" << EOF
-REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f
-REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f
-EOF
-
-#Creamos las claves de registro necesarias para que se haga la ejecucion del .cmd al aranque
-ogSetRegistryValue "$1" SYSTEM "\Setup\SystemSetupInProgress" 1
-ogSetRegistryValue "$1" SYSTEM "\Setup\SetupType" 4
-ogSetRegistryValue "$1" SYSTEM "\Setup\CmdLine" "cmd.exe /c $2"
-}
-
-
-# ogAddCmd path_mountpoint str_filename str_commands
-#@brief Añade comandos al cmd creado por ogInstalMiniSetup
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_filename nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema
-#@param str_commands comando o comandos que se añadiran al fichero
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#*/ ##
-
-function ogAddCmd ()
-{
-local CMDFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename str_commands" \
- "$FUNCNAME /mnt/sda1 filename.cmd command"
- return
-fi
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Comprobar que existe el fichero de comandos.
-CMDFILE=$(ogGetPath "$1/windows/system32/$2")
-[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32/$2" || return $?
-
-cat >> "$CMDFILE" << EOF
-$3
-EOF
-}
-
-# ogDomainScript path_mountpoint str_domain str_user str_password
-#@brief Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup
-#@param path_mountpoint directorio donde está montado el sistema Windows
-#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
-#@param str_domain Dominio donde se quiere conectar
-#@param str_user Usuario con privilegios para unir al dominio
-#@param str_password Password del usuario con privilegios
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#*/ ##
-
-function ogDomainScript ()
-{
-local CMDDIR
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename str_domain str_user str_password" \
- "$FUNCNAME /mnt/sda1 filename.cmd domain user password_user"
- return
-fi
-# Error si no se reciben 4 parámetros.
-[ $# == 5 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Comprobar que existe el directorio de comandos.
-CMDDIR=$(ogGetPath "$1/windows/system32")
-[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
-
-# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio.
-ogAddCmd $1 "$2" "CSCRIPT joindomain.vbs"
-# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
-ogAddCmd $1 "$2" "del /Q C:\Windows\System32\joindomain.vbs"
-
-# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
-cat > "$CMDDIR/joindomain.vbs" << EOF
-Const JOIN_DOMAIN = 1
-Const ACCT_CREATE = 2
-Const ACCT_DELETE = 4
-Const WIN9X_UPGRADE = 16
-Const DOMAIN_JOIN_IF_JOINED = 32
-Const JOIN_UNSECURE = 64
-Const MACHINE_PASSWORD_PASSED = 128
-Const DEFERRED_SPN_SET = 256
-Const INSTALL_INVOCATION = 262144
-
-strDomain = "$3"
-strUser = "$4"
-strPassword = "$5"
-
-Set objNetwork = CreateObject("WScript.Network")
-strComputer = objNetwork.ComputerName
-
-Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _
- strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
-
-ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _
- strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE)
-EOF
-}
-
diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib
index 5fe2bc74..102ed1c7 100755
--- a/client/engine/Protocol.lib
+++ b/client/engine/Protocol.lib
@@ -382,14 +382,14 @@ OIFS=$IFS; IFS=':' ; SESSION=($2); IFS=$OIFS
#controlamos el PORTBASE de la sesion. Comun.-
PORTBASE=${SESSION[0]}
-ogCheckStringInGroup ${SESSION[0]} "9000 9002 9004 9006 9008 9010" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $?
+ogCheckStringInGroup ${SESSION[0]} "$(seq 9000 2 9050)" || ogRaiseError $OG_ERR_FORMAT "McastSession portbase ${SESSION[0]}" || PERROR=3 #return $?
if [ $MODE == "server" ]
then
ogCheckStringInGroup ${SESSION[1]} "full-duplex FULL-DUPLEX half-duplex HALF-DUPLEX broadcast BROADCAST" || ogRaiseError $OG_ERR_FORMAT "McastSession method ${SESSION[1]}" || PERROR=4 #return $?
METHOD=${SESSION[1]}
ogCheckIpAddress ${SESSION[2]} || ogRaiseError $OG_ERR_FORMAT "McastSession address ${SESSION[2]}" || PERROR=5 #return $?
ADDRESS=${SESSION[2]}
- ogCheckStringInReg ${SESSION[3]} "^[0-9]{1,2}\M$" || ogRaiseError $OG_ERR_FORMAT "McastSession bitrate ${SESSION[3]}" || PERROR=6 # return $?
+ ogCheckStringInReg ${SESSION[3]} "^[0-9]{1,3}\M$" || ogRaiseError $OG_ERR_FORMAT "McastSession bitrate ${SESSION[3]}" || PERROR=6 # return $?
BITRATE=${SESSION[3]}
ogCheckStringInReg ${SESSION[4]} "^[0-9]{1,10}$" || ogRaiseError $OG_ERR_FORMAT "McastSession nclients ${SESSION[4]}" || PERROR=7 # return $?
NCLIENTS=${SESSION[4]}
@@ -846,11 +846,11 @@ 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
+ ctorrent -f -X "sleep $TIME; 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"
- ctorrent ${SOURCE} -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 -U 0
+ echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep 30; kill -9 \$(pidof ctorrent)' -C 100 -U 0"
+ ctorrent ${SOURCE} -X "sleep 30; kill -2 \$(pidof ctorrent)" -C 100 -U 0
;;
seeder|SEEDER)
echo "MODE seeder ctorrent" #### ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100"
@@ -998,21 +998,12 @@ fi
#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"
MD5SOURCE=$(cat $FILESOURCE.sum)
else
- # 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"
- MD5TARGET=$(cat $FILETARGET.sum)
-else
- #echo "calculando el sum de la cache"
- md5sum $FILETARGET | cut -f1 -d" " > $FILETARGET.sum
- MD5TARGET=$(cat $FILETARGET.sum)
+ MD5SOURCE=$(ogCalculateChecksum $FILESOURCE)
fi
+[ ! -f $FILETARGET.sum ] && ogCalculateChecksum $FILETARGET > $FILETARGET.sum
+MD5TARGET=$(cat $FILETARGET.sum)
#echo "Paso 5. comparamos los md5"
#TODO: que hacer cuando los md5 son distintos. Por defecto borrar.
diff --git a/client/engine/README.es.txt b/client/engine/README.es.txt
index 9fc6862b..c2b90b4b 100644
--- a/client/engine/README.es.txt
+++ b/client/engine/README.es.txt
@@ -1,9 +1,9 @@
-OpenGNSys Client Cloning Engine README
+OpenGnSys Client Cloning Engine README
=======================================
En este directorio se incluirán las funciones del motor de
-clonación de OpenGNSys y la documentación asociada.
+clonación de OpenGnSys y la documentación asociada.
Este directorio estará localizado en el directorio del servidor
/opt/opengnsys/client/lib/engine/bin
@@ -11,8 +11,8 @@ Este directorio estará localizado en el directorio del servidor
Las funciones serán accesibles por el cliente en el directorio
/opt/opengnsys/lib/engine/bin
-OpenGNSys Client Cloning Engine se distribuye en un conjunto
-de librerías que incluyen funciones BASH que deben ser exportadas
+OpenGnSys Client Cloning Engine se distribuye en un conjunto de
+librerías que incluyen funciones BASH que deben ser exportadas
al entorno del cliente.
Librerías:
@@ -27,7 +27,10 @@ Librerías:
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.
+- Postconf.lib funciones de post-configuración de sistemas
+ operativos.
+- Protocol.lib funciones de implementación de protocolos de
+ comunicaciones.
+- Registry.lib funciones de gestión del registro de Windows.
- System.lib funciones básicas del sistema.
diff --git a/client/engine/System.lib b/client/engine/System.lib
index 0d060f29..ed6f24b6 100755
--- a/client/engine/System.lib
+++ b/client/engine/System.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase System
#@class System
#@brief Funciones básicas del sistema.
-#@version 0.9
+#@version 1.0.4
#@warning License: GNU GPLv3+
#*/
@@ -24,7 +24,7 @@
function ogEcho () {
# Variables locales
-local LOGLEVEL LOGFILE DATETIME
+local LOGLEVEL DATETIME
# Selección del nivel de registro (opcional).
case "$1" in
@@ -37,7 +37,7 @@ esac
DATETIME=$(date +"%F %T")
if [ -n "$LOGLEVEL" ]; then
- logger -s -t "OpenGnSys $LOGLEVEL" -f $LOGFILE "$DATETIME $*"
+ logger -s -t "OpenGnSys $LOGLEVEL" -f $OGLOGFILE "$DATETIME $*"
logger -t "OpenGnSys $LOGLEVEL" -f $OGLOGCOMMAND "$DATETIME $*"
logger -t "OpenGnSys $LOGLEVEL" -f $OGLOGSESSION "$DATETIME $*"
else
@@ -72,6 +72,7 @@ case "$CODE" in
$OG_ERR_PARTITION) MSG="$MSG_ERR_PARTITION \"$2\"" ;;
$OG_ERR_LOCKED) MSG="$MSG_ERR_LOCKED \"$2\"" ;;
$OG_ERR_CACHE) MSG="$MSG_ERR_CACHE \"$2\"" ;;
+ $OG_ERR_NOGPT) MSG="$MSG_ERR_NOGPT \"$2\"" ;;
$OG_ERR_FILESYS) MSG="$MSG_ERR_FILESYS \"$2\"" ;;
$OG_ERR_IMAGE) MSG="$MSG_ERR_IMAGE \"$2\"" ;;
$OG_ERR_NOTOS) MSG="$MSG_ERR_NOTOS \"$2\"" ;;
@@ -92,7 +93,7 @@ case "$CODE" in
$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\"" ;;
+ $OG_ERR_PROTOCOLJOINMASTER) MSG="$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;;
*) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
esac
diff --git a/client/shared/etc/engine.cfg b/client/shared/etc/engine.cfg
index 1bf98b5d..59b4a5b6 100644
--- a/client/shared/etc/engine.cfg
+++ b/client/shared/etc/engine.cfg
@@ -3,13 +3,14 @@ OGENGINECONFIGURATE="TRUE"
OGLOGSESSION="/tmp/session.log"
OGLOGCOMMAND="/tmp/command.log"
-#Definicion PostConfiguracion OS WIndows
+##Configuracion de la PostConfiguracion OS WIndows
+#Hacer chkdisk tras la clonacion
OGWINCHKDISK=TRUE
-#interface restauracion
-#Que hacer cuando la cache no tenga espacio libre. [ NONE] -- en desarrollo -> |DELETE|FORMAT]
+#Configuracion de interface restauracion
+#Que hacer cuando la cache no tenga espacio libre. [ NONE | FORMAT ] ]
ACTIONCACHEFULL=NONE
-# Definimos el protocolo a usar en el caso de que no exita cache o no haya espacio sufiencie.
+# Protocolo a usar en el caso de que no exita cache o no haya espacio sufiencie.
RESTOREPROTOCOLNOCACHE=UNICAST
#script Creacion imagen
@@ -18,5 +19,6 @@ IMGCOMP="lzop"
IMGEXT="img"
IMGREDUCE="TRUE"
-#scripts Clonacion remota usando master
+#Configuracion del asistente de Clonacion remota usando master
+#Al enviar particion reducir el sistema de archivos previamente.
OGWINREDUCE=TRUE \ No newline at end of file
diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf
index 93e2503c..8510381c 100644
--- a/client/shared/etc/lang.es_ES.conf
+++ b/client/shared/etc/lang.es_ES.conf
@@ -8,6 +8,7 @@ MSG_ERR_NOTFOUND="Fichero o dispositivo no encontrado"
MSG_ERR_PARTITION="Partición errónea o desconocida"
MSG_ERR_LOCKED="Recurso bloqueado por operación de uso exclusivo"
MSG_ERR_CACHE="Error en partición de caché local"
+MSG_ERR_NOGPT="El disco indicado no contiene una particion GPT"
MSG_ERR_FILESYS="Sistema de archivos desconocido o no se puede montar"
MSG_ERR_NOTOS="Sistema operativo no instalado o no detectado"
MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema"
@@ -68,6 +69,7 @@ MSG_ERRLOADUDEB="$MSG_ERROR: No se puede cargar el paquete udeb %s."
MSG_LOADUDEBS="Cargar paquetes udeb."
# Mensajes de descripción breve de las funciones de la API.
+MSG_HELP_ogAddCmd="Añade comandos al fichero creado por la función ogInstalMiniSetup."
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."
@@ -79,6 +81,8 @@ MSG_HELP_ogCreateCache="Reserva espacio para la partición de caché al final de
MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instalado localmente."
MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)."
MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco."
+MSG_HELP_ogCreatePartitionTable="Genera una tabla de particiones en caso de que no sea valida."
+MSG_HELP_ogDeleteCache="Elimina la partición de caché local."
MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento."
MSG_HELP_ogDeletePartitionTable="Elimina la tabla de particiones del disco"
MSG_HELP_ogDeleteRegistryKey="Borra una clave vacía del registro de Windows."
@@ -95,20 +99,25 @@ 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_ogGetDiskSize="Devuelve el tamaño del disco."
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_ogGetGroupDir="Devuelve el cmaino del directorio por defecto para el grupo del cliente."
+MSG_HELP_ogGetGroupName="Devuelve el nombre del grupo al que pertenece el cliente."
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."
+MSG_HELP_ogGetLastSector="Devuelve el último sector usable del disco o de una partición."
MSG_HELP_ogGetMacAddress="Devuelve la dirección Ethernet del cliente."
MSG_HELP_ogGetMountPoint="Devuelve el directorio donde está montado un sistema de archivos local."
MSG_HELP_ogGetOsType="Devuelve el tipo de un sistema operativo instalado."
MSG_HELP_ogGetOsVersion="Devuelve el tipo y la versión de un sistema operativo instalado."
-MSG_HELP_ogGetParentPath=$"Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys."
+MSG_HELP_ogGetParentPath="Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys."
MSG_HELP_ogGetPartitionActive="Indica cual es la partición marcada como activa en un disco."
MSG_HELP_ogGetPartitionId="Devuelve el identificador de tipo de una partición."
MSG_HELP_ogGetPartitionSize="Devuelve el tamaño de una partición."
+MSG_HELP_ogGetPartitionTableType="Devuelve el tipo de tabla de particiones del disco"
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."
@@ -118,6 +127,9 @@ MSG_HELP_ogGetWindowsName="Devuelve el nombre del cliente guardado en el registr
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_ogInstallLinuxClient="Instala el cliente OpenGnSys en un sistema operativo GNU/Linux."
+MSG_HELP_ogInstallMiniSetup="Instala un archivo que se ejecutará en el arranque de Windows."
+MSG_HELP_ogInstallWindowsClient="Instala el cliente OpenGnSys en un sistema operativo Window."
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."
@@ -163,10 +175,10 @@ MSG_HELP_ogUpdatePartitionTable="Actualiza informacion tabla particiones del dis
# Mensajes de descripción breve de la interfaz.
-MSG_INTERFACE_START="[START Interface ] Ejecutar comando: "
+MSG_INTERFACE_START="[START Interface] Ejecutar comando: "
MSG_INTERFACE_END="[END Interface] Comando terminado con este código: "
-# SCRIPTS messages.
+# Mensajes de scripts.
MSG_SCRIPTS_START=" INICIO scripts : "
MSG_SCRIPTS_END=" FIN scripts: "
@@ -174,11 +186,11 @@ MSG_SCRIPTS_TASK_SLEEP="Esperando para iniciar"
MSG_SCRIPTS_TASK_START="Iniciando"
MSG_SCRIPTS_TASK_ERR="Error"
-# scripts createImage
+# Script createImage.
MSG_SCRIPTS_FILE_RENAME=" Renombrar fichero-imagen previo: "
MSG_SCRIPTS_CREATE_SIZE=" Calcular espacio (KB) requerido para almacenarlo y el disponible: "
-#scripts updateCache
+# Script updateCache.
MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum-"
MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la cache es mayor que el fichero a descargar."
MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO="Comprobar el espacio libre de la cache y actuar según engine.cfg"
@@ -196,5 +208,6 @@ MSG_SCRIPTS_OS_CONFIGURE="Iniciar la configuracion del sistema restaurado"
MSG_SCRIPTS_TIME_TOTAL="tiempo total del proceso"
MSG_SCRIPTS_TIME_PARTIAL="tiempo parcial del subproceso"
-#HTTPLOG
-MSG_HTTPLOG_NOUSE="No apague este ordenador por favor" \ No newline at end of file
+# HTTPLOG
+MSG_HTTPLOG_NOUSE="No apague este ordenador por favor"
+
diff --git a/client/shared/etc/preinit/fileslinks.sh b/client/shared/etc/preinit/fileslinks.sh
index 7089ce46..ddea1198 100755
--- a/client/shared/etc/preinit/fileslinks.sh
+++ b/client/shared/etc/preinit/fileslinks.sh
@@ -20,7 +20,11 @@ if [ -n "$OPENGNSYS" ]; then
ln -fs /bin/bash /bin/sh
# Crear directorio de bloqueos
- mkdir -p /var/lock || mkdir -p /run/lock
+ mkdir -p /var/lock 2>/dev/null || mkdir -p /run/lock
+
+ # Crear ficheros temporales.
+ touch $OGLOGCOMMAND $OGLOGCOMMAND.tmp $OGLOGSESSION /tmp/menu.tmp
+ chmod 777 $OGLOGCOMMAND $OGLOGCOMMAND.tmp $OGLOGSESSION /tmp/menu.tmp
# # Directorio de tipos de letras para el browser.
QTDIR="/usr/local"
diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh
index 1260c973..1aa248d4 100755
--- a/client/shared/etc/preinit/loadenviron.sh
+++ b/client/shared/etc/preinit/loadenviron.sh
@@ -60,6 +60,8 @@ if [ -d $OPENGNSYS ]; then
# Cargar configuración del engine.
[ -f ${OGETC}/engine.cfg ] && source ${OGETC}/engine.cfg
+ export OGLOGCOMMAND=${OGLOGCOMMAND:-/tmp/command.log}
+ export OGLOGSESSION=${OGLOGSESSION:-/tmp/session.log}
# Cargar las APIs según engine.
if [ -n "$ogengine" ]; then
diff --git a/client/shared/lib/httpd/LogCommand.sh b/client/shared/lib/httpd/LogCommand.sh
index 9a116f7c..9a116f7c 100644..100755
--- a/client/shared/lib/httpd/LogCommand.sh
+++ b/client/shared/lib/httpd/LogCommand.sh
diff --git a/client/shared/lib/httpd/LogSession.sh b/client/shared/lib/httpd/LogSession.sh
index a5d18e68..a5d18e68 100644..100755
--- a/client/shared/lib/httpd/LogSession.sh
+++ b/client/shared/lib/httpd/LogSession.sh
diff --git a/client/shared/lib/httpd/bandwidth.sh b/client/shared/lib/httpd/bandwidth.sh
index 9e7833c3..9e7833c3 100644..100755
--- a/client/shared/lib/httpd/bandwidth.sh
+++ b/client/shared/lib/httpd/bandwidth.sh
diff --git a/client/shared/lib/httpd/cache.sh b/client/shared/lib/httpd/cache.sh
new file mode 100755
index 00000000..a2e40093
--- /dev/null
+++ b/client/shared/lib/httpd/cache.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+echo "Content-type: text/html"
+echo ""
+echo "<html><head> <meta http-equiv='Refresh' content='5,URL=./cache.sh'> <title>Listado de la Cache"
+echo "</title>"
+echo "<style type='text/css'>"
+echo "<!--"
+echo "TEXTAREA {"
+echo "background-color: navy;"
+echo "border: black 2px solid;"
+echo "color: white;"
+echo "font-family: arial, verdana, ms sans serif;"
+echo "font-size: 8pt;"
+echo "font-weight: normal"
+echo "} "
+echo "-->"
+echo "</style>"
+echo "</head><body>"
+echo "<TEXTAREA NAME='contenido' ROWS='30' COLS='150' >"
+echo "$(ls -lh /opt/opengnsys/cache/opt/opengnsys/images )"
+echo "</TEXTAREA>"
+echo "</body></html>" \ No newline at end of file
diff --git a/client/shared/lib/httpd/httpd-log.sh b/client/shared/lib/httpd/httpd-log.sh
index ae76b5fe..58ee6ec6 100644..100755
--- a/client/shared/lib/httpd/httpd-log.sh
+++ b/client/shared/lib/httpd/httpd-log.sh
@@ -8,7 +8,7 @@ echo "<html><head><title>OpenGnsys Client</title></head><body>"
echo "<h1> $(./httpd-runengine.sh 'ogEcho $MSG_HTTPLOG_NOUSE' ) . host $(hostname -s)</h1> "
echo "<IFRAME SRC='bandwidth.sh' WIDTH=250 HEIGHT=80> <A HREF="bandwidth.sh">link</A> </IFRAME> "
-
+echo "<IFRAME SRC='cache.sh' WIDTH=590 HEIGHT=90><A HREF="cache.sh">link</a> </IFRAME><br>"
echo "<IFRAME SRC='LogSession.sh' WIDTH=850 HEIGHT=230> <A HREF="LogSession.sh">link</A> </IFRAME>"
echo "<IFRAME SRC='LogCommand.sh' WIDTH=850 HEIGHT=250> <A HREF="LogCommand.sh">link</A> </IFRAME>"
diff --git a/client/shared/lib/httpd/httpd-menu.sh b/client/shared/lib/httpd/httpd-menu.sh
index c5e58364..c5e58364 100644..100755
--- a/client/shared/lib/httpd/httpd-menu.sh
+++ b/client/shared/lib/httpd/httpd-menu.sh
diff --git a/client/shared/lib/httpd/lighttpd.conf b/client/shared/lib/httpd/lighttpd.conf
index 7a11040b..7a11040b 100755..100644
--- a/client/shared/lib/httpd/lighttpd.conf
+++ b/client/shared/lib/httpd/lighttpd.conf
diff --git a/client/shared/lib/ogclient/ogAdmLnxClient b/client/shared/lib/ogclient/ogAdmLnxClient
new file mode 100755
index 00000000..cd34d121
--- /dev/null
+++ b/client/shared/lib/ogclient/ogAdmLnxClient
Binary files differ
diff --git a/client/shared/lib/ogclient/ogAdmWinClient.exe b/client/shared/lib/ogclient/ogAdmWinClient.exe
new file mode 100644
index 00000000..56f1899d
--- /dev/null
+++ b/client/shared/lib/ogclient/ogAdmWinClient.exe
Binary files differ
diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs
index 06745748..b0ab3d33 100755
--- a/client/shared/scripts/configureOs
+++ b/client/shared/scripts/configureOs
@@ -1,9 +1,8 @@
#!/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).
+# configureOs
+#@brief Scirpt para realizar la configuracion del sistema operativo restaurado.
#@param 1 disco
#@param 2 particion
#@return
@@ -21,39 +20,51 @@
#@version 1.0.3 - Configura el chkdisk en el arranque de windows, segun variable OGWINCHKDISK del engine.cfg.
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011-12-23
+#@version 1.0.4 - Inyecta el cliente para gestión del sistema operativo.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-04-11
-#Carga del configurador del engine
+# Carga el configurador del engine y los parámetros de red.
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+[ -f $DEVICECFG ] && source $DEVICECFG
-# Si el sistema de archivos no esta extendido. Realizar.
-PARTSIZE=$(ogGetPartitionSize $1 $2)
+# Si el sistema de archivos no esta extendido, ampliarlo al tamaño de su partición.
+PARTSIZE=$(ogGetPartitionSize $1 $2) || exit $?
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.
+# Si no existe partición 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
- # Cambiar nombre en sistemas Windows.
- HOST=$(ogGetHostname)
- HOST=${HOST:-"pc"}
- ogSetWindowsName $1 $2 "$HOST"
- # Descomentar la siguiente línea para cambiar usuario de inicio.
- #ogSetWinlogonUser $1 $2 " "
- # Configurar el boot sector de la partición Windows.
- ogFixBootSector $1 $2
- # Configurar el gestor de arranque de Windows XP/Vista/7.
- ogWindowsBootParameters $1 $2
- # Registrar en Windows que la partición indicada es su nueva unidad C:\
- ogWindowsRegisterPartition $1 $2 C $1 $2
- ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows
-fi
+# Post-configuración personalizada para cada tipo de sistema operativo.
+OSTYPE="$(ogGetOsType $1 $2)"
+case "$OSTYPE" in
+ Windows)
+ # Cambiar nombre en sistemas Windows.
+ HOST=$(ogGetHostname)
+ HOST=${HOST:-"pc"}
+ ogSetWindowsName $1 $2 "$HOST"
+ # Descomentar la siguiente línea para cambiar usuario de inicio.
+ #ogSetWinlogonUser $1 $2 " "
+ # Configurar el boot sector de la partición Windows.
+ ogFixBootSector $1 $2
+ # Configurar el gestor de arranque de Windows XP/Vista/7.
+ ogWindowsBootParameters $1 $2
+ # Registrar en Windows que la partición indicada es su nueva unidad C:\
+ ogWindowsRegisterPartition $1 $2 C $1 $2
+ ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows
+ # Instalar cliente para Windows.
+ ogInstallWindowsClient $1 $2
+ ;;
+ Linux)
+ ## Install and Configure Grub based on OS installed and Grub 1st stage location.
+ ogGrubInstallPartition $1 $2
+ # Instalar cliente para Linux.
+ ogInstallLinuxClient $1 $2
+ ;;
+esac
-if [ "$(ogGetOsType $1 $2)" = "Linux" ]; then
- ogGrubInstallPartition $1 $2
-fi \ No newline at end of file
diff --git a/client/shared/scripts/generateMenuDefault b/client/shared/scripts/generateMenuDefault
index 0437cd3d..404de375 100755
--- a/client/shared/scripts/generateMenuDefault
+++ b/client/shared/scripts/generateMenuDefault
@@ -1,30 +1,48 @@
#ª/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}')
+FILEINFOHTML=$OGLOG/`ogGetIpAddress`.info.html
+FILEINFOCACHE=$OGLOG/`ogGetIpAddress`.cache.txt
+ogMountCache 2>/dev/null
+CACHECONTENIDO=`ls -m $OGCAC/$OGIMG 2>/dev/null`
+
+SPEED=$(LANG=C ethtool $DEVICE 2>/dev/null | awk '$1~/Speed/ {print $2}')
+case "$SPEED" in
+ 1000[Mm]b/s) ;;
+ 100[Mm]b/s) SPEED="<font color=\"blue\">$SPEED</font>" ;;
+ 10[Mm]b/s) SPEED="<font color=\"grey\">$SPEED</font>" ;;
+ *) SPEED="<font color=\"red\">$SPEED</font>" ;;
+esac
+DUPLEX=$(LANG=C ethtool $DEVICE 2>/dev/null | awk '$1~/Duplex/ {print $2}')
+case "$DUPLEX" in
+ [Ff]ull) ;;
+ *) DUPLEX="<font color=\"red\">$DUPLEX</font>"
+esac
+CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
+expr $CACHESIZEFREE / 1024 > $FILEINFOCACHE 2>/dev/null && echo '.MB,' >> $FILEINFOCACHE
#
# echo '';
#
cat > $FILEINFOHTML << EOF
-<div align="center" style="font-family: Arial, Helvetica, sans-serif;">'
+<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 border=1 width="100%">
+<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
+EOF
+cat >> $FILEINFOCACHE << EOF
+$CACHECONTENIDO
+EOF
+
diff --git a/client/shared/scripts/poweroff b/client/shared/scripts/poweroff
index bf867467..3be97ed0 100755
--- a/client/shared/scripts/poweroff
+++ b/client/shared/scripts/poweroff
@@ -13,6 +13,6 @@ echo "[50] Desmontar cache local."
ogUnmountCache
echo "[70] Apagando el equipo."
ethtool -s $DEVICE wol g
-(sleep 5 && busybox poweroff) &
+(sleep 5 && busyboxOLD poweroff) &
diff --git a/client/shared/scripts/reboot b/client/shared/scripts/reboot
index 7b7f3c94..7966b9a3 100755
--- a/client/shared/scripts/reboot
+++ b/client/shared/scripts/reboot
@@ -13,5 +13,5 @@ echo "[50] Desmontar cache local."
ogUnmountCache
echo "[90] Reiniciar el equipo."
ethtool -s $DEVICE wol g
-(sleep 5 && busybox reboot) &
+(sleep 5 && busyboxOLD reboot) &
diff --git a/client/shared/scripts/runhttplog.sh b/client/shared/scripts/runhttplog.sh
index 04d3e530..82115b14 100755
--- a/client/shared/scripts/runhttplog.sh
+++ b/client/shared/scripts/runhttplog.sh
@@ -1,10 +1,5 @@
#!/bin/bash
-echo "export OGLOGCOMMAND=/tmp/command.log" >> /etc/profile.d/loadenviron.sh
-echo "export OGLOGSESSION=/tmp/session.log" >> /etc/profile.d/loadenviron.sh
- export OGLOGCOMMAND=/tmp/command.log
- export OGLOGSESSION=/tmp/session.log
-
#httd-log-status
cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.back
cp /opt/opengnsys/lib/httpd/lighttpd.conf /etc/lighttpd/
@@ -15,16 +10,5 @@ chmod 755 /opt
cp /opt/opengnsys/lib/httpd/* /usr/lib/cgi-bin
#TODO:
dstat -dn 10 > /tmp/bandwidth &
-#Se pasan al loadenviro para su uso en ssh
-#export OGLOGSESSION=/tmp/session.log
-#export OGLOGCOMMAND=/tmp/command.log
-touch $OGLOGCOMMAND
-touch $OGLOGSESSION
-touch ${OGLOGCOMMAND}.tmp
-chmod 777 $OGLOGCOMMAND
-chmod 777 $OGLOGSESSION
-chmod 777 ${OGLOGCOMMAND}.tmp
-touch /tmp/menu.tmp
-chmod 777 /tmp/menu.tmp
echo "WAITING" >> $OGLOGSESSION
-# http-log-status \ No newline at end of file
+# http-log-status
diff --git a/client/shared/scripts/samples/configureGroup b/client/shared/scripts/samples/configureGroup
new file mode 100755
index 00000000..65638438
--- /dev/null
+++ b/client/shared/scripts/samples/configureGroup
@@ -0,0 +1,65 @@
+#!/bin/bash
+#/**
+#@file configureGroup
+#@brief Script de ejemplo de post-configuracion del sistema operativo especifica de cada grupo de ordenadores.
+#@brief El directorio del grupo en el repositorio se situa en /opt/opengnsys/groups/Nombre_Grupo
+#@brief Se ponen archivos o marcas dentro del directorio del grupo (si queremos que afecte a todas las imagenes)
+#@brief o del subdirectorio de la imagen dentro del grupo. Los archivos se copian en el sitio correcto del sistema
+#@brief y las marcas se comprueba que existen para inicar una accion (ej: cambiar registro)
+#@param str_repo repositorio de imágenes (remoto o caché local)
+#@param path_image camino de la imagen (sin extensión)
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la particion
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@warning License: GNU GPLv3+
+#*/
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$0" "$0 path_dir str_image int_ndisk int_npart" \
+ "$0 REPO /aula1/winxp 1 1"
+ exit
+fi
+
+# Error si no se reciben 4 parámetros.
+[ $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT || exit $?
+
+# Procesar parámetros.
+PART=$(ogMount $3 $4) || ogRaiseError $OG_ERR_PARTITION "$3 $4" || exit $?
+IMGNAME=$(basename $2)
+GROUPDIR=$(ogGetGroupDir)
+IMGDIR=$GROUPDIR/$IMGNAME
+
+# Comprobamos que exista GROUPDIR. Si no existe no es error, nada que configurar
+[ ! -x "$GROUPDIR" ] && exit 0
+
+
+TYPE=$(ogGetOsVersion $3 $4)
+
+case "$TYPE" in
+ Linux*) echo "PostConfiguracion de Linux para el grupo $group"
+ # Si existen estos ficheros en el directorio del grupo o de la imagen se copian a la particion
+ [ -e $IMGDIR/menu.lst ] && echo "cp -f $IMGDIR/menu.lst $PART/boot/grub/menu.lst" && cp -f $IMGDIR/menu.lst $PART/boot/grub/menu.lst
+ [ -e $IMGDIR/grub.cfg ] && echo "cp $IMGDIR/grub.cfg $PART/boot/grub/grub.cfg" && cp -f $IMGDIR/grub.cfg $PART/boot/grub/grub.cfg
+ [ -e $IMGDIR/hosts ] && echo "cp -f $IMGDIR/hosts $PART/etc/hosts" && cp -f $IMGDIR/hosts $PART/etc/hosts
+ [ -e $IMGDIR/fstab ] && echo "cp -f $IMGDIR/fstab $PART/etc/fstab" && cp -f $IMGDIR/fstab $PART/etc/fstab
+ [ -e $IMGDIR/xorg.conf ] && echo "cp -f $IMGDIR/xorg.conf $PART/etc/X11/xorg.conf" && cp -f $IMGDIR/xorg.conf $PART/etc/X11/xorg.conf
+ [ -e $IMGDIR/rc.local ] && echo "cp -f $IMGDIR/rc.local $PART/etc/rc.local" && cp -f $IMGDIR/rc.local $PART/etc/rc.local
+ [ -e $IMGDIR/interfaces ] && echo "cp -f $IMGDIR/interfaces $PART/etc/network/interfaces" && cp -f $IMGDIR/interfaces $PART/etc/network/interfaces
+ [ -e $IMGDIR/passwd ] && echo "cp -f $IMGDIR/passwd $PART/etc/passwd" && cp -f $IMGDIR/passwd $PART/etc/passwd
+ ;;
+
+ *Windows\ XP) echo "PostConfiguracion de XP para el grupo $group"
+ # Si existen estos ficheros en el directorio del grupo o de la imagen se copian a la particion
+ [ -e $IMGDIR/SAM ] && echo "cp -f $IMGDIR/SAM $PART/Windows/System32/config/SAM" && cp -f $IMGDIR/SAM $PART/Windows/System32/config/SAM
+ ;;
+ *Windows\ 7*) echo "Postconfiguracion de W7 para el grupo $group"
+ # Si existen estos ficheros en el directorio del grupo o de la imagen se copian a la particion
+ [ -e $IMGDIR/SAM ] && echo "cp -f $IMGDIR/SAM $PART/Windows/System32/config/SAM" && cp -f $IMGDIR/SAM $PART/Windows/System32/config/SAM
+ ;;
+ *) exit 0
+ ;;
+ esac
+