New control variable for grub-mkrescue-sed.sh: MKRESCUE_SED_IN_EFI_NO_PT

This commit is contained in:
Thomas Schmitt 2019-04-22 10:21:23 +02:00
parent 5b62c55d12
commit 3a2a3ba737

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# Copyright (C) 2015 - 2016 # Copyright (C) 2015 - 2019
# Thomas Schmitt <scdbackup@gmx.net>, libburnia-project.org # Thomas Schmitt <scdbackup@gmx.net>, libburnia-project.org
# Provided under BSD license: Use, modify, and distribute as you like. # Provided under BSD license: Use, modify, and distribute as you like.
@ -117,6 +117,15 @@ fi
# command line.) # command line.)
# Each argument must be a single word. No whitespace. No quotation marks. # Each argument must be a single word. No whitespace. No quotation marks.
# "yes" overwrites the MBR partition table area in the EFI boot image by zeros.
# Some EFI implementations get stuck when seeing in the EFI partition a
# partition table entry which begins at LBA 0.
efi_zero_inner_pt=no
if test -n "$MKRESCUE_SED_IN_EFI_NO_PT"
then
efi_zero_inner_pt="$MKRESCUE_SED_IN_EFI_NO_PT"
fi
# #
# Do the work # Do the work
@ -183,12 +192,48 @@ then
find "$dir" find "$dir"
fi fi
if test "$efi_zero_inner_pt" = yes
then
did_dd=0
if test -e "$dir"/efi.img
then
magic=$(dd bs=1 skip=510 count=2 if="$dir"/efi.img 2>/dev/null | \
od -c | head -1 | awk '{print $2 " " $3}')
if test "$magic" = "U 252"
then
dd if=/dev/zero bs=1 seek=446 count=64 conv=notrunc of="$dir"/efi.img
did_dd=1
fi
fi
if test "$did_dd" = 0
then
echo >&2
echo "$0 : NOTE : No EFI image found or no MBR signature in it." >&2
echo "$0 : NOTE : Will not obey MKRESCUE_SED_IN_EFI_NO_PT=yes" >&2
echo >&2
fi
fi
efi_tmp_name= efi_tmp_name=
if test x"$mode" = xmjg \
-o x"$mode" = xmbr_only \
-o x"$mode" = xgpt_appended \
-o x"$mode" = xmbr_hfs
then
# Move EFI partition image file out of the "$dir" tree, i.e. out of the ISO
efi_tmp_name=grub-mkrescue-sed-efi-img.$$
if test -e "$dir"/efi.img
then
mv "$dir"/efi.img /tmp/$efi_tmp_name
elif test -e /tmp/$efi_tmp_name
then
rm /tmp/$efi_tmp_name
fi
fi
if test x"$mode" = xmjg if test x"$mode" = xmjg
then then
# Exchange arguments for the experimental GRUB2 mjg layout # Exchange arguments for the experimental GRUB2 mjg layout
efi_tmp_name=grub-mkrescue-sed-efi-img.$$
mv "$dir"/efi.img /tmp/$efi_tmp_name
x=$(echo " $*" | sed \ x=$(echo " $*" | sed \
-e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition $partno 0xef \/tmp\/$efi_tmp_name/" \ -e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition $partno 0xef \/tmp\/$efi_tmp_name/" \
-e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_${partno}:all:: -no-emul-boot -isohybrid-gpt-basdat/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_${partno}:all:: -no-emul-boot -isohybrid-gpt-basdat/" \
@ -207,8 +252,6 @@ then
elif test x"$mode" = xmbr_only elif test x"$mode" = xmbr_only
then then
# Exchange arguments for no-HFS MBR-only layout # Exchange arguments for no-HFS MBR-only layout
efi_tmp_name=grub-mkrescue-sed-efi-img.$$
mv "$dir"/efi.img /tmp/$efi_tmp_name
x=$(echo " $*" | sed \ x=$(echo " $*" | sed \
-e "s/-efi-boot-part --efi-boot-image/$iso_mbr_part_type -no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name/" \ -e "s/-efi-boot-part --efi-boot-image/$iso_mbr_part_type -no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name/" \
-e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \
@ -228,8 +271,6 @@ then
elif test x"$mode" = xmbr_hfs elif test x"$mode" = xmbr_hfs
then then
# Exchange arguments for MBR and HFS+ layout # Exchange arguments for MBR and HFS+ layout
efi_tmp_name=grub-mkrescue-sed-efi-img.$$
mv "$dir"/efi.img /tmp/$efi_tmp_name
x=$(echo " $*" | sed \ x=$(echo " $*" | sed \
-e "s/-efi-boot-part --efi-boot-image/$iso_mbr_part_type -no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name/" \ -e "s/-efi-boot-part --efi-boot-image/$iso_mbr_part_type -no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name/" \
-e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \
@ -247,8 +288,6 @@ then
elif test x"$mode" = xgpt_appended elif test x"$mode" = xgpt_appended
then then
# Exchange arguments for no-HFS MBR-only layout # Exchange arguments for no-HFS MBR-only layout
efi_tmp_name=grub-mkrescue-sed-efi-img.$$
mv "$dir"/efi.img /tmp/$efi_tmp_name
x=$(echo " $*" | sed \ x=$(echo " $*" | sed \
-e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name -appended_part_as_gpt -partition_offset 16/" \ -e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition 2 0xef \/tmp\/$efi_tmp_name -appended_part_as_gpt -partition_offset 16/" \
-e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e --interval:appended_partition_2:all:: -no-emul-boot/" \