agama/live/config-cdroot/fix_bootconfig.aarch64
Ladislav Slezák f7b8393807
Fixes in the boot menu and image build
- Fixes and improvements in the boot menu for x86_64 and aarch64:
  - Fixed boot from hard disk in the legacy BIOS mode (x86_64 only)
  - Added "p" keyboard shortcut to interactively configure the root
    password for the installer live system
  - Added support for serial console
  - Disable plymouth graphical boot when the grub boot menu is
    switched to text mode with the "t" keyboard shortcut

- Fixed failed image build because of missing configuration options
  for the "image-janitor" tool
2026-02-19 14:35:35 +01:00

156 lines
4.5 KiB
Bash
Executable file

#! /bin/bash
# Custom menu to ensure that we boot correctly
# from local disk on UEFI
# https://github.com/openSUSE/agama/issues/1609
# KIWI config
set -e
dst="$1"
if [ ! -d "$dst" ]; then
echo "fix_bootconfig.aarch64: image dir \"$dst\" not found"
exit 1
fi
# KIWI config which should normally be inherited
# from a parent process in our case xorriso
# but that's not the case.
test -f $dst/.profile && . $dst/.profile
arch=$(uname -m)
profile=$(echo "$kiwi_profiles" | tr "_" " ")
label="$profile ($arch)"
if [ -d "$dst/boot/grub2/themes/SLE" ]; then
theme="SLE"
else
theme="openSUSE"
fi
#
# Create grub.cfg
#
cat >$dst/boot/grub2/grub.cfg <<XXX
# Agama generated grub2 config file
insmod serial
insmod read
set btrfs_relative_path="y"
export btrfs_relative_path
set default=0
if [ -n "\${iso_path}" ]; then
isoboot="iso-scan/filename=\${iso_path}"
fi
set timeout=60
set timeout_style=menu
if [ "\${grub_platform}" = "efi" ]; then
echo "Please press 't' to show the boot menu on this console"
fi
set gfxmode=auto
set font=(\$root)/boot/aarch64/loader/grub2/fonts/unicode.pf2
set ascii_font=grub2/themes/$theme/ascii.pf2
set sans_bold_14_font=grub2/themes/$theme/DejaVuSans-Bold14.pf2
set sans_10_font=grub2/themes/$theme/DejaVuSans10.pf2
set sans_12_font=grub2/themes/$theme/DejaVuSans12.pf2
if [ -f \${font} ];then
loadfont \${font}
fi
if [ -f (\$root)/boot/\${ascii_font} ];then
loadfont (\$root)/boot/\${ascii_font}
fi
if [ -f (\$root)/boot/\${sans_bold_14_font} ];then
loadfont (\$root)/boot/\${sans_bold_14_font}
fi
if [ -f (\$root)/boot/\${sans_10_font} ];then
loadfont (\$root)/boot/\${sans_10_font}
fi
if [ -f (\$root)/boot/\${sans_12_font} ];then
loadfont (\$root)/boot/\${sans_12_font}
fi
if [ -f (\$root)/boot/grub2/themes/$theme/theme.txt ];then
set theme=(\$root)/boot/grub2/themes/$theme/theme.txt
fi
# if the first serial port is successfully configured allow input/output to it as well
if serial --unit=0 --speed=9600; then
terminal_input console serial
terminal_output gfxterm serial
set extra_output=serial
# this detects that a serial port is present but that does not mean a serial
# console is attached there so we cannot for example disable plymouth
else
terminal_input console
terminal_output gfxterm
fi
menuentry "Install $label" --class os --unrestricted {
set gfxpayload=keep
echo Loading kernel...
linux (\$root)/boot/aarch64/loader/linux \${isoboot} splash=silent \${plymouth}
echo Loading initrd...
initrd (\$root)/boot/aarch64/loader/initrd
}
menuentry "Failsafe -- Install $label" --class os --unrestricted {
set gfxpayload=keep
echo Loading kernel...
linux (\$root)/boot/aarch64/loader/linux \${isoboot} ide=nodma apm=off noresume edd=off nomodeset 3
echo Loading initrd...
initrd (\$root)/boot/aarch64/loader/initrd
}
menuentry "Check Installation Medium" --class os --unrestricted {
set gfxpayload=keep
echo Loading kernel...
linux (\$root)/boot/aarch64/loader/linux mediacheck=1 plymouth.enable=0 \${isoboot}
echo Loading initrd...
initrd (\$root)/boot/aarch64/loader/initrd
}
menuentry "Rescue System" --class os --unrestricted {
set gfxpayload=keep
echo Loading kernel...
linux (\$root)/boot/aarch64/loader/linux \${isoboot} $RESCUE_SYSTEM_BOOT_SETTINGS
echo Loading initrd...
initrd (\$root)/boot/aarch64/loader/initrd
}
hiddenentry "Text mode" --hotkey "t" {
set textmode=true
set plymouth="plymouth.enable=0"
terminal_output console \${extra_output}
}
hiddenentry "Set Live system password" --hotkey "p" {
echo "Enter root password for the installer live system:"
read -s live_password
echo "Confirm password:"
read -s live_password_confirmed
if [ "\${live_password}" != "\${live_password_confirmed}" ]; then
echo "ERROR: The passwords do not match!"
echo "Press Enter to return ..."
read -s
else
if [ -z "\${live_password}" ]; then
echo "ERROR: The password cannot be empty!"
echo "Press Enter to return ..."
read -s
else
set live_options="live.password=\${live_password}"
fi
fi
}
if [ "\${grub_platform}" = "efi" ]; then
menuentry "UEFI Firmware Settings" {
fwsetup --is-supported
if [ "\$?" = 0 ]; then
fwsetup
else
echo "Your firmware doesn't support setup menu entry from a boot loader"
echo "Press Enter to return ..."
read -s
fi
}
fi
XXX