--- a/mklive.sh 2026-04-25 21:08:53.137743383 +0200 +++ b/mklive.sh 2026-04-25 21:25:02.321939679 +0200 @@ -211,7 +211,7 @@ copy_include_directories() { for includedir in "${INCLUDE_DIRS[@]}"; do info_msg "=> copying include directory '$includedir' ..." - find "$includedir" -mindepth 1 -maxdepth 1 -exec cp -rfpPv {} "$ROOTFS"/ \; + rsync -aHX "$includedir"/ "$ROOTFS"/ done } @@ -229,6 +229,41 @@ i686*|x86_64*) cp "$ROOTFS/boot/vmlinuz-$KERNELVERSION" "$BOOT_DIR"/vmlinuz ;; aarch64*) cp "$ROOTFS/boot/vmlinux-$KERNELVERSION" "$BOOT_DIR"/vmlinux ;; esac + + # Generate boot files for secondary kernels installed alongside KERNELVERSION. + SECONDARY_BOOT_KERNELS=() + for _kdir in "$ROOTFS/usr/lib/modules"/*/; do + [[ -d "${_kdir}/kernel" ]] || continue + # Strip trailing slash before extracting basename (glob */ appends /) + _kver="${_kdir%/}"; _kver="${_kver##*/}" + [[ "$_kver" == "$KERNELVERSION" ]] && continue + info_msg "Secondary kernel ${_kver}: generating live initramfs..." + chroot "$ROOTFS" env -i /usr/bin/dracut -N --"${INITRAMFS_COMPRESSION}" \ + --add-drivers "ahci" --force-add "vmklive autoinstaller" --omit systemd \ + "/boot/initrd-${_kver}" "${_kver}" || { + echo "WARNING: dracut failed for secondary kernel ${_kver} — skipping" + continue + } + mv "$ROOTFS/boot/initrd-${_kver}" "$BOOT_DIR/initrd-${_kver}" + case "$TARGET_ARCH" in + i686*|x86_64*) + if [[ -f "$ROOTFS/boot/vmlinuz-${_kver}" ]]; then + cp "$ROOTFS/boot/vmlinuz-${_kver}" "$BOOT_DIR/vmlinuz-${_kver}" + else + echo "WARNING: vmlinuz-${_kver} not found — skipping secondary kernel" + rm -f "$BOOT_DIR/initrd-${_kver}"; continue + fi ;; + aarch64*) + if [[ -f "$ROOTFS/boot/vmlinux-${_kver}" ]]; then + cp "$ROOTFS/boot/vmlinux-${_kver}" "$BOOT_DIR/vmlinux-${_kver}" + else + echo "WARNING: vmlinux-${_kver} not found — skipping secondary kernel" + rm -f "$BOOT_DIR/initrd-${_kver}"; continue + fi ;; + esac + SECONDARY_BOOT_KERNELS+=("${_kver}") + info_msg "Secondary kernel ${_kver}: boot files staged" + done } array_contains() { @@ -273,6 +308,17 @@ -e "s|@@BOOT_CMDLINE@@|${BOOT_CMDLINE}|" \ "$ISOLINUX_DIR"/isolinux.cfg + # Append entries for secondary kernels (standard boot only). + for _skver in "${SECONDARY_BOOT_KERNELS[@]+"${SECONDARY_BOOT_KERNELS[@]}"}"; do + cat >> "$ISOLINUX_DIR"/isolinux.cfg << SEOF + +LABEL linux-${_skver%%_*} +MENU LABEL ${BOOT_TITLE} ${_skver} ${TARGET_ARCH} +KERNEL /boot/vmlinuz-${_skver} +APPEND initrd=/boot/initrd-${_skver} root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=${KEYMAP} locale.LANG=${LOCALE} ${BOOT_CMDLINE} +SEOF + done + # include memtest86+ if [ -e "$VOIDTARGETDIR"/boot/memtest86+/memtest.bin ]; then cp "$VOIDTARGETDIR"/boot/memtest86+/memtest.bin "$BOOT_DIR" @@ -290,15 +336,16 @@ esac write_entry() { - local entrytitle="$1" id="$2" cmdline="$3" dtb="$4" hotkey="$5" + local entrytitle="$1" id="$2" cmdline="$3" dtb="$4" hotkey="$5" \ + kimg="${6:-${KERNEL_IMG}}" kidrd="${7:-initrd}" cat << EOF >> "$GRUB_DIR"/grub_void.cfg menuentry "${entrytitle}" --id "${id}" ${hotkey:+--hotkey $hotkey} { set gfxpayload="keep" - linux (\${voidlive})/boot/${KERNEL_IMG} \\ + linux (\${voidlive})/boot/${kimg} \\ root=live:CDLABEL=VOID_LIVE ro init=/sbin/init \\ rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 gpt add_efi_memmap \\ vconsole.unicode=1 vconsole.keymap=${KEYMAP} locale.LANG=${LOCALE} ${cmdline} - initrd (\${voidlive})/boot/initrd + initrd (\${voidlive})/boot/${kidrd} EOF if [ -n "${dtb}" ]; then printf ' devicetree (${voidlive})/boot/dtbs/%s\n' "${dtb}" >> "$GRUB_DIR"/grub_void.cfg @@ -311,23 +358,25 @@ ENTRY_TITLE="${BOOT_TITLE} ${KERNELVERSION} ${title_sfx}(${TARGET_ARCH})" + # Standard boot only — failsafe/RAM/speech variants removed. write_entry "${ENTRY_TITLE}" "linux${id_sfx}" \ "$BOOT_CMDLINE $cmdline" "$dtb" - write_entry "${ENTRY_TITLE} (RAM)" "linuxram${id_sfx}" \ - "rd.live.ram $BOOT_CMDLINE $cmdline" "$dtb" - write_entry "${ENTRY_TITLE} (graphics disabled)" "linuxnogfx${id_sfx}" \ - "nomodeset $BOOT_CMDLINE $cmdline" "$dtb" - write_entry "${ENTRY_TITLE} with speech" "linuxa11y${id_sfx}" \ - "live.accessibility live.autologin $BOOT_CMDLINE $cmdline" "$dtb" 's' - write_entry "${ENTRY_TITLE} with speech (RAM)" "linuxa11yram${id_sfx}" \ - "live.accessibility live.autologin rd.live.ram $BOOT_CMDLINE $cmdline" "$dtb" 'r' - write_entry "${ENTRY_TITLE} with speech (graphics disabled)" "linuxa11ynogfx${id_sfx}" \ - "live.accessibility live.autologin nomodeset $BOOT_CMDLINE $cmdline" "$dtb" 'g' } write_entries + # Secondary kernel entries (standard boot only). + for _skver in "${SECONDARY_BOOT_KERNELS[@]+"${SECONDARY_BOOT_KERNELS[@]}"}"; + do + case "$TARGET_ARCH" in + i686*|x86_64*) _skimg="vmlinuz-${_skver}" ;; + aarch64*) _skimg="vmlinux-${_skver}" ;; + esac + write_entry "${BOOT_TITLE} ${_skver} (${TARGET_ARCH})" \ + "linux-${_skver%%_*}" "$BOOT_CMDLINE" "" "" "${_skimg}" "initrd-${_skver}" + done + for platform in "${PLATFORMS[@]}"; do ( . "platforms/${platform}.sh" --- a/isolinux/isolinux.cfg.in 2026-04-25 21:08:53.137743383 +0200 +++ b/isolinux/isolinux.cfg.in 2026-04-25 21:13:05.897818309 +0200 @@ -25,31 +25,6 @@ KERNEL /boot/vmlinuz APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ -LABEL linuxram -MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ (RAM) -KERNEL /boot/vmlinuz -APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ rd.live.ram - -LABEL linuxnogfx -MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ (graphics disabled) -KERNEL /boot/vmlinuz -APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ nomodeset - -LABEL linuxa11y -MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ with ^speech -KERNEL /boot/vmlinuz -APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ live.accessibility live.autologin - -LABEL linuxa11yram -MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ with speech (^RAM) -KERNEL /boot/vmlinuz -APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ live.accessibility live.autologin rd.live.ram - -LABEL linuxa11ynogfx -MENU LABEL @@BOOT_TITLE@@ @@KERNVER@@ @@ARCH@@ with speech (^graphics disabled) -KERNEL /boot/vmlinuz -APPEND initrd=/boot/initrd root=live:CDLABEL=VOID_LIVE init=/sbin/init ro rd.luks=0 rd.md=0 rd.dm=0 loglevel=4 vconsole.unicode=1 vconsole.keymap=@@KEYMAP@@ locale.LANG=@@LOCALE@@ @@BOOT_CMDLINE@@ live.accessibility live.autologin nomodeset - LABEL c MENU LABEL Boot first HD found by BIOS COM32 chain.c32