source: client/engine/PostConf.lib @ a7c4bd4

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since a7c4bd4 was 204603e, checked in by ramon <ramongomez@…>, 11 years ago

639: Evitar duplicar la instalación del cliente Linux.

git-svn-id: https://opengnsys.es/svn/branches/version1.0@4179 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 16.2 KB
Line 
1#!/bin/bash
2#/**
3#@file    PostConf.lib
4#@brief   Librería o clase PostConf
5#@class   PostConf
6#@brief   Funciones para la postconfiguración de sistemas operativos.
7#@version 1.0.5
8#@warning License: GNU GPLv3+
9#*/
10
11#/**
12#         ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ]
13#@brief   Metafunción para instalar archivo que se ejecutará en el arranque de Windows.
14#@see     ogInstallFirstBoot ogInstallRunonce
15#*/ ##
16function ogInstallMiniSetup ()
17{
18case $# in
19    3)  # Ejecución en el primer arranque de la máquina.
20        ogInstallFirstBoot "$@" ;;
21    6|8) # Ejecución en el "runonce".
22        ogInstallRunonce "$@" ;;
23    *)  ogRaiseError $OG_ERR_FORMAT
24        exit $? ;;
25esac
26}
27
28
29#/**
30#         ogInstallFirstBoot int_ndisk int_npartition str_filename
31#@brief   Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado
32#@param   int_ndisk         nº de orden del disco
33#@param   int_npartition    nº de orden de la partición
34#@param   str_filename      nombre del archivo .cmd a ejecutar en el arranque
35#@return  (nada)
36#@exception OG_ERR_FORMAT    Formato incorrecto.
37#@note    El archivo estará en system32 y será visible por el sistema.
38#@version 1.0.2 - Nueva función
39#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
40#@date    2011-06-29
41#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup.
42#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
43#@date    2012-04-16
44#*/ ##
45function ogInstallFirstBoot ()
46{
47local MNTDIR DIR CMDDIR CMDFILE
48# Si se solicita, mostrar ayuda.
49if [ "$*" == "help" ]; then
50    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \
51           "$FUNCNAME 1 1 filename.cmd"
52    return
53fi
54# Error si no se reciben 3 parámetros.
55[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
56# Comprobar que existe el directorio del fichero de comandos.
57MNTDIR=$(ogMount "$1" "$2") || return $?
58for i in winnt windows; do
59    DIR=$(ogGetPath $MNTDIR/$i/system32)
60    [ -n "$DIR" ] && CMDDIR=$DIR
61done
62[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MNTDIR/windows/system32" || return $?
63CMDFILE="$CMDDIR/$3"
64
65# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la
66# postconfiguracion resetee el mini setup, sino lo haria en cada arranque.
67cat > "$CMDFILE" << EOF
68REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f
69REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f
70EOF
71
72# Crear los valores de registro necesarios para que se haga la ejecución del .cmd al aranque.
73ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1
74ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4
75#ogDeleteRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
76ogAddRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
77ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $(basename $CMDFILE)"
78}
79
80
81#/**
82#         ogInstallRunonce int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]
83#@brief   Crea el archivo cmd que se ejecutara en el runonce de un usuario administrador
84#@param   int_ndisk         nº de orden del disco
85#@param   int_npartition    nº de orden de la partición
86#@param   str_filename      nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
87#@param   str_adm_user      usuario administrador para hacer autologin y ejecutar el runonce
88#@param   str_adm_password  password del usuario administrador
89#@param   bool_autologin    si despues de la postconfiguracion queremos que la maquina haga autologin (0 o 1)
90#@param   str_auto_user     Usuario con el que queremos que haga autologin despues de la postconfiguracion
91#@param   str_auto_password Password del usuario que hara autologin
92#@return  (nada)
93#@exception OG_ERR_FORMAT    Formato incorrecto.
94#@version 1.0.2 - Nueva función
95#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
96#@date    2011-06-29
97#@version 1.0.4 - Heredado de antigua función ogInstallMiniSetup
98#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
99#@date    2012-04-16
100#*/ ##
101function ogInstallRunonce ()
102{
103local MOUNTPOINT DIR CMDDIR CMDFILE
104# Si se solicita, mostrar ayuda.
105if [ "$*" == "help" ]; then
106    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]" \
107           "$FUNCNAME 1 1 filename.cmd administrator passadmin 1 userauto passuserauto" \
108           "$FUNCNAME 1 1 filename.cmd administrator passadmin 0"
109    return
110fi
111# Error si no se reciben 6 u 8 parámetros.
112[ $# == 6 -o $# == 8 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
113# Punto de montaje.
114MOUNTPOINT="$(ogGetPath "$1" "$2" /)"
115# Comprobar que existe el directorio del fichero de comandos.
116for i in winnt windows; do
117    DIR=$(ogGetPath $MOUNTPOINT/$i/system32)
118    [ -n "$DIR" ] && CMDDIR=$DIR
119done
120[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/Windows/System32" || return $?
121CMDFILE="$CMDDIR/$3"
122
123if [ $6 == 0 ]; then
124    # Si no queremos hacer autologin despues de la postconfiguracion lo indicamos en las claves de registro
125    cat > "$CMDFILE" << EOF
126DEL C:\ogboot.*
127REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f
128REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f
129REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f
130EOF
131else
132    # Si queremos hacer autologin despues de la postconfiguracion introducimos la informacion en las claves de registro
133    cat > "$CMDFILE" << EOF
134DEL C:\ogboot.*
135REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
136REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f
137REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f
138EOF
139fi
140#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin
141ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null
142ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null
143ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null
144ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null
145ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null
146ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null
147}
148
149#/**
150#         ogAddCmd int_ndisk int_npartition str_filename str_commands
151#@brief   Añade comandos al cmd creado por ogInstalMiniSetup
152#@param   int_ndisk         nº de orden del disco
153#@param   int_npartition    nº de orden de la partición
154#@param   str_filename      nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema
155#@param   str_commands      comando o comandos que se añadiran al fichero
156#@return 
157#@exception OG_ERR_FORMAT    Formato incorrecto.
158#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
159#@version 1.0.2 - Nueva función
160#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
161#@date    2011-06-29
162#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
163#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
164#@date    2012-04-16
165#*/ ##
166function ogAddCmd ()
167{
168local MOUNTPOINT CMDFILE
169# Si se solicita, mostrar ayuda.
170if [ "$*" == "help" ]; then
171    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_commands" \
172           "$FUNCNAME 1 1 filename.cmd command"
173    return
174fi
175# Error si no se reciben 4 parámetros.
176[ $# == 4 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
177# Punto de montaje
178MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
179# Comprobar que existe el fichero de comandos.
180CMDFILE="$(ogGetPath "$MOUNTPOINT/windows/system32")/$3"
181[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/windows/system32/$3" || return $?
182
183# Concatenamos el comando en el fichero de comandos
184cat >> "$CMDFILE" << EOF
185$4
186EOF
187}
188
189
190#/**
191#         ogDomainScript int_ndisk int_npartition str_domain str_user str_password
192#@brief   Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup
193#@param   int_ndisk         nº de orden del disco
194#@param   int_npartition    nº de orden de la partición
195#@param   str_filename      nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
196#@param   str_domain        dominio donde se quiere conectar
197#@param   str_user          usuario con privilegios para unir al dominio
198#@param   str_password      password del usuario con privilegios
199#@return 
200#@exception OG_ERR_FORMAT    Formato incorrecto.
201#@version 1.0.2 - Nueva función
202#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
203#@date    2011-06-29
204#@version 1.0.4 - Cambios en los parametros de entrada de la funcion
205#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
206#@date    2012-04-16
207#*/ ##
208function ogDomainScript ()
209{
210local CMDDIR
211# Si se solicita, mostrar ayuda.
212if [ "$*" == "help" ]; then
213    ogHelp "$FUNCNAME" \
214           "$FUNCNAME int_ndisk int_npartition str_filename str_domain str_user str_password" \
215           "$FUNCNAME 1 1 filename.cmd domain user password_user"
216    return
217fi
218# Error si no se reciben 6 parámetros.
219[ $# == 6 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
220# Punto de montaje
221MOUNTPOINT="$(ogMount "$1" "$2")" || return $?
222# Comprobar que existe el directorio de comandos.
223CMDDIR=$(ogGetPath "$MOUNTPOINT/windows/system32")
224[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
225
226# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio.
227ogAddCmd $1 $2 "$3" "CSCRIPT joindomain.vbs"
228# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
229ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.vbs"
230# Metemos unas claves de registro para que el dominio salga seleccionado por defecto
231ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$4\" /f"
232
233# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
234cat > "$CMDDIR/joindomain.vbs" << EOF
235Const JOIN_DOMAIN = 1
236Const ACCT_CREATE = 2
237Const ACCT_DELETE = 4
238Const WIN9X_UPGRADE = 16
239Const DOMAIN_JOIN_IF_JOINED = 32
240Const JOIN_UNSECURE = 64
241Const MACHINE_PASSWORD_PASSED = 128
242Const DEFERRED_SPN_SET = 256
243Const INSTALL_INVOCATION = 262144
244
245strDomain = "$4"
246strUser = "$5"
247strPassword = "$6"
248
249Set objNetwork = CreateObject("WScript.Network")
250strComputer = objNetwork.ComputerName
251
252Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _
253    strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
254
255ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _
256    strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE)
257EOF
258}
259
260
261#/**
262#         ogInstallLinuxClient int_ndisk int_filesys
263#@brief   Instala el cliente OpenGnSys para sistemas operativos GNU/Linux.
264#@param   int_ndisk    nº de orden del disco
265#@param   int_filesys  nº de orden del sistema de archivos
266#@return  (nada)
267#@exception OG_ERR_FORMAT    Formato incorrecto.
268#@exception OG_ERR_NOTFOUND  Fichero o dispositivo no encontrado.
269#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
270#@exception OG_ERR_LOCKED    Sistema de archivos bloqueado.
271#@version 1.0.4 - Primera adaptación para OpenGnSys.
272#@author  Ramon Gomez, ETSII Universidad de Sevilla
273#@date    2012-04-10
274#@version 1.0.5 - Evitar duplicidad de instalación del cliente.
275#@author  Ramon Gomez, ETSII Universidad de Sevilla
276#@date    2014-03-06
277#*/ ##
278function ogInstallLinuxClient ()
279{
280# Variables locales.
281local PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
282# Si se solicita, mostrar ayuda.
283if [ "$*" == "help" ]; then
284    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
285           "$FUNCNAME 1 1"
286    return
287fi
288
289# Error si no se reciben 2 parámetros.
290[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
291# Obtener sistema de archvios.
292PART="$(ogDiskToDev $1 $2)" || return $?
293# Comprobar si el sistema de archivos no está bloqueado.
294MNTDIR=$(ogMount $1 $2) 2>/dev/null
295[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $?
296# Comprobar si existe el cliente y los directorios y ficheros destino.
297CLIENTFILE=$OGLIB/ogclient/ogAdmLnxClient
298[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
299for i in /usr/local/sbin /sbin /usr/sbin; do
300    [ -d $MNTDIR/$i ] && SBINDIR=$i
301done
302[ -n "$SBINDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 sbin" || return $?
303for i in /usr/local/etc /etc; do
304    [ -d $MNTDIR/$i ] && ETCDIR=$i
305done
306[ -n "$ETCDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 etc" || return $?
307for i in $ETCDIR/rc.local $ETCDIR/rc.d/rc.local; do
308    [ -f $i ] && RCLOCAL=$i
309done
310[ -n "$RCLOCAL" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 rc.local" || return $?
311# Realizar la instalación en modo uso exclusivo.
312ogLock $1 $2
313trap "ogUnlock $1 $2" 1 2 3 6 9
314# Copiar cliente, generar fichero de configuración e incluir en el arranque.
315cp -a $CLIENTFILE $MNTDIR/$SBINDIR
316cat > $MNTDIR/$ETCDIR/ogAdmLnxClient.cfg << EOT
317ServidorAdm=$(ogGetServerIp)
318PUERTO=2008
319IPLOCAL=$(ogGetIpAddress)
320EOT
321cp -a $MNTDIR/$RCLOCAL /tmp/rclocal
322awk -v sbin=$SBINDIR -v etc=$ETCDIR \
323        '{ if (/^#/) { print; }
324           else {
325                if (loc==0) {
326                    printf "%s/ogAdmLnxClient -f %s/ogAdmLnxClient.cfg &\n",sbin,etc;
327                    loc=1; }
328                if (! /ogAdmLnxClient/)
329                    print; }
330        }' /tmp/rclocal > $MNTDIR/$RCLOCAL
331rm /tmp/rclocal
332ogUnlock $1 $2
333}
334
335
336#/**
337#         ogInstallWindowsClient int_ndisk int_filesys
338#@brief   Instala el cliente OpenGnSys para sistemas operativos Windows.
339#@param   int_ndisk         nº de orden del disco
340#@param   int_npartition    nº de orden de la partición
341#@param   str_filename      nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
342#@return  (nada)
343#@exception OG_ERR_FORMAT    Formato incorrecto.
344#@exception OG_ERR_NOTFOUND  Fichero o dispositivo no encontrado.
345#@exception OG_ERR_PARTITION Paritición o sistema de archivos incorrectos.
346#@exception OG_ERR_LOCKED    Sistema de archivos bloqueado.
347#@version 1.0.4 - Primera adaptación para OpenGnSys.
348#@author  Ramon Gomez, ETSII Universidad de Sevilla
349#@date    2012-04-11
350#@version 1.0.5 - Cambios en los parametros de entrada y funcionamiento de la funcion
351#@author  Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
352#@date    2013-02-12
353#*/ ##
354
355function ogInstallWindowsClient ()
356{
357# Variables locales.
358local PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
359# Si se solicita, mostrar ayuda.
360if [ "$*" == "help" ]; then
361    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
362    return
363fi
364
365# Error si no se reciben 3 parámetros.
366[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
367# Obtener sistema de archvios.
368PART="$(ogDiskToDev $1 $2)" || return $?
369# Comprobar si el sistema de archivos no está bloqueado.
370MNTDIR=$(ogMount $1 $2) 2>/dev/null
371[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $?
372# Comprobar si existe el cliente y los directorios y ficheros destino.
373CLIENTFILE=$OGLIB/ogclient/ogAdmWinClient.exe
374[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
375for i in winnt windows; do
376    DIR=$(ogGetPath $MNTDIR/$i)
377    [ -n "$DIR" ] && WINDIR=$DIR
378done
379[ -n "$WINDIR " ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 windows" || return $?
380# Copiar cliente e incluir en el fichero de configuracion dado que instale el cliente en el arranque.
381cp -a $CLIENTFILE "$WINDIR"
382ogAddCmd $1 $2 $3 "ogAdmWinClient -remove"
383ogAddCmd $1 $2 $3 "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)"
384}
385
Note: See TracBrowser for help on using the repository browser.