templates: Add GRUB_DISABLE_UUID

The grub-mkconfig and 10_linux scripts by default attempt to use a UUID to
set the root kernel command line parameter and the $root GRUB environment
variable.

The former can be disabled by setting the GRUB_DISABLE_LINUX_UUID variable
to "true", but there is currently no way to disable the latter.

The generated grub config uses the search command with the --fs-uuid option
to find the device that has to be set as $root, i.e:

 search --no-floppy --fs-uuid --set=root ...

This is usually more reliable but in some cases it may not be appropriate,
so this patch introduces a new GRUB_DISABLE_UUID variable that can be used
to disable searching for the $root device by filesystem UUID.

When disabled, the $root device will be set to the value specified in the
device.map as found by the grub-probe --target=compatibility_hint option.

When setting GRUB_DISABLE_UUID=true, the GRUB_DISABLE_LINUX_UUID and
GRUB_DISABLE_LINUX_PARTUUID variables will also be set to "true" unless
these have been explicitly set to "false".

That way, the GRUB_DISABLE_UUID variable can be used to force using the
device names for both GRUB and Linux.

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Reviewed-by: Nicholas Vinson <nvinson234@gmail.com>
This commit is contained in:
Peter Jones 2019-10-22 10:44:28 +02:00 committed by Daniel Kiper
parent 33203ca348
commit b78d570a36
3 changed files with 21 additions and 2 deletions

View file

@ -1441,6 +1441,15 @@ enable the use of partition UUIDs, set this option to @samp{false}.
If this option is set to @samp{true}, disable the generation of recovery If this option is set to @samp{true}, disable the generation of recovery
mode menu entries. mode menu entries.
@item GRUB_DISABLE_UUID
Normally, @command{grub-mkconfig} will generate menu entries that use
universally-unique identifiers (UUIDs) to identify various filesystems to
search for files. This is usually more reliable, but in some cases it may
not be appropriate. To disable this use of UUIDs, set this option to
@samp{true}. Setting this option to @samp{true}, will also set the options
@samp{GRUB_DISABLE_LINUX_UUID} and @samp{GRUB_DISABLE_LINUX_PARTUUID} to
@samp{true}, unless they have been explicilty set to @samp{false}.
@item GRUB_VIDEO_BACKEND @item GRUB_VIDEO_BACKEND
If graphical video support is required, either because the @samp{gfxterm} If graphical video support is required, either because the @samp{gfxterm}
graphical terminal is in use or because @samp{GRUB_GFXPAYLOAD_LINUX} is set, graphical terminal is in use or because @samp{GRUB_GFXPAYLOAD_LINUX} is set,

View file

@ -158,6 +158,15 @@ if test -f ${sysconfdir}/default/grub ; then
. ${sysconfdir}/default/grub . ${sysconfdir}/default/grub
fi fi
if [ "x${GRUB_DISABLE_UUID}" = "xtrue" ]; then
if [ -z "${GRUB_DISABLE_LINUX_UUID}" ]; then
GRUB_DISABLE_LINUX_UUID="true"
fi
if [ -z "${GRUB_DISABLE_LINUX_PARTUUID}" ]; then
GRUB_DISABLE_LINUX_PARTUUID="true"
fi
fi
# XXX: should this be deprecated at some point? # XXX: should this be deprecated at some point?
if [ "x${GRUB_TERMINAL}" != "x" ] ; then if [ "x${GRUB_TERMINAL}" != "x" ] ; then
GRUB_TERMINAL_INPUT="${GRUB_TERMINAL}" GRUB_TERMINAL_INPUT="${GRUB_TERMINAL}"
@ -224,6 +233,7 @@ export GRUB_DEFAULT \
GRUB_TERMINAL_INPUT \ GRUB_TERMINAL_INPUT \
GRUB_TERMINAL_OUTPUT \ GRUB_TERMINAL_OUTPUT \
GRUB_SERIAL_COMMAND \ GRUB_SERIAL_COMMAND \
GRUB_DISABLE_UUID \
GRUB_DISABLE_LINUX_UUID \ GRUB_DISABLE_LINUX_UUID \
GRUB_DISABLE_LINUX_PARTUUID \ GRUB_DISABLE_LINUX_PARTUUID \
GRUB_DISABLE_RECOVERY \ GRUB_DISABLE_RECOVERY \

View file

@ -156,7 +156,7 @@ prepare_grub_to_access_device ()
if [ "x$fs_hint" != x ]; then if [ "x$fs_hint" != x ]; then
echo "set root='$fs_hint'" echo "set root='$fs_hint'"
fi fi
if fs_uuid="`"${grub_probe}" --device $@ --target=fs_uuid 2> /dev/null`" ; then if [ "x${GRUB_DISABLE_UUID}" != "xtrue" ] && fs_uuid="`"${grub_probe}" --device $@ --target=fs_uuid 2> /dev/null`" ; then
hints="`"${grub_probe}" --device $@ --target=hints_string 2> /dev/null`" || hints= hints="`"${grub_probe}" --device $@ --target=hints_string 2> /dev/null`" || hints=
echo "if [ x\$feature_platform_search_hint = xy ]; then" echo "if [ x\$feature_platform_search_hint = xy ]; then"
echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}" echo " search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}"
@ -173,7 +173,7 @@ grub_get_device_id ()
IFS=' IFS='
' '
device="$1" device="$1"
if fs_uuid="`"${grub_probe}" --device ${device} --target=fs_uuid 2> /dev/null`" ; then if [ "x${GRUB_DISABLE_UUID}" != "xtrue" ] && fs_uuid="`"${grub_probe}" --device ${device} --target=fs_uuid 2> /dev/null`" ; then
echo "$fs_uuid"; echo "$fs_uuid";
else else
echo $device |sed 's, ,_,g' echo $device |sed 's, ,_,g'