source: client/engine/Boot.lib @ 7caf5a7c

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 7caf5a7c was 985bef0, checked in by adv <adv@…>, 15 years ago

Adaptando comentarios-histórico al doxygen al engine. ticket:216

git-svn-id: https://opengnsys.es/svn/trunk@1176 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 15.6 KB
Line 
1#!/bin/bash
2#/**
3#@file    Boot.lib
4#@brief   Librería o clase Boot
5#@class   Boot
6#@brief   Funciones para arranque y post-configuración de sistemas de archivos.
7#@version 0.9
8#@warning License: GNU GPLv3+
9#*/
10
11
12#/**
13#         ogBoot int_ndisk int_npartition
14#@brief   Inicia el proceso de arranque de un sistema de archivos.
15#@param   int_ndisk      nº de orden del disco
16#@param   int_npartition nº de orden de la partición
17#@return  (activar el sistema de archivos).
18#@exception OG_ERR_FORMAT    Formato incorrecto.
19#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
20#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
21#@exception OG_ERR_NOTOS     La partición no tiene instalado un sistema operativo.
22#@note    En Linux, debe arrancarse la partición del directorio \c /boot
23#@version 0.1 - Integracion para OpenGNSys. - EAC: HDboot(); BootLinuxEX() en Boot.lib 
24#@author  Antonio J. Doblas Viso, Universidad de Malaga
25#@date    2008-10-27
26#@version 0.9 - Adaptacion para OpenGNSys.
27#@author  Ramon Gomez, ETSII Universidad de Sevilla
28#@date    2009-09-11
29#*/ ##
30function ogBoot ()
31{
32# Variables locales.
33local PART TYPE MNTDIR PARAMS KERNEL INITRD APPEND FILE LOADER
34
35# Si se solicita, mostrar ayuda.
36if [ "$*" == "help" ]; then
37    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
38           "$FUNCNAME 1 1"
39    return
40fi
41# Error si no se reciben 2 parámetros.
42[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
43
44# Detectar tipo de sistema de archivos y montarlo.
45PART=$(ogDiskToDev $1 $2) || return $?
46TYPE=$(ogGetFsType $1 $2) || return $?
47MNTDIR=$(ogMount $1 $2) 2>/dev/null
48[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
49
50case "$TYPE" in
51    EXT[234]|REISERFS|REISER4|JFS|XFS)
52        # Obtiene los parámetros de arranque para Linux.
53        PARAMS=$(ogLinuxBootParameters $1 $2) || return $?
54        read -e KERNEL INITRD APPEND <<<"$PARAMS"
55        # Si no hay kernel, no hay sistema operativo.
56        [ -z "$KERNEL" ] && ogRaiseError $OG_ERR_NOTOS && return $?
57        # Arrancar de partición distinta a la original.
58        [ -e "$MNTDIR/etc" ] && APPEND=$(echo $APPEND | awk -v P="$PART " '{sub (/root=[-+=_/a-zA-Z0-9]* /,"root="P);print}')
59        # Configurar kernel Linux con los parámetros leídos de su GRUB.
60        kexec -l "${MNTDIR}${KERNEL}" --append="$APPEND" --initrd="${MNTDIR}${INITRD}"
61        ;;
62    NTFS|HNTFS|FAT32|HFAT32)
63        # Compruebar si hay un cargador de Windows.
64        for f in io.sys ntldr bootmgr; do
65            FILE="$(ogGetPath $1 $2 $f 2>/dev/null)"
66            [ -n "$FILE" ] && LOADER="$f"
67        done
68        [ -z "$LOADER" ] && ogRaiseError $OG_ERR_NOTOS && return $?
69        # Activar la partición y copiar Grub4DOS.
70        ogSetPartitionActive $1 $2
71        cp $OGLIB/grub4dos/* $MNTDIR    # */ (Comentario Doxygen)
72        #kexec -l $MNTDIR/grub.exe --append=--config-file="find --set-root /$LOADER; chainloader /$LOADER; tpm --init"
73        kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
74        ;;
75    *)  ogRaiseError $OG_ERR_PARTITION "$1, $2"
76        return $?
77        ;;
78esac
79
80# Arrancar.
81kexec -e
82}
83
84
85#/**
86#         ogGetRegistryValue path_mountpoint str_registrytype str_valuename
87#@brief   Devuelve el dato de un valor del registro de Windows.
88#@param   path_mountpoint  directorio donde está montado el sistema Windows
89#@param   str_registrytype tipo de registro a leer
90#@param   str_valuename    valor de registro
91#@return  str_valuedata - valor de la clave.
92#@exception OG_ERR_FORMAT    Formato incorrecto.
93#@exception OG_ERR_NOTFOUND  Disco o partición no corresponden con un dispositivo.
94#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
95#@note    registrytype = { default, sam, security, software, system, components }
96#@warning Requisitos: chntpw, awk
97#@warning La partición de Windows debe estar montada previamente.
98#@version 0.9 - Adaptación para OpenGNSys.
99#@author  Ramon Gomez, ETSII Universidad de Sevilla
100#@date    2009-09-11
101#*/ ##
102function ogGetRegistryValue ()
103{
104# Variables locales.
105local FILE FILENT FILEXP
106
107# Si se solicita, mostrar ayuda.
108if [ "$*" == "help" ]; then
109    ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key"
110    return
111fi
112# Error si no se reciben 3 parámetros.
113[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
114
115# Camino del fichero de registro en NT/2000 o XP/Vista/7.
116FILENT=$(ogGetPath "/$1/winnt/system32/config/$2")
117[ -f $FILENT ] && FILE="$FILENT"
118FILEXP=$(ogGetPath "/$1/windows/system32/config/$2")
119[ -f $FLEHXP ] && FILE="$FILEXP"
120[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $?
121
122# Devolver el dato del valor de registro.
123# /* (comentario Doxygen)
124chntpw $FILE << FIN 2>/dev/null | awk '/> Value/ {getline;print $0;}'
125cd ${3%\\*}
126cat ${3##*\\}
127q
128FIN
129# (comentario Doxygen) */
130}
131
132
133#/**
134#         ogGetWindowsName int_ndisk int_npartition
135#@brief   Muestra el nombre del equipo en el registro de Windows.
136#@param   int_ndisk      nº de orden del disco
137#@param   int_npartition nº de orden de la partición
138#@return  str_name - nombre del equipo
139#@exception OG_ERR_FORMAT    Formato incorrecto.
140#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
141#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
142#@version 0.9 - Adaptación para OpenGNSys.
143#@author  Ramon Gomez, ETSII Universidad de Sevilla
144#@date    2009-09-23
145#*/ ##
146function ogGetWindowsName ()
147{
148# Variables locales.
149local PART MNTDIR
150
151# Si se solicita, mostrar ayuda.
152if [ "$*" == "help" ]; then
153    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
154           "$FUNCNAME 1 1  ==>  PRACTICA-PC"
155    return
156fi
157# Error si no se reciben 2 parámetros.
158[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
159
160# Montar el sistema de archivos.
161MNTDIR=$(ogMount $1 $2) 2>/dev/null
162[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
163
164# Obtener dato del valor de registro.
165ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerName\ComputerName'
166}
167
168
169#/**
170#         ogListRegistryKeys path_mountpoint str_registrytype str_key
171#@brief   Lista los nombres de claves de una determinada clave del registro de Windows.
172#@param   path_mountpoint  directorio donde está montado el sistema Windows
173#@param   str_registrytype tipo de registro a leer
174#@param   str_key          clave de registro
175#@return  str_key ... - lista de claves de registro
176#@exception OG_ERR_FORMAT    Formato incorrecto.
177#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
178#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
179#@note    registrytype = { default, sam, security, software, system, components }
180#@warning Requisitos: chntpw, awk
181#@warning La partición de Windows debe estar montada previamente.
182#@version 0.9 - Adaptación para OpenGNSys.
183#@author  Ramon Gomez, ETSII Universidad de Sevilla
184#@date    2009-09-23
185#*/ ##
186function ogListRegistryKeys ()
187{
188# Variables locales.
189local FILE FILENT FILEXP
190
191# Si se solicita, mostrar ayuda.
192if [ "$*" == "help" ]; then
193    ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key"
194    return
195fi
196# Error si no se reciben 3 parámetros.
197[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
198
199# Camino del fichero de registro en NT/2000 o XP/Vista/7.
200FILENT=$(ogGetPath "/$1/winnt/system32/config/$2")
201[ -f $FILENT ] && FILE="$FILENT"
202FILEXP=$(ogGetPath "/$1/windows/system32/config/$2")
203[ -f $FLEHXP ] && FILE="$FILEXP"
204[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $?
205
206# Devolver la lista de claves de registro.
207chntpw $FILE << FIN 2>/dev/null | awk 'BEGIN {FS="[<>]"} $1~/^  $/ {print $2}'
208ls $3
209q
210FIN
211}
212
213
214#/**
215#         ogLinuxBootParameters int_ndisk int_npartition
216#@brief   Muestra los parámetros de arranque de un sistema de archivos Linux.
217#@param   int_ndisk      nº de orden del disco
218#@param   int_npartition nº de orden de la partición
219#@return  str_kernel str_initrd str_parameters ...
220#@exception OG_ERR_FORMAT    Formato incorrecto.
221#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
222#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
223#@warning Función básica usada por \c ogBoot
224#@version 0.9 - Primera adaptación para OpenGNSys.
225#@author  Ramon Gomez, ETSII Universidad de Sevilla
226#@date    2009-09-11
227#@version 0.9.2 - Soporta partición /boot independiente.
228#@author  Ramon Gomez, ETSII Universidad de Sevilla
229#@date    2010-07-20
230#*/ ##
231function ogLinuxBootParameters ()
232{
233# Variables locales.
234local MNTDIR CONFDIR CONFFILE
235
236# Si se solicita, mostrar ayuda.
237if [ "$*" == "help" ]; then
238    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
239           "$FUNCNAME 1 2  ==>  ..."
240    return
241fi
242# Error si no se reciben 2 parámetros.
243[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
244
245# Detectar id. de tipo de partición y codificar al mnemonico.
246MNTDIR=$(ogMount $1 $2) 2>/dev/null
247[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
248
249# Fichero de configuración de GRUB.
250CONFDIR=$MNTDIR                               # Partición de arranque /boot.
251[ -d $MNTDIR/boot ] && CONFDIR=$MNTDIR/boot   # Partición raíz con directorio boot.
252CONFFILE="$CONFDIR/grub/menu.lst"
253[ ! -e $CONFFILE ] && CONFFILE="$CONFDIR/grub/grub.cfg"
254[ ! -e $CONFFILE ] && ogRaiseError $OG_ERR_NOTFOUND "grub.cfg" && return $?
255
256# Toma del fichero de configuracion los valores del kernel, initrd
257#       y parámetros de arranque usando las cláusulas por defecto
258#       ("default" en GRUB1, "set default" en GRUB2)
259#       y los formatea para que sean compatibles con \c kexec .  */
260# /* (comentario Doxygen)
261awk 'BEGIN {cont=-1;}
262     $1~/^default/      {sub(/=/," "); def=$2;}
263     $1~/^set/ && $2~/^default/ {gsub(/[="]/," "); def=$3;}
264     $1~/^title|^menuentry/ {cont++}
265     $1~/^kernel|^linux/ {if (def==cont) {
266                            kern=$2;
267                            sub($1,"");sub($1,"");sub(/^[ \t]*/,"");app=$0}  # /* (comentario Doxygen)
268                        }
269     $1~/^initrd/       {if (def==cont) init=$2}
270     END {if (kern!="") printf("%s %s %s", kern,init,app)}
271    ' $CONFFILE
272# */ (comentario Doxygen)
273}
274
275
276
277#/**
278#         ogSetRegistryValue path_mountpoint str_registrytype str_valuename str_valuedata
279#@brief   Establece el dato asociado a un valor del registro de Windows.
280#@param   path_mountpoint  directorio donde está montado el sistema Windows
281#@param   str_registrytype tipo de registro
282#@param   str_valuename    nombre del valor de registro
283#@param   str_valuedata    dato del valor de registro
284#@return  (nada)
285#@exception OG_ERR_FORMAT    Formato incorrecto.
286#@exception OG_ERR_NOTFOUND  Disco o partición no corresponden con un dispositivo.
287#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
288#@note    registrytype = { default, sam, security, software, system, components }
289#@warning Requisitos: chntpw, awk
290#@warning La partición de Windows debe estar montada previamente.
291#@version 0.9 - Adaptación para OpenGNSys.
292#@author  Ramon Gomez, ETSII Universidad de Sevilla
293#@date    2009-09-24
294#*/ ##
295function ogSetRegistryValue ()
296{
297# Variables locales.
298local FILE FILENT FILEXP
299
300# Si se solicita, mostrar ayuda.
301if [ "$*" == "help" ]; then
302    ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key"
303    return
304fi
305# Error si no se reciben 4 parámetros.
306[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
307
308# Camino del fichero de registro en NT/2000 o XP/Vista/7.
309FILENT=$(ogGetPath "/$1/winnt/system32/config/$2")
310[ -f $FILENT ] && FILE="$FILENT"
311FILEXP=$(ogGetPath "/$1/windows/system32/config/$2")
312[ -f $FLEHXP ] && FILE="$FILEXP"
313[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $?
314
315# Cambiar el dato del valor de registro.
316chntpw $FILE << FIN &>/dev/null
317ed $3
318$4
319q
320y
321FIN
322}
323
324
325#/**
326#         ogSetWindowsName int_ndisk int_npartition str_name
327#@brief   Establece el nombre del equipo en el registro de Windows.
328#@param   int_ndisk      nº de orden del disco
329#@param   int_npartition nº de orden de la partición
330#@param   str_name       nombre asignado
331#@return  (nada)
332#@exception OG_ERR_FORMAT    Formato incorrecto.
333#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
334#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
335#@version 0.9 - Adaptación a OpenGNSys.
336#@author  Ramon Gomez, ETSII Universidad de Sevilla
337#@date    2009-09-24
338#*/ ##
339function ogSetWindowsName ()
340{
341# Variables locales.
342local PART MNTDIR NAME
343
344# Si se solicita, mostrar ayuda.
345if [ "$*" == "help" ]; then
346    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_name" \
347           "$FUNCNAME 1 1 PRACTICA-PC"
348    return
349fi
350# Error si no se reciben 3 parámetros.
351[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
352
353# Montar el sistema de archivos.
354MNTDIR=$(ogMount $1 $2) 2>/dev/null
355[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
356NAME="$3"
357
358# Modificar datos de los valores de registro.
359ogSetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerName\ComputerName' "$NAME" 2>/dev/null
360ogSetRegistryValue $MNTDIR system '\ControlSet001\Services\Tcpip\Parameters\Hostname' "$NAME" 2>/dev/null
361ogSetRegistryValue $MNTDIR system '\ControlSet001\services\Tcpip\Parameters\Hostname' "$NAME" 2>/dev/null
362ogSetRegistryValue $MNTDIR system '\ControlSet001\Services\Tcpip\Parameters\NV Hostname' "$NAME" 2>/dev/null
363ogSetRegistryValue $MNTDIR system '\ControlSet001\services\Tcpip\Parameters\NV Hostname' "$NAME" 2>/dev/null
364}
365
366
367#/**
368#         ogSetWinlogonUser int_ndisk int_npartition str_username
369#@brief   Establece el nombre de usuario por defecto en la entrada de Windows.
370#@param   int_ndisk      nº de orden del disco
371#@param   int_npartition nº de orden de la partición
372#@param   str_username   nombre de usuario por defecto
373#@return  (nada)
374#@exception OG_ERR_FORMAT    Formato incorrecto.
375#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
376#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
377#@version 0.9.2 - Adaptación a OpenGNSys.
378#@author  Ramon Gomez, ETSII Universidad de Sevilla
379#@date    2010-07-20
380#*/ ##
381function ogSetWinlogonUser ()
382{
383# Variables locales.
384local PART MNTDIR NAME
385
386# Si se solicita, mostrar ayuda.
387if [ "$*" == "help" ]; then
388    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_username" \
389           "$FUNCNAME 1 1 USUARIO"
390    return
391fi
392# Error si no se reciben 3 parámetros.
393[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
394
395# Montar el sistema de archivos.
396MNTDIR=$(ogMount $1 $2) 2>/dev/null
397[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
398NAME="$3"
399
400# Modificar datos en el registro.
401ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$3"
402}
403
404
405#/**
406#         ogNewMbrXP int_ndisk
407#@brief   Genera un nuevo Master Boot Record en el disco duro indicado, compatible con los SO tipo Windows
408#@param   int_ndisk      nº de orden del disco
409#@return  salida del programa my-sys
410#@exception OG_ERR_FORMAT    Formato incorrecto.
411#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
412#@version 0.9 - Adaptación a OpenGNSys.
413#@author  Antonio J. Doblas Viso. Universidad de Málaga
414#@date    2009-09-24
415#*/ ##
416
417function ogNewMbrXP ()
418{
419# Variables locales.
420local PART
421
422# Si se solicita, mostrar ayuda.
423if [ "$*" == "help" ]; then
424    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk " \
425           "$FUNCNAME 1 "
426    return
427fi
428# Error si no se reciben 1 parámetros.
429[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
430
431PART="$(ogDiskToDev $1)" || return $?
432ms-sys -z -f $PART
433ms-sys -m -f $PART
434}
435
Note: See TracBrowser for help on using the repository browser.