From 0e3a8f2dc5dc0eb12c08b4a816e88c9439c56e67 Mon Sep 17 00:00:00 2001 From: Softer Date: Sat, 2 May 2026 14:25:37 +0300 Subject: [PATCH] Keep standalone initramfs for grub-btrfs when UKI is enabled Fixes #4505 --- archinstall/lib/installer.py | 19 +++++++++++++------ archinstall/scripts/guided.py | 17 ++++++++++++++++- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 44a10eb2d4..6e3adb4e0b 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -1754,6 +1754,7 @@ def _config_uki( self, root: PartitionModification | LvmVolume, efi_partition: PartitionModification | None, + keep_initramfs: bool = False, ) -> None: if not efi_partition or not efi_partition.mountpoint: raise ValueError(f'Could not detect ESP at mountpoint {self.target}') @@ -1777,11 +1778,11 @@ def _config_uki( config = preset.read_text().splitlines(True) for index, line in enumerate(config): - # Avoid storing redundant image file if m := image_re.match(line): - image = self.target / m.group(2) - image.unlink(missing_ok=True) - config[index] = '#' + m.group(1) + if not keep_initramfs: + image = self.target / m.group(2) + image.unlink(missing_ok=True) + config[index] = '#' + m.group(1) elif m := uki_re.match(line): if diff_mountpoint: config[index] = m.group(2) + diff_mountpoint + m.group(3) @@ -1800,7 +1801,13 @@ def _config_uki( if not self.mkinitcpio(['-P']): error('Error generating initramfs (continuing anyway)') - def add_bootloader(self, bootloader: Bootloader, uki_enabled: bool = False, bootloader_removable: bool = False) -> None: + def add_bootloader( + self, + bootloader: Bootloader, + uki_enabled: bool = False, + bootloader_removable: bool = False, + keep_initramfs: bool = False, + ) -> None: """ Adds a bootloader to the installation instance. Archinstall supports one of five types: @@ -1849,7 +1856,7 @@ def add_bootloader(self, bootloader: Bootloader, uki_enabled: bool = False, boot bootloader_removable = False if uki_enabled: - self._config_uki(root, efi_partition) + self._config_uki(root, efi_partition, keep_initramfs) match bootloader: case Bootloader.Systemd: diff --git a/archinstall/scripts/guided.py b/archinstall/scripts/guided.py index 2122848083..1ac7dd3f39 100644 --- a/archinstall/scripts/guided.py +++ b/archinstall/scripts/guided.py @@ -115,7 +115,22 @@ def perform_installation( installation.setup_swap(algo=config.swap.algorithm) if config.bootloader_config and config.bootloader_config.bootloader != Bootloader.NO_BOOTLOADER: - installation.add_bootloader(config.bootloader_config.bootloader, config.bootloader_config.uki, config.bootloader_config.removable) + keep_initramfs = False + if ( + config.bootloader_config.uki + and config.bootloader_config.bootloader == Bootloader.Grub + and disk_config.has_default_btrfs_vols() + and disk_config.btrfs_options + and disk_config.btrfs_options.snapshot_config + ): + keep_initramfs = True + + installation.add_bootloader( + config.bootloader_config.bootloader, + config.bootloader_config.uki, + config.bootloader_config.removable, + keep_initramfs, + ) if config.network_config: install_network_config(