summaryrefslogtreecommitdiffstats
path: root/client/engine/PostConf.lib
diff options
context:
space:
mode:
authorccabezu <carmel@upv.es>2018-02-21 13:31:04 +0000
committerccabezu <carmel@upv.es>2018-02-21 13:31:04 +0000
commit61733a13e5e57140b71ecac067a24342bad514ef (patch)
tree081e92db1f552bc1134e1c082ada2ef6b2786e99 /client/engine/PostConf.lib
parentfae755f4bf7dc67869c6be720bc1beb8c2f22f14 (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/engine/PostConf.lib')
-rwxr-xr-xclient/engine/PostConf.lib1315
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
+}
+