From 61733a13e5e57140b71ecac067a24342bad514ef Mon Sep 17 00:00:00 2001 From: ccabezu Date: Wed, 21 Feb 2018 13:31:04 +0000 Subject: #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 --- client/engine/PostConf.lib | 1315 ++++++++++++++++++++++---------------------- 1 file 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 - - - - Label - es.opengnsys.$3 - ProgramArguments - - $SCRIPTDIR/$3.sh - - RunAtLoad - - StandardOutPath - /var/log/$3.log - StandardErrorPath - /var/log/$3.err - - - -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 + + + + Label + es.opengnsys.$3 + ProgramArguments + + $SCRIPTDIR/$3.sh + + RunAtLoad + + StandardOutPath + /var/log/$3.log + StandardErrorPath + /var/log/$3.err + + + +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 +} + -- cgit v1.2.3-18-g5258