diff options
author | ccabezu <carmel@upv.es> | 2018-02-21 13:31:04 +0000 |
---|---|---|
committer | ccabezu <carmel@upv.es> | 2018-02-21 13:31:04 +0000 |
commit | 61733a13e5e57140b71ecac067a24342bad514ef (patch) | |
tree | 081e92db1f552bc1134e1c082ada2ef6b2786e99 /client | |
parent | fae755f4bf7dc67869c6be720bc1beb8c2f22f14 (diff) |
#832 Solucionado problema del aulologon con nuevas versiones de Windows 10
git-svn-id: https://opengnsys.es/svn/branches/version1.1@5605 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client')
-rwxr-xr-x | client/engine/PostConf.lib | 1315 |
1 files changed, 662 insertions, 653 deletions
diff --git a/client/engine/PostConf.lib b/client/engine/PostConf.lib index 84a9f561..f9fbbc0f 100755 --- a/client/engine/PostConf.lib +++ b/client/engine/PostConf.lib @@ -1,653 +1,662 @@ -#!/bin/bash -#/** -#@file PostConf.lib -#@brief Librería o clase PostConf -#@class PostConf -#@brief Funciones para la postconfiguración de sistemas operativos. -#@version 1.1.0 -#@warning License: GNU GPLv3+ -#*/ - - -#/** -# ogCleanOs int_ndisk int_nfilesys -#@brief Elimina los archivos que no son necesarios en el sistema operativo. -#@param int_ndisk nº de orden del disco -#@param int_nfilesys nº de orden del sistema de archivos -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. -#@exception OG_ERR_PARTITION Partición desconocida o no accesible. -#@note Antes incluido en la funcion ogReduceFs -#@author Irina Gomez. Universidad de Sevilla. -#@return (nada) -#@date 2014-10-27 -#*/ ## -function ogCleanOs { - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \ - "$FUNCNAME 1 1" - return -fi - -# Error si no se reciben 2 parámetros. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_nfilesys" || return $? - -case "$(ogGetOsType $1 $2)" in - Linux) - # Borramos los ficheros de dispositivos y los temporales. - ogCleanLinuxDevices $1 $2 - rm -rf $(ogMount $1 $2)/tmp/* - ;; - Windows) - # Borrar ficheros de hibernación y paginación de Windows. - ogGetPath $1 $2 pagefile.sys &>/dev/null && ogDeleteFile $1 $2 pagefile.sys - ogGetPath $1 $2 hiberfil.sys &>/dev/null && ogDeleteFile $1 $2 hiberfil.sys - ogGetPath $1 $2 swapfile.sys &>/dev/null && ogDeleteFile $1 $2 swapfile.sys - ;; -esac - -} - - - -#/** -# 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 () -{ -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$MSG_SEE ogInstallFirstBoot ogInstallRunonce" - return -fi -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 - return $? ;; -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 3 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/$3" - -# 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 - -# Crear los valores de registro necesarios para que se haga la ejecución del .cmd al aranque. -ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1 -ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4 -#ogDeleteRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" -ogAddRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" -ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $(basename $CMDFILE)" -} - - -#/** -# 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 queremos hacer autologin despues de la postconfiguracion lo indicamos en las claves de registro - 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 queremos hacer autologin despues de la postconfiguracion introducimos la informacion en las claves de registro - 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 -} - -#/** -# 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 $? -# Crear fichero de comandos, si no existe. -CMDFILE="$(ogGetPath "$MOUNTPOINT/windows/system32")/$3" -[ -n "$CMDFILE" ] || ogInstallMiniSetup "$1" "$2" "$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 \"$4\" /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 -} - - -### PRUEBAS. - -#/** -# ogConfigureOgagent int_ndisk int_filesys -#@brief Modifica el fichero de configuración del nuevo agente OGAent para sistemas operativos. -#@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_LOCKED Sistema de archivos bloqueado. -#@version 1.1.0 - Primera adaptación para OpenGnsys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2016-07-15 -#*/ ## -function ogConfigureOgagent () -{ -# Variables locales. -local MNTDIR AGENTDIR CFGFILE -# 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. -MNTDIR=$(ogMount $1 $2) || return $? - -# Comprobar si existe el fichero de configuración de OGAgent. -for AGENTDIR in usr/share/OGAgent "Program Files/OGAgent" "Program Files (x86)/OGAgent" Applications/OGAgent.app; do - CFGFILE=$(ogGetPath "$MNTDIR/$AGENTDIR/cfg/ogagent.cfg") - [ -n "$CFGFILE" ] && break -done -[ -n "$CFGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "ogagent.cfg" || return $? -# Parchear dirección del servidor OpenGnsys en el fichero de configuración de OGAgent. -sed -i "0,/remote=/ s,remote=.*,remote=https://$(ogGetServerIp)/opengnsys/rest/," "$CFGFILE" -} - - -#/** -# ogInstallLaunchDaemon int_ndisk int_nfilesys str_filename -#@brief Instala archivo que se ejecutará en el arranque de macOS. -#@param int_ndisk nº de orden del disco -#@param int_nfilesys nº de orden del sistema de archivos -#@param str_filename nombre del script -#return (nada) -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado. -#@npte Crea ficheros de configuración /Library/LaunchDaemon/es.opengnsys.Script.plist. -#@version 1.0.6 - Primera versión para OpenGnSys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2014-10-06 -#*/ ## -function ogInstallLaunchDaemon () -{ -# Variables locales. -local LAUNCHDIR SCRIPTDIR -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \ - "$FUNCNAME 1 2 postconf" - return -fi - -# Error si no se reciben 3 parámetros. -[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? -# Comprobar directorios. -LAUNCHDIR=$(ogGetPath $1 $2 /Library/LaunchDaemons) -[ -n "$LAUNCHDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /Library/LaunchDaemons" || return $? -SCRIPTDIR=$(ogGetPath $1 $2 /usr/share) -[ -n "$SCRIPTDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share" || return $? - -# Crear fichero de configuración del servicio de arranque. -cat << EOT $LAUNCHDIR/es.opengnsys.$3.plist -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> - <dict> - <key>Label</key> - <string>es.opengnsys.$3</string> - <key>ProgramArguments</key> - <array> - <string>$SCRIPTDIR/$3.sh</string> - </array> - <key>RunAtLoad</key> - <true/> - <key>StandardOutPath</key> - <string>/var/log/$3.log</string> - <key>StandardErrorPath</key> - <string>/var/log/$3.err</string> - <true/> - </dict> -</plist> -EOT - -# Crear un fichero de script vacío. -rm -f $SCRIPTDIR/$3.sh -touch $SCRIPTDIR/$3.sh -chmod +x $SCRIPTDIR/$3.sh -} - - -### PRUEBAS. - -#/** -# ogAddToLaunchDaemon int_ndisk int_nfilesys str_filename str_commands -#@brief Añade comandos al script creado por ogInstalLaunchDaemon. -#@param int_ndisk nº de orden del disco -#@param int_nfilesys nº de orden del sistema de archivos -#@param str_filename nombre del script (siempre se guardará en /usr/share para que sea visible por el sistema -#@param str_commands comando o comandos que se añadiran al fichero -#return (nada) -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado. -#@version 1.0.6 - Primera versión para OpenGnSys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2014-10-06 -#*/ ## -function ogAddToLaunchDaemon () -{ -# Variables locales. -local SCRIPTFILE -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \ - "$FUNCNAME 1 2 postconf \"diskutil enableJournal disk0s2\"" - return -fi - -# Error si no se reciben 4 parámetros. -[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $? -# Comprobar que existe el fichero de comandos. -SCRIPTFILE=$(ogGetPath $1 $2 "/usr/share/$3.sh") -[ -n "$SCRIPTFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share/$3" || return $? - -# Concatenamos el comando en el fichero de comandos -cat >> "$SCRIPTFILE" << EOT -$4 -EOT -} - - -#/** -# ogInstallLinuxClient int_ndisk int_filesys -#@brief Instala el cliente OpenGnSys para sistemas operativos GNU/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 -#@version 1.0.5 - Evitar duplicidad de instalación del cliente. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2014-03-06 -#*/ ## -function ogInstallLinuxClient () -{ -# Variables locales. -local 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. -MNTDIR=$(ogMount $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; } - if (! /ogAdmLnxClient/) - print; } - }' /tmp/rclocal > $MNTDIR/$RCLOCAL -rm /tmp/rclocal -ogUnlock $1 $2 -} - - -#/** -# ogInstallWindowsClient int_ndisk int_filesys str_filename -#@brief Instala el cliente OpenGnSys para sistemas operativos Windows. -#@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 -#@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 -#@version 1.0.5 - Cambios en los parametros de entrada y funcionamiento de la funcion -#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona -#@date 2013-02-12 -#*/ ## - -function ogInstallWindowsClient () -{ -# Variables locales. -local MNTDIR CLIENTFILE i DIR WINDIR -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \ - "$FUNCNAME 1 1 filename.cmd" - return -fi - -# Error si no se reciben 3 parámetros. -[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? -# Obtener sistema de archvios. -MNTDIR=$(ogMount $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 $? -# Copiar cliente e incluir en el fichero de configuracion dado que instale el cliente en el arranque. -cp -a $CLIENTFILE "$WINDIR" -ogAddCmd $1 $2 $3 "ogAdmWinClient -remove" -ogAddCmd $1 $2 $3 "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)" -} - - - -#/** -# ogUninstallLinuxClient int_ndisk int_filesys -#@brief Desinstala el cliente OpenGnSys para sistemas operativos GNU/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_PARTITION Paritición o sistema de archivos incorrectos. -#@exception OG_ERR_LOCKED Sistema de archivos bloqueado. -#@version 1.1.0 - Primera adaptación para OpenGnsys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2016-08-22 -#*/ ## -function ogUninstallLinuxClient () -{ -# Variables locales. -local MNTDIR -# 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. -MNTDIR=$(ogMount $1 $2) || return $? - -# Borrar ficheros y quitar llamada al cliente durante el proceso de inicio. -rm -f $MNTDIR/{usr/sbin,sbin,usr/local/sbin}/ogAdmLnxClient -rm -f $MNTDIR/{etc,usr/local/etc}/ogAdmLnxClient.cfg -sed -i -e '/ogAdmLnxClient/ d' $MNTDIR/{etc,usr/local/etc}/{rc.local,rc.d/rc.local} 2>/dev/null -} - - -#/** -# ogUninstallWindowsClient int_ndisk int_filesys str_filename -#@brief Desinstala el cliente OpenGnSys para sistemas operativos Windows. -#@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 -#@return (nada) -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos. -#@exception OG_ERR_LOCKED Sistema de archivos bloqueado. -#@version 1.1.0 - Primera adaptación para OpenGnsys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2016-08-22 -#*/ ## - -function ogUninstallWindowsClient () -{ -# Variables locales. -local MNTDIR -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \ - "$FUNCNAME 1 1 filename.cmd" - return -fi - -# Error si no se reciben 3 parámetros. -[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? -# Obtener sistema de archvios. -MNTDIR=$(ogMount "$1" "$2") || return $? - -# Crear órdenes para desinstalar servicio y borrar ejecutable del cliente. -if [ -n "$(ogGetPath $MNTDIR/windows/ogAdmWinClient.exe)" -o -n "$(ogGetPath $MNTDIR/winnt/ogAdmWinClient.exe)" ]; then - ogAddCmd $1 $2 "$3" 'ogAdmWinClient -remove' - ogAddCmd $1 $2 "$3" 'DEL C:\Windows\ogAdmWinClient.exe' - ogAddCmd $1 $2 "$3" 'DEL C:\Winnt\ogAdmWinClient.exe' -fi -} - +#!/bin/bash
+#/**
+#@file PostConf.lib
+#@brief Librería o clase PostConf
+#@class PostConf
+#@brief Funciones para la postconfiguración de sistemas operativos.
+#@version 1.1.0
+#@warning License: GNU GPLv3+
+#*/
+
+
+#/**
+# ogCleanOs int_ndisk int_nfilesys
+#@brief Elimina los archivos que no son necesarios en el sistema operativo.
+#@param int_ndisk nº de orden del disco
+#@param int_nfilesys nº de orden del sistema de archivos
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
+#@exception OG_ERR_PARTITION Partición desconocida o no accesible.
+#@note Antes incluido en la funcion ogReduceFs
+#@author Irina Gomez. Universidad de Sevilla.
+#@return (nada)
+#@date 2014-10-27
+#*/ ##
+function ogCleanOs {
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
+ "$FUNCNAME 1 1"
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_nfilesys" || return $?
+
+case "$(ogGetOsType $1 $2)" in
+ Linux)
+ # Borramos los ficheros de dispositivos y los temporales.
+ ogCleanLinuxDevices $1 $2
+ rm -rf $(ogMount $1 $2)/tmp/*
+ ;;
+ Windows)
+ # Borrar ficheros de hibernación y paginación de Windows.
+ ogGetPath $1 $2 pagefile.sys &>/dev/null && ogDeleteFile $1 $2 pagefile.sys
+ ogGetPath $1 $2 hiberfil.sys &>/dev/null && ogDeleteFile $1 $2 hiberfil.sys
+ ogGetPath $1 $2 swapfile.sys &>/dev/null && ogDeleteFile $1 $2 swapfile.sys
+ ;;
+esac
+
+}
+
+
+
+#/**
+# 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 ()
+{
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$MSG_SEE ogInstallFirstBoot ogInstallRunonce"
+ return
+fi
+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
+ return $? ;;
+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 3 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/$3"
+
+# 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
+
+# Crear los valores de registro necesarios para que se haga la ejecución del .cmd al aranque.
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4
+#ogDeleteRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
+ogAddRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $(basename $CMDFILE)"
+}
+
+
+#/**
+# 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
+#@version 1.1.0 - Resuelve problemas a partir de Windows 10
+#@author Carmelo Cabezuelo Aguilar - Universidad Politécnica de Valencia
+#@date 2018-02-20
+#*/ ##
+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 queremos hacer autologin despues de la postconfiguracion lo indicamos en las claves de registro
+ 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 queremos hacer autologin despues de la postconfiguracion introducimos la informacion en las claves de registro
+ 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
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName' ".\\" 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
+ogDeleteRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceAutoLockOnLogon' 2>/dev/null
+ogDeleteRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonCount' 2>/dev/null
+}
+
+#/**
+# 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 $?
+# Crear fichero de comandos, si no existe.
+CMDFILE="$(ogGetPath "$MOUNTPOINT/windows/system32")/$3"
+[ -n "$CMDFILE" ] || ogInstallMiniSetup "$1" "$2" "$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 \"$4\" /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
+}
+
+
+### PRUEBAS.
+
+#/**
+# ogConfigureOgagent int_ndisk int_filesys
+#@brief Modifica el fichero de configuración del nuevo agente OGAent para sistemas operativos.
+#@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_LOCKED Sistema de archivos bloqueado.
+#@version 1.1.0 - Primera adaptación para OpenGnsys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2016-07-15
+#*/ ##
+function ogConfigureOgagent ()
+{
+# Variables locales.
+local MNTDIR AGENTDIR CFGFILE
+# 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.
+MNTDIR=$(ogMount $1 $2) || return $?
+
+# Comprobar si existe el fichero de configuración de OGAgent.
+for AGENTDIR in usr/share/OGAgent "Program Files/OGAgent" "Program Files (x86)/OGAgent" Applications/OGAgent.app; do
+ CFGFILE=$(ogGetPath "$MNTDIR/$AGENTDIR/cfg/ogagent.cfg")
+ [ -n "$CFGFILE" ] && break
+done
+[ -n "$CFGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "ogagent.cfg" || return $?
+# Parchear dirección del servidor OpenGnsys en el fichero de configuración de OGAgent.
+sed -i "0,/remote=/ s,remote=.*,remote=https://$(ogGetServerIp)/opengnsys/rest/," "$CFGFILE"
+}
+
+
+#/**
+# ogInstallLaunchDaemon int_ndisk int_nfilesys str_filename
+#@brief Instala archivo que se ejecutará en el arranque de macOS.
+#@param int_ndisk nº de orden del disco
+#@param int_nfilesys nº de orden del sistema de archivos
+#@param str_filename nombre del script
+#return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado.
+#@npte Crea ficheros de configuración /Library/LaunchDaemon/es.opengnsys.Script.plist.
+#@version 1.0.6 - Primera versión para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-10-06
+#*/ ##
+function ogInstallLaunchDaemon ()
+{
+# Variables locales.
+local LAUNCHDIR SCRIPTDIR
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \
+ "$FUNCNAME 1 2 postconf"
+ return
+fi
+
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Comprobar directorios.
+LAUNCHDIR=$(ogGetPath $1 $2 /Library/LaunchDaemons)
+[ -n "$LAUNCHDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /Library/LaunchDaemons" || return $?
+SCRIPTDIR=$(ogGetPath $1 $2 /usr/share)
+[ -n "$SCRIPTDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share" || return $?
+
+# Crear fichero de configuración del servicio de arranque.
+cat << EOT $LAUNCHDIR/es.opengnsys.$3.plist
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+ <dict>
+ <key>Label</key>
+ <string>es.opengnsys.$3</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>$SCRIPTDIR/$3.sh</string>
+ </array>
+ <key>RunAtLoad</key>
+ <true/>
+ <key>StandardOutPath</key>
+ <string>/var/log/$3.log</string>
+ <key>StandardErrorPath</key>
+ <string>/var/log/$3.err</string>
+ <true/>
+ </dict>
+</plist>
+EOT
+
+# Crear un fichero de script vacío.
+rm -f $SCRIPTDIR/$3.sh
+touch $SCRIPTDIR/$3.sh
+chmod +x $SCRIPTDIR/$3.sh
+}
+
+
+### PRUEBAS.
+
+#/**
+# ogAddToLaunchDaemon int_ndisk int_nfilesys str_filename str_commands
+#@brief Añade comandos al script creado por ogInstalLaunchDaemon.
+#@param int_ndisk nº de orden del disco
+#@param int_nfilesys nº de orden del sistema de archivos
+#@param str_filename nombre del script (siempre se guardará en /usr/share para que sea visible por el sistema
+#@param str_commands comando o comandos que se añadiran al fichero
+#return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado.
+#@version 1.0.6 - Primera versión para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-10-06
+#*/ ##
+function ogAddToLaunchDaemon ()
+{
+# Variables locales.
+local SCRIPTFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \
+ "$FUNCNAME 1 2 postconf \"diskutil enableJournal disk0s2\""
+ return
+fi
+
+# Error si no se reciben 4 parámetros.
+[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Comprobar que existe el fichero de comandos.
+SCRIPTFILE=$(ogGetPath $1 $2 "/usr/share/$3.sh")
+[ -n "$SCRIPTFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share/$3" || return $?
+
+# Concatenamos el comando en el fichero de comandos
+cat >> "$SCRIPTFILE" << EOT
+$4
+EOT
+}
+
+
+#/**
+# ogInstallLinuxClient int_ndisk int_filesys
+#@brief Instala el cliente OpenGnSys para sistemas operativos GNU/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
+#@version 1.0.5 - Evitar duplicidad de instalación del cliente.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-03-06
+#*/ ##
+function ogInstallLinuxClient ()
+{
+# Variables locales.
+local 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.
+MNTDIR=$(ogMount $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; }
+ if (! /ogAdmLnxClient/)
+ print; }
+ }' /tmp/rclocal > $MNTDIR/$RCLOCAL
+rm /tmp/rclocal
+ogUnlock $1 $2
+}
+
+
+#/**
+# ogInstallWindowsClient int_ndisk int_filesys str_filename
+#@brief Instala el cliente OpenGnSys para sistemas operativos Windows.
+#@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
+#@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
+#@version 1.0.5 - Cambios en los parametros de entrada y funcionamiento de la funcion
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2013-02-12
+#*/ ##
+
+function ogInstallWindowsClient ()
+{
+# Variables locales.
+local MNTDIR CLIENTFILE i DIR WINDIR
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \
+ "$FUNCNAME 1 1 filename.cmd"
+ return
+fi
+
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Obtener sistema de archvios.
+MNTDIR=$(ogMount $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 $?
+# Copiar cliente e incluir en el fichero de configuracion dado que instale el cliente en el arranque.
+cp -a $CLIENTFILE "$WINDIR"
+ogAddCmd $1 $2 $3 "ogAdmWinClient -remove"
+ogAddCmd $1 $2 $3 "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)"
+}
+
+
+
+#/**
+# ogUninstallLinuxClient int_ndisk int_filesys
+#@brief Desinstala el cliente OpenGnSys para sistemas operativos GNU/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_PARTITION Paritición o sistema de archivos incorrectos.
+#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
+#@version 1.1.0 - Primera adaptación para OpenGnsys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2016-08-22
+#*/ ##
+function ogUninstallLinuxClient ()
+{
+# Variables locales.
+local MNTDIR
+# 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.
+MNTDIR=$(ogMount $1 $2) || return $?
+
+# Borrar ficheros y quitar llamada al cliente durante el proceso de inicio.
+rm -f $MNTDIR/{usr/sbin,sbin,usr/local/sbin}/ogAdmLnxClient
+rm -f $MNTDIR/{etc,usr/local/etc}/ogAdmLnxClient.cfg
+sed -i -e '/ogAdmLnxClient/ d' $MNTDIR/{etc,usr/local/etc}/{rc.local,rc.d/rc.local} 2>/dev/null
+}
+
+
+#/**
+# ogUninstallWindowsClient int_ndisk int_filesys str_filename
+#@brief Desinstala el cliente OpenGnSys para sistemas operativos Windows.
+#@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
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
+#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
+#@version 1.1.0 - Primera adaptación para OpenGnsys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2016-08-22
+#*/ ##
+
+function ogUninstallWindowsClient ()
+{
+# Variables locales.
+local MNTDIR
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \
+ "$FUNCNAME 1 1 filename.cmd"
+ return
+fi
+
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Obtener sistema de archvios.
+MNTDIR=$(ogMount "$1" "$2") || return $?
+
+# Crear órdenes para desinstalar servicio y borrar ejecutable del cliente.
+if [ -n "$(ogGetPath $MNTDIR/windows/ogAdmWinClient.exe)" -o -n "$(ogGetPath $MNTDIR/winnt/ogAdmWinClient.exe)" ]; then
+ ogAddCmd $1 $2 "$3" 'ogAdmWinClient -remove'
+ ogAddCmd $1 $2 "$3" 'DEL C:\Windows\ogAdmWinClient.exe'
+ ogAddCmd $1 $2 "$3" 'DEL C:\Winnt\ogAdmWinClient.exe'
+fi
+}
+
|