From 527cd97eb5ddc614c8280c02a3093416b706451f Mon Sep 17 00:00:00 2001 From: Irina Gómez Date: Wed, 5 Jun 2019 11:24:51 +0200 Subject: #802 #888 #890 ogNvramAddEntry function allows disk and partition as params and creates a entry with 'Part-D-P' name that uses generic loader of OpenGnsys. ogGrubInstall uses shimx64.efi.signed of ogLive Ubuntu 18. Previously this function used shim of tftp of server. --- client/engine/Boot.lib | 19 +++++-------------- client/engine/UEFI.lib | 18 +++++++++++++----- 2 files changed, 18 insertions(+), 19 deletions(-) (limited to 'client') diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib index c9e370ff..b30a8d83 100755 --- a/client/engine/Boot.lib +++ b/client/engine/Boot.lib @@ -90,7 +90,6 @@ case "$TYPE" in return $? fi - # Borrar cargador guardado con la misma etiqueta. BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) BOOTLOADER="shimx64.efi" # Obtener parcición EFI. @@ -134,22 +133,14 @@ case "$TYPE" in [ -n "$EFIPART" ] || ogRaiseError $OG_ERR_PARTITION "ESP" || return $? EFIDIR=$(ogMount $EFIDISK $EFIPART) || exit $? # Comprobar cargador (si no existe buscar por defecto en ESP). - #LOADER=$(ogGetPath $1 $2 /Boot/bootmgfw.efi) LOADER=$(ogGetPath $EFIDIR/EFI/$BOOTLABEL/Boot/bootmgfw.efi) [ -z "$LOADER" ] && BOOTLABEL=Microsoft && LOADER=$(ogGetPath $EFIDIR/EFI/Microsoft/Boot/bootmgfw.efi) [ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS "$1 $2 ($TYPE, EFI)" || return $? - # El directorio se crea en la postconfiguración - ## Crear directorio para el cargador y copiar los ficheros. - #mkdir -p $EFIDIR/EFI/$BOOTLABEL - #cp -a $(dirname "$LOADER") $EFIDIR/EFI/$BOOTLABEL - # Borrar cargador guardado con la misma etiqueta. - BOOTNO=$(efibootmgr -v | awk -v L=$BOOTLABEL '{if ($2==L) print $1}') - [ -n "$BOOTNO" ] && efibootmgr -B -b ${BOOTNO:4:4} + # Crear orden de arranque (con unos valores por defecto). - efibootmgr -C -d $(ogDiskToDev $EFIDISK) -p $EFIPART -L "$BOOTLABEL" -l "/EFI/$BOOTLABEL/Boot/BOOTMGFW.EFI" + ogNvramAddEntry $BOOTLABEL "/EFI${LOADER#*EFI}" # Marcar próximo arranque y reiniciar. - BOOTNO=$(efibootmgr -v | awk -v L="$BOOTLABEL" '{if ($2==L) print $1}') - [ -n "$BOOTNO" ] && efibootmgr -n ${BOOTNO:4:4} + ogNvramSetNext "$BOOTLABEL" reboot else # Arranque BIOS: comprueba si hay un cargador de Windows. @@ -901,7 +892,7 @@ fi if ogIsEfiActive; then mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/BOOT/* ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI - cp $OGLIB/shim/shimx64.efi ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot + cp /usr/lib/shim/shimx64.efi.signed ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot # Nombre OpenGnsys para cargador cp ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/{shimx64.efi,ogloader.efi} fi @@ -1040,7 +1031,7 @@ fi if ogIsEfiActive; then mv ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI/BOOT/* ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot rm -rf ${EFISECONDSTAGE}/EFI/$EFISUBDIR/EFI - cp $OGLIB/shim/shimx64.efi ${EFISECONDSTAGE}/EFI/$EFISUBDIR/Boot/shimx64.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} fi diff --git a/client/engine/UEFI.lib b/client/engine/UEFI.lib index d6a39bae..cd7168e7 100644 --- a/client/engine/UEFI.lib +++ b/client/engine/UEFI.lib @@ -43,8 +43,8 @@ efibootmgr -a -b $NUMENTRY &>/dev/null #/** # ogNvramAddEntry #@brief Crea nueva entrada en el gestor de arranque (NVRAM), opcionalmente la incluye al final del orden de arranque. -#@param Str_Label_entry Etiqueta de la entrada a crear. -#@param Str_BootLoader Cargador de arranque. +#@param Str_Label_entry Número de disco o etiqueta de la entrada a crear. +#@param Str_BootLoader Número de partición o cargador de arranque. #@param Bool_Incluir_Arranque Incluir en el orden de arranque (por defecto FALSE) (opcional) #@return (nada) #@exception OG_ERR_FORMAT formato incorrecto. @@ -57,6 +57,7 @@ local EFIDISK EFIPART BOOTLABEL BOOTLOADER ADDORDER # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME" "$FUNCNAME Str_label_entry Str_boot_loader [ Bool_add_bootorder ]" \ + "$FUNCNAME 1 2 TRUE" \ "$FUNCNAME grub /EFI/grub/grubx64.efi TRUE" \ "$FUNCNAME Windows /EFI/Microsoft/Boot/bootmgfw.efi" return @@ -72,8 +73,15 @@ read -e EFIDISK EFIPART <<<"$(ogGetEsp)" [ -n "$EFIPART" ] || ogRaiseError $OG_ERR_NOTFOUND "ESP" || return $? # Recogemos parámetros -BOOTLABEL="$1" -BOOTLOADER="$2" +# Distinguimos si es disco/partición o etiqueta/cargador +if [[ "$1$2" =~ ^([0-9]+)$ ]]; then + BOOTLABEL=$(printf "Part-%02d-%02d" $1 $2) + BOOTLOADER="/EFI/$BOOTLABEL/Boot/ogloader.efi" +else + BOOTLABEL="$1" + BOOTLOADER="$2" +fi + # Si existe entrada con la misma etiqueta la borramos ogNvramDeleteEntry "$BOOTLABEL" 2>/dev/null @@ -302,7 +310,7 @@ configfile \$prefix/grub.cfg EOT # Provisional: confirmar si el segundo archivo se utiliza -#cp $EFIGRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" +cp $EFIGRUBDIR/grub.cfg "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" } -- cgit v1.2.3-18-g5258