summaryrefslogtreecommitdiffstats
path: root/client/engine/Boot.lib
diff options
context:
space:
mode:
Diffstat (limited to 'client/engine/Boot.lib')
-rwxr-xr-xclient/engine/Boot.lib204
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
+}
+