#!/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/* #*/ Comentario Doxygen ;; Windows) # Borrar ficheros de hibernación y paginación de Windows. [ -n "$(ogGetPath $1 $2 pagefile.sys)" ] && ogDeleteFile $1 $2 pagefile.sys [ -n "$(ogGetPath $1 $2 hiberfil.sys)" ] && ogDeleteFile $1 $2 hiberfil.sys [ -n "$(ogGetPath $1 $2 swapfile.sys)" ] && 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 #*/ " (comentario Doxygen) } ### 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 }