44import shlex
55import shutil
66import subprocess
7+ import textwrap
78import time
89from collections .abc import Callable
910from pathlib import Path
@@ -1044,6 +1045,36 @@ def _get_kernel_params(
10441045
10451046 return kernel_parameters
10461047
1048+ def _create_bls_entries (
1049+ self ,
1050+ boot_partition : PartitionModification ,
1051+ root : PartitionModification | LvmVolume ,
1052+ entry_name : str
1053+ ) -> None :
1054+ # Loader entries are stored in $BOOT/loader:
1055+ # https://uapi-group.org/specifications/specs/boot_loader_specification/#mount-points
1056+ entries_dir = self .target / boot_partition .relative_mountpoint / 'loader/entries'
1057+ # Ensure that the $BOOT/loader/entries/ directory exists before trying to create files in it
1058+ entries_dir .mkdir (parents = True , exist_ok = True )
1059+
1060+ entry_template = textwrap .dedent (
1061+ f"""\
1062+ # Created by: archinstall
1063+ # Created on: { self .init_time }
1064+ title Arch Linux ({{kernel}}{{variant}})
1065+ linux /vmlinuz-{{kernel}}
1066+ initrd /initramfs-{{kernel}}{{variant}}.img
1067+ options { " " .join (self ._get_kernel_params (root ))}
1068+ """
1069+ )
1070+
1071+ for kernel in self .kernels :
1072+ for variant in ("" , "-fallback" ):
1073+ # Setup the loader entry
1074+ name = entry_name .format (kernel = kernel , variant = variant )
1075+ entry_conf = entries_dir / name
1076+ entry_conf .write_text (entry_template .format (kernel = kernel , variant = variant ))
1077+
10471078 def _add_systemd_bootloader (
10481079 self ,
10491080 boot_partition : PartitionModification ,
@@ -1091,6 +1122,7 @@ def _add_systemd_bootloader(
10911122 else :
10921123 entry_name = self .init_time + '_{kernel}{variant}.conf'
10931124 default_entry = entry_name .format (kernel = default_kernel , variant = '' )
1125+ self ._create_bls_entries (boot_partition , root , entry_name )
10941126
10951127 default = f'default { default_entry } '
10961128
@@ -1112,37 +1144,6 @@ def _add_systemd_bootloader(
11121144
11131145 loader_conf .write_text ('\n ' .join (loader_data ) + '\n ' )
11141146
1115- if uki_enabled :
1116- return
1117-
1118- # Loader entries are stored in $BOOT/loader:
1119- # https://uapi-group.org/specifications/specs/boot_loader_specification/#mount-points
1120- entries_dir = self .target / boot_partition .relative_mountpoint / 'loader/entries'
1121- # Ensure that the $BOOT/loader/entries/ directory exists before trying to create files in it
1122- entries_dir .mkdir (parents = True , exist_ok = True )
1123-
1124- comments = (
1125- '# Created by: archinstall' ,
1126- f'# Created on: { self .init_time } '
1127- )
1128-
1129- options = 'options ' + ' ' .join (self ._get_kernel_params (root ))
1130-
1131- for kernel in self .kernels :
1132- for variant in ("" , "-fallback" ):
1133- # Setup the loader entry
1134- entry = [
1135- * comments ,
1136- f'title Arch Linux ({ kernel } { variant } )' ,
1137- f'linux /vmlinuz-{ kernel } ' ,
1138- f'initrd /initramfs-{ kernel } { variant } .img' ,
1139- options ,
1140- ]
1141-
1142- name = entry_name .format (kernel = kernel , variant = variant )
1143- entry_conf = entries_dir / name
1144- entry_conf .write_text ('\n ' .join (entry ) + '\n ' )
1145-
11461147 self .helper_flags ['bootloader' ] = 'systemd'
11471148
11481149 def _add_grub_bootloader (
0 commit comments