Skip to content

Commit

Permalink
Fix vconsole layout doesn't work for ostree
Browse files Browse the repository at this point in the history
Seems that ostree currently doesn't work with localed as standard system
so to overcome this issue and allow users to open LUKS devices during
boot let's use vconsole.keymap kernel argument. It seems that this
kernel boot argument was already used in the past but the solution
changed, however, we cane use this as a hotfix specifically for ostree.

See more info in https://bugzilla.redhat.com/show_bug.cgi?id=1035316

Resolves: rhbz#1890085
  • Loading branch information
jkonecny12 committed Oct 21, 2024
1 parent 7b21249 commit 78ae5fd
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
BootloaderInstallationError
from pyanaconda.modules.common.task import Task
from pyanaconda.modules.common.constants.objects import DEVICE_TREE, BOOTLOADER
from pyanaconda.modules.common.constants.services import STORAGE
from pyanaconda.modules.common.constants.services import STORAGE, LOCALIZATION
from pyanaconda.modules.common.structures.storage import DeviceData
from pyanaconda.modules.payloads.payload.rpm_ostree.util import have_bootupd

Expand Down Expand Up @@ -563,6 +563,7 @@ def _set_kargs(self):

bootloader = STORAGE.get_proxy(BOOTLOADER)
device_tree = STORAGE.get_proxy(DEVICE_TREE)
localization = LOCALIZATION.get_proxy()

root_id = device_tree.GetRootDevice()
root_data = DeviceData.from_structure(
Expand All @@ -572,6 +573,7 @@ def _set_kargs(self):
set_kargs_args = ["admin", "instutil", "set-kargs"]
set_kargs_args.extend(bootloader.GetArguments())
set_kargs_args.append("root=" + device_tree.GetFstabSpec(root_id))
set_kargs_args.append("vconsole.keymap=" + localization.VirtualConsoleKeymap)

if root_data.type == "btrfs subvolume":
set_kargs_args.append("rootflags=subvol=" + root_data.name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -677,16 +677,20 @@ class ConfigureBootloaderTaskTestCase(unittest.TestCase):
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.execWithRedirect")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.os.rename")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.os.symlink")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.LOCALIZATION")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.STORAGE")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.DeviceData")
def test_btrfs_run(self, devdata_mock, storage_mock, symlink_mock, rename_mock, exec_mock):
def test_btrfs_run(self, devdata_mock, storage_mock, localization_mock,
symlink_mock, rename_mock, exec_mock):
"""Test OSTree bootloader config task, no BTRFS"""
exec_mock.return_value = 0

proxy_mock = storage_mock.get_proxy()
proxy_mock.GetArguments.return_value = ["BOOTLOADER-ARGS"]
proxy_mock.GetFstabSpec.return_value = "FSTAB-SPEC"
proxy_mock.GetRootDevice.return_value = "device-id"
storage_proxy_mock = storage_mock.get_proxy()
storage_proxy_mock.GetArguments.return_value = ["BOOTLOADER-ARGS"]
storage_proxy_mock.GetFstabSpec.return_value = "FSTAB-SPEC"
storage_proxy_mock.GetRootDevice.return_value = "device-id"
localization_proxy_mock = localization_mock.get_proxy()
localization_proxy_mock.VirtualConsoleKeymap = "cs"
devdata_mock.from_structure.return_value.type = "btrfs subvolume"
devdata_mock.from_structure.return_value.name = "device-name"

Expand All @@ -707,24 +711,35 @@ def test_btrfs_run(self, devdata_mock, storage_mock, symlink_mock, rename_mock,
)
exec_mock.assert_called_once_with(
"ostree",
["admin", "instutil", "set-kargs", "BOOTLOADER-ARGS", "root=FSTAB-SPEC",
"rootflags=subvol=device-name", "rw"],
["admin",
"instutil",
"set-kargs",
"BOOTLOADER-ARGS",
"root=FSTAB-SPEC",
"vconsole.keymap=cs",
"rootflags=subvol=device-name",
"rw"
],
root=sysroot
)

@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.execWithRedirect")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.os.rename")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.os.symlink")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.LOCALIZATION")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.STORAGE")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.DeviceData")
def test_nonbtrfs_run(self, devdata_mock, storage_mock, symlink_mock, rename_mock, exec_mock):
def test_nonbtrfs_run(self, devdata_mock, storage_mock, localization_mock,
symlink_mock, rename_mock, exec_mock):
"""Test OSTree bootloader config task, no BTRFS"""
exec_mock.return_value = 0

proxy_mock = storage_mock.get_proxy()
proxy_mock.GetArguments.return_value = ["BOOTLOADER-ARGS"]
proxy_mock.GetFstabSpec.return_value = "FSTAB-SPEC"
proxy_mock.GetRootDevice.return_value = "device-id"
storage_proxy_mock = storage_mock.get_proxy()
storage_proxy_mock.GetArguments.return_value = ["BOOTLOADER-ARGS"]
storage_proxy_mock.GetFstabSpec.return_value = "FSTAB-SPEC"
storage_proxy_mock.GetRootDevice.return_value = "device-id"
localization_proxy_mock = localization_mock.get_proxy()
localization_proxy_mock.VirtualConsoleKeymap = "cs"
devdata_mock.from_structure.return_value.type = "something-non-btrfs-subvolume-ish"
devdata_mock.from_structure.return_value.name = "device-name"

Expand All @@ -745,28 +760,38 @@ def test_nonbtrfs_run(self, devdata_mock, storage_mock, symlink_mock, rename_moc
)
exec_mock.assert_called_once_with(
"ostree",
["admin", "instutil", "set-kargs", "BOOTLOADER-ARGS", "root=FSTAB-SPEC", "rw"],
["admin",
"instutil",
"set-kargs",
"BOOTLOADER-ARGS",
"root=FSTAB-SPEC",
"vconsole.keymap=cs",
"rw"
],
root=sysroot
)

@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.have_bootupd")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.execWithRedirect")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.os.rename")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.os.symlink")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.LOCALIZATION")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.STORAGE")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.DeviceData")
def test_bootupd_run(self, devdata_mock, storage_mock, symlink_mock, rename_mock, exec_mock,
have_bootupd_mock):
def test_bootupd_run(self, devdata_mock, storage_mock, localization_mock, symlink_mock,
rename_mock, exec_mock, have_bootupd_mock):
"""Test OSTree bootloader config task, bootupd"""
exec_mock.return_value = 0
have_bootupd_mock.return_value = True

proxy_mock = storage_mock.get_proxy()
proxy_mock.GetArguments.return_value = ["BOOTLOADER-ARGS"]
proxy_mock.GetFstabSpec.return_value = "FSTAB-SPEC"
proxy_mock.GetRootDevice.return_value = "device-id"
proxy_mock.Drive = "btldr-drv"
proxy_mock.KeepBootOrder = False
storage_proxy_mock = storage_mock.get_proxy()
storage_proxy_mock.GetArguments.return_value = ["BOOTLOADER-ARGS"]
storage_proxy_mock.GetFstabSpec.return_value = "FSTAB-SPEC"
storage_proxy_mock.GetRootDevice.return_value = "device-id"
storage_proxy_mock.Drive = "btldr-drv"
storage_proxy_mock.KeepBootOrder = False
localization_proxy_mock = localization_mock.get_proxy()
localization_proxy_mock.VirtualConsoleKeymap = "cs"
devdata_mock.from_structure.return_value.type = "something-non-btrfs-subvolume-ish"
devdata_mock.from_structure.return_value.path = "/dev/btldr-drv"
devdata_mock.from_structure.return_value.name = "device-name"
Expand All @@ -787,7 +812,14 @@ def test_bootupd_run(self, devdata_mock, storage_mock, symlink_mock, rename_mock
),
call(
"ostree",
["admin", "instutil", "set-kargs", "BOOTLOADER-ARGS", "root=FSTAB-SPEC", "rw"],
["admin",
"instutil",
"set-kargs",
"BOOTLOADER-ARGS",
"root=FSTAB-SPEC",
"vconsole.keymap=cs",
"rw"
],
root=sysroot
)
])
Expand All @@ -796,20 +828,24 @@ def test_bootupd_run(self, devdata_mock, storage_mock, symlink_mock, rename_mock
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.execWithRedirect")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.os.rename")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.os.symlink")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.LOCALIZATION")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.STORAGE")
@patch("pyanaconda.modules.payloads.payload.rpm_ostree.installation.DeviceData")
def test_bootupd_run_with_leavebootorder(self, devdata_mock, storage_mock, symlink_mock,
rename_mock, exec_mock, have_bootupd_mock):
def test_bootupd_run_with_leavebootorder(self, devdata_mock, storage_mock, localization_mock,
symlink_mock, rename_mock, exec_mock,
have_bootupd_mock):
"""Test OSTree bootloader config task, bootupd"""
exec_mock.return_value = 0
have_bootupd_mock.return_value = True

proxy_mock = storage_mock.get_proxy()
proxy_mock.GetArguments.return_value = ["BOOTLOADER-ARGS"]
proxy_mock.GetFstabSpec.return_value = "FSTAB-SPEC"
proxy_mock.GetRootDevice.return_value = "device-name"
proxy_mock.Drive = "btldr-drv"
proxy_mock.KeepBootOrder = True
storage_proxy_mock = storage_mock.get_proxy()
storage_proxy_mock.GetArguments.return_value = ["BOOTLOADER-ARGS"]
storage_proxy_mock.GetFstabSpec.return_value = "FSTAB-SPEC"
storage_proxy_mock.GetRootDevice.return_value = "device-name"
storage_proxy_mock.Drive = "btldr-drv"
storage_proxy_mock.KeepBootOrder = True
localization_proxy_mock = localization_mock.get_proxy()
localization_proxy_mock.VirtualConsoleKeymap = "cs"
devdata_mock.from_structure.return_value.type = "something-non-btrfs-subvolume-ish"
devdata_mock.from_structure.return_value.path = "/dev/btldr-drv"

Expand All @@ -829,7 +865,14 @@ def test_bootupd_run_with_leavebootorder(self, devdata_mock, storage_mock, symli
),
call(
"ostree",
["admin", "instutil", "set-kargs", "BOOTLOADER-ARGS", "root=FSTAB-SPEC", "rw"],
["admin",
"instutil",
"set-kargs",
"BOOTLOADER-ARGS",
"root=FSTAB-SPEC",
"vconsole.keymap=cs",
"rw"
],
root=sysroot
)
])
Expand Down

0 comments on commit 78ae5fd

Please sign in to comment.