summaryrefslogtreecommitdiff
path: root/scripts/build/binary_grub_cfg
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build/binary_grub_cfg')
-rwxr-xr-xscripts/build/binary_grub_cfg289
1 files changed, 289 insertions, 0 deletions
diff --git a/scripts/build/binary_grub_cfg b/scripts/build/binary_grub_cfg
new file mode 100755
index 000000000..54649e187
--- /dev/null
+++ b/scripts/build/binary_grub_cfg
@@ -0,0 +1,289 @@
+#!/bin/sh
+
+## live-build(7) - System Build Scripts
+## Copyright (C) 2016-2020 The Debian Live team
+## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch>
+##
+## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
+## This is free software, and you are welcome to redistribute it
+## under certain conditions; see COPYING for details.
+
+
+set -e
+
+# Including common functions
+[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh
+
+# Setting static variables
+DESCRIPTION="Generates config for grub-pc and grub-efi, and installs loopback support"
+USAGE="${PROGRAM} [--force]"
+
+# Processing arguments and configuration files
+Init_config_data "${@}"
+
+# NOTE: This creates the config used for both grub-pc and grub-efi.
+# It also installs loopback.cfg for looback support, which depends upon that
+# config. Since loopback support is added unconditionally, this script is
+# thus run unconditionally!
+# TODO: Add an option to allow disabling loopback.cfg creation? (and thus conditionally run the script)
+
+Echo_message "Begin installing config for grub-pc and/or grub-pc, and loopback support..."
+
+# Requiring stage file
+Require_stagefiles config bootstrap
+
+# Checking stage file
+Check_stagefile
+
+# Acquire lock file
+Acquire_lockfile
+
+# Check architecture
+Check_architectures amd64 i386
+Check_crossarchitectures
+
+_TARGET="binary/boot/grub"
+
+# Local functions
+Grub_live_menu_entry() {
+ local LABEL="$1"
+ local KERNEL="$2"
+ local INITRD="$3"
+ local APPEND="$4"
+ local HOTKEY="${5:+ --hotkey=$5}"
+
+ cat >> "${LIVE_ENTRIES_TMP}" <<END
+menuentry "${LABEL}"${HOTKEY} {
+ linux $KERNEL $APPEND
+ initrd $INITRD
+}
+END
+}
+
+Grub_live_autodetect_menu_entry ()
+{
+ local LABEL="${1}"
+ local AMD64_KERNEL="${2}"
+ local AMD64_INITRD="${3}"
+ local _686_KERNEL="${4}"
+ local _686_INITRD="${5}"
+ local APPEND="${6}"
+
+ cat >> "${LIVE_ENTRIES_TMP}" <<END
+# Autodetect if amd64 is supported
+menuentry "$LABEL" {
+ if cpuid -l; then
+ linux ${AMD64_KERNEL} ${APPEND}
+ initrd ${AMD64_INITRD}
+ else
+ linux ${_686_KERNEL} ${APPEND}
+ initrd ${_686_INITRD}
+ fi
+}
+END
+}
+
+# User config replacement/additional files
+_SOURCE_USER="config/bootloaders/grub-pc"
+
+# Copying templates
+mkdir -p "${_TARGET}"
+if [ -n "${LIVE_BUILD}" ]; then
+ cp -a "${LIVE_BUILD}/share/bootloaders/grub-pc"/* "${_TARGET}"/
+else
+ cp -a "/usr/share/live/build/bootloaders/grub-pc"/* "${_TARGET}"/
+fi
+if [ -e "${_SOURCE_USER}" ]; then
+ cp -af "${_SOURCE_USER}"/* "${_TARGET}"/
+fi
+
+case "${LB_INITRAMFS}" in
+ live-boot)
+ INITFS="live"
+ ;;
+
+ *)
+ INITFS="boot"
+ ;;
+esac
+
+# Setting boot parameters
+if [ "${LB_UNION_FILESYSTEM}" != "overlay" ]; then
+ LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE} union=${LB_UNION_FILESYSTEM}"
+fi
+
+# Default entries
+DEFAULT_FLAVOUR="$(echo ${LB_LINUX_FLAVOURS} | awk '{ print $1 }')"
+DEFAULT_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})"
+DEFAULT_INITRD="initrd.img-$(echo ${DEFAULT_KERNEL} | sed -e 's|vmlinuz-||')"
+
+KERNEL_LIVE="/${INITFS}/${DEFAULT_KERNEL}"
+INITRD_LIVE="/${INITFS}/${DEFAULT_INITRD}"
+APPEND_LIVE="${LB_BOOTAPPEND_LIVE} findiso=\${iso_path}"
+
+# Ensure fresh live entries
+LIVE_ENTRIES_TMP="${_TARGET}/live.cfg.tmp"
+rm -f "${LIVE_ENTRIES_TMP}"
+
+# Assemble live menu entries
+_AMD64_686_NUMBER="0"
+
+for _FLAVOUR in ${LB_LINUX_FLAVOURS}; do
+ if [ "${_FLAVOUR}" = "amd64" -o "${_FLAVOUR}" = "686" ]; then
+ _AMD64_686_NUMBER="$((${_AMD64_686_NUMBER} + 1))"
+ fi
+done
+
+if [ "${_AMD64_686_NUMBER}" -ge 2 ] ; then
+ # Default entries
+ AMD64_KERNEL="$(basename chroot/boot/vmlinuz-*amd64)"
+ AMD64_INITRD="initrd.img-$(echo ${AMD64_KERNEL} | sed -e 's|vmlinuz-||')"
+ _686_KERNEL="$(basename chroot/boot/vmlinuz-*686)"
+ _686_INITRD="initrd.img-$(echo ${_686_KERNEL} | sed -e 's|vmlinuz-||')"
+
+ Grub_live_autodetect_menu_entry "Live system (autodetect)" \
+ "/${INITFS}/${AMD64_KERNEL}" \
+ "/${INITFS}/${AMD64_INITRD}" \
+ "/${INITFS}/${_686_KERNEL}" \
+ "/${INITFS}/${_686_INITRD}" \
+ "${APPEND_LIVE}"
+
+ if [ "${LB_BOOTAPPEND_LIVE_FAILSAFE}" != "none" ]; then
+ Grub_live_autodetect_menu_entry "Live system (autodetect) (fail-safe mode)" \
+ "/${INITFS}/${AMD64_KERNEL}" \
+ "/${INITFS}/${AMD64_INITRD}" \
+ "/${INITFS}/${_686_KERNEL}" \
+ "/${INITFS}/${_686_INITRD}" \
+ "${LB_BOOTAPPEND_LIVE_FAILSAFE}"
+ fi
+else
+ Grub_live_menu_entry "Live system" \
+ "/${INITFS}/${DEFAULT_KERNEL}" \
+ "/${INITFS}/${DEFAULT_INITRD}" \
+ "${APPEND_LIVE}" \
+ "l"
+ if [ "${LB_BOOTAPPEND_LIVE_FAILSAFE}" != "none" ]; then
+ Grub_live_menu_entry "Live system (fail-safe mode)" \
+ "/${INITFS}/${DEFAULT_KERNEL}" \
+ "/${INITFS}/${DEFAULT_INITRD}" \
+ "${LB_BOOTAPPEND_LIVE_FAILSAFE}"
+ fi
+fi
+
+_COUNT=0
+for KERNEL in chroot/boot/vmlinuz-*; do
+ _COUNT=$(( $_COUNT + 1 ))
+done
+
+if [ $_COUNT -gt 1 ]; then
+ for KERNEL in chroot/boot/vmlinuz-*; do
+ VERSION="$(basename ${KERNEL} | sed -e 's|vmlinuz-||')"
+
+ Grub_live_menu_entry "Live system, kernel ${VERSION}" \
+ "/${INITFS}/$(basename ${KERNEL})" \
+ "/${INITFS}/initrd.img-${VERSION}" \
+ "${APPEND_LIVE}"
+
+ if [ "${LB_BOOTAPPEND_LIVE_FAILSAFE}" != "none" ]; then
+ Grub_live_menu_entry "Live system, kernel ${VERSION} (fail-safe mode)" \
+ "/${INITFS}/$(basename ${KERNEL})" \
+ "/${INITFS}/initrd.img-${VERSION}" \
+ "${LB_BOOTAPPEND_LIVE_FAILSAFE}"
+ fi
+ done
+fi
+
+# Replace placeholder with compiled live entries temporarily held in live.cfg.tmp
+sed -i -e "/@LINUX_LIVE@/r ${LIVE_ENTRIES_TMP}" -e "/@LINUX_LIVE@/d" "${_TARGET}"/*.cfg
+sed -i -e "/LINUX_LIVE/r ${LIVE_ENTRIES_TMP}" -e "/LINUX_LIVE/d" "${_TARGET}"/*.cfg #backwards compatibility
+rm -f "${LIVE_ENTRIES_TMP}"
+
+# Assembling debian-installer configuration
+if [ "${LB_DEBIAN_INSTALLER}" != "none" ]; then
+ ENABLE_INSTALL_MENU="true"
+
+ KERNEL_DI="/install/vmlinuz"
+ INITRD_DI="/install/initrd.gz"
+ APPEND_DI="vga=normal ${LB_BOOTAPPEND_INSTALL} --- quiet"
+
+ KERNEL_GI="/install/gtk/vmlinuz"
+ INITRD_GI="/install/gtk/initrd.gz"
+ APPEND_GI="vga=788 ${LB_BOOTAPPEND_INSTALL} --- quiet"
+
+ if [ "${LB_DEBIAN_INSTALLER_GUI}" = "true" ]; then
+ rm ${_TARGET}/install_text.cfg
+ rm ${_TARGET}/install_start_text.cfg
+ mv ${_TARGET}/install_gui.cfg ${_TARGET}/install.cfg
+ mv ${_TARGET}/install_start_gui.cfg ${_TARGET}/install_start.cfg
+ else
+ rm ${_TARGET}/install_gui.cfg
+ rm ${_TARGET}/install_start_gui.cfg
+ mv ${_TARGET}/install_text.cfg ${_TARGET}/install.cfg
+ mv ${_TARGET}/install_start_text.cfg ${_TARGET}/install_start.cfg
+ fi
+else
+ ENABLE_INSTALL_MENU="false"
+ rm "${_TARGET}"/install_text.cfg
+ rm "${_TARGET}"/install_gui.cfg
+ rm "${_TARGET}"/install_start_text.cfg
+ rm "${_TARGET}"/install_start_gui.cfg
+fi
+
+# Assembling memtest configuration
+MEMTEST_BIN="/${INITFS}/memtest"
+if [ -f "binary/${MEMTEST_BIN}" ]; then
+ ENABLE_MEMTEST="true"
+ MEMTEST="source /boot/grub/memtest.cfg" #for backwards compatibility
+else
+ ENABLE_MEMTEST="false"
+ rm -f "${_TARGET}"/memtest.cfg
+fi
+
+# These must be held in variables to avoid mistake by checkbashisms
+LINUX_INSTALL="source /boot/grub/install_start.cfg"
+LINUX_ADVANCED_INSTALL="source /boot/grub/install.cfg"
+
+# Those without '@' markers are for backwards compatibility
+sed -i \
+ -e "s|@KERNEL_GI@|${KERNEL_GI}|" \
+ -e "s|@INITRD_GI@|${INITRD_GI}|" \
+ -e "s|@APPEND_GI@|${APPEND_GI}|" \
+ -e "s|@KERNEL_DI@|${KERNEL_DI}|" \
+ -e "s|@INITRD_DI@|${INITRD_DI}|" \
+ -e "s|@APPEND_DI@|${APPEND_DI}|" \
+ -e "s|@KERNEL_LIVE@|${KERNEL_LIVE}|" \
+ -e "s|@INITRD_LIVE@|${INITRD_LIVE}|" \
+ -e "s|@APPEND_LIVE@|${APPEND_LIVE}|" \
+ -e "s|@LB_BOOTAPPEND_INSTALL@|${LB_BOOTAPPEND_INSTALL}|" \
+ -e "s|@LB_BOOTAPPEND_LIVE_FAILSAFE@|${LB_BOOTAPPEND_LIVE_FAILSAFE}|" \
+ -e "s|@LB_BOOTAPPEND_LIVE@|${LB_BOOTAPPEND_LIVE}|" \
+ -e "s|@APPEND_INSTALL@|${LB_BOOTAPPEND_INSTALL}|" \
+ -e "s|@ENABLE_INSTALL_MENU@|${ENABLE_INSTALL_MENU}|" \
+ -e "s|@ENABLE_MEMTEST@|${ENABLE_MEMTEST}|" \
+ -e "s|@MEMTEST_BIN@|${MEMTEST_BIN}|" \
+ -e "s|@MEMTEST_VERSION@|${LB_MEMTEST}|" \
+ -e "s|LINUX_INSTALL|${LINUX_INSTALL}|" \
+ -e "s|LINUX_ADVANCED_INSTALL|${LINUX_ADVANCED_INSTALL}|" \
+ -e "s|MEMTEST|${MEMTEST}|" \
+ -e "s|KERNEL_GI|${KERNEL_GI}|" \
+ -e "s|INITRD_GI|${INITRD_GI}|" \
+ -e "s|APPEND_GI|${APPEND_GI}|" \
+ -e "s|KERNEL_DI|${KERNEL_DI}|" \
+ -e "s|INITRD_DI|${INITRD_DI}|" \
+ -e "s|APPEND_DI|${APPEND_DI}|" \
+ -e "s|KERNEL_LIVE|${KERNEL_LIVE}|" \
+ -e "s|INITRD_LIVE|${INITRD_LIVE}|" \
+ -e "s|APPEND_LIVE|${APPEND_LIVE}|" \
+ -e "s|LB_BOOTAPPEND_INSTALL|${LB_BOOTAPPEND_INSTALL}|" \
+ -e "s|LB_BOOTAPPEND_LIVE_FAILSAFE|${LB_BOOTAPPEND_LIVE_FAILSAFE}|" \
+ -e "s|LB_BOOTAPPEND_LIVE|${LB_BOOTAPPEND_LIVE}|" \
+ "${_TARGET}"/*.cfg
+
+sed -i -e 's|//|/|g' "${_TARGET}"/*.cfg
+sed -i -e 's|\ $||g' "${_TARGET}"/*.cfg
+
+# Add loopback support
+echo "source /boot/grub/grub.cfg" > "${_TARGET}"/loopback.cfg
+
+# Creating stage file
+Create_stagefile