#!/bin/bash # Copy the live kernel into the freshly-unpacked target /boot. # # archiso keeps vmlinuz/initramfs in the ISO boot dir (arch/boot/x86_64/), NOT # in the squashfs, so the rootfs that unpackfs lays down has an empty /boot. # The kernel must be present before Calamares' `initcpio` module runs mkinitcpio # (the stock linux.preset points ALL_kver at /boot/vmlinuz-linux) and before the # `bootloader` module runs grub — otherwise the installed system is unbootable. # # Runs in the LIVE environment (Calamares shellprocess, dontChroot) so it can # read /run/archiso/bootmnt; the target root mount point is passed as $1. set -uo pipefail ROOT="${1:?target root required}" SRC="/run/archiso/bootmnt/arch/boot/x86_64" install -d -m 0755 "$ROOT/boot" cp -f "$SRC/vmlinuz-linux" "$ROOT/boot/vmlinuz-linux" # Microcode, if the live medium carries it (grub-mkconfig picks it up). for u in amd-ucode.img intel-ucode.img; do [ -f "$SRC/$u" ] && cp -f "$SRC/$u" "$ROOT/boot/$u" done # Replace the archiso initramfs setup that unpackfs copied from the live medium. # On archiso the linux preset is PRESETS=('archiso') using archiso.conf (the live # HOOKS). Calamares' `initcpio` runs `mkinitcpio -P`, which would build that # archiso preset and either bake the live-boot hooks into the install or fail # once archiso.conf is gone. Drop the drop-in and write a stock default+fallback # preset so `initcpio` produces a normal, bootable initramfs from the config that # the `initcpiocfg` module generates at /etc/mkinitcpio.conf. rm -f "$ROOT/etc/mkinitcpio.conf.d/archiso.conf" install -d -m 0755 "$ROOT/etc/mkinitcpio.d" cat >"$ROOT/etc/mkinitcpio.d/linux.preset" <<'PRESET' # mkinitcpio preset file for the 'linux' package ALL_config="/etc/mkinitcpio.conf" ALL_kver="/boot/vmlinuz-linux" PRESETS=('default' 'fallback') default_image="/boot/initramfs-linux.img" fallback_image="/boot/initramfs-linux-fallback.img" fallback_options="-S autodetect" PRESET echo "Copied live kernel into $ROOT/boot; reset mkinitcpio to a stock preset"