source: client/engine/PostConf.lib @ a0da76f

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

#553: Borrar y crear la clave de registro en función ogInstallFirstBoot para evitar errores con chntpw; función ogUnmountAll no muestra errores para sistemas de ficheros no montados.

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

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