source: client/engine/Boot.lib @ b608176

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 b608176 was ab82469, checked in by adv <adv@…>, 14 years ago

version 1.0.2 Instalación de grub en boot sector del linux restaurado #450

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

  • Property mode set to 100755
File size: 20.5 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 - Integración 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 - Adaptación 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        #FIXME: activar seguimiento inicio sesion Windows con grub4dos
72        if [ "$(ogGetOsType $1 $2)" == "Windows" ]; then
73            dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3
74            dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3
75            dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3
76            ogLoadHiveWindows $1 $2
77            ogHiveNTRunMachine "cmd /c del c:\ogboot.*" ogcleanboot
78            ogUpdateHiveWindows
79            reboot
80        else       
81            cp $OGLIB/grub4dos/* $MNTDIR    # */ (Comentario Doxygen)
82            kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
83        fi
84        ;;
85    *)  ogRaiseError $OG_ERR_PARTITION "$1, $2"
86        return $?
87        ;;
88esac
89
90# Arrancar.
91kexec -e
92}
93
94
95#/**
96#         ogGetWindowsName int_ndisk int_npartition
97#@brief   Muestra el nombre del equipo en el registro de Windows.
98#@param   int_ndisk      nº de orden del disco
99#@param   int_npartition nº de orden de la partición
100#@return  str_name - nombre del equipo
101#@exception OG_ERR_FORMAT    Formato incorrecto.
102#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
103#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
104#@version 0.9 - Adaptación para OpenGnSys.
105#@author  Ramon Gomez, ETSII Universidad de Sevilla
106#@date    2009-09-23
107#*/ ##
108function ogGetWindowsName ()
109{
110# Variables locales.
111local PART MNTDIR
112
113# Si se solicita, mostrar ayuda.
114if [ "$*" == "help" ]; then
115    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
116           "$FUNCNAME 1 1  ==>  PRACTICA-PC"
117    return
118fi
119# Error si no se reciben 2 parámetros.
120[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
121
122# Montar el sistema de archivos.
123MNTDIR=$(ogMount $1 $2) 2>/dev/null
124[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
125
126# Obtener dato del valor de registro.
127ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerName\ComputerName'
128}
129
130
131#/**
132#         ogLinuxBootParameters int_ndisk int_npartition
133#@brief   Muestra los parámetros de arranque de un sistema de archivos Linux.
134#@param   int_ndisk      nº de orden del disco
135#@param   int_npartition nº de orden de la partición
136#@return  str_kernel str_initrd str_parameters ...
137#@exception OG_ERR_FORMAT    Formato incorrecto.
138#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
139#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
140#@warning Función básica usada por \c ogBoot
141#@version 0.9 - Primera adaptación para OpenGnSys.
142#@author  Ramon Gomez, ETSII Universidad de Sevilla
143#@date    2009-09-11
144#@version 0.9.2 - Soporta partición /boot independiente.
145#@author  Ramon Gomez, ETSII Universidad de Sevilla
146#@date    2010-07-20
147#*/ ##
148function ogLinuxBootParameters ()
149{
150# Variables locales.
151local MNTDIR CONFDIR CONFFILE
152
153# Si se solicita, mostrar ayuda.
154if [ "$*" == "help" ]; then
155    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
156           "$FUNCNAME 1 2  ==>  ..."
157    return
158fi
159# Error si no se reciben 2 parámetros.
160[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
161
162# Detectar id. de tipo de partición y codificar al mnemonico.
163MNTDIR=$(ogMount $1 $2) 2>/dev/null
164[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
165
166# Fichero de configuración de GRUB.
167CONFDIR=$MNTDIR                               # Partición de arranque /boot.
168[ -d $MNTDIR/boot ] && CONFDIR=$MNTDIR/boot   # Partición raíz con directorio boot.
169CONFFILE="$CONFDIR/grub/menu.lst"
170[ ! -e $CONFFILE ] && CONFFILE="$CONFDIR/grub/grub.cfg"
171[ ! -e $CONFFILE ] && ogRaiseError $OG_ERR_NOTFOUND "grub.cfg" && return $?
172
173# Toma del fichero de configuracion los valores del kernel, initrd
174#       y parámetros de arranque usando las cláusulas por defecto
175#       ("default" en GRUB1, "set default" en GRUB2)
176#       y los formatea para que sean compatibles con \c kexec .  */
177# /* (comentario Doxygen)
178awk 'BEGIN {cont=-1;}
179     $1~/^default/      {sub(/=/," "); def=$2;}
180     $1~/^set/ && $2~/^default/ {gsub(/[="]/," "); def=$3;}
181     $1~/^title|^menuentry/ {cont++}
182     $1~/^kernel|^linux/ {if (def==cont) {
183                            kern=$2;
184                            sub($1,"");sub($1,"");sub(/^[ \t]*/,"");app=$0}  # /* (comentario Doxygen)
185                        }
186     $1~/^initrd/       {if (def==cont) init=$2}
187     END {if (kern!="") printf("%s %s %s", kern,init,app)}
188    ' $CONFFILE
189# */ (comentario Doxygen)
190}
191
192
193#/**
194#         ogSetWindowsName int_ndisk int_npartition str_name
195#@brief   Establece el nombre del equipo en el registro de Windows.
196#@param   int_ndisk      nº de orden del disco
197#@param   int_npartition nº de orden de la partición
198#@param   str_name       nombre asignado
199#@return  (nada)
200#@exception OG_ERR_FORMAT    Formato incorrecto.
201#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
202#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
203#@version 0.9 - Adaptación a OpenGnSys.
204#@author  Ramon Gomez, ETSII Universidad de Sevilla
205#@date    2009-09-24
206#*/ ##
207function ogSetWindowsName ()
208{
209# Variables locales.
210local PART MNTDIR NAME
211
212# Si se solicita, mostrar ayuda.
213if [ "$*" == "help" ]; then
214    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_name" \
215           "$FUNCNAME 1 1 PRACTICA-PC"
216    return
217fi
218# Error si no se reciben 3 parámetros.
219[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
220
221# Montar el sistema de archivos.
222MNTDIR=$(ogMount $1 $2) 2>/dev/null
223[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
224NAME="$3"
225
226# Modificar datos de los valores de registro.
227ogSetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerName\ComputerName' "$NAME" 2>/dev/null
228ogSetRegistryValue $MNTDIR system '\ControlSet001\Services\Tcpip\Parameters\Hostname' "$NAME" 2>/dev/null
229ogSetRegistryValue $MNTDIR system '\ControlSet001\services\Tcpip\Parameters\Hostname' "$NAME" 2>/dev/null
230ogSetRegistryValue $MNTDIR system '\ControlSet001\Services\Tcpip\Parameters\NV Hostname' "$NAME" 2>/dev/null
231ogSetRegistryValue $MNTDIR system '\ControlSet001\services\Tcpip\Parameters\NV Hostname' "$NAME" 2>/dev/null
232}
233
234
235#/**
236#         ogSetWinlogonUser int_ndisk int_npartition str_username
237#@brief   Establece el nombre de usuario por defecto en la entrada de Windows.
238#@param   int_ndisk      nº de orden del disco
239#@param   int_npartition nº de orden de la partición
240#@param   str_username   nombre de usuario por defecto
241#@return  (nada)
242#@exception OG_ERR_FORMAT    Formato incorrecto.
243#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
244#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
245#@version 0.9.2 - Adaptación a OpenGnSys.
246#@author  Ramon Gomez, ETSII Universidad de Sevilla
247#@date    2010-07-20
248#*/ ##
249function ogSetWinlogonUser ()
250{
251# Variables locales.
252local PART MNTDIR NAME
253
254# Si se solicita, mostrar ayuda.
255if [ "$*" == "help" ]; then
256    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_username" \
257           "$FUNCNAME 1 1 USUARIO"
258    return
259fi
260# Error si no se reciben 3 parámetros.
261[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
262
263# Montar el sistema de archivos.
264MNTDIR=$(ogMount $1 $2) 2>/dev/null
265[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
266NAME="$3"
267
268# Modificar datos en el registro.
269ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$3"
270}
271
272
273#/**
274#         ogBootMbrXP int_ndisk
275#@brief   Genera un nuevo Master Boot Record en el disco duro indicado, compatible con los SO tipo Windows
276#@param   int_ndisk      nº de orden del disco
277#@return  salida del programa my-sys
278#@exception OG_ERR_FORMAT    Formato incorrecto.
279#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
280#@version 0.9 - Adaptación a OpenGnSys.
281#@author  Antonio J. Doblas Viso. Universidad de Málaga
282#@date    2009-09-24
283#*/ ##
284
285function ogBootMbrXP ()
286{
287# Variables locales.
288local PART
289
290# Si se solicita, mostrar ayuda.
291if [ "$*" == "help" ]; then
292    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk " \
293           "$FUNCNAME 1 "
294    return
295fi
296# Error si no se reciben 1 parámetros.
297[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
298
299PART="$(ogDiskToDev $1)" || return $?
300ms-sys -z -f $PART
301ms-sys -m -f $PART
302}
303
304
305#/**
306#         ogBootMbrGeneric int_ndisk
307#@brief   Genera un nuevo Codigo de arranque en el MBR del disco indicado, compatible con los SO tipo Windows, Linux.
308#@param   int_ndisk      nº de orden del disco
309#@return  salida del programa my-sys
310#@exception OG_ERR_FORMAT    Formato incorrecto.
311#@exception OG_ERR_NOTFOUND Tipo de partición desconocido o no se puede montar.
312#@version 0.9 - Adaptación a OpenGnSys.
313#@author  Antonio J. Doblas Viso. Universidad de Málaga
314#@date    2009-09-24
315#*/ ##
316
317function ogBootMbrGeneric ()
318{
319# Variables locales.
320local PART
321
322# Si se solicita, mostrar ayuda.
323if [ "$*" == "help" ]; then
324    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk " \
325           "$FUNCNAME 1 "
326    return
327fi
328# Error si no se reciben 1 parámetros.
329[ $# == 1 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
330
331PART="$(ogDiskToDev $1)" || return $(ogRaiseError $OG_ERR_NOTFOUND; echo $?)
332ms-sys -z -f $PART
333ms-sys -s -f $PART
334}
335
336
337
338
339#/**
340#         ogFixBootSector int_ndisk int_parition
341#@brief   Corrige el boot sector de una particion activa para MS windows/dos -fat-ntfs
342#@param   int_ndisk      nº de orden del disco
343#@param   int_partition     nº de particion
344#@return 
345#@exception OG_ERR_FORMAT    Formato incorrecto.
346#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
347#@version 0.9 - Adaptación a OpenGnSys.
348#@author  Antonio J. Doblas Viso. Universidad de Málaga
349#@date    2009-09-24
350#*/ ##
351
352function ogFixBootSector ()
353{
354# Variables locales.
355local PARTYPE DISK PART FILE
356
357# Si se solicita, mostrar ayuda.
358if [ "$*" == "help" ]; then
359    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition " \
360           "$FUNCNAME 1 1 "
361    return
362fi
363
364# Error si no se reciben 2 parámetros.
365[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
366
367#TODO, solo si la particion existe
368#TODO, solo si es ntfs o fat
369PARTYPE=$(ogGetPartitionId $1 $2)
370case "$PARTYPE" in
371        1|4|6|7|b|c|e|f)
372        ;;
373        *)
374        return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
375        ;;
376esac
377
378ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
379
380#Preparando instruccion
381let DISK=$1-1   
382PART=$2
383FILE=/tmp/temp$$
384cat > $FILE <<EOF
385disk=$DISK
386main_part=$PART
387fix_first_sector=yes
388EOF
389
390spartlnx.run -cui -nm -a -f $FILE &
391sleep 5
392ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
393rm -f $FILE
394}
395
396
397
398#/**
399#         ogWindowsBootParameters int_ndisk int_parition
400#@brief   Configura el gestor de arranque de windows 7 / vista / XP / 2000
401#@param   int_ndisk      nº de orden del disco
402#@param   int_partition     nº de particion
403#@return 
404#@exception OG_ERR_FORMAT    Formato incorrecto.
405#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
406#@version 0.9 - Integración desde EAC para OpenGnSys.
407#@author  Antonio J. Doblas Viso. Universidad de Málaga
408#@date    2009-09-24
409#@version 1.0.1 - Adapatacion para OpenGnsys.
410#@author  Antonio J. Doblas Viso. Universidad de Málaga
411#@date    2011-05-20
412#*/ ##
413
414
415function ogWindowsBootParameters ()
416{
417# Variables locales.
418local PART DISK FILE VERSION WINVER MOUNT
419#Preparando variables adaptadas a sintaxis windows.
420let DISK=$1-1
421PART=$2
422FILE=/tmp/temp$$
423
424# Si se solicita, mostrar ayuda.
425if [ "$*" == "help" ]; then
426    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition " \
427           "$FUNCNAME 1 1 "
428    return
429fi
430
431# Error si no se reciben 2 parámetros.
432[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
433
434ogDiskToDev $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
435
436VERSION=$(ogGetOsVersion $1 $2)
437
438if echo "$VERSION" | grep "Windows 7"
439then
440        WINVER="Windows 7"
441elif echo "$VERSION" | grep "Windows Seven"
442then
443        WINVER="Windows Vista"
444elif echo "$VERSION" | grep "XP"
445then
446        MOUNT=$(ogMount $1 $2)
447        [ -f ${MOUNT}/boot.ini ] || return $(ogRaiseError $OG_ERR_NOTOS; echo $?)
448        cat ${MOUNT}/boot.ini | sed s/partition\([0-9]\)/partition\($PART\)/g | sed s/rdisk\([0-9]\)/rdisk\($DISK\)/g > ${MOUNT}/tmp.boot.ini; mv ${MOUNT}/tmp.boot.ini ${MOUNT}/boot.ini
449        return 0
450else
451        return $(ogRaiseError $OG_ERR_NOTOS; echo $?)
452fi
453
454ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
455
456
457#Preparando instruccion Windows Resume Application
458cat > $FILE <<EOF
459boot_disk=$DISK
460boot_main_part=$PART
461disk=$DISK
462main_part=$PART
463boot_entry=Windows Resume Application
464EOF
465spartlnx.run -cui -nm -w -f $FILE &
466sleep 5
467ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
468
469 
470
471#Preparando instruccion tipo windows
472cat > $FILE <<EOF
473boot_disk=$DISK
474boot_main_part=$PART
475disk=$DISK
476main_part=$PART
477boot_entry=$WINVER
478EOF
479spartlnx.run -cui -nm -w -f $FILE &
480sleep 5
481ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
482
483
484##Preparando instruccion        Ramdisk Options
485cat > $FILE <<EOF
486boot_disk=$DISK
487boot_main_part=$PART
488disk=$DISK
489main_part=$PART
490boot_entry=Ramdisk Options
491EOF
492spartlnx.run -cui -nm -w -f $FILE &
493sleep 5
494ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
495
496
497#Preparando instruccion Windows Boot Manager
498cat > $FILE <<EOF
499boot_disk=$DISK
500boot_main_part=$PART
501disk=$DISK
502main_part=$PART
503boot_entry=Windows Boot Manager
504EOF
505spartlnx.run -cui -nm -w -f $FILE &
506sleep 5
507ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
508
509
510#Preparando instruccion Herramienta de diagnóstico de memoria de Windows
511cat > $FILE <<EOF
512boot_disk=$DISK
513boot_main_part=$PART
514disk=$DISK
515main_part=$PART
516boot_entry=Herramienta de diagnóstico de memoria de Windows
517EOF
518spartlnx.run -cui -nm -w -f $FILE &
519sleep 5
520ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
521
522}
523
524
525#         ogWindowsRegisterPartition int_ndisk int_partiton str_volume int_disk int_partition
526#@brief   Registra una partición en windows con un determinado volumen.
527#@param   int_ndisk      nº de orden del disco a registrar
528#@param   int_partition     nº de particion a registrar
529#@param   str_volumen      volumen a resgistar
530#@param   int_ndisk_windows      nº de orden del disco donde esta windows
531#@param   int_partition_windows     nº de particion donde esta windows
532#@return 
533#@exception OG_ERR_FORMAT    Formato incorrecto.
534#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
535#@version 0.9 - Adaptación a OpenGnSys.
536#@author  Antonio J. Doblas Viso. Universidad de Málaga
537#@date    2009-09-24
538#*/ ##
539function ogWindowsRegisterPartition ()
540{
541# Variables locales.
542local PART DISK FILE REGISTREDDISK REGISTREDPART REGISTREDVOL VERSION SYSTEMROOT
543
544# Si se solicita, mostrar ayuda.
545if [ "$*" == "help" ]; then
546    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk_TO_registre int_partition_TO_registre str_NewVolume int_disk int_parition " \
547           "$FUNCNAME 1 1 c: 1 1"
548    return
549fi
550
551# Error si no se reciben 5 parámetros.
552[ $# == 5 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
553
554REGISTREDDISK=$1
555REGISTREDPART=$2
556REGISTREDVOL=$(echo $3 | cut -c1 | tr '[:lower:]' '[:upper:]')
557DISK=$4
558PART=$5
559FILE=/tmp/temp$$
560
561ogDiskToDev $REGISTREDDISK $REGISTREDPART || return $(ogRaiseError $OG_ERR_PARTITION "particion a registrar "; echo $?)
562ogDiskToDev $DISK $PART || return $(ogRaiseError $OG_ERR_PARTITION "particion de windows"; echo $?)
563
564ogGetOsType $DISK $PART | grep "Windows" || return $(ogRaiseError $OG_ERR_NOTOS "no es windows"; echo $?)
565
566VERSION=$(ogGetOsVersion $DISK $PART)
567
568#Systemroot
569
570if ogGetPath $DISK $PART WINDOWS
571then
572        SYSTEMROOT="Windows"
573elif ogGetPath $DISK $PART WINNT
574then
575        SYSTEMROOT="winnt"
576else
577        return $(ogRaiseError $OG_ERR_NOTOS; echo $?)
578fi
579
580ogUnmount $DISK $PART
581let DISK=$DISK-1
582let REGISTREDDISK=$REGISTREDDISK-1
583#Preparando instruccion Windows Boot Manager
584cat > $FILE <<EOF
585windows_disk=$DISK
586windows_main_part=$PART
587windows_dir=$SYSTEMROOT
588disk=$REGISTREDDISK
589main_part=$REGISTREDPART
590;ext_part
591part_letter=$REGISTREDVOL
592EOF
593spartlnx.run -cui -nm -u -f $FILE &
594sleep 5
595ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
596
597}
598
599
600#         ogGrubInstallPartition int_disk  int_partition
601#@brief   Instala/actualiza el gestro grub en el "boot sector" de la partición indicada
602#@param   int_disk     
603#@param   indt_part     
604#@return 
605#@exception OG_ERR_FORMAT    Formato incorrecto.
606#@version 1.0.2 - Primeras pruebas.
607#@author  Antonio J. Doblas Viso.   Universidad de Malaga.
608#@date    2011-10-29
609#*/ ##
610
611function ogGrubInstallPartition {
612
613# Variables locales.
614local PART DISK DIRCONF SCHROOTDEVICE
615
616# Si se solicita, mostrar ayuda.
617if [ "$*" == "help" ]; then
618    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition" \
619           "$FUNCNAME 1 1 "
620    return
621fi     
622
623# Error si no se reciben 2 parámetros.
624[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
625
626DISK=$1; PART=$2; DIRCONF="/etc/schroot"
627
628
629VERSION=$(ogGetOsVersion $DISK $PART)
630echo $VERSION | grep "Linux" || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?)
631
632SCHROOTLOCATION=$(ogMount $DISK $PART)
633SCHROOTDEVICE=$(ogDiskToDev $DISK $PART)
634
635rm ${DIRCONF}/schroot.conf
636
637cat >> ${DIRCONF}/schroot.conf << EOF
638[linux]
639description=$VERSION
640type=plain
641directory=$SCHROOTLOCATION
642EOF
643
644cat >> $SCHROOTLOCATION/root/installgrub.sh <<EOF
645#!/bin/bash
646grub-install --recheck --force $SCHROOTDEVICE
647update-grub2
648EOF
649
650chmod 777 $SCHROOTLOCATION/root/installgrub.sh
651
652mount --bind /dev $SCHROOTLOCATION/dev
653mount --bind /dev/pts  $SCHROOTLOCATION/dev/pts
654mount --bind /proc $SCHROOTLOCATION/proc
655mount --bind /sys  $SCHROOTLOCATION/sys
656
657
658schroot -c linux -- /root/installgrub.sh
659
660rm $SCHROOTLOCATION/root/installgrub.sh
661
662umount $SCHROOTLOCATION/dev/pts
663umount $SCHROOTLOCATION/dev
664umount $SCHROOTLOCATION/proc
665umount $SCHROOTLOCATION/sys
666}
667
Note: See TracBrowser for help on using the repository browser.