544 lines
22 KiB
Bash
544 lines
22 KiB
Bash
#!/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
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>Label</key>
|
|
<string>es.opengnsys.$3</string>
|
|
<key>ProgramArguments</key>
|
|
<array>
|
|
<string>$SCRIPTDIR/$3.sh</string>
|
|
</array>
|
|
<key>RunAtLoad</key>
|
|
<true/>
|
|
<key>StandardOutPath</key>
|
|
<string>/var/log/$3.log</string>
|
|
<key>StandardErrorPath</key>
|
|
<string>/var/log/$3.err</string>
|
|
<true/>
|
|
</dict>
|
|
</plist>
|
|
EOT
|
|
|
|
# Crear un fichero de script vacío.
|
|
rm -f $SCRIPTDIR/$3.sh
|
|
touch $SCRIPTDIR/$3.sh
|
|
chmod +x $SCRIPTDIR/$3.sh
|
|
}
|
|
|
|
|
|
### PRUEBAS.
|
|
|
|
#/**
|
|
# ogAddToLaunchDaemon int_ndisk int_nfilesys str_filename str_commands
|
|
#@brief Añade comandos al script creado por ogInstalLaunchDaemon.
|
|
#@param int_ndisk nº de orden del disco
|
|
#@param int_nfilesys nº de orden del sistema de archivos
|
|
#@param str_filename nombre del script (siempre se guardará en /usr/share para que sea visible por el sistema
|
|
#@param str_commands comando o comandos que se añadiran al fichero
|
|
#return (nada)
|
|
#@exception OG_ERR_FORMAT Formato incorrecto.
|
|
#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado.
|
|
#@version 1.0.6 - Primera versión para OpenGnSys.
|
|
#@author Ramon Gomez, ETSII Universidad de Sevilla
|
|
#@date 2014-10-06
|
|
#*/ ##
|
|
function ogAddToLaunchDaemon ()
|
|
{
|
|
# Variables locales.
|
|
local SCRIPTFILE
|
|
# Si se solicita, mostrar ayuda.
|
|
if [ "$*" == "help" ]; then
|
|
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \
|
|
"$FUNCNAME 1 2 postconf \"diskutil enableJournal disk0s2\""
|
|
return
|
|
fi
|
|
|
|
# Error si no se reciben 4 parámetros.
|
|
[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
|
|
# Comprobar que existe el fichero de comandos.
|
|
SCRIPTFILE=$(ogGetPath $1 $2 "/usr/share/$3.sh")
|
|
[ -n "$SCRIPTFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share/$3" || return $?
|
|
|
|
# Concatenamos el comando en el fichero de comandos
|
|
cat >> "$SCRIPTFILE" << EOT
|
|
$4
|
|
EOT
|
|
}
|
|
|
|
|
|
#/**
|
|
# 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
|
|
}
|
|
|