diff options
Diffstat (limited to 'client/engine/PostConf.lib')
-rwxr-xr-x | client/engine/PostConf.lib | 328 |
1 files changed, 163 insertions, 165 deletions
diff --git a/client/engine/PostConf.lib b/client/engine/PostConf.lib index 647423a3..24fb00d8 100755 --- a/client/engine/PostConf.lib +++ b/client/engine/PostConf.lib @@ -4,10 +4,147 @@ #@brief Librería o clase PostConf #@class PostConf #@brief Funciones para la postconfiguración de sistemas operativos. -#@version 1.0.4 +#@version 1.0.5 #@warning License: GNU GPLv3+ #*/ +#/** +# ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ] +#@brief Metafunción para instalar archivo que se ejecutará en el arranque de Windows. +#@see ogInstallFirstBoot ogInstallRunonce +#*/ ## +function ogInstallMiniSetup () +{ +case $# in + 3) # Ejecución en el primer arranque de la máquina. + ogInstallFirstBoot "$@" ;; + 6|8) # Ejecución en el "runonce". + ogInstallRunonce "$@" ;; + *) ogRaiseError $OG_ERR_FORMAT + exit $? ;; +esac +} + + +#/** +# ogInstallFirstBoot int_ndisk int_npartition str_filename +#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_filename nombre del archivo .cmd a ejecutar en el arranque +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@note El archivo estará en system32 y será visible por el sistema. +#@version 1.0.2 - Nueva función +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2011-06-29 +#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup. +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2012-04-16 +#*/ ## +function ogInstallFirstBoot () +{ +local MNTDIR DIR CMDDIR CMDFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \ + "$FUNCNAME 1 1 filename.cmd" + return +fi +# Error si no se reciben 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 @@ -91,7 +228,7 @@ ogAddCmd $1 $2 "$3" "CSCRIPT joindomain.vbs" # Eliminamos el script porque tiene el usuario de administrador de dominio en claro ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.vbs" # Metemos unas claves de registro para que el dominio salga seleccionado por defecto -ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$3\" /f" +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 @@ -123,7 +260,7 @@ EOF #/** # ogInstallLinuxClient int_ndisk int_filesys -#@brief Instala el cliente OpenGnSys para sistemas operativos Linux. +#@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) @@ -134,11 +271,14 @@ EOF #@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 PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL +local MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \ @@ -149,10 +289,8 @@ fi # Error si no se reciben 2 parámetros. [ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? # Obtener sistema de archvios. -PART="$(ogDiskToDev $1 $2)" || return $? -# Comprobar si el sistema de archivos no está bloqueado. -MNTDIR=$(ogMount $1 $2) 2>/dev/null -[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $? +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 $? @@ -185,7 +323,8 @@ awk -v sbin=$SBINDIR -v etc=$ETCDIR \ if (loc==0) { printf "%s/ogAdmLnxClient -f %s/ogAdmLnxClient.cfg &\n",sbin,etc; loc=1; } - print; } + if (! /ogAdmLnxClient/) + print; } }' /tmp/rclocal > $MNTDIR/$RCLOCAL rm /tmp/rclocal ogUnlock $1 $2 @@ -193,150 +332,11 @@ ogUnlock $1 $2 #/** -# ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ] -#@brief Metafunción para instalar archivo que se ejecutará en el arranque de Windows. -#@see ogInstallFirstBoot ogInstallRunonce -#*/ ## -function ogInstallMiniSetup () -{ -case $# in - 3) # Ejecución en el primer arranque de la máquina. - ogInstallFirstBoot "$@" ;; - 6|8) # Ejecución en el "runonce". - ogInstallRunonce "$@" ;; - *) ogRaiseError $OG_ERR_FORMAT - exit $? ;; -esac -} - - -#/** -# ogInstallFirstBoot int_ndisk int_npartition str_filename -#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado -#@param int_ndisk nº de orden del disco -#@param int_npartition nº de orden de la partición -#@param str_filename nombre del archivo .cmd a ejecutar en el arranque -#@return (nada) -#@exception OG_ERR_FORMAT Formato incorrecto. -#@note El archivo estará en system32 y será visible por el sistema. -#@version 1.0.2 - Nueva función -#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona -#@date 2011-06-29 -#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup. -#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona -#@date 2012-04-16 -#*/ ## -function ogInstallFirstBoot () -{ -local MNTDIR DIR CMDDIR CMDFILE -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \ - "$FUNCNAME 1 1 filename.cmd" - return -fi -# Error si no se reciben 2 parámetros. -[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) -# Comprobar que existe el directorio del fichero de comandos. -MNTDIR=$(ogMount "$1" "$2") || return $? -for i in winnt windows; do - DIR=$(ogGetPath $MNTDIR/$i/system32) - [ -n "$DIR" ] && CMDDIR=$DIR -done -[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MNTDIR/windows/system32" || return $? -CMDFILE="$CMDDIR/$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 -# Borrar y crear el valor para compatibilidad con algunos sistmeas. -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 volem fer autologin despres de la postconfiguracio o indiquem a las claus de registre - cat > "$CMDFILE" << EOF -DEL C:\ogboot.* -REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f -REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f -REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f -EOF -else - # Si volem fer autologin despres de la postconfiguracio introduim l'informacio a les claus de registre - cat > "$CMDFILE" << EOF -DEL C:\ogboot.* -REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f -REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f -REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f -EOF -fi -#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin -ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null -ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null -ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null -ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null -ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null -ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null -} - - -#/** # ogInstallWindowsClient int_ndisk int_filesys #@brief Instala el cliente OpenGnSys para sistemas operativos Windows. -#@param int_ndisk nº de orden del disco -#@param int_filesys nº de orden del sistema de archivos +#@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. @@ -345,24 +345,26 @@ ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Wi #@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 PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL +local MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \ return fi -# Error si no se reciben 2 parámetros. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? # Obtener sistema de archvios. -PART="$(ogDiskToDev $1 $2)" || return $? -# Comprobar si el sistema de archivos no está bloqueado. -MNTDIR=$(ogMount $1 $2) 2>/dev/null -[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $? +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 $? @@ -371,13 +373,9 @@ for i in winnt windows; do [ -n "$DIR" ] && WINDIR=$DIR done [ -n "$WINDIR " ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 windows" || return $? -# Realizar la instalación en modo uso exclusivo. -ogLock $1 $2 -trap "ogUnlock $1 $2" 1 2 3 6 9 -# Copiar cliente, generar fichero de configuración e incluir en el arranque. +# Copiar cliente e incluir en el fichero de configuracion dado que instale el cliente en el arranque. cp -a $CLIENTFILE "$WINDIR" -ogInstallMiniSetup $1 $2 ogclient.cmd -ogAddCmd $1 $2 ogclient.cmd "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)" -ogUnlock $1 $2 +ogAddCmd $1 $2 $3 "ogAdmWinClient -remove" +ogAddCmd $1 $2 $3 "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)" } |