From 0703bcd7e672693fd10b468e4153c596b98ef23d Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Mon, 28 Dec 2015 11:26:05 +0000 Subject: [PATCH] Added modes "mbr_only", "original" and parameter variables MKRESCUE_SED_* --- frontend/grub-mkrescue-sed.sh | 129 +++++++++++++++++++++++++++++----- 1 file changed, 112 insertions(+), 17 deletions(-) diff --git a/frontend/grub-mkrescue-sed.sh b/frontend/grub-mkrescue-sed.sh index 37b8cb22..5a9e715b 100755 --- a/frontend/grub-mkrescue-sed.sh +++ b/frontend/grub-mkrescue-sed.sh @@ -16,33 +16,105 @@ echo >&2 # grub-mkrescue -o output.iso minimal \ # --xorriso=/home/thomas/xorriso-1.4.3./frontend/grub-mkrescue-sed.sh # -# It will manipulate the xorriso arguments before -# they get executed by the neighboring ../../xorriso/xorriso program. +# It will manipulate the xorriso arguments before they get executed by a +# xorriso program. Default is the neighboring ../../xorriso/xorriso program or, +# if that neighbor cannot be found, the system-wide installed xorriso. # -# In its current form it implements an experiment which should be -# accompanied by a xorriso from +# The mode "mjg" implements an experiment which should be accompanied by a +# GNU xorriso built by # export CPPFLAGS="-DLibisofs_mjg_boot_for_grub2" # ./configure && make clean && make +# +# The mode "mbr_only" implements an alternative fully UEFI compliant layout +# which does not produce GTP, HFS+, and APM. +# It is supposed to work with any unmodified xorriso >= 1.3.2 +# -# Variation settings: +# +# Variation settings +# +# The environment variables MKRESCUE_SED_* override the following +# default settings: -# First argument of -append_partition +# Manipulation mode: +# "mjg" = ESP in MBR+GPT+APM, with HFS+ +# "mbr_only" = ESP in MBR, without HFS+ +# "original" = pass arguments unchanged +mode="mjg" +if test -n "$MKRESCUE_SED_MODE" +then + mode="$MKRESCUE_SED_MODE" +fi + +# First argument of -append_partition with mode "mjg". Values: 1 or 2. partno=1 +if test -n "$MKRESCUE_SED_PARTNO" +then + partno="$MKRESCUE_SED_PARTNO" +fi -# Replacement for option --protective-msdos-label +# Replacement for option --protective-msdos-label. Either itself or empty text. +# If the environment variable contains the word "no", this means empty. protective="--protective-msdos-label" +if test -n "$MKRESCUE_SED_PROTECTIVE" +then + if test x"$MKRESCUE_SED_PROTECTIVE" = xno + then + protective="" + elif test x"$MKRESCUE_SED_PROTECTIVE" = xyes + then + protective="--protective-msdos-label" + else + protective="$MKRESCUE_SED_PROTECTIVE" + fi +fi -# "yes" make the script very verbous +# "yes" shows xorriso arguments, "extra" additionally shows all input files. debug=no +if test -n "$MKRESCUE_SED_DEBUG" +then + debug="$MKRESCUE_SED_DEBUG" +fi -if test "$debug" = yes +# The path to the program that will be executed with the converted arguments. +if test -n "$MKRESCUE_SED_XORRISO" +then + xorriso="$MKRESCUE_SED_XORRISO" +else + # Prefer neighboring xorriso binary over system-wide installed one. + self_dir="$(dirname $(dirname "$0") )" + if test -x "$self_dir"/xorriso/xorriso + then + xorriso="$self_dir"/xorriso/xorriso + else + xorriso="xorriso" + fi +fi + +# MKRESCUE_SED_XORRISO_ARGS will be used as first arguments of the xorriso run. +# (Trailing xorriso arguments may be simply added to the grub-mkrescue +# command line.) +# Each argument must be a single word. No whitespace. No quotation marks. + + +# +# Do the work +# + +echo "frontend/grub-mkrescue-sed.sh mode: $mode" >&2 +echo >&2 + +if test x"$debug" = xyes -o x"$debug" = xextra then # Show arguments + echo "##### Begin of received arguments" >&2 echo "$0" >&2 for i in "$@" do - echo "|""$i""|" >&2 + echo "$i" >&2 done + echo "##### End of recived arguments" >&2 + echo >&2 fi # Look for the name of the /tmp directory with the GRUB2 files. @@ -61,26 +133,49 @@ do fi done -if test "$debug" = yes +if test x"$debug" = xextra then # Show files on disk find "$dir" fi -# Exchange arguments for the experimental GRUB2 mjg layout -x=$(echo " $*" | sed \ +if test x"$mode" = xmjg +then + # Exchange arguments for the experimental GRUB2 mjg layout + x=$(echo " $*" | sed \ -e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition $partno 0xef \/tmp\/$(basename "$dir")\/efi.img/" \ -e "s/--efi-boot efi\.img/-eltorito-alt-boot -e efi.img -no-emul-boot -isohybrid-gpt-basdat/" \ -e "s/--protective-msdos-label/$protective/" \ ) -if test "$debug" = yes +elif test x"$mode" = xmbr_only +then + # Exchange arguments for no-HFS MBR-only layout + x=$(echo " $*" | sed \ + -e "s/-efi-boot-part --efi-boot-image/-no-pad -append_partition 2 0xef \/tmp\/$(basename "$dir")\/efi.img/" \ + -e "s/-hfsplus .*CoreServices\/boot.efi//" \ + -e "s/--protective-msdos-label/$protective/" \ + ) + +elif test x"$mode" = xoriginal +then + # Pass arguments unchanged + x=" $*" + +else + echo >&2 + echo "$0 : FATAL : Unknown manipulation mode '$mode'." >&2 + echo >&2 + exit 1 +fi + +if test x"$debug" = xyes -o x"$debug" = xextra then echo "+ converted xorriso arguments:" >&2 echo " $x" >&2 + echo >&2 fi -# Run neighboring xorriso binary with the altered arguments -self_dir=$(dirname $(dirname "$0") ) -"$self_dir"/xorriso/xorriso $x +# Run xorriso binary with the converted arguments +"$xorriso" $MKRESCUE_SED_XORRISO_ARGS $x