diff options
author | ramon <ramongomez@us.es> | 2018-02-22 13:08:39 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2018-02-22 13:08:39 +0000 |
commit | ec923628a3a61cf22c4ba655730a0d0a867b644b (patch) | |
tree | be46aaf8094e5eb12fcab3d5d480ed1b3c15694b | |
parent | 61733a13e5e57140b71ecac067a24342bad514ef (diff) |
#730: Integrar versión OpenGnsys 1.1.0 en rama principal.
git-svn-id: https://opengnsys.es/svn/branches/version1.1@5606 a21b9725-9963-47de-94b9-378ad31fedc9
-rwxr-xr-x | client/engine/PostConf.lib | 1324 | ||||
-rw-r--r-- | doc/CHANGELOG.es.txt | 1 | ||||
-rw-r--r-- | installer/vagrant/Vagrantfile-1.0.6b-vbox | 152 | ||||
-rw-r--r-- | installer/vagrant/Vagrantfile-trunk-vbox | 87 |
4 files changed, 868 insertions, 696 deletions
diff --git a/client/engine/PostConf.lib b/client/engine/PostConf.lib index f9fbbc0f..4f760255 100755 --- a/client/engine/PostConf.lib +++ b/client/engine/PostConf.lib @@ -1,662 +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
-#@version 1.1.0 - Resuelve problemas a partir de Windows 10
-#@author Carmelo Cabezuelo Aguilar - Universidad Politécnica de Valencia
-#@date 2018-02-20
-#*/ ##
-function ogInstallRunonce ()
-{
-local MOUNTPOINT DIR CMDDIR CMDFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]" \
- "$FUNCNAME 1 1 filename.cmd administrator passadmin 1 userauto passuserauto" \
- "$FUNCNAME 1 1 filename.cmd administrator passadmin 0"
- return
-fi
-# Error si no se reciben 6 u 8 parámetros.
-[ $# == 6 -o $# == 8 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Punto de montaje.
-MOUNTPOINT="$(ogGetPath "$1" "$2" /)"
-# Comprobar que existe el directorio del fichero de comandos.
-for i in winnt windows; do
- DIR=$(ogGetPath $MOUNTPOINT/$i/system32)
- [ -n "$DIR" ] && CMDDIR=$DIR
-done
-[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/Windows/System32" || return $?
-CMDFILE="$CMDDIR/$3"
-
-if [ $6 == 0 ]; then
- # Si no queremos hacer autologin despues de la postconfiguracion lo indicamos en las claves de registro
- cat > "$CMDFILE" << EOF
-DEL C:\ogboot.*
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f
-REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f
-EOF
-else
- # Si queremos hacer autologin despues de la postconfiguracion introducimos la informacion en las claves de registro
- cat > "$CMDFILE" << EOF
-DEL C:\ogboot.*
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f
-EOF
-fi
-#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin
-ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null
-ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null
-ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null
-ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName' 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName' ".\\" 2>/dev/null
-ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null
-ogDeleteRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceAutoLockOnLogon' 2>/dev/null
-ogDeleteRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonCount' 2>/dev/null
-}
-
-#/**
-# ogAddCmd int_ndisk int_npartition str_filename str_commands
-#@brief Añade comandos al cmd creado por ogInstalMiniSetup
-#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@param str_filename nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema
-#@param str_commands comando o comandos que se añadiran al fichero
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2012-04-16
-#*/ ##
-function ogAddCmd ()
-{
-local MOUNTPOINT CMDFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_commands" \
- "$FUNCNAME 1 1 filename.cmd command"
- return
-fi
-# Error si no se reciben 4 parámetros.
-[ $# == 4 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Punto de montaje
-MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
-# Crear fichero de comandos, si no existe.
-CMDFILE="$(ogGetPath "$MOUNTPOINT/windows/system32")/$3"
-[ -n "$CMDFILE" ] || ogInstallMiniSetup "$1" "$2" "$3"
-[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/windows/system32/$3" || return $?
-
-# Concatenamos el comando en el fichero de comandos
-cat >> "$CMDFILE" << EOF
-$4
-EOF
-}
-
-
-#/**
-# ogDomainScript int_ndisk int_npartition str_domain str_user str_password
-#@brief Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup
-#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
-#@param str_domain dominio donde se quiere conectar
-#@param str_user usuario con privilegios para unir al dominio
-#@param str_password password del usuario con privilegios
-#@return
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2012-04-16
-#*/ ##
-function ogDomainScript ()
-{
-local CMDDIR
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" \
- "$FUNCNAME int_ndisk int_npartition str_filename str_domain str_user str_password" \
- "$FUNCNAME 1 1 filename.cmd domain user password_user"
- return
-fi
-# Error si no se reciben 6 parámetros.
-[ $# == 6 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Punto de montaje
-MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
-# Comprobar que existe el directorio de comandos.
-CMDDIR=$(ogGetPath "$MOUNTPOINT/windows/system32")
-[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
-
-# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio.
-ogAddCmd $1 $2 "$3" "CSCRIPT joindomain.vbs"
-# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
-ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.vbs"
-# Metemos unas claves de registro para que el dominio salga seleccionado por defecto
-ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$4\" /f"
-
-# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
-cat > "$CMDDIR/joindomain.vbs" << EOF
-Const JOIN_DOMAIN = 1
-Const ACCT_CREATE = 2
-Const ACCT_DELETE = 4
-Const WIN9X_UPGRADE = 16
-Const DOMAIN_JOIN_IF_JOINED = 32
-Const JOIN_UNSECURE = 64
-Const MACHINE_PASSWORD_PASSED = 128
-Const DEFERRED_SPN_SET = 256
-Const INSTALL_INVOCATION = 262144
-
-strDomain = "$4"
-strUser = "$5"
-strPassword = "$6"
-
-Set objNetwork = CreateObject("WScript.Network")
-strComputer = objNetwork.ComputerName
-
-Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _
- strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
-
-ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _
- strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE)
-EOF
-}
-
-
-### PRUEBAS.
-
-#/**
-# ogConfigureOgagent int_ndisk int_filesys
-#@brief Modifica el fichero de configuración del nuevo agente OGAent para sistemas operativos.
-#@param int_ndisk nº de orden del disco
-#@param int_filesys nº de orden del sistema de archivos
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
-#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
-#@version 1.1.0 - Primera adaptación para OpenGnsys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2016-07-15
-#*/ ##
-function ogConfigureOgagent ()
-{
-# Variables locales.
-local MNTDIR AGENTDIR CFGFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
- "$FUNCNAME 1 1"
- return
-fi
-
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Obtener sistema de archvios.
-MNTDIR=$(ogMount $1 $2) || return $?
-
-# Comprobar si existe el fichero de configuración de OGAgent.
-for AGENTDIR in usr/share/OGAgent "Program Files/OGAgent" "Program Files (x86)/OGAgent" Applications/OGAgent.app; do
- CFGFILE=$(ogGetPath "$MNTDIR/$AGENTDIR/cfg/ogagent.cfg")
- [ -n "$CFGFILE" ] && break
-done
-[ -n "$CFGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "ogagent.cfg" || return $?
-# Parchear dirección del servidor OpenGnsys en el fichero de configuración de OGAgent.
-sed -i "0,/remote=/ s,remote=.*,remote=https://$(ogGetServerIp)/opengnsys/rest/," "$CFGFILE"
-}
-
-
-#/**
-# ogInstallLaunchDaemon int_ndisk int_nfilesys str_filename
-#@brief Instala archivo que se ejecutará en el arranque de macOS.
-#@param int_ndisk nº de orden del disco
-#@param int_nfilesys nº de orden del sistema de archivos
-#@param str_filename nombre del script
-#return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado.
-#@npte Crea ficheros de configuración /Library/LaunchDaemon/es.opengnsys.Script.plist.
-#@version 1.0.6 - Primera versión para OpenGnSys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2014-10-06
-#*/ ##
-function ogInstallLaunchDaemon ()
-{
-# Variables locales.
-local LAUNCHDIR SCRIPTDIR
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \
- "$FUNCNAME 1 2 postconf"
- return
-fi
-
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Comprobar directorios.
-LAUNCHDIR=$(ogGetPath $1 $2 /Library/LaunchDaemons)
-[ -n "$LAUNCHDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /Library/LaunchDaemons" || return $?
-SCRIPTDIR=$(ogGetPath $1 $2 /usr/share)
-[ -n "$SCRIPTDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share" || return $?
-
-# Crear fichero de configuración del servicio de arranque.
-cat << EOT $LAUNCHDIR/es.opengnsys.$3.plist
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
- <dict>
- <key>Label</key>
- <string>es.opengnsys.$3</string>
- <key>ProgramArguments</key>
- <array>
- <string>$SCRIPTDIR/$3.sh</string>
- </array>
- <key>RunAtLoad</key>
- <true/>
- <key>StandardOutPath</key>
- <string>/var/log/$3.log</string>
- <key>StandardErrorPath</key>
- <string>/var/log/$3.err</string>
- <true/>
- </dict>
-</plist>
-EOT
-
-# Crear un fichero de script vacío.
-rm -f $SCRIPTDIR/$3.sh
-touch $SCRIPTDIR/$3.sh
-chmod +x $SCRIPTDIR/$3.sh
-}
-
-
-### PRUEBAS.
-
-#/**
-# ogAddToLaunchDaemon int_ndisk int_nfilesys str_filename str_commands
-#@brief Añade comandos al script creado por ogInstalLaunchDaemon.
-#@param int_ndisk nº de orden del disco
-#@param int_nfilesys nº de orden del sistema de archivos
-#@param str_filename nombre del script (siempre se guardará en /usr/share para que sea visible por el sistema
-#@param str_commands comando o comandos que se añadiran al fichero
-#return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado.
-#@version 1.0.6 - Primera versión para OpenGnSys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2014-10-06
-#*/ ##
-function ogAddToLaunchDaemon ()
-{
-# Variables locales.
-local SCRIPTFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \
- "$FUNCNAME 1 2 postconf \"diskutil enableJournal disk0s2\""
- return
-fi
-
-# Error si no se reciben 4 parámetros.
-[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Comprobar que existe el fichero de comandos.
-SCRIPTFILE=$(ogGetPath $1 $2 "/usr/share/$3.sh")
-[ -n "$SCRIPTFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share/$3" || return $?
-
-# Concatenamos el comando en el fichero de comandos
-cat >> "$SCRIPTFILE" << EOT
-$4
-EOT
-}
-
-
-#/**
-# ogInstallLinuxClient int_ndisk int_filesys
-#@brief Instala el cliente OpenGnSys para sistemas operativos GNU/Linux.
-#@param int_ndisk nº de orden del disco
-#@param int_filesys nº de orden del sistema de archivos
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
-#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
-#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
-#@version 1.0.4 - Primera adaptación para OpenGnSys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2012-04-10
-#@version 1.0.5 - Evitar duplicidad de instalación del cliente.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2014-03-06
-#*/ ##
-function ogInstallLinuxClient ()
-{
-# Variables locales.
-local MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
- "$FUNCNAME 1 1"
- return
-fi
-
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Obtener sistema de archvios.
-MNTDIR=$(ogMount $1 $2) || return $?
-
-# Comprobar si existe el cliente y los directorios y ficheros destino.
-CLIENTFILE=$OGLIB/ogclient/ogAdmLnxClient
-[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
-for i in /usr/local/sbin /sbin /usr/sbin; do
- [ -d $MNTDIR/$i ] && SBINDIR=$i
-done
-[ -n "$SBINDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 sbin" || return $?
-for i in /usr/local/etc /etc; do
- [ -d $MNTDIR/$i ] && ETCDIR=$i
-done
-[ -n "$ETCDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 etc" || return $?
-for i in $ETCDIR/rc.local $ETCDIR/rc.d/rc.local; do
- [ -f $i ] && RCLOCAL=$i
-done
-[ -n "$RCLOCAL" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 rc.local" || return $?
-# Realizar la instalación en modo uso exclusivo.
-ogLock $1 $2
-trap "ogUnlock $1 $2" 1 2 3 6 9
-# Copiar cliente, generar fichero de configuración e incluir en el arranque.
-cp -a $CLIENTFILE $MNTDIR/$SBINDIR
-cat > $MNTDIR/$ETCDIR/ogAdmLnxClient.cfg << EOT
-ServidorAdm=$(ogGetServerIp)
-PUERTO=2008
-IPLOCAL=$(ogGetIpAddress)
-EOT
-cp -a $MNTDIR/$RCLOCAL /tmp/rclocal
-awk -v sbin=$SBINDIR -v etc=$ETCDIR \
- '{ if (/^#/) { print; }
- else {
- if (loc==0) {
- printf "%s/ogAdmLnxClient -f %s/ogAdmLnxClient.cfg &\n",sbin,etc;
- loc=1; }
- if (! /ogAdmLnxClient/)
- print; }
- }' /tmp/rclocal > $MNTDIR/$RCLOCAL
-rm /tmp/rclocal
-ogUnlock $1 $2
-}
-
-
-#/**
-# ogInstallWindowsClient int_ndisk int_filesys str_filename
-#@brief Instala el cliente OpenGnSys para sistemas operativos Windows.
-#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
-#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
-#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
-#@version 1.0.4 - Primera adaptación para OpenGnSys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2012-04-11
-#@version 1.0.5 - Cambios en los parametros de entrada y funcionamiento de la funcion
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2013-02-12
-#*/ ##
-
-function ogInstallWindowsClient ()
-{
-# Variables locales.
-local MNTDIR CLIENTFILE i DIR WINDIR
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \
- "$FUNCNAME 1 1 filename.cmd"
- return
-fi
-
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Obtener sistema de archvios.
-MNTDIR=$(ogMount $1 $2) || return $?
-
-# Comprobar si existe el cliente y los directorios y ficheros destino.
-CLIENTFILE=$OGLIB/ogclient/ogAdmWinClient.exe
-[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
-for i in winnt windows; do
- DIR=$(ogGetPath $MNTDIR/$i)
- [ -n "$DIR" ] && WINDIR=$DIR
-done
-[ -n "$WINDIR " ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 windows" || return $?
-# Copiar cliente e incluir en el fichero de configuracion dado que instale el cliente en el arranque.
-cp -a $CLIENTFILE "$WINDIR"
-ogAddCmd $1 $2 $3 "ogAdmWinClient -remove"
-ogAddCmd $1 $2 $3 "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)"
-}
-
-
-
-#/**
-# ogUninstallLinuxClient int_ndisk int_filesys
-#@brief Desinstala el cliente OpenGnSys para sistemas operativos GNU/Linux.
-#@param int_ndisk nº de orden del disco
-#@param int_filesys nº de orden del sistema de archivos
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
-#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
-#@version 1.1.0 - Primera adaptación para OpenGnsys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2016-08-22
-#*/ ##
-function ogUninstallLinuxClient ()
-{
-# Variables locales.
-local MNTDIR
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
- "$FUNCNAME 1 1"
- return
-fi
-
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Obtener sistema de archvios.
-MNTDIR=$(ogMount $1 $2) || return $?
-
-# Borrar ficheros y quitar llamada al cliente durante el proceso de inicio.
-rm -f $MNTDIR/{usr/sbin,sbin,usr/local/sbin}/ogAdmLnxClient
-rm -f $MNTDIR/{etc,usr/local/etc}/ogAdmLnxClient.cfg
-sed -i -e '/ogAdmLnxClient/ d' $MNTDIR/{etc,usr/local/etc}/{rc.local,rc.d/rc.local} 2>/dev/null
-}
-
-
-#/**
-# ogUninstallWindowsClient int_ndisk int_filesys str_filename
-#@brief Desinstala el cliente OpenGnSys para sistemas operativos Windows.
-#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
-#@exception OG_ERR_LOCKED Sistema de archivos bloqueado.
-#@version 1.1.0 - Primera adaptación para OpenGnsys.
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2016-08-22
-#*/ ##
-
-function ogUninstallWindowsClient ()
-{
-# Variables locales.
-local MNTDIR
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \
- "$FUNCNAME 1 1 filename.cmd"
- return
-fi
-
-# Error si no se reciben 3 parámetros.
-[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Obtener sistema de archvios.
-MNTDIR=$(ogMount "$1" "$2") || return $?
-
-# Crear órdenes para desinstalar servicio y borrar ejecutable del cliente.
-if [ -n "$(ogGetPath $MNTDIR/windows/ogAdmWinClient.exe)" -o -n "$(ogGetPath $MNTDIR/winnt/ogAdmWinClient.exe)" ]; then
- ogAddCmd $1 $2 "$3" 'ogAdmWinClient -remove'
- ogAddCmd $1 $2 "$3" 'DEL C:\Windows\ogAdmWinClient.exe'
- ogAddCmd $1 $2 "$3" 'DEL C:\Winnt\ogAdmWinClient.exe'
-fi
-}
-
+#!/bin/bash +#/** +#@file PostConf.lib +#@brief Librería o clase PostConf +#@class PostConf +#@brief Funciones para la postconfiguración de sistemas operativos. +#@version 1.1.0 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogCleanOs int_ndisk int_nfilesys +#@brief Elimina los archivos que no son necesarios en el sistema operativo. +#@param int_ndisk nº de orden del disco +#@param int_nfilesys nº de orden del sistema de archivos +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. +#@exception OG_ERR_PARTITION Partición desconocida o no accesible. +#@note Antes incluido en la funcion ogReduceFs +#@author Irina Gomez. Universidad de Sevilla. +#@return (nada) +#@date 2014-10-27 +#*/ ## +function ogCleanOs { + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \ + "$FUNCNAME 1 1" + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_nfilesys" || return $? + +case "$(ogGetOsType $1 $2)" in + Linux) + # Borramos los ficheros de dispositivos y los temporales. + ogCleanLinuxDevices $1 $2 + rm -rf $(ogMount $1 $2)/tmp/* + ;; + Windows) + # Borrar ficheros de hibernación y paginación de Windows. + ogGetPath $1 $2 pagefile.sys &>/dev/null && ogDeleteFile $1 $2 pagefile.sys + ogGetPath $1 $2 hiberfil.sys &>/dev/null && ogDeleteFile $1 $2 hiberfil.sys + ogGetPath $1 $2 swapfile.sys &>/dev/null && ogDeleteFile $1 $2 swapfile.sys + ;; +esac + +} + + + +#/** +# ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ] +#@brief Metafunción para instalar archivo que se ejecutará en el arranque de Windows. +#@see ogInstallFirstBoot ogInstallRunonce +#*/ ## +function ogInstallMiniSetup () +{ +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$MSG_SEE ogInstallFirstBoot ogInstallRunonce" + return +fi +case $# in + 3) # Ejecución en el primer arranque de la máquina. + ogInstallFirstBoot "$@" ;; + 6|8) # Ejecución en el "runonce". + ogInstallRunonce "$@" ;; + *) ogRaiseError $OG_ERR_FORMAT + return $? ;; +esac +} + + +#/** +# ogInstallFirstBoot int_ndisk int_npartition str_filename +#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_filename nombre del archivo .cmd a ejecutar en el arranque +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@note El archivo estará en system32 y será visible por el sistema. +#@version 1.0.2 - Nueva función +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2011-06-29 +#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup. +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2012-04-16 +#*/ ## +function ogInstallFirstBoot () +{ +local MNTDIR DIR CMDDIR CMDFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \ + "$FUNCNAME 1 1 filename.cmd" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) +# Comprobar que existe el directorio del fichero de comandos. +MNTDIR=$(ogMount "$1" "$2") || return $? +for i in winnt windows; do + DIR=$(ogGetPath $MNTDIR/$i/system32) + [ -n "$DIR" ] && CMDDIR=$DIR +done +[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MNTDIR/windows/system32" || return $? +CMDFILE="$CMDDIR/$3" + +# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la +# postconfiguracion resetee el mini setup, sino lo haria en cada arranque. +cat > "$CMDFILE" << EOF +REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f +REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f +EOF + +# Crear los valores de registro necesarios para que se haga la ejecución del .cmd al aranque. +ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1 +ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4 +#ogDeleteRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" +ogAddRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" +ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $(basename $CMDFILE)" +} + + +#/** +# ogInstallRunonce int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password] +#@brief Crea el archivo cmd que se ejecutara en el runonce de un usuario administrador +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_filename nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema) +#@param str_adm_user usuario administrador para hacer autologin y ejecutar el runonce +#@param str_adm_password password del usuario administrador +#@param bool_autologin si despues de la postconfiguracion queremos que la maquina haga autologin (0 o 1) +#@param str_auto_user Usuario con el que queremos que haga autologin despues de la postconfiguracion +#@param str_auto_password Password del usuario que hara autologin +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@version 1.0.2 - Nueva función +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2011-06-29 +#@version 1.0.4 - Heredado de antigua función ogInstallMiniSetup +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2012-04-16 +#@version 1.1.0 - Resuelve problemas a partir de Windows 10 +#@author Carmelo Cabezuelo Aguilar - Universidad Politécnica de Valencia +#@date 2018-02-20 +#*/ ## +function ogInstallRunonce () +{ +local MOUNTPOINT DIR CMDDIR CMDFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]" \ + "$FUNCNAME 1 1 filename.cmd administrator passadmin 1 userauto passuserauto" \ + "$FUNCNAME 1 1 filename.cmd administrator passadmin 0" + return +fi +# Error si no se reciben 6 u 8 parámetros. +[ $# == 6 -o $# == 8 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) +# Punto de montaje. +MOUNTPOINT="$(ogGetPath "$1" "$2" /)" +# Comprobar que existe el directorio del fichero de comandos. +for i in winnt windows; do + DIR=$(ogGetPath $MOUNTPOINT/$i/system32) + [ -n "$DIR" ] && CMDDIR=$DIR +done +[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/Windows/System32" || return $? +CMDFILE="$CMDDIR/$3" + +if [ $6 == 0 ]; then + # Si no queremos hacer autologin despues de la postconfiguracion lo indicamos en las claves de registro + cat > "$CMDFILE" << EOF +DEL C:\ogboot.* +REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f +REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f +REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f +EOF +else + # Si queremos hacer autologin despues de la postconfiguracion introducimos la informacion en las claves de registro + cat > "$CMDFILE" << EOF +DEL C:\ogboot.* +REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f +REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f +REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f +EOF +fi +#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin +ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null +ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null +ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 2>/dev/null +ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null +ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' 2>/dev/null +ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null +ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName' 2>/dev/null +ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName' ".\\" 2>/dev/null +ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null +ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null +ogDeleteRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceAutoLockOnLogon' 2>/dev/null +ogDeleteRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoLogonCount' 2>/dev/null +} + +#/** +# ogAddCmd int_ndisk int_npartition str_filename str_commands +#@brief Añade comandos al cmd creado por ogInstalMiniSetup +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_filename nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema +#@param str_commands comando o comandos que se añadiran al fichero +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. +#@version 1.0.2 - Nueva función +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2011-06-29 +#@version 1.0.4 - Cambios en los parametros de entrada de la funcion +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2012-04-16 +#*/ ## +function ogAddCmd () +{ +local MOUNTPOINT CMDFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_commands" \ + "$FUNCNAME 1 1 filename.cmd command" + return +fi +# Error si no se reciben 4 parámetros. +[ $# == 4 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) +# Punto de montaje +MOUNTPOINT="$(ogMount "$1" "$2")" || return $? +# Crear fichero de comandos, si no existe. +CMDFILE="$(ogGetPath "$MOUNTPOINT/windows/system32")/$3" +[ -n "$CMDFILE" ] || ogInstallMiniSetup "$1" "$2" "$3" +[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/windows/system32/$3" || return $? + +# Concatenamos el comando en el fichero de comandos +cat >> "$CMDFILE" << EOF +$4 +EOF +} + + +#/** +# ogDomainScript int_ndisk int_npartition str_domain str_user str_password +#@brief Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs +#@param str_domain dominio donde se quiere conectar +#@param str_user usuario con privilegios para unir al dominio +#@param str_password password del usuario con privilegios +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@version 1.0.2 - Nueva función +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2011-06-29 +#@version 1.0.4 - Cambios en los parametros de entrada de la funcion +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2012-04-16 +#*/ ## +function ogDomainScript () +{ +local CMDDIR +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" \ + "$FUNCNAME int_ndisk int_npartition str_filename str_domain str_user str_password" \ + "$FUNCNAME 1 1 filename.cmd domain user password_user" + return +fi +# Error si no se reciben 6 parámetros. +[ $# == 6 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) +# Punto de montaje +MOUNTPOINT="$(ogMount "$1" "$2")" || return $? +# Comprobar que existe el directorio de comandos. +CMDDIR=$(ogGetPath "$MOUNTPOINT/windows/system32") +[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $? + +# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio. +ogAddCmd $1 $2 "$3" "CSCRIPT joindomain.vbs" +# Eliminamos el script porque tiene el usuario de administrador de dominio en claro +ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.vbs" +# Metemos unas claves de registro para que el dominio salga seleccionado por defecto +ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$4\" /f" + +# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio +cat > "$CMDDIR/joindomain.vbs" << EOF +Const JOIN_DOMAIN = 1 +Const ACCT_CREATE = 2 +Const ACCT_DELETE = 4 +Const WIN9X_UPGRADE = 16 +Const DOMAIN_JOIN_IF_JOINED = 32 +Const JOIN_UNSECURE = 64 +Const MACHINE_PASSWORD_PASSED = 128 +Const DEFERRED_SPN_SET = 256 +Const INSTALL_INVOCATION = 262144 + +strDomain = "$4" +strUser = "$5" +strPassword = "$6" + +Set objNetwork = CreateObject("WScript.Network") +strComputer = objNetwork.ComputerName + +Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _ + strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'") + +ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _ + strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE) +EOF +} + + +### PRUEBAS. + +#/** +# ogConfigureOgagent int_ndisk int_filesys +#@brief Modifica el fichero de configuración del nuevo agente OGAent para sistemas operativos. +#@param int_ndisk nº de orden del disco +#@param int_filesys nº de orden del sistema de archivos +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado. +#@exception OG_ERR_LOCKED Sistema de archivos bloqueado. +#@version 1.1.0 - Primera adaptación para OpenGnsys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2016-07-15 +#*/ ## +function ogConfigureOgagent () +{ +# Variables locales. +local MNTDIR AGENTDIR CFGFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \ + "$FUNCNAME 1 1" + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Obtener sistema de archvios. +MNTDIR=$(ogMount $1 $2) || return $? + +# Comprobar si existe el fichero de configuración de OGAgent. +for AGENTDIR in usr/share/OGAgent "Program Files/OGAgent" "Program Files (x86)/OGAgent" Applications/OGAgent.app; do + CFGFILE=$(ogGetPath "$MNTDIR/$AGENTDIR/cfg/ogagent.cfg") + [ -n "$CFGFILE" ] && break +done +[ -n "$CFGFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "ogagent.cfg" || return $? +# Parchear dirección del servidor OpenGnsys en el fichero de configuración de OGAgent. +sed -i "0,/remote=/ s,remote=.*,remote=https://$(ogGetServerIp)/opengnsys/rest/," "$CFGFILE" +} + + +#/** +# ogInstallLaunchDaemon int_ndisk int_nfilesys str_filename +#@brief Instala archivo que se ejecutará en el arranque de macOS. +#@param int_ndisk nº de orden del disco +#@param int_nfilesys nº de orden del sistema de archivos +#@param str_filename nombre del script +#return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado. +#@npte Crea ficheros de configuración /Library/LaunchDaemon/es.opengnsys.Script.plist. +#@version 1.0.6 - Primera versión para OpenGnSys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2014-10-06 +#*/ ## +function ogInstallLaunchDaemon () +{ +# Variables locales. +local LAUNCHDIR SCRIPTDIR +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \ + "$FUNCNAME 1 2 postconf" + return +fi + +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Comprobar directorios. +LAUNCHDIR=$(ogGetPath $1 $2 /Library/LaunchDaemons) +[ -n "$LAUNCHDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /Library/LaunchDaemons" || return $? +SCRIPTDIR=$(ogGetPath $1 $2 /usr/share) +[ -n "$SCRIPTDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share" || return $? + +# Crear fichero de configuración del servicio de arranque. +cat << EOT $LAUNCHDIR/es.opengnsys.$3.plist +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> + <dict> + <key>Label</key> + <string>es.opengnsys.$3</string> + <key>ProgramArguments</key> + <array> + <string>$SCRIPTDIR/$3.sh</string> + </array> + <key>RunAtLoad</key> + <true/> + <key>StandardOutPath</key> + <string>/var/log/$3.log</string> + <key>StandardErrorPath</key> + <string>/var/log/$3.err</string> + <true/> + </dict> +</plist> +EOT + +# Crear un fichero de script vacío. +rm -f $SCRIPTDIR/$3.sh +touch $SCRIPTDIR/$3.sh +chmod +x $SCRIPTDIR/$3.sh +} + + +### PRUEBAS. + +#/** +# ogAddToLaunchDaemon int_ndisk int_nfilesys str_filename str_commands +#@brief Añade comandos al script creado por ogInstalLaunchDaemon. +#@param int_ndisk nº de orden del disco +#@param int_nfilesys nº de orden del sistema de archivos +#@param str_filename nombre del script (siempre se guardará en /usr/share para que sea visible por el sistema +#@param str_commands comando o comandos que se añadiran al fichero +#return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero o directorio no encontrado. +#@version 1.0.6 - Primera versión para OpenGnSys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2014-10-06 +#*/ ## +function ogAddToLaunchDaemon () +{ +# Variables locales. +local SCRIPTFILE +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_scriptname" \ + "$FUNCNAME 1 2 postconf \"diskutil enableJournal disk0s2\"" + return +fi + +# Error si no se reciben 4 parámetros. +[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Comprobar que existe el fichero de comandos. +SCRIPTFILE=$(ogGetPath $1 $2 "/usr/share/$3.sh") +[ -n "$SCRIPTFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 /usr/share/$3" || return $? + +# Concatenamos el comando en el fichero de comandos +cat >> "$SCRIPTFILE" << EOT +$4 +EOT +} + + +#/** +# ogInstallLinuxClient int_ndisk int_filesys +#@brief Instala el cliente OpenGnSys para sistemas operativos GNU/Linux. +#@param int_ndisk nº de orden del disco +#@param int_filesys nº de orden del sistema de archivos +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado. +#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos. +#@exception OG_ERR_LOCKED Sistema de archivos bloqueado. +#@version 1.0.4 - Primera adaptación para OpenGnSys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2012-04-10 +#@version 1.0.5 - Evitar duplicidad de instalación del cliente. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2014-03-06 +#*/ ## +function ogInstallLinuxClient () +{ +# Variables locales. +local MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \ + "$FUNCNAME 1 1" + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Obtener sistema de archvios. +MNTDIR=$(ogMount $1 $2) || return $? + +# Comprobar si existe el cliente y los directorios y ficheros destino. +CLIENTFILE=$OGLIB/ogclient/ogAdmLnxClient +[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $? +for i in /usr/local/sbin /sbin /usr/sbin; do + [ -d $MNTDIR/$i ] && SBINDIR=$i +done +[ -n "$SBINDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 sbin" || return $? +for i in /usr/local/etc /etc; do + [ -d $MNTDIR/$i ] && ETCDIR=$i +done +[ -n "$ETCDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 etc" || return $? +for i in $ETCDIR/rc.local $ETCDIR/rc.d/rc.local; do + [ -f $i ] && RCLOCAL=$i +done +[ -n "$RCLOCAL" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 rc.local" || return $? +# Realizar la instalación en modo uso exclusivo. +ogLock $1 $2 +trap "ogUnlock $1 $2" 1 2 3 6 9 +# Copiar cliente, generar fichero de configuración e incluir en el arranque. +cp -a $CLIENTFILE $MNTDIR/$SBINDIR +cat > $MNTDIR/$ETCDIR/ogAdmLnxClient.cfg << EOT +ServidorAdm=$(ogGetServerIp) +PUERTO=2008 +IPLOCAL=$(ogGetIpAddress) +EOT +cp -a $MNTDIR/$RCLOCAL /tmp/rclocal +awk -v sbin=$SBINDIR -v etc=$ETCDIR \ + '{ if (/^#/) { print; } + else { + if (loc==0) { + printf "%s/ogAdmLnxClient -f %s/ogAdmLnxClient.cfg &\n",sbin,etc; + loc=1; } + if (! /ogAdmLnxClient/) + print; } + }' /tmp/rclocal > $MNTDIR/$RCLOCAL +rm /tmp/rclocal +ogUnlock $1 $2 +} + + +#/** +# ogInstallWindowsClient int_ndisk int_filesys str_filename +#@brief Instala el cliente OpenGnSys para sistemas operativos Windows. +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado. +#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos. +#@exception OG_ERR_LOCKED Sistema de archivos bloqueado. +#@version 1.0.4 - Primera adaptación para OpenGnSys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2012-04-11 +#@version 1.0.5 - Cambios en los parametros de entrada y funcionamiento de la funcion +#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona +#@date 2013-02-12 +#*/ ## + +function ogInstallWindowsClient () +{ +# Variables locales. +local MNTDIR CLIENTFILE i DIR WINDIR +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \ + "$FUNCNAME 1 1 filename.cmd" + return +fi + +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Obtener sistema de archvios. +MNTDIR=$(ogMount $1 $2) || return $? + +# Comprobar si existe el cliente y los directorios y ficheros destino. +CLIENTFILE=$OGLIB/ogclient/ogAdmWinClient.exe +[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $? +for i in winnt windows; do + DIR=$(ogGetPath $MNTDIR/$i) + [ -n "$DIR" ] && WINDIR=$DIR +done +[ -n "$WINDIR " ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 windows" || return $? +# Copiar cliente e incluir en el fichero de configuracion dado que instale el cliente en el arranque. +cp -a $CLIENTFILE "$WINDIR" +ogAddCmd $1 $2 $3 "ogAdmWinClient -remove" +ogAddCmd $1 $2 $3 "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)" +} + + + +#/** +# ogUninstallLinuxClient int_ndisk int_filesys +#@brief Desinstala el cliente OpenGnSys para sistemas operativos GNU/Linux. +#@param int_ndisk nº de orden del disco +#@param int_filesys nº de orden del sistema de archivos +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos. +#@exception OG_ERR_LOCKED Sistema de archivos bloqueado. +#@version 1.1.0 - Primera adaptación para OpenGnsys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2016-08-22 +#*/ ## +function ogUninstallLinuxClient () +{ +# Variables locales. +local MNTDIR +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \ + "$FUNCNAME 1 1" + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Obtener sistema de archvios. +MNTDIR=$(ogMount $1 $2) || return $? + +# Borrar ficheros y quitar llamada al cliente durante el proceso de inicio. +rm -f $MNTDIR/{usr/sbin,sbin,usr/local/sbin}/ogAdmLnxClient +rm -f $MNTDIR/{etc,usr/local/etc}/ogAdmLnxClient.cfg +sed -i -e '/ogAdmLnxClient/ d' $MNTDIR/{etc,usr/local/etc}/{rc.local,rc.d/rc.local} 2>/dev/null +} + + +#/** +# ogUninstallWindowsClient int_ndisk int_filesys str_filename +#@brief Desinstala el cliente OpenGnSys para sistemas operativos Windows. +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos. +#@exception OG_ERR_LOCKED Sistema de archivos bloqueado. +#@version 1.1.0 - Primera adaptación para OpenGnsys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2016-08-22 +#*/ ## + +function ogUninstallWindowsClient () +{ +# Variables locales. +local MNTDIR +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_filename" \ + "$FUNCNAME 1 1 filename.cmd" + return +fi + +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Obtener sistema de archvios. +MNTDIR=$(ogMount "$1" "$2") || return $? + +# Crear órdenes para desinstalar servicio y borrar ejecutable del cliente. +if [ -n "$(ogGetPath $MNTDIR/windows/ogAdmWinClient.exe)" -o -n "$(ogGetPath $MNTDIR/winnt/ogAdmWinClient.exe)" ]; then + ogAddCmd $1 $2 "$3" 'ogAdmWinClient -remove' + ogAddCmd $1 $2 "$3" 'DEL C:\Windows\ogAdmWinClient.exe' + ogAddCmd $1 $2 "$3" 'DEL C:\Winnt\ogAdmWinClient.exe' +fi +} + diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index c708377b..599d04eb 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -29,6 +29,7 @@ Tickets resueltos en módulo OpenGnsys Cloning Engine: #823 Mejorar el rendimiento al obtener el inventario de software de Windows (mejora) #827 ogGrubInstallMbr debe mostrar entrada al ogLive, como ogBurgInstallMbr #829 Funciones auxiliares de configuración de BURG +#832 Fallo en Autologon de Windows 10 Tickets resueltos en módulo OpenGnsys Client: #233 Añadir reloj al cliente (resuelto en #746) diff --git a/installer/vagrant/Vagrantfile-1.0.6b-vbox b/installer/vagrant/Vagrantfile-1.0.6b-vbox new file mode 100644 index 00000000..2db25e1c --- /dev/null +++ b/installer/vagrant/Vagrantfile-1.0.6b-vbox @@ -0,0 +1,152 @@ +# Vagrantfile to install old OpenGnSys 1.0.6b virtual environment using VirtualBox provider. + +VAGRANTFILE_API_VERSION = "2" +# VM provider: Oracle VM VirtualBox. +ENV['VAGRANT_DEFAULT_PROVIDER'] = "virtualbox" +# Language (accepted values: es_ES, ca_ES, en_GB). +LANGUAGE = "es_ES" +ENV['LC_ALL'] = LANGUAGE + ".UTF-8" +# Number of OpenGnsys clients (accepted values: from 2 to 9). +NCLIENTS = 4 +# Repository virtual disk: file and size (GB). +REPODISK = "ogRepo.vdi" +REPOSIZE = 50 +# Amount of memory for server and clients (MB) +SERVERMEM = 1024 # Minimum: 512 +CLIENTMEM = 512 # Minimum: 256 +# Clients MAC address prefix. +MACPREFIX = "08:00:27:0E:65" +NETPREFIX = "192.168.2" +# Local port to access OpenGnsys Server. +LOCALWEBPORT = 8443 + +# OpenGnsys Server provisioning script: prepare repo disk, install OpenGnsys, change default interface, configure DHCP server. +OGSERVERSCRIPT = <<EOT +# Exit if OpenGnsys is installed. +[ -f /opt/opengnsys/doc/VERSION.txt ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1 +# Create repository disk using LVM, if necesary. +if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then + if ! which vgcreate &>/dev/null; then + apt-get update + apt-get install -y lvm2 + fi + pvcreate /dev/sdb + vgcreate og /dev/sdb + vgchange -ay + lvcreate -ay -n images -l 100%VG og + mkfs -t ext4 /dev/mapper/og-images + mkdir -p /opt/opengnsys/images + echo "/dev/mapper/og-images /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab + mount -a +fi +# Install OpenGnsys and change server address. +wget -q https://opengnsys.es/svn/tags/opengnsys-1.0.6b/installer/opengnsys_installer.sh -O - | bash || exit $? +mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log +echo y | /opt/opengnsys/bin/setserveraddr eth1 +# Insert DHCP data. +for ((i=#{NCLIENTS+10}; i>10; i--)); do + sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf +done +service isc-dhcp-server restart +# Set language. +export LANG="#{LANGUAGE}.UTF-8" +echo "LANG=\"$LANG\"" > /etc/default/locale +echo "LANG=\"$LANG\"" >> /etc/environment +locale-gen --lang #{LANGUAGE} +sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\"${LANG%_*}\"/" /etc/default/keyboard +dpkg-reconfigure -fnoninteractive console-setup +# Comment out next lines for automatic data insertion. +#SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, dns, proxy, modp2p, timep2p) VALUES ('Aula virtual', 1, 'aula.jpg', 0, 'Despliegue virtual con Vagrant.', 5, 2, '239.194.2.11', 9000, 70, '#{NETPREFIX}.1', '255.255.255.0', '', '', 'peer', 30); INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES" +#for ((i=11; i<=#{NCLIENTS+10}; i++)); do +# SQL="$SQL ('pc$i', '#{NETPREFIX}.$i', REPLACE('#{MACPREFIX}$i',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," +#done +#mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}" +#if ! grep -q "1\.0" /opt/opengnsys/doc/VERSION.txt; then AUX=1; fi +#/opt/opengnsys/bin/setclientmode ogAdmin pc11 $AUX +#for ((i=12; i<=#{NCLIENTS+10}; i++)); do +# /opt/opengnsys/bin/setclientmode ogClient pc$i $AUX +#done +echo "New OpenGnsys local URL: https://localhost:#{LOCALWEBPORT}/opengnsys/" +EOT + +# Client 1 OS provisioning script. +MODELSCRIPT = <<EOT +# Remove network configuration added by Vagrant. +sed -i "/VAGRANT/,$ d" /etc/network/interfaces +echo "After now, use VirtualBox GUI to disable network interface 1 and work with this VM." +# Leave VM halted. +sleep 2 +poweroff & +EOT + +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + + # OpenGnsys Server VM definition. + config.vm.define "ogAdministrator", primary: true do |og| + # Specific VirtualBox configuration. + og.vm.provider "virtualbox" do |vb| + # VM name, memory and CPUs. + vb.name = "ogAdministrator" + vb.memory = SERVERMEM + vb.cpus = 1 + # 2nd virtual disk path (current dir on Windows, VM dir on other OSes) + if Vagrant::Util::Platform.windows? then + second_disk = File.join(".", REPODISK) + else + line = `VBoxManage list systemproperties`.match("Default machine folder.*")[0] + vb_machine_folder = line.split(':')[1].strip() + second_disk = File.join(vb_machine_folder, vb.name, REPODISK) + end + # Create repo virtual disk, if needed. + unless File.exist?(second_disk) + vb.customize ['createhd', '--filename', second_disk, '--size', REPOSIZE * 1024] + end + # Attach repo virtual disk. + vb.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk] + end + # VM base and host name. + og.vm.box = "ubuntu/trusty64" + og.vm.hostname = "ogAdministrator" + # Network configuration: forward web port and attach new interface to VMs private network. + og.vm.network "forwarded_port", guest: 443, host: LOCALWEBPORT, host_ip: "127.0.0.1" + og.vm.network "private_network", mac: "#{MACPREFIX}10".tr(":",""), ip: "#{NETPREFIX}.10", virtualbox__intnet: true + # Comment out to disable synced folder. + #og.vm.synced_folder ".", "/vagrant", disabled: true + # Launch provisioning script. + og.vm.provision "shell", inline: OGSERVERSCRIPT + end + + # Client 1 VM definition. + config.vm.define "pc11", autostart: false do |v1| + v1.vm.box = "ubuntu/trusty64" + v1.vm.hostname = "pc11" + v1.vm.network "private_network", mac: "#{MACPREFIX}11".tr(":",""), type: "dhcp", virtualbox__intnet: true + v1.vm.provider "virtualbox" do |vb| + vb.name = "pc11" + vb.memory = CLIENTMEM + vb.cpus = 1 + vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk'] + end + v1.vm.synced_folder ".", "/vagrant", disabled: true + v1.vm.provision "shell", inline: MODELSCRIPT + end + + # Clonable clients definition. + (2..NCLIENTS).each do |i| + config.vm.define "pc#{i+10}", autostart: false do |cl| + cl.vm.box = "clink15/pxe" + cl.ssh.insert_key = false + cl.vm.boot_timeout = 5 + cl.vm.network "private_network", mac: "#{MACPREFIX}${i+10}".tr(":",""), type: "dhcp", virtualbox__intnet: true + cl.vm.provider "virtualbox" do |vb| + vb.name = "pc#{i+10}" + vb.memory = CLIENTMEM + vb.cpus = 1 + vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk'] + vb.customize ["modifyvm", :id, "--nic1", "none"] + end + end + end + +end + diff --git a/installer/vagrant/Vagrantfile-trunk-vbox b/installer/vagrant/Vagrantfile-trunk-vbox index efd4e9ab..75dbcd11 100644 --- a/installer/vagrant/Vagrantfile-trunk-vbox +++ b/installer/vagrant/Vagrantfile-trunk-vbox @@ -1,4 +1,4 @@ -# Vagrantfile to install OpenGnsys Trunk virtual environment using VirtualBox provider. +# Vagrantfile to install OpenGnsys Trunk (v1.1.0) virtual environment using VirtualBox provider. VAGRANTFILE_API_VERSION = "2" # VM provider: Oracle VM VirtualBox. @@ -14,9 +14,11 @@ REPOSIZE = 50 # Amount of memory for server and clients (MB) SERVERMEM = 1024 # Minimum: 512 CLIENTMEM = 512 # Minimum: 256 -# Clients MAC address prefix. -MACPREFIX = "08:00:27:0E:65:" -NETPREFIX = "192.168.2." +# Prefixes for MAC and IP addresses. +MACPREFIX = "08:00:27:0E:65" +NETPREFIX = "192.168.2" +# OpenGnsys Server IP address. +SERVERIP = "#{NETPREFIX}.10" # Local port to access OpenGnsys Server. LOCALWEBPORT = 8443 @@ -24,21 +26,24 @@ LOCALWEBPORT = 8443 OGSERVERSCRIPT = <<EOT # Exit if OpenGnsys is installed. [ -f /opt/opengnsys/doc/VERSION.txt ] && echo "Cannot provision, OpenGnsys is already installed." && exit 1 -# Mount repository disk, if necesary. -if [ -n "$(blkid /dev/sdb1 | grep ext4)" ]; then - echo -e "o\nn\np\n\n\n\nw" | fdisk /dev/sdb - mkfs -t ext4 /dev/sdb1 +# Create repository disk using LVM, if necesary. +if [ -z "$(blkid /dev/mapper/og-images | grep ext4)" ]; then + pvcreate /dev/sdb + vgcreate og /dev/sdb + vgchange -ay + lvcreate -ay -n images -l 100%VG og + mkfs -t ext4 /dev/mapper/og-images mkdir -p /opt/opengnsys/images - echo "/dev/sdb1 /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab + echo "/dev/mapper/og-images /opt/opengnsys/images ext4 defaults 0 0" >> /etc/fstab mount -a fi # Install OpenGnsys and change server address. -wget -q http://opengnsys.es/svn/trunk/installer/opengnsys_installer.sh -O - | bash || exit $? +wget -q https://opengnsys.es/svn/trunk/installer/opengnsys_installer.sh -O - | bash || exit $? mv /opt/opengnsys/log/bash.log /opt/opengnsys/log/opengnsys_installer.log -echo y | sudo /opt/opengnsys/bin/setserveraddr eth1 +echo y | /opt/opengnsys/bin/setserveraddr enp0s8 # Insert DHCP data. -for ((i=#{NCLIENTS}; i>0; i--)); do - sed -i "/^}$/ i host ogClient0${i} { hardware ethernet #{MACPREFIX}0${i}; fixed-address #{NETPREFIX}1${i}; }" /etc/dhcp/dhcpd.conf +for ((i=#{NCLIENTS+10}; i>10; i--)); do + sed -i "/^}$/ i host pc${i} { hardware ethernet #{MACPREFIX}:${i}; fixed-address #{NETPREFIX}.${i}; }" /etc/dhcp/dhcpd.conf done service isc-dhcp-server restart # Set language. @@ -49,24 +54,38 @@ locale-gen --lang #{LANGUAGE} sed -i "s/XKBLAYOUT=.*/XKBLAYOUT=\"${LANG%_*}\"/" /etc/default/keyboard dpkg-reconfigure -fnoninteractive console-setup # Comment out next lines for automatic data insertion. -#SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, dns, proxy, modp2p, timep2p) VALUES ('Aula virtual', 1, 'aula.jpg', 0, 'Despliegue virtual con Vagrant.', 5, 2, '239.194.2.11', 9000, 70, '#{NETPREFIX}1', '255.255.255.0', '', '', 'peer', 30); INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES" -#for ((i=1; i<=#{NCLIENTS}; i++)); do -# SQL="$SQL ('ogClient0$i', '#{NETPREFIX}1$i', REPLACE('#{MACPREFIX}0$i',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," +#SQL="INSERT INTO aulas (nombreaula, idcentro, urlfoto, grupoid, ubicacion, puestos, modomul, ipmul, pormul, velmul, router, netmask, ntp, dns, proxy, modp2p, timep2p) VALUES ('Aula virtual', 1, 'aula.jpg', 0, 'Despliegue virtual con Vagrant.', 5, 2, '239.194.2.11', 9000, 70, '#{NETPREFIX}.1', '255.255.255.0', '', '', '', 'peer', 30); INSERT INTO ordenadores (nombreordenador, ip, mac, idaula, idrepositorio, idperfilhard, idmenu, idproautoexec, grupoid, router, mascara, arranque, netiface, netdriver, fotoord) VALUES" +#for ((i=11; i<=#{NCLIENTS+10}; i++)); do +# SQL="$SQL ('pc$i', '#{NETPREFIX}.$i', REPLACE('#{MACPREFIX}$i',':',''), 1, 1, 0, 0, 0, 0, '#{NETPREFIX}.1', '255.255.255.0', '00unknown', 'eth0', 'generic', 'fotoordenador.gif')," #done #mysql -u usuog -ppassusuog -D ogAdmBD -e "${SQL%,}" -#if ! grep -q "1\.0" /opt/opengnsys/doc/VERSION.txt; then AUX=1; fi -#/opt/opengnsys/bin/setclientmode ogAdmin ogClient01 $AUX -#for ((i=2; i<=#{NCLIENTS}; i++)); do -# /opt/opengnsys/bin/setclientmode ogClient ogClient0$i $AUX +#/opt/opengnsys/bin/setclientmode ogLiveAdmin pc11 PERM +#for ((i=12; i<=#{NCLIENTS+10}; i++)); do +# /opt/opengnsys/bin/setclientmode ogLive pc$i PERM #done -echo "New OpenGnsys local URL: https://localhost:#{LOCALWEBPORT}/opengnsys/" +echo "Notes:" +echo "- OpenGnsys Server URL: https://localhost:#{LOCALWEBPORT}/opengnsys/" +exit 0 EOT # Client 1 OS provisioning script. +OGAGENTPKG = "ogagent_1.1.0_all.deb" MODELSCRIPT = <<EOT +# Comment out next lines to install and configure OGAgent for Ubuntu. +#apt-get update -y +#wget -q --no-check-certificate https://#{SERVERIP}/opengnsys/descargas/#{OGAGENTPKG} +#if [ -f #{OGAGENTPKG} ]; then +# dpkg -i #{OGAGENTPKG} +# apt-get install -fy || exit $? +# sed -i "0,/remote=/ s,remote=.*,remote=https://#{SERVERIP}/opengnsys/rest/," /usr/share/OGAgent/cfg/ogagent.cfg +# rm -f #{OGAGENTPKG} +#else +# echo "Warning: cannot install OGAgent package #{OGAGENTPKG}" +#fi # Remove network configuration added by Vagrant. -sed -i "/VAGRANT/,$ d" /etc/network/interfaces -echo "After now, use VirtualBox GUI to disable network interface 1 and work with this VM." +sed -i "/enp0s3/ d" /etc/network/interfaces +echo "Notes:" +echo "- After now, use VirtualBox GUI to disable network interface 1 and restart this VM." # Leave VM halted. sleep 2 poweroff & @@ -95,14 +114,14 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| vb.customize ['createhd', '--filename', second_disk, '--size', REPOSIZE * 1024] end # Attach repo virtual disk. - vb.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk] + vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', second_disk] end # VM base and host name. - og.vm.box = "ubuntu/trusty64" + og.vm.box = "bento/ubuntu-16.04" og.vm.hostname = "ogAdministrator" # Network configuration: forward web port and attach new interface to VMs private network. og.vm.network "forwarded_port", guest: 443, host: LOCALWEBPORT, host_ip: "127.0.0.1" - og.vm.network "private_network", ip: "#{NETPREFIX}10", virtualbox__intnet: true + og.vm.network "private_network", mac: "#{MACPREFIX}10".tr(":",""), ip: "#{SERVERIP}", virtualbox__intnet: true # Comment out to disable synced folder. #og.vm.synced_folder ".", "/vagrant", disabled: true # Launch provisioning script. @@ -110,12 +129,12 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| end # Client 1 VM definition. - config.vm.define "ogClient01", autostart: false do |v1| - v1.vm.box = "ubuntu/trusty64" - v1.vm.hostname = "ogClient01" - v1.vm.network "private_network", mac: "#{MACPREFIX}01".tr(":",""), type: "dhcp", virtualbox__intnet: true + config.vm.define "pc11", autostart: false do |v1| + v1.vm.box = "bento/ubuntu-16.04" + v1.vm.hostname = "pc11" + v1.vm.network "private_network", mac: "#{MACPREFIX}11".tr(":",""), type: "dhcp", virtualbox__intnet: true v1.vm.provider "virtualbox" do |vb| - vb.name = "ogClient01" + vb.name = "pc11" vb.memory = CLIENTMEM vb.cpus = 1 vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk'] @@ -126,13 +145,13 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Clonable clients definition. (2..NCLIENTS).each do |i| - config.vm.define "ogClient0#{i}", autostart: false do |cl| + config.vm.define "pc#{i+10}", autostart: false do |cl| cl.vm.box = "clink15/pxe" cl.ssh.insert_key = false cl.vm.boot_timeout = 5 - cl.vm.network "private_network", mac: "#{MACPREFIX}".tr(":","") + "%02d" % "#{i}", type: "dhcp", virtualbox__intnet: true + cl.vm.network "private_network", mac: "#{MACPREFIX}#{i+10}".tr(":",""), type: "dhcp", virtualbox__intnet: true cl.vm.provider "virtualbox" do |vb| - vb.name = "ogClient0#{i}" + vb.name = "pc#{i+10}" vb.memory = CLIENTMEM vb.cpus = 1 vb.customize ['modifyvm', :id, '--boot1', 'net', '--boot2', 'disk'] |