diff options
Diffstat (limited to 'client/engine/Boot.lib')
-rwxr-xr-x | client/engine/Boot.lib | 175 |
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 |