summaryrefslogtreecommitdiffstats
path: root/client/engine/Boot.lib
diff options
context:
space:
mode:
Diffstat (limited to 'client/engine/Boot.lib')
-rwxr-xr-xclient/engine/Boot.lib175
1 files changed, 132 insertions, 43 deletions
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib
index 6808f094..7060fac9 100755
--- a/client/engine/Boot.lib
+++ b/client/engine/Boot.lib
@@ -784,7 +784,7 @@ function ogGrubInstallMbr ()
# Variables locales.
local PART DISK VERSION FIRSTAGE SECONSTAGE CHECKOS KERNELPARAM BACKUPNAME
-local EFIDISK EFIPART EFISECONDSTAGE EFISUBDIR EFIOPTGRUB
+local EFIDISK EFIPART EFISECONDSTAGE EFISUBDIR EFIOPTGRUB GRUBENTRY NEWORDER
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -890,9 +890,15 @@ EVAL=$?
if ogIsEfiActive; then
mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/BOOT/* ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot
rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI
- cp /usr/lib/shim/shimx64.efi.signed ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot
+ cp /usr/lib/shim/shimx64.efi.signed ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/shimx64.efi
# Nombre OpenGnsys para cargador
- cp ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/{shimx64.efi.signed,ogloader.efi}
+ cp ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/{grubx64.efi,ogloader.efi}
+
+ # Creamos entrada NVRAM y la ponemos en segundo lugar
+ ogNvramAddEntry grub /EFI/grub/Boot/shimx64.efi
+ GRUBENTRY=$(ogNvramList| awk '{if ($2=="grub") print $1}')
+ NEWORDER="$(ogNvramGetOrder|awk -v ENTRY=$GRUBENTRY '{gsub(",", " "); printf "%x %x %s\n", $1 , ENTRY , substr($0, index($0,$2))}')"
+ ogNvramSetOrder $NEWORDER
fi
return $EVAL
@@ -1028,7 +1034,7 @@ if ogIsEfiActive; then
rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI
cp /usr/lib/shim/shimx64.efi.signed ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/shimx64.efi
# Nombre OpenGnsys para cargador
- cp ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/{shimx64.efi,ogloader.efi}
+ cp ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/{grubx64.efi,ogloader.efi}
fi
return $EVAL
@@ -1603,7 +1609,7 @@ function ogBurgInstallMbr ()
{
# Variables locales.
-local PART DISK FIRSTAGE SECONSTAGE PREFIXSECONDSTAGE CHECKOS KERNELPARAM BACKUPNAME FILECFG
+local BINARYAVAILABLE PART DISK DEVICE MOUNTDISK FIRSTAGE SECONSTAGE PREFIXSECONDSTAGE CHECKOS KERNELPARAM BACKUPNAME FILECFG
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -1616,34 +1622,46 @@ fi
# Error si no se reciben 2 parametros.
[ $# -ge 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+#Error si no tenemos el binario burg
+BINARYAVAILABLE=$(burg-install -v &>/dev/null && echo "YES" ||echo "NO")
+if [ "$BINARYAVAILABLE" == NO ]; then
+ if [ -e $OGLIB/burg/burg.tgz ]; then
+ cd / ; tar xzvf $OGLIB/burg/burg.tgz --strip 1 &>/dev/null
+ else
+ return $(ogRaiseError $OG_ERR_NOTEXEC "Binary burg not found"; echo $?)
+ fi
+fi
DISK=$1; PART=$2;
CHECKOS=${3:-"FALSE"}
KERNELPARAM=$4
BACKUPNAME=".backup.og"
-#Error si no es linux.
-ogCheckStringInGroup $(ogGetFsType $DISK $PART) "CACHE EXT4 EXT3 EXT2" || return $(ogRaiseError $OG_ERR_PARTITION "burg no soporta esta particion"; echo $?)
-
-
-#La primera etapa del grub se fija en el primer disco duro
+#Controlar disco no uefi
+ogIsEfiActive && return $(ogRaiseError $OG_ERR_NOTBIOS " : grub4dos solo soporta PC con bios legacy"; echo $?)
+#Controlar particionado tipo msdos
+ogCheckStringInGroup $(ogGetPartitionTableType $DISK) "MSDOS" || return $(ogRaiseError $OG_ERR_NOMSDOS ": grub2dos requiere particionado tipo MSDOS"; echo $?)
+#Controlar existencia de disco y particion
+DEVICE=$(ogDiskToDev $DISK) || ogRaiseError $OG_ERR_NOTFOUND || return $?
+MOUNTDISK=$(ogMount $DISK $PART) || ogRaiseError $OG_ERR_PARTITION "$MSG_ERROR " || return $?
+#Controlar particion segunda etapa del burg
+ogCheckStringInGroup $(ogGetFsType $DISK $PART) "CACHE EXT4 EXT3 EXT2" || return $(ogRaiseError $OG_ERR_PARTITION "burg.cfg soporta solo particiones linux"; echo $?)
+#Controlar acceso de escritura a la particion segunda etapa del burg
+ogIsReadonly $DISK $PART && return $(ogRaiseError $OG_ERR_NOTWRITE ": $DISK $PART" || echo $?)
+
+#Asigar la primera etapa del grub en el primer disco duro
FIRSTSTAGE=$(ogDiskToDev 1)
-
-#localizar disco segunda etapa del grub
+#Localizar disco segunda etapa del grub
SECONDSTAGE=$(ogMount $DISK $PART)
-# prepara el directorio principal de la segunda etapa (y copia los binarios)
-[ -d ${SECONDSTAGE}/boot/burg/ ] || mkdir -p ${SECONDSTAGE}/boot/burg/; cp -prv /boot/burg/* ${SECONDSTAGE}/boot/burg/ 2>&1>/dev/null; cp -prv $OGLIB/burg/* ${SECONDSTAGE}/boot/burg/ 2>&1>/dev/null; #*/ ## (comentario Dogygen) #*/ ## (comentario Dogygen)
-
-#Copiamos el tema
+#Preparar el directorio principal de la segunda etapa (y copia los binarios)
+[ -d ${SECONDSTAGE}/boot/burg/ ] || mkdir -p ${SECONDSTAGE}/boot/burg/; cp -prv /boot/burg/* ${SECONDSTAGE}/boot/burg/ 2>&1>/dev/null; cp -prv $OGLIB/burg/themes ${SECONDSTAGE}/boot/burg/ 2>&1>/dev/null; #*/ ## (comentario Dogygen) #*/ ## (comentario Dogygen)
+#Copiar el tema de opengnsys
mkdir -p ${SECONDSTAGE}/boot/burg/themes/OpenGnsys
cp -prv "$OGLIB/burg/themes" "${SECONDSTAGE}/boot/burg/" 2>&1>/dev/null
-#Localizar directorio segunda etapa del grub
-#PREFIXSECONDSTAGE="/boot/burg/"
-
-# Si Reconfigurar segunda etapa (grub.cfg) == FALSE
-if [ -f ${SECONDSTAGE}/boot/burg/burg.cfg -o -f ${SECONDSTAGE}/boot/burg/burg.cfg$BACKUPNAME ]
+# No configurar la segunda etapa (grub.cfg). Parámetro FALSE
+if [ -f ${SECONDSTAGE}/boot/burg/burg.cfg -o -f ${SECONDSTAGE}/boot/burg/burg.cfg$BACKUPNAME ];
then
if [ "$CHECKOS" == "false" -o "$CHECKOS" == "FALSE" ]
then
@@ -1652,24 +1670,19 @@ then
fi
fi
-# SI Reconfigurar segunda etapa (burg.cfg) == TRUE
+# Configurrar la segunda etapa (burg.cfg) == tercer parámetro TRUE
-#llamada a updateBootCache para que aloje la primera fase del ogLive
+#llamar a updateBootCache para que aloje la primera fase del ogLive
updateBootCache
#Configur la sintaxis grub para evitar menus de "recovery" en el OGLive
echo "GRUB_DISABLE_RECOVERY=\"true\"" >> /etc/default/grub
echo "GRUB_DISABLE_LINUX_UUID=\"true\"" >> /etc/default/grub
-
#Preparar configuración segunda etapa: crear ubicacion
mkdir -p ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/burg/
-
#Preparar configuración segunda etapa: crear cabecera del fichero
-#/etc/burg.d/00_header > ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/burg/burg.cfg
-
FILECFG=${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/burg/burg.cfg
-
#/* ## (comentario Dogygen)
cat > "$FILECFG" << EOF
@@ -1757,7 +1770,6 @@ EOF
#Preparar configuración segunda etapa: crear entrada del sistema operativo
grubSyntax "$KERNELPARAM" >> "$FILECFG"
-
#Instalar el burg
burg-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE 2>&1>/dev/null
}
@@ -2776,19 +2788,96 @@ else
[ -f $DIR/Boot/grubx64.efi ] && echo " icon /EFI/refind/icons/os_linux.png" >> $CFGFILE
echo "}" >> $CFGFILE
done
- # Configuración ogLive
- # Comantamos temporalmente: Con la versión nueva de refind falla
- #if [ "$OGLIVE" != "" ]; then
- # echo "menuentry \"OpenGnsys Live\" {" >> $CFGFILE
- # echo " volume CACHE" >> $CFGFILE
- # echo " ostype Linux" >> $CFGFILE
- # echo " loader /boot/$(basename ${OGLIVE%/*})/ogvmlinuz" >> $CFGFILE
- # echo " initrd /boot/$(basename ${OGLIVE%/*})/oginitrd.img" >> $CFGFILE
- # echo " options \"$CMDLINE\"" >> $CFGFILE
- # echo "}" >> $CFGFILE
-
- # # Ponemos ogLive como la entrada por defecto
- # sed -i '1 i\default_selection "OpenGnsys Live"' $CFGFILE
- #fi
+ # Configuración ogLive si secureboot no está activado
+ if ! dmesg|grep secureboot.*enabled &>/dev/null; then
+ if [ "$OGLIVE" != "" ]; then
+ echo "menuentry \"OpenGnsys Live\" {" >> $CFGFILE
+ echo " volume CACHE" >> $CFGFILE
+ echo " ostype Linux" >> $CFGFILE
+ echo " loader /boot/$(basename ${OGLIVE%/*})/ogvmlinuz" >> $CFGFILE
+ echo " initrd /boot/$(basename ${OGLIVE%/*})/oginitrd.img" >> $CFGFILE
+ echo " options \"$CMDLINE\"" >> $CFGFILE
+ echo "}" >> $CFGFILE
+
+ # Ponemos ogLive como la entrada por defecto
+ sed -i '1 i\default_selection "OpenGnsys Live"' $CFGFILE
+ fi
+ fi
fi
}
+
+#/**
+# ogGrub4dosInstallMbr int_ndisk
+#@brief Genera un nuevo Codigo de arranque en el MBR del disco indicado, compatible con los SO tipo Windows, Linux.
+#@param int_ndisk nº de orden del disco
+#@param int_ndisk nº de orden del particion
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Tipo de partición desconocido o no se puede montar.
+#@exception OG_ERR_NOTBIOS Equipo no firmware BIOS legacy
+#@exception OG_ERR_NOMSDOS Disco duro no particioniado en modo msdos
+#@exception OG_ERR_NOTWRITE Particion no modificable.
+#@version 1.1.1 - Adaptacion a OpenGnSys.
+#@author Alberto García Padilla / Antonio J. Doblas Viso. Universidad de Malaga
+#@date 2009-10-17
+#*/ ##
+
+function ogGrub4dosInstallMbr ()
+{
+# Variables locales.
+local DISK PART DEVICE MOUNTDISK GRUBDISK BINBDIR
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_part " \
+ "$FUNCNAME 1 1 "
+ return
+fi
+# Error si no se recibe 2 parámetros.
+[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+DISK="$1"
+PART="$2"
+
+#Controlar existencia de disco y particion
+DEVICE=$(ogDiskToDev $DISK) || ogRaiseError $OG_ERR_NOTFOUND || return $?
+MOUNTDISK=$(ogMount $DISK $PART) || ogRaiseError $OG_ERR_PARTITION "$MSG_ERROR " || return $?
+#Controlar acceso de escritura a la particion
+ogIsReadonly $DISK $PART && return $(ogRaiseError $OG_ERR_NOTWRITE ": $DISK $PART" || echo $?)
+#Controlar disco no uefi
+ogIsEfiActive && return $(ogRaiseError $OG_ERR_NOTBIOS " : grub4dos solo soporta PC con bios legacy"; echo $?)
+#Controlar particionado tipo msdos
+ogCheckStringInGroup $(ogGetPartitionTableType $DISK) "MSDOS" || return $(ogRaiseError $OG_ERR_NOMSDOS ": grub2dos requiere particionado tipo MSDOS"; echo $?)
+#Controlar la existencia del grub4dos con acceso a ntfs
+BINDIR="${OGLIB}/grub4dos/grub4dos-0.4.6a"
+[ -f ${BINDIR}/bootlace.com ] || ogRaiseError $OG_ERR_NOTFOUND ": ${BINDIR}/bootlace.com" || return $?
+
+#instalar el bootloader de grlrd en el MBR
+${BINDIR}/bootlace64.com $DEVICE &>/dev/null
+#copiar grld a la particion
+cp ${BINDIR}/grldr $MOUNTDISK
+#Instalar y configurar grub4dos
+if [[ -f $MOUNTDISK/Boot/ ]]; then
+ GRUBDIR="$MOUNTDISK/Boot/grub/"
+fi
+if [[ -f $MOUNTDISK/Boot/grub/menu.lst ]]; then
+ rm $MOUNTDISK/Boot/grub/menu.lst
+ rmdir /$MOUNTDISK/Boot/grub
+fi
+if [[ ! -f $MOUNTDISK/Boot/grub/menu.lst ]]; then
+ mkdir -p /$MOUNTDISK/Boot/grub
+ touch /$MOUNTDISK/Boot/grub/menu.lst
+
+ GRUBDISK=$[$1-1]
+
+cat << EOT >/$MOUNTDISK/Boot/grub/menu.lst
+##NO-TOCAR-ESTA-LINEA MBR
+timeout 0
+title MBR
+root (hd$GRUBDISK,0)
+chainloader (hd$GRUBDISK,0)+1
+boot
+EOT
+
+fi
+} \ No newline at end of file