"@Base"
"dracut"
"kernel"
+ "/etc/os-release"
)
BUILDSYSTEM_PACKAGES=(
make_live_system_image() {
local filename="${1}"
- shift
+ local os_release="${2}"
+ shift 2
local tempdir="$(mktemp -d)"
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
return 0
}
+make_grub_config() {
+ local path="${1}"
+ local name="${2}"
+ local class="${3}"
+ local arch="${4}"
+
+ cat > "${path}" <<EOF
+# Bricklayer GRUB configuration
+
+# Select the first entry
+set default=0
+
+# Try loading video output
+insmod efi_gop
+insmod efi_uga
+insmod video_bochs
+insmod video_cirrus
+insmod all_video
+
+# Keep resolution selected by the BIOS
+set gfxpayload=keep
+
+# Wait for 60 seconds for the user to make a decision
+set timeout=60
+
+menuentry 'Install ${name} (${arch})' --class ${class} --id install {
+ linux /boot/vmlinuz
+ initrd /boot/initramfs.img
+}
+
+submenu 'Other Installation Options -->' {
+ 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() {
)
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
fi
# Cleanup
- rm -rf "${tempdir}"
+ rm -rf "${tempdir}" "${os_release}"
return "${r}"
}