Added modes "mbr_only", "original" and parameter variables MKRESCUE_SED_*

This commit is contained in:
Thomas Schmitt 2015-12-28 11:26:05 +00:00
parent 41611e5cf6
commit 0703bcd7e6
1 changed files with 112 additions and 17 deletions

View File

@ -16,33 +16,105 @@ echo >&2
# grub-mkrescue -o output.iso minimal \ # grub-mkrescue -o output.iso minimal \
# --xorriso=/home/thomas/xorriso-1.4.3./frontend/grub-mkrescue-sed.sh # --xorriso=/home/thomas/xorriso-1.4.3./frontend/grub-mkrescue-sed.sh
# #
# It will manipulate the xorriso arguments before # It will manipulate the xorriso arguments before they get executed by a
# they get executed by the neighboring ../../xorriso/xorriso program. # 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 # The mode "mjg" implements an experiment which should be accompanied by a
# accompanied by a xorriso from # GNU xorriso built by
# export CPPFLAGS="-DLibisofs_mjg_boot_for_grub2" # export CPPFLAGS="-DLibisofs_mjg_boot_for_grub2"
# ./configure && make clean && make # ./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 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" 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 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 then
# Show arguments # Show arguments
echo "##### Begin of received arguments" >&2
echo "$0" >&2 echo "$0" >&2
for i in "$@" for i in "$@"
do do
echo "|""$i""|" >&2 echo "$i" >&2
done done
echo "##### End of recived arguments" >&2
echo >&2
fi fi
# Look for the name of the /tmp directory with the GRUB2 files. # Look for the name of the /tmp directory with the GRUB2 files.
@ -61,26 +133,49 @@ do
fi fi
done done
if test "$debug" = yes if test x"$debug" = xextra
then then
# Show files on disk # Show files on disk
find "$dir" find "$dir"
fi fi
# Exchange arguments for the experimental GRUB2 mjg layout if test x"$mode" = xmjg
x=$(echo " $*" | sed \ 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-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/--efi-boot efi\.img/-eltorito-alt-boot -e efi.img -no-emul-boot -isohybrid-gpt-basdat/" \
-e "s/--protective-msdos-label/$protective/" \ -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 then
echo "+ converted xorriso arguments:" >&2 echo "+ converted xorriso arguments:" >&2
echo " $x" >&2 echo " $x" >&2
echo >&2
fi fi
# Run neighboring xorriso binary with the altered arguments # Run xorriso binary with the converted arguments
self_dir=$(dirname $(dirname "$0") ) "$xorriso" $MKRESCUE_SED_XORRISO_ARGS $x
"$self_dir"/xorriso/xorriso $x