diff options
Diffstat (limited to 'client/engine/Boot.lib')
-rwxr-xr-x | client/engine/Boot.lib | 204 |
1 files changed, 145 insertions, 59 deletions
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib index 8731580f..e21935ca 100755 --- a/client/engine/Boot.lib +++ b/client/engine/Boot.lib @@ -20,10 +20,10 @@ #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. #@exception OG_ERR_NOTOS La partición no tiene instalado un sistema operativo. #@note En Linux, debe arrancarse la partición del directorio \c /boot -#@version 0.1 - Integracion para OpenGNSys. - EAC: HDboot(); BootLinuxEX() en Boot.lib +#@version 0.1 - Integración para OpenGnSys. - EAC: HDboot; BootLinuxEX en Boot.lib #@author Antonio J. Doblas Viso, Universidad de Malaga #@date 2008-10-27 -#@version 0.9 - Adaptacion para OpenGNSys. +#@version 0.9 - Adaptación para OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-09-11 #*/ ## @@ -68,21 +68,19 @@ case "$TYPE" in [ -z "$LOADER" ] && ogRaiseError $OG_ERR_NOTOS && return $? # Activar la partición y copiar Grub4DOS. ogSetPartitionActive $1 $2 - #FIXME: activar seguimiento inicio sesion XP con grub4dos - #if `ogGetOsVersion $1 $2 | grep "XP" > /dev/null` - #then - # dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3 - # dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3 - # dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3 - # ogLoadHiveWindows $1 $2 - # ogHiveNTRunMachine "cmd /c del c:\ogboot.* " ogcleanboot - # ogUpdateHiveWindows - # reboot - #else - cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen) - ##kexec -l $MNTDIR/grub.exe --append=--config-file="find --set-root /$LOADER; chainloader /$LOADER; tpm --init" - kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init" - #fi + #FIXME: activar seguimiento inicio sesion Windows con grub4dos + if [ "$(ogGetOsType $1 $2)" == "Windows" ]; then + dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3 + dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3 + dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3 + ogLoadHiveWindows $1 $2 + ogHiveNTRunMachine "cmd /c del c:\ogboot.*" ogcleanboot + ogUpdateHiveWindows + reboot + else + cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen) + kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init" + fi ;; *) ogRaiseError $OG_ERR_PARTITION "$1, $2" return $? @@ -103,7 +101,7 @@ kexec -e #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@version 0.9 - Adaptación para OpenGNSys. +#@version 0.9 - Adaptación para OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-09-23 #*/ ## @@ -140,7 +138,7 @@ ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerN #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. #@warning Función básica usada por \c ogBoot -#@version 0.9 - Primera adaptación para OpenGNSys. +#@version 0.9 - Primera adaptación para OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-09-11 #@version 0.9.2 - Soporta partición /boot independiente. @@ -202,7 +200,7 @@ awk 'BEGIN {cont=-1;} #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@version 0.9 - Adaptación a OpenGNSys. +#@version 0.9 - Adaptación a OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-09-24 #*/ ## @@ -244,7 +242,7 @@ ogSetRegistryValue $MNTDIR system '\ControlSet001\services\Tcpip\Parameters\NV H #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@version 0.9.2 - Adaptación a OpenGNSys. +#@version 0.9.2 - Adaptación a OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2010-07-20 #*/ ## @@ -279,7 +277,7 @@ ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlog #@return salida del programa my-sys #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@version 0.9 - Adaptación a OpenGNSys. +#@version 0.9 - Adaptación a OpenGnSys. #@author Antonio J. Doblas Viso. Universidad de Málaga #@date 2009-09-24 #*/ ## @@ -311,7 +309,7 @@ ms-sys -m -f $PART #@return salida del programa my-sys #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Tipo de partición desconocido o no se puede montar. -#@version 0.9 - Adaptación a OpenGNSys. +#@version 0.9 - Adaptación a OpenGnSys. #@author Antonio J. Doblas Viso. Universidad de Málaga #@date 2009-09-24 #*/ ## @@ -346,7 +344,7 @@ ms-sys -s -f $PART #@return #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@version 0.9 - Adaptación a OpenGNSys. +#@version 0.9 - Adaptación a OpenGnSys. #@author Antonio J. Doblas Viso. Universidad de Málaga #@date 2009-09-24 #*/ ## @@ -354,7 +352,7 @@ ms-sys -s -f $PART function ogFixBootSector () { # Variables locales. -local PART DISK FILE +local PARTYPE DISK PART FILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -369,7 +367,7 @@ fi #TODO, solo si la particion existe #TODO, solo si es ntfs o fat PARTYPE=$(ogGetPartitionId $1 $2) -case $PARTYPE in +case "$PARTYPE" in 1|4|6|7|b|c|e|f) ;; *) @@ -382,15 +380,17 @@ ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?) #Preparando instruccion let DISK=$1-1 PART=$2 -FILE=/tmp/temporal +FILE=/tmp/temp$$ cat > $FILE <<EOF disk=$DISK main_part=$PART fix_first_sector=yes EOF -spartlnx.run -cui -nm -a -f $FILE - +spartlnx.run -cui -nm -a -f $FILE & +sleep 5 +ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null +rm -f $FILE } @@ -403,7 +403,7 @@ spartlnx.run -cui -nm -a -f $FILE #@return #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@version 0.9 - Integración desde EAC para OpenGNSys. +#@version 0.9 - Integración desde EAC para OpenGnSys. #@author Antonio J. Doblas Viso. Universidad de Málaga #@date 2009-09-24 #@version 1.0.1 - Adapatacion para OpenGnsys. @@ -415,11 +415,11 @@ spartlnx.run -cui -nm -a -f $FILE function ogWindowsBootParameters () { # Variables locales. -local PART DISK FILE +local PART DISK FILE VERSION WINVER MOUNT #Preparando variables adaptadas a sintaxis windows. let DISK=$1-1 PART=$2 -FILE=/tmp/temporal +FILE=/tmp/temp$$ # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -462,7 +462,11 @@ disk=$DISK main_part=$PART boot_entry=Windows Resume Application EOF -spartlnx.run -cui -nm -w -f $FILE +spartlnx.run -cui -nm -w -f $FILE & +sleep 5 +ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null + + #Preparando instruccion tipo windows cat > $FILE <<EOF @@ -472,17 +476,23 @@ disk=$DISK main_part=$PART boot_entry=$WINVER EOF -spartlnx.run -cui -nm -w -f $FILE +spartlnx.run -cui -nm -w -f $FILE & +sleep 5 +ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null + ##Preparando instruccion Ramdisk Options -#cat > $FILE <<EOF -#boot_disk=$DISK -#boot_main_part=$PART -#disk=$DISK -#main_part=$PART -#boot_entry=Ramdisk Options -#EOF -#spartlnx.run -cui -nm -w -f $FILE +cat > $FILE <<EOF +boot_disk=$DISK +boot_main_part=$PART +disk=$DISK +main_part=$PART +boot_entry=Ramdisk Options +EOF +spartlnx.run -cui -nm -w -f $FILE & +sleep 5 +ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null + #Preparando instruccion Windows Boot Manager cat > $FILE <<EOF @@ -492,20 +502,25 @@ disk=$DISK main_part=$PART boot_entry=Windows Boot Manager EOF -spartlnx.run -cui -nm -w -f $FILE +spartlnx.run -cui -nm -w -f $FILE & +sleep 5 +ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null + #Preparando instruccion Herramienta de diagnóstico de memoria de Windows -#cat > $FILE <<EOF -#boot_disk=$DISK -#boot_main_part=$PART -#disk=$DISK -#main_part=$PART -#boot_entry=Herramienta de diagnóstico de memoria de Windows -#EOF -#spartlnx.run -cui -nm -w -f $FILE +cat > $FILE <<EOF +boot_disk=$DISK +boot_main_part=$PART +disk=$DISK +main_part=$PART +boot_entry=Herramienta de diagnóstico de memoria de Windows +EOF +spartlnx.run -cui -nm -w -f $FILE & +sleep 5 +ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null } - + # ogWindowsRegisterPartition int_ndisk int_partiton str_volume int_disk int_partition #@brief Registra una partición en windows con un determinado volumen. @@ -517,16 +532,14 @@ spartlnx.run -cui -nm -w -f $FILE #@return #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@version 0.9 - Adaptación a OpenGNSys. +#@version 0.9 - Adaptación a OpenGnSys. #@author Antonio J. Doblas Viso. Universidad de Málaga #@date 2009-09-24 #*/ ## - - function ogWindowsRegisterPartition () -{ +{ # Variables locales. -local PART DISK FILE +local PART DISK FILE REGISTREDDISK REGISTREDPART REGISTREDVOL VERSION SYSTEMROOT # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -543,7 +556,7 @@ REGISTREDPART=$2 REGISTREDVOL=$(echo $3 | cut -c1 | tr '[:lower:]' '[:upper:]') DISK=$4 PART=$5 -FILE=/tmp/temporal +FILE=/tmp/temp$$ ogDiskToDev $REGISTREDDISK $REGISTREDPART || return $(ogRaiseError $OG_ERR_PARTITION "particion a registrar "; echo $?) ogDiskToDev $DISK $PART || return $(ogRaiseError $OG_ERR_PARTITION "particion de windows"; echo $?) @@ -577,5 +590,78 @@ main_part=$REGISTREDPART ;ext_part part_letter=$REGISTREDVOL EOF -spartlnx.run -cui -nm -u -f $FILE +spartlnx.run -cui -nm -u -f $FILE & +sleep 5 +ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null + } + + +# ogGrubInstallPartition int_disk int_partition +#@brief Instala/actualiza el gestro grub en el "boot sector" de la partición indicada +#@param int_disk +#@param indt_part +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@version 1.0.2 - Primeras pruebas. +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011-10-29 +#*/ ## + +function ogGrubInstallPartition { + +# Variables locales. +local PART DISK DIRCONF SCHROOTDEVICE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition" \ + "$FUNCNAME 1 1 " + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + +DISK=$1; PART=$2; DIRCONF="/etc/schroot" + + +VERSION=$(ogGetOsVersion $DISK $PART) +echo $VERSION | grep "Linux" || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?) + +SCHROOTLOCATION=$(ogMount $DISK $PART) +SCHROOTDEVICE=$(ogDiskToDev $DISK $PART) + +rm ${DIRCONF}/schroot.conf + +cat >> ${DIRCONF}/schroot.conf << EOF +[linux] +description=$VERSION +type=plain +directory=$SCHROOTLOCATION +EOF + +cat >> $SCHROOTLOCATION/root/installgrub.sh <<EOF +#!/bin/bash +grub-install --recheck --force $SCHROOTDEVICE +update-grub2 +EOF + +chmod 777 $SCHROOTLOCATION/root/installgrub.sh + +mount --bind /dev $SCHROOTLOCATION/dev +mount --bind /dev/pts $SCHROOTLOCATION/dev/pts +mount --bind /proc $SCHROOTLOCATION/proc +mount --bind /sys $SCHROOTLOCATION/sys + + +schroot -c linux -- /root/installgrub.sh + +rm $SCHROOTLOCATION/root/installgrub.sh + +umount $SCHROOTLOCATION/dev/pts +umount $SCHROOTLOCATION/dev +umount $SCHROOTLOCATION/proc +umount $SCHROOTLOCATION/sys +} + |