Merge pull request #2183 from Boria138/initcpiocfg
Updated the initcpiocfg module
This commit is contained in:
commit
f804965a8d
@ -136,7 +136,11 @@ def get_kernel_params(uuid):
|
|||||||
|
|
||||||
cryptdevice_params = []
|
cryptdevice_params = []
|
||||||
|
|
||||||
have_dracut = libcalamares.utils.target_env_call(["sh", "-c", "which dracut"]) == 0
|
has_dracut = libcalamares.utils.target_env_call(["sh", "-c", "which dracut"]) == 0
|
||||||
|
uses_systemd_hook = libcalamares.utils.target_env_call(["sh", "-c",
|
||||||
|
"grep -q \"^HOOKS.*systemd\" /etc/mkinitcpio.conf"]) == 0
|
||||||
|
use_systemd_naming = has_dracut or uses_systemd_hook
|
||||||
|
|
||||||
|
|
||||||
# Take over swap settings:
|
# Take over swap settings:
|
||||||
# - unencrypted swap partition sets swap_uuid
|
# - unencrypted swap partition sets swap_uuid
|
||||||
@ -154,7 +158,7 @@ def get_kernel_params(uuid):
|
|||||||
swap_outer_uuid = partition["luksUuid"]
|
swap_outer_uuid = partition["luksUuid"]
|
||||||
|
|
||||||
if partition["mountPoint"] == "/" and has_luks:
|
if partition["mountPoint"] == "/" and has_luks:
|
||||||
if have_dracut:
|
if use_systemd_naming or uses_sd_encrypt:
|
||||||
cryptdevice_params = [f"rd.luks.uuid={partition['luksUuid']}"]
|
cryptdevice_params = [f"rd.luks.uuid={partition['luksUuid']}"]
|
||||||
else:
|
else:
|
||||||
cryptdevice_params = [f"cryptdevice=UUID={partition['luksUuid']}:{partition['luksMapperName']}"]
|
cryptdevice_params = [f"cryptdevice=UUID={partition['luksUuid']}:{partition['luksMapperName']}"]
|
||||||
@ -187,7 +191,7 @@ def get_kernel_params(uuid):
|
|||||||
if swap_uuid:
|
if swap_uuid:
|
||||||
kernel_params.append("resume=UUID={!s}".format(swap_uuid))
|
kernel_params.append("resume=UUID={!s}".format(swap_uuid))
|
||||||
|
|
||||||
if have_dracut and swap_outer_uuid:
|
if use_systemd_naming and swap_outer_uuid:
|
||||||
kernel_params.append(f"rd.luks.uuid={swap_outer_uuid}")
|
kernel_params.append(f"rd.luks.uuid={swap_outer_uuid}")
|
||||||
|
|
||||||
if swap_outer_mappername:
|
if swap_outer_mappername:
|
||||||
|
@ -135,10 +135,12 @@ def modify_grub_default(partitions, root_mount_point, distributor):
|
|||||||
plymouth_bin = libcalamares.utils.target_env_call(
|
plymouth_bin = libcalamares.utils.target_env_call(
|
||||||
["sh", "-c", "which plymouth"]
|
["sh", "-c", "which plymouth"]
|
||||||
)
|
)
|
||||||
|
uses_systemd_hook = libcalamares.utils.target_env_call(
|
||||||
|
["sh", "-c", "grep -q \"^HOOKS.*systemd\" /etc/mkinitcpio.conf"]
|
||||||
|
) == 0
|
||||||
# Shell exit value 0 means success
|
# Shell exit value 0 means success
|
||||||
have_plymouth = plymouth_bin == 0
|
have_plymouth = plymouth_bin == 0
|
||||||
have_dracut = dracut_bin == 0
|
use_systemd_naming = dracut_bin == 0 or uses_systemd_hook
|
||||||
|
|
||||||
use_splash = ""
|
use_splash = ""
|
||||||
swap_uuid = ""
|
swap_uuid = ""
|
||||||
@ -159,7 +161,7 @@ def modify_grub_default(partitions, root_mount_point, distributor):
|
|||||||
|
|
||||||
cryptdevice_params = []
|
cryptdevice_params = []
|
||||||
|
|
||||||
if have_dracut:
|
if use_systemd_naming:
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
if partition["fs"] == "linuxswap" and not partition.get("claimed", None):
|
if partition["fs"] == "linuxswap" and not partition.get("claimed", None):
|
||||||
# Skip foreign swap
|
# Skip foreign swap
|
||||||
@ -174,6 +176,8 @@ def modify_grub_default(partitions, root_mount_point, distributor):
|
|||||||
|
|
||||||
if partition["mountPoint"] == "/" and has_luks:
|
if partition["mountPoint"] == "/" and has_luks:
|
||||||
cryptdevice_params = [f"rd.luks.uuid={partition['luksUuid']}"]
|
cryptdevice_params = [f"rd.luks.uuid={partition['luksUuid']}"]
|
||||||
|
if not unencrypted_separate_boot and uses_systemd_hook:
|
||||||
|
cryptdevice_params.append("rd.luks.key=/crypto_keyfile.bin")
|
||||||
else:
|
else:
|
||||||
for partition in partitions:
|
for partition in partitions:
|
||||||
if partition["fs"] == "linuxswap" and not partition.get("claimed", None):
|
if partition["fs"] == "linuxswap" and not partition.get("claimed", None):
|
||||||
@ -210,7 +214,7 @@ def modify_grub_default(partitions, root_mount_point, distributor):
|
|||||||
if swap_uuid:
|
if swap_uuid:
|
||||||
kernel_params.append(f"resume=UUID={swap_uuid}")
|
kernel_params.append(f"resume=UUID={swap_uuid}")
|
||||||
|
|
||||||
if have_dracut and swap_outer_uuid:
|
if use_systemd_naming and swap_outer_uuid:
|
||||||
kernel_params.append(f"rd.luks.uuid={swap_outer_uuid}")
|
kernel_params.append(f"rd.luks.uuid={swap_outer_uuid}")
|
||||||
if swap_outer_mappername:
|
if swap_outer_mappername:
|
||||||
kernel_params.append(f"resume=/dev/mapper/{swap_outer_mappername}")
|
kernel_params.append(f"resume=/dev/mapper/{swap_outer_mappername}")
|
||||||
|
@ -37,6 +37,16 @@ def detect_plymouth():
|
|||||||
return target_env_call(["sh", "-c", "which plymouth"]) == 0
|
return target_env_call(["sh", "-c", "which plymouth"]) == 0
|
||||||
|
|
||||||
|
|
||||||
|
def detect_setfont():
|
||||||
|
"""
|
||||||
|
Checks existence (runnability) of setfont in the target system.
|
||||||
|
|
||||||
|
@return True if setfont exists in the target, False otherwise
|
||||||
|
"""
|
||||||
|
# Used to only check existence of path /usr/bin/setfont in target
|
||||||
|
return target_env_call(["sh", "-c", "which setfont"]) == 0
|
||||||
|
|
||||||
|
|
||||||
class cpuinfo(object):
|
class cpuinfo(object):
|
||||||
"""
|
"""
|
||||||
Object describing the current CPU's characteristics. It may be
|
Object describing the current CPU's characteristics. It may be
|
||||||
@ -108,7 +118,7 @@ def get_host_initcpio():
|
|||||||
return mklins
|
return mklins
|
||||||
|
|
||||||
|
|
||||||
def write_mkinitcpio_lines(hooks, modules, files, root_mount_point):
|
def write_mkinitcpio_lines(hooks, modules, files, binaries, root_mount_point):
|
||||||
"""
|
"""
|
||||||
Set up mkinitcpio.conf.
|
Set up mkinitcpio.conf.
|
||||||
|
|
||||||
@ -122,10 +132,12 @@ def write_mkinitcpio_lines(hooks, modules, files, root_mount_point):
|
|||||||
target_path = os.path.join(root_mount_point, "etc/mkinitcpio.conf")
|
target_path = os.path.join(root_mount_point, "etc/mkinitcpio.conf")
|
||||||
with open(target_path, "w") as mkinitcpio_file:
|
with open(target_path, "w") as mkinitcpio_file:
|
||||||
for line in mklins:
|
for line in mklins:
|
||||||
# Replace HOOKS, MODULES and FILES lines with what we
|
# Replace HOOKS, MODULES, BINARIES and FILES lines with what we
|
||||||
# have found via find_initcpio_features()
|
# have found via find_initcpio_features()
|
||||||
if line.startswith("HOOKS"):
|
if line.startswith("HOOKS"):
|
||||||
line = 'HOOKS="{!s}"'.format(' '.join(hooks))
|
line = 'HOOKS="{!s}"'.format(' '.join(hooks))
|
||||||
|
elif line.startswith("BINARIES"):
|
||||||
|
line = 'BINARIES="{!s}"'.format(' '.join(binaries))
|
||||||
elif line.startswith("MODULES"):
|
elif line.startswith("MODULES"):
|
||||||
line = 'MODULES="{!s}"'.format(' '.join(modules))
|
line = 'MODULES="{!s}"'.format(' '.join(modules))
|
||||||
elif line.startswith("FILES"):
|
elif line.startswith("FILES"):
|
||||||
@ -145,18 +157,30 @@ def find_initcpio_features(partitions, root_mount_point):
|
|||||||
:return 3-tuple of lists
|
:return 3-tuple of lists
|
||||||
"""
|
"""
|
||||||
hooks = [
|
hooks = [
|
||||||
"base",
|
|
||||||
"udev",
|
|
||||||
"autodetect",
|
"autodetect",
|
||||||
"kms",
|
"kms",
|
||||||
"modconf",
|
"modconf",
|
||||||
"block",
|
"block",
|
||||||
"keyboard",
|
"keyboard",
|
||||||
"keymap",
|
|
||||||
"consolefont",
|
|
||||||
]
|
]
|
||||||
|
uses_systemd = target_env_call(["sh", "-c", "which systemd-cat"]) == 0
|
||||||
|
|
||||||
|
if uses_systemd:
|
||||||
|
hooks.insert(0, "systemd")
|
||||||
|
hooks.append("sd-vconsole")
|
||||||
|
else:
|
||||||
|
hooks.insert(0, "udev")
|
||||||
|
hooks.insert(0, "base")
|
||||||
|
hooks.append("keymap")
|
||||||
|
hooks.append("consolefont")
|
||||||
|
|
||||||
modules = []
|
modules = []
|
||||||
files = []
|
files = []
|
||||||
|
binaries = []
|
||||||
|
|
||||||
|
if detect_setfont():
|
||||||
|
# Fixes "setfont: KDFONTOP: Function not implemented" error
|
||||||
|
binaries.append("setfont")
|
||||||
|
|
||||||
swap_uuid = ""
|
swap_uuid = ""
|
||||||
uses_btrfs = False
|
uses_btrfs = False
|
||||||
@ -193,22 +217,19 @@ def find_initcpio_features(partitions, root_mount_point):
|
|||||||
if partition["mountPoint"] == "/" and "luksMapperName" in partition:
|
if partition["mountPoint"] == "/" and "luksMapperName" in partition:
|
||||||
encrypt_hook = True
|
encrypt_hook = True
|
||||||
|
|
||||||
if (partition["mountPoint"] == "/boot" and "luksMapperName" not in partition):
|
if partition["mountPoint"] == "/boot" and "luksMapperName" not in partition:
|
||||||
unencrypted_separate_boot = True
|
unencrypted_separate_boot = True
|
||||||
|
|
||||||
if partition["mountPoint"] == "/usr":
|
if partition["mountPoint"] == "/usr":
|
||||||
hooks.append("usr")
|
hooks.append("usr")
|
||||||
|
|
||||||
if encrypt_hook:
|
if encrypt_hook:
|
||||||
if detect_plymouth() and unencrypted_separate_boot:
|
if uses_systemd:
|
||||||
hooks.append("plymouth-encrypt")
|
hooks.append("sd-encrypt")
|
||||||
else:
|
else:
|
||||||
hooks.append("encrypt")
|
hooks.append("encrypt")
|
||||||
crypto_file = "crypto_keyfile.bin"
|
crypto_file = "crypto_keyfile.bin"
|
||||||
if not unencrypted_separate_boot and \
|
if not unencrypted_separate_boot and os.path.isfile(os.path.join(root_mount_point, crypto_file)):
|
||||||
os.path.isfile(
|
|
||||||
os.path.join(root_mount_point, crypto_file)
|
|
||||||
):
|
|
||||||
files.append(f"/{crypto_file}")
|
files.append(f"/{crypto_file}")
|
||||||
|
|
||||||
if uses_lvm2:
|
if uses_lvm2:
|
||||||
@ -229,7 +250,7 @@ def find_initcpio_features(partitions, root_mount_point):
|
|||||||
else:
|
else:
|
||||||
hooks.append("fsck")
|
hooks.append("fsck")
|
||||||
|
|
||||||
return (hooks, modules, files)
|
return (hooks, modules, files, binaries)
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
@ -250,7 +271,7 @@ def run():
|
|||||||
return (_("Configuration Error"),
|
return (_("Configuration Error"),
|
||||||
_("No root mount point for <pre>initcpiocfg</pre>."))
|
_("No root mount point for <pre>initcpiocfg</pre>."))
|
||||||
|
|
||||||
hooks, modules, files = find_initcpio_features(partitions, root_mount_point)
|
hooks, modules, files, binaries = find_initcpio_features(partitions, root_mount_point)
|
||||||
write_mkinitcpio_lines(hooks, modules, files, root_mount_point)
|
write_mkinitcpio_lines(hooks, modules, files, binaries, root_mount_point)
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
Loading…
Reference in New Issue
Block a user