Refactor creation of BLS entries (#3283)
This commit is contained in:
parent
51497bd079
commit
dcce29b91c
|
|
@ -4,6 +4,7 @@ import re
|
||||||
import shlex
|
import shlex
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import textwrap
|
||||||
import time
|
import time
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
@ -1044,6 +1045,36 @@ class Installer:
|
||||||
|
|
||||||
return kernel_parameters
|
return kernel_parameters
|
||||||
|
|
||||||
|
def _create_bls_entries(
|
||||||
|
self,
|
||||||
|
boot_partition: PartitionModification,
|
||||||
|
root: PartitionModification | LvmVolume,
|
||||||
|
entry_name: str
|
||||||
|
) -> None:
|
||||||
|
# Loader entries are stored in $BOOT/loader:
|
||||||
|
# https://uapi-group.org/specifications/specs/boot_loader_specification/#mount-points
|
||||||
|
entries_dir = self.target / boot_partition.relative_mountpoint / 'loader/entries'
|
||||||
|
# Ensure that the $BOOT/loader/entries/ directory exists before trying to create files in it
|
||||||
|
entries_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
entry_template = textwrap.dedent(
|
||||||
|
f"""\
|
||||||
|
# Created by: archinstall
|
||||||
|
# Created on: {self.init_time}
|
||||||
|
title Arch Linux ({{kernel}}{{variant}})
|
||||||
|
linux /vmlinuz-{{kernel}}
|
||||||
|
initrd /initramfs-{{kernel}}{{variant}}.img
|
||||||
|
options {" ".join(self._get_kernel_params(root))}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
for kernel in self.kernels:
|
||||||
|
for variant in ("", "-fallback"):
|
||||||
|
# Setup the loader entry
|
||||||
|
name = entry_name.format(kernel=kernel, variant=variant)
|
||||||
|
entry_conf = entries_dir / name
|
||||||
|
entry_conf.write_text(entry_template.format(kernel=kernel, variant=variant))
|
||||||
|
|
||||||
def _add_systemd_bootloader(
|
def _add_systemd_bootloader(
|
||||||
self,
|
self,
|
||||||
boot_partition: PartitionModification,
|
boot_partition: PartitionModification,
|
||||||
|
|
@ -1091,6 +1122,7 @@ class Installer:
|
||||||
else:
|
else:
|
||||||
entry_name = self.init_time + '_{kernel}{variant}.conf'
|
entry_name = self.init_time + '_{kernel}{variant}.conf'
|
||||||
default_entry = entry_name.format(kernel=default_kernel, variant='')
|
default_entry = entry_name.format(kernel=default_kernel, variant='')
|
||||||
|
self._create_bls_entries(boot_partition, root, entry_name)
|
||||||
|
|
||||||
default = f'default {default_entry}'
|
default = f'default {default_entry}'
|
||||||
|
|
||||||
|
|
@ -1112,37 +1144,6 @@ class Installer:
|
||||||
|
|
||||||
loader_conf.write_text('\n'.join(loader_data) + '\n')
|
loader_conf.write_text('\n'.join(loader_data) + '\n')
|
||||||
|
|
||||||
if uki_enabled:
|
|
||||||
return
|
|
||||||
|
|
||||||
# Loader entries are stored in $BOOT/loader:
|
|
||||||
# https://uapi-group.org/specifications/specs/boot_loader_specification/#mount-points
|
|
||||||
entries_dir = self.target / boot_partition.relative_mountpoint / 'loader/entries'
|
|
||||||
# Ensure that the $BOOT/loader/entries/ directory exists before trying to create files in it
|
|
||||||
entries_dir.mkdir(parents=True, exist_ok=True)
|
|
||||||
|
|
||||||
comments = (
|
|
||||||
'# Created by: archinstall',
|
|
||||||
f'# Created on: {self.init_time}'
|
|
||||||
)
|
|
||||||
|
|
||||||
options = 'options ' + ' '.join(self._get_kernel_params(root))
|
|
||||||
|
|
||||||
for kernel in self.kernels:
|
|
||||||
for variant in ("", "-fallback"):
|
|
||||||
# Setup the loader entry
|
|
||||||
entry = [
|
|
||||||
*comments,
|
|
||||||
f'title Arch Linux ({kernel}{variant})',
|
|
||||||
f'linux /vmlinuz-{kernel}',
|
|
||||||
f'initrd /initramfs-{kernel}{variant}.img',
|
|
||||||
options,
|
|
||||||
]
|
|
||||||
|
|
||||||
name = entry_name.format(kernel=kernel, variant=variant)
|
|
||||||
entry_conf = entries_dir / name
|
|
||||||
entry_conf.write_text('\n'.join(entry) + '\n')
|
|
||||||
|
|
||||||
self.helper_flags['bootloader'] = 'systemd'
|
self.helper_flags['bootloader'] = 'systemd'
|
||||||
|
|
||||||
def _add_grub_bootloader(
|
def _add_grub_bootloader(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue