Untitled diff

Created Diff never expires
5 removals
Lines
Total
Removed
Words
Total
Removed
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
295 lines
105 additions
Lines
Total
Added
Words
Total
Added
To continue using this feature, upgrade to
Diffchecker logo
Diffchecker Pro
390 lines
#! /bin/sh
#! /bin/sh
set -e
set -e


# grub-mkconfig helper script.
# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
#
#
# GRUB is free software: you can redistribute it and/or modify
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# (at your option) any later version.
#
#
# GRUB is distributed in the hope that it will be useful,
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# GNU General Public License for more details.
#
#
# You should have received a copy of the GNU General Public License
# You should have received a copy of the GNU General Public License
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.


prefix="/usr"
prefix="/usr"
exec_prefix="/usr"
exec_prefix="/usr"
datarootdir="/usr/share"
datarootdir="/usr/share"


ME=$(basename $0)

. "${datarootdir}/grub2/grub-mkconfig_lib"
. "${datarootdir}/grub2/grub-mkconfig_lib"


export TEXTDOMAIN=grub2
export TEXTDOMAIN=grub2
export TEXTDOMAINDIR="${datarootdir}/locale"
export TEXTDOMAINDIR="${datarootdir}/locale"


if [ ! -e /proc/xen/xsd_port -a -e /proc/xen ]; then
if [ ! -e /proc/xen/xsd_port -a -e /proc/xen ]; then
# we're running on xen domU guest
# we're running on xen domU guest
# prevent setting up nested virt on HVM or PV domU guest
# prevent setting up nested virt on HVM or PV domU guest
exit 0
exit 0
fi
fi


CLASS="--class gnu-linux --class gnu --class os --class xen"
CLASS="--class gnu-linux --class gnu --class os --class xen"


if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
OS=GNU/Linux
OS=GNU/Linux
os=linux
else
else
OS="${GRUB_DISTRIBUTOR} GNU/Linux"
OS="${GRUB_DISTRIBUTOR}"
CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
os="$(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1)"
CLASS="--class ${os} ${CLASS}"
fi
fi


# loop-AES arranges things so that /dev/loop/X can be our root device, but
# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
case ${GRUB_DEVICE} in
/dev/loop/*|/dev/loop[0-9])
/dev/loop/*|/dev/loop[0-9])
GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
;;
;;
esac
esac


if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
|| ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
|| ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
|| uses_abstraction "${GRUB_DEVICE}" lvm; then
|| uses_abstraction "${GRUB_DEVICE}" lvm; then
LINUX_ROOT_DEVICE=${GRUB_DEVICE}
LINUX_ROOT_DEVICE=${GRUB_DEVICE}
else
else
LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi
fi


# Allow overriding GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT.
# Allow overriding GRUB_CMDLINE_LINUX and GRUB_CMDLINE_LINUX_DEFAULT.
if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE}" ]; then
if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE}" ]; then
GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX_XEN_REPLACE}"
GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX_XEN_REPLACE}"
fi
fi
if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}" ]; then
if [ "${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}" ]; then
GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}"
GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT}"
fi
fi


case x"$GRUB_FS" in
case x"$GRUB_FS" in
xbtrfs)
xbtrfs)
if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ]; then
if [ "x${SUSE_BTRFS_SNAPSHOT_BOOTING}" = "xtrue" ]; then
GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} \${extra_cmdline}"
GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX} \${extra_cmdline}"
else
else
rootsubvol="`make_system_path_relative_to_its_root /`"
rootsubvol="`make_system_path_relative_to_its_root /`"
rootsubvol="${rootsubvol#/}"
rootsubvol="${rootsubvol#/}"
if [ "x${rootsubvol}" != x ]; then
if [ "x${rootsubvol}" != x ]; then
GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
fi
fi
fi;;
fi;;
xzfs)
xzfs)
rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
;;
;;
esac
esac


title_correction_code=
title_correction_code=


if [ -d /sys/firmware/efi ]; then
is_efi=true
err_msg=""
efi_dir="/boot/efi/efi/${os}"
grub_dir=/boot/grub2
xen_dir=/usr/lib64/efi
for d in $grub_dir $efi_dir $xen_dir; do
[ ! -d "$d" ] || continue
err_msg="${err_msg}$ME: Essential directory '$d' not found!\n"
done
if ! [ -d "$efi_dir" -a -d "$grub_dir" -a -d "$xen_dir" ]; then
err_msg="${err_msg}$ME: XEN configuration skipped!\n"
else
rm -f $grub_dir/xen*.cfg
if [ -s $efi_dir/grub.xen-files ]; then
for f in $(sort $efi_dir/grub.xen-files| uniq); do
rm -f $efi_dir/$f
done
: > $efi_dir/grub.xen-files
fi
fi
else
is_efi=false
fi

linux_entry ()
linux_entry ()
{
{
os="$1"
os="$1"
version="$2"
version="$2"
xen_version="$3"
xen_version="$3"
type="$4"
type="$4"
args="$5"
args="$5"
xen_args="$6"
xen_args="$6"
if [ -n "${linux_root_device_thisversion}" ]; then
root_device="root=${linux_root_device_thisversion}"
else
root_device=""
fi
if [ -z "$boot_device_id" ]; then
if [ -z "$boot_device_id" ]; then
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
fi
fi
if [ x$type != xsimple ] ; then
if [ x$type != xsimple ] ; then
if [ x$type = xrecovery ] ; then
if [ x$type = xrecovery ] ; then
title="$(gettext_printf "%s, with Xen %s and Linux %s (recovery mode)" "${os}" "${xen_version}" "${version}")"
title="$(gettext_printf "%s, with Xen %s and Linux %s (recovery mode)" "${os}" "${xen_version}" "${version}")"
else
else
title="$(gettext_printf "%s, with Xen %s and Linux %s" "${os}" "${xen_version}" "${version}")"
title="$(gettext_printf "%s, with Xen %s and Linux %s" "${os}" "${xen_version}" "${version}")"
fi
fi
replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
if [ x"Xen ${xen_version}>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
if [ x"Xen ${xen_version}>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
fi
fi
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
else
else
title="$(gettext_printf "%s, with Xen hypervisor" "${os}")"
title="$(gettext_printf "%s, with Xen hypervisor" "${os}")"
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'xen-gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
fi
fi
if [ x$type != xrecovery ] ; then
if [ x$type != xrecovery ] ; then
save_default_entry | grub_add_tab | sed "s/^/$submenu_indentation/"
save_default_entry | grub_add_tab | sed "s/^/$submenu_indentation/"
fi
fi


if $is_efi; then
xen_cfg=${xen_basename/.efi/.cfg}
if [ "$section_count" = 0 ]; then
cat <<-EOF > $grub_dir/$xen_cfg
# disclaimer
[global]
#default=
EOF
fi
section_count=$(expr $section_count + 1)
if [ x$type != xrecovery ] ; then
section="config.$section_count"
else
section="failsafe.$section_count"
fi
cat <<-EOF >> $grub_dir/$xen_cfg

[$section]
options=${xen_args}
kernel=${basename} root=${linux_root_device_thisversion} ${args}
ramdisk=${initrd}
EOF
message="$(gettext_printf "Loading Xen %s with Linux %s ..." ${xen_version} ${version})"
sed "s/^/$submenu_indentation/" <<-EOF
echo '$(echo "$message" | grub_quote)'
chainloader \$cmdpath/${xen_basename} ${xen_basename} $section
}
EOF
for f in ${grub_dir}/$xen_cfg ${xen_dir}/${xen_basename} ${rel_dirname}/${basename} ${rel_dirname}/${initrd}; do
cp --preserve=timestamps $f $efi_dir
echo $(basename $f) >> $efi_dir/grub.xen-files
done
return
fi
if [ -z "${prepare_boot_cache}" ]; then
if [ -z "${prepare_boot_cache}" ]; then
prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
fi
fi
printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
xmessage="$(gettext_printf "Loading Xen %s ..." ${xen_version})"
xmessage="$(gettext_printf "Loading Xen %s ..." ${xen_version})"
lmessage="$(gettext_printf "Loading Linux %s ..." ${version})"
lmessage="$(gettext_printf "Loading Linux %s ..." ${version})"
sed "s/^/$submenu_indentation/" << EOF
sed "s/^/$submenu_indentation/" << EOF
echo '$(echo "$xmessage" | grub_quote)'
echo '$(echo "$xmessage" | grub_quote)'
if [ "\$grub_platform" = "pc" -o "\$grub_platform" = "" ]; then
if [ "\$grub_platform" = "pc" -o "\$grub_platform" = "" ]; then
xen_rm_opts=
xen_rm_opts=
else
else
xen_rm_opts="no-real-mode edd=off"
xen_rm_opts="no-real-mode edd=off"
fi
fi
multiboot ${rel_xen_dirname}/${xen_basename} placeholder ${xen_args} \${xen_rm_opts}
multiboot ${rel_xen_dirname}/${xen_basename} placeholder ${xen_args} \${xen_rm_opts}
echo '$(echo "$lmessage" | grub_quote)'
echo '$(echo "$lmessage" | grub_quote)'
module ${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ro ${args}
module ${rel_dirname}/${basename} placeholder ${root_device} ${args}
EOF
EOF
if test -n "${initrd}" ; then
if test -n "${initrd}" ; then
# TRANSLATORS: ramdisk isn't identifier. Should be translated.
# TRANSLATORS: ramdisk isn't identifier. Should be translated.
message="$(gettext_printf "Loading initial ramdisk ...")"
message="$(gettext_printf "Loading initial ramdisk ...")"
sed "s/^/$submenu_indentation/" << EOF
sed "s/^/$submenu_indentation/" << EOF
echo '$(echo "$message" | grub_quote)'
echo '$(echo "$message" | grub_quote)'
module --nounzip ${rel_dirname}/${initrd}
module --nounzip ${rel_dirname}/${initrd}
EOF
EOF
fi
fi
sed "s/^/$submenu_indentation/" << EOF
sed "s/^/$submenu_indentation/" << EOF
}
}
EOF
EOF
}
}


linux_list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* /boot/kernel-*; do
linux_list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* /boot/kernel-*; do
if grub_file_is_not_garbage "$i"; then
if grub_file_is_not_garbage "$i"; then
basename=$(basename $i)
basename=$(basename $i)
version=$(echo $basename | sed -e "s,^[^0-9]*-,,g")
version=$(echo $basename | sed -e "s,^[^0-9]*-,,g")
dirname=$(dirname $i)
dirname=$(dirname $i)
config=
config=
for j in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
for j in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
if test -e "${j}" ; then
if test -e "${j}" ; then
config="${j}"
config="${j}"
break
break
fi
fi
done
done
if (grep -qx "CONFIG_XEN_DOM0=y" "${config}" 2> /dev/null || grep -qx "CONFIG_XEN_PRIVILEGED_GUEST=y" "${config}" 2> /dev/null); then echo -n "$i " ; fi
if (grep -qx "CONFIG_XEN_DOM0=y" "${config}" 2> /dev/null || grep -qx "CONFIG_XEN_PRIVILEGED_GUEST=y" "${config}" 2> /dev/null); then echo -n "$i " ; fi
fi
fi
done`
done`
if [ "x${linux_list}" = "x" ] ; then
if [ "x${linux_list}" = "x" ] ; then
exit 0
exit 0
fi
fi


file_is_not_sym () {
file_is_not_sym () {
case "$1" in
case "$1" in
*/xen-syms-*)
*/xen-syms-*)
return 1;;
return 1;;
*)
*)
return 0;;
return 0;;
esac
esac
}
}


# bnc#757895 - Grub2 menu items incorrect when "Xen Virtual Machines Host Server" selected
# bnc#877040 - Duplicate entries for boot menu created
# wildcard expasion with correct suffix (.gz) for not generating many duplicated menu entries
# only create /boot/xen.gz symlink boot entry
xen_list=`for i in /boot/xen*.gz; do
if test -L /boot/xen.gz; then
xen_list=`readlink -f /boot/xen.gz`
else
# bnc#757895 - Grub2 menu items incorrect when "Xen Virtual Machines Host Server" selected
# wildcard expasion with correct suffix (.gz) for not generating many duplicated menu entries
xen_list=`for i in /boot/xen*.gz; do
if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then echo -n "$i " ; fi
if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then echo -n "$i " ; fi
done`
done`
fi


# bnc#774666 - Grub2 does not offer a Xen entry after installing hypervisor and tools
# bnc#774666 - Grub2 does not offer a Xen entry after installing hypervisor and tools
# This is a workaround to the install sequence of xen-kernel and xen is unpredictable
# This is a workaround to the install sequence of xen-kernel and xen is unpredictable
if [ "x${xen_list}" = "x" ]; then
if [ "x${xen_list}" = "x" ]; then
# If the code reaches here, it means that xen-kernel has been installed, but xen hypervisor
# If the code reaches here, it means that xen-kernel has been installed, but xen hypervisor
# is missing. This is not likely a sane condition for dom0. We assume this is xen-kernel
# is missing. This is not likely a sane condition for dom0. We assume this is xen-kernel
# triggers config update prior to the xen package.
# triggers config update prior to the xen package.
xen_list="/boot/xen.gz"
xen_list="/boot/xen.gz"
fi
fi


prepare_boot_cache=
prepare_boot_cache=
boot_device_id=
boot_device_id=


title_correction_code=
title_correction_code=


machine=`uname -m`
machine=`uname -m`


case "$machine" in
case "$machine" in
i?86) GENKERNEL_ARCH="x86" ;;
i?86) GENKERNEL_ARCH="x86" ;;
mips|mips64) GENKERNEL_ARCH="mips" ;;
mips|mips64) GENKERNEL_ARCH="mips" ;;
mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
arm*) GENKERNEL_ARCH="arm" ;;
arm*) GENKERNEL_ARCH="arm" ;;
*) GENKERNEL_ARCH="$machine" ;;
*) GENKERNEL_ARCH="$machine" ;;
esac
esac


# Extra indentation to add to menu entries in a submenu. We're not in a submenu
# Extra indentation to add to menu entries in a submenu. We're not in a submenu
# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
# yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
submenu_indentation=""
submenu_indentation=""


is_top_level=true
is_top_level=true


while [ "x${xen_list}" != "x" ] ; do
while [ "x${xen_list}" != "x" ] ; do
list="${linux_list}"
list="${linux_list}"
current_xen=`version_find_latest $xen_list`
current_xen=`version_find_latest $xen_list`
xen_basename=`basename ${current_xen}`
xen_basename=`basename ${current_xen}`
xen_dirname=`dirname ${current_xen}`
xen_dirname=`dirname ${current_xen}`
rel_xen_dirname=`make_system_path_relative_to_its_root $xen_dirname`
rel_xen_dirname=`make_system_path_relative_to_its_root $xen_dirname`
xen_version=`echo $xen_basename | sed -e "s,.gz$,,g;s,^xen-,,g"`
xen_version=`echo $xen_basename | sed -e "s,.gz$,,g;s,^xen-,,g"`
xen_list=`echo $xen_list | tr ' ' '\n' | grep -vx $current_xen | tr '\n' ' '`
if $is_efi; then
xen_basename=${xen_basename/.gz/.efi}
if ! [ -f ${xen_dir}/${xen_basename} ]; then
echo "Skip missing hypervisor $xen_dir/$xen_basename" >&2
continue
elif [ -L ${xen_dir}/${xen_basename} ]; then
xen_target=$(basename $(readlink -e ${xen_dir}/${xen_basename}))
if [ -f ${efi_dir}/${xen_target} ]; then
echo "Skip duplicate $xen_dir/$xen_basename for $xen_target" >&2
continue
fi
elif [ -n "$err_msg" ]; then
break
fi
gettext_printf "Found hypervisor: %s\n" "$current_xen" >&2
section_count=0
fi
if [ -z "$boot_device_id" ]; then
if [ -z "$boot_device_id" ]; then
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
fi
fi
if [ "x$is_top_level" != xtrue ]; then
if [ "x$is_top_level" != xtrue ]; then
echo " submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {"
echo " submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {"
fi
fi
while [ "x$list" != "x" ] ; do
while [ "x$list" != "x" ] ; do
linux=`version_find_latest $list`
linux=`version_find_latest $list`
gettext_printf "Found linux image: %s\n" "$linux" >&2
gettext_printf "Found linux image: %s\n" "$linux" >&2
basename=`basename $linux`
basename=`basename $linux`
dirname=`dirname $linux`
dirname=`dirname $linux`
rel_dirname=`make_system_path_relative_to_its_root $dirname`
rel_dirname=`make_system_path_relative_to_its_root $dirname`
version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
alt_version=`echo $version | sed -e "s,\.old$,,g"`
alt_version=`echo $version | sed -e "s,\.old$,,g"`
linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"


initrd=
initrd=
for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
for i in "initrd.img-${version}" "initrd-${version}.img" "initrd-${version}.gz" \
"initrd-${version}" "initramfs-${version}.img" \
"initrd-${version}" "initramfs-${version}.img" \
"initrd.img-${alt_version}" "initrd-${alt_version}.img" \
"initrd.img-${alt_version}" "initrd-${alt_version}.img" \
"initrd-${alt_version}" "initramfs-${alt_version}.img" \
"initrd-${alt_version}" "initramfs-${alt_version}.img" \
"initramfs-genkernel-${version}" \
"initramfs-genkernel-${version}" \
"initramfs-genkernel-${alt_version}" \
"initramfs-genkernel-${alt_version}" \
"initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
"initramfs-genkernel-${GENKERNEL_ARCH}-${version}" \
"initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}" ; do
"initramfs-genkernel-${GENKERNEL_ARCH}-${alt_version}" ; do
if test -e "${dirname}/${i}" ; then
if test -e "${dirname}/${i}" ; then
initrd="$i"
initrd="$i"
break
break
fi
fi
done
done
if test -n "${initrd}" ; then
if test -n "${initrd}" ; then
gettext_printf "Found initrd image: %s\n" "${dirname}/${initrd}" >&2
gettext_printf "Found initrd image: %s\n" "${dirname}/${initrd}" >&2
else
else
# "UUID=" magic is parsed by initrds. Since there's no initrd, it can't work here.
# "UUID=" magic is parsed by initrds. Since there's no initrd, it can't work here.
linux_root_device_thisversion=${GRUB_DEVICE}
linux_root_device_thisversion=${GRUB_DEVICE}
fi
fi


if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
linux_entry "${OS}" "${version}" "${xen_version}" simple \
linux_entry "${OS}" "${version}" "${xen_version}" simple \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"


submenu_indentation="$grub_tab$grub_tab"
submenu_indentation="$grub_tab$grub_tab"
if [ -z "$boot_device_id" ]; then
if [ -z "$boot_device_id" ]; then
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
fi
fi
# TRANSLATORS: %s is replaced with an OS name
# TRANSLATORS: %s is replaced with an OS name
echo "submenu '$(gettext_printf "Advanced options for %s (with Xen hypervisor)" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
echo "submenu '$(gettext_printf "Advanced options for %s (with Xen hypervisor)" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
echo " submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {"
echo " submenu '$(gettext_printf "Xen hypervisor, version %s" "${xen_version}" | grub_quote)' \$menuentry_id_option 'xen-hypervisor-$xen_version-$boot_device_id' {"
is_top_level=false
is_top_level=false
fi
fi


linux_entry "${OS}" "${version}" "${xen_version}" advanced \
linux_entry "${OS}" "${version}" "${xen_version}" advanced \
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
linux_entry "${OS}" "${version}" "${xen_version}" recovery \
linux_entry "${OS}" "${version}" "${xen_version}" recovery \
"single ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}"
"single ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}"
fi
fi


list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
done
done
if [ x"$is_top_level" != xtrue ]; then
if [ x"$is_top_level" != xtrue ]; then
echo ' }'
echo ' }'
fi
fi
xen_list=`echo $xen_list | tr ' ' '\n' | grep -vx $current_xen | tr '\n' ' '`
done
done


# If at least one kernel was found, then we need to
# If at least one kernel was found, then we need to
# add a closing '}' for the submenu command.
# add a closing '}' for the submenu command.
if [ x"$is_top_level" != xtrue ]; then
if [ x"$is_top_level" != xtrue ]; then
echo '}'
echo '}'
fi
fi


echo "$title_correction_code"
echo "$title_correction_code"


if [ -n "$err_msg" ]; then
echo -en "$err_msg" >&2
fi