From: Michael Tremer Date: Fri, 28 May 2021 14:04:18 +0000 (+0000) Subject: master: Create a basic GRUB configuration file X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1320c15340255b997913a69f5fdb5c919e817ea;p=people%2Fms%2Fbricklayer.git master: Create a basic GRUB configuration file This does not fully work yet, but the menu is shown and a kernel is being booted. Signed-off-by: Michael Tremer --- diff --git a/src/bricklayer-master b/src/bricklayer-master index 293feab..1be5848 100644 --- a/src/bricklayer-master +++ b/src/bricklayer-master @@ -27,6 +27,7 @@ PACKAGES=( "@Base" "dracut" "kernel" + "/etc/os-release" ) BUILDSYSTEM_PACKAGES=( @@ -92,7 +93,8 @@ in_buildsystem() { make_live_system_image() { local filename="${1}" - shift + local os_release="${2}" + shift 2 local tempdir="$(mktemp -d)" @@ -104,6 +106,13 @@ make_live_system_image() { return 1 fi + # Copy /etc/os-release + if ! cat "${tempdir}/etc/os-release" > "${os_release}"; then + echo "Could not extract /etc/os-release" >&2 + rm -rf "${tempdir}" + return 1 + fi + # Create a squashfs image if ! mksquashfs "${tempdir}" "${filename}" \ -comp zstd -Xcompression-level "${ZSTD_COMPRESSION_LEVEL}"; then @@ -153,11 +162,50 @@ make_grub_bios_image() { return 0 } +make_grub_config() { + local path="${1}" + local name="${2}" + local class="${3}" + local arch="${4}" + + cat > "${path}" <' { + menuentry 'Unattended installation' --class ${class} --id install.unattended { + linux /boot/vmlinuz installer.unattended=1 + initrd /boot/initramfs.img + } +} +EOF +} + make_grub_efi_config() { local label="${1}" echo "search.fs_label \"${label}\" root" - echo "set prefix=(\$root)/EFI/BOOT" + echo "set prefix=(\$root)/boot/grub" } make_grub_efi_image() { @@ -417,8 +465,33 @@ mkimage() { ) fi + local os_release="$(mktemp)" + # Create the live system image - if ! make_live_system_image "${tempdir}/live-os.img" "kernel = ${kernel_release}"; then + if ! make_live_system_image "${tempdir}/live-os.img" "${os_release}" \ + "kernel = ${kernel_release}"; then + rm -rf "${tempdir}" "${os_release}" + return 1 + fi + + # Source /etc/os-release + . "${os_release}" + rm -f "${os_release}" + + # Check if all necessary variables are set + local variable + for variable in PRETTY_NAME ID; do + if [ -n "${!variable}" ]; then + echo "WARNING: ${variable} is not set in /etc/os-release" >&2 + fi + done + + mkdir -p "${tempdir}/boot/grub" + + # Generate GRUB configuration + if ! make_grub_config "${tempdir}/boot/grub/grub.cfg" \ + "${PRETTY_NAME}" "${ID}" "${arch}"; then + echo "Could not generate GRUB configuration" >&2 rm -rf "${tempdir}" return 1 fi @@ -429,7 +502,7 @@ mkimage() { fi # Cleanup - rm -rf "${tempdir}" + rm -rf "${tempdir}" "${os_release}" return "${r}" }