source: client/engine/PostConf.lib @ 18679ed

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 18679ed was d81c0cb, checked in by ramon <ramongomez@…>, 13 years ago

Versión 1.0.4, #527: Mover funciones a librería PostConf y adaptar función ogInstallWindowsClient.

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

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