diff --git a/lisa/transformers/dom0_kernel_installer.py b/lisa/transformers/dom0_kernel_installer.py index f840a6175..19a63c0b4 100644 --- a/lisa/transformers/dom0_kernel_installer.py +++ b/lisa/transformers/dom0_kernel_installer.py @@ -9,7 +9,7 @@ from dataclasses_json import dataclass_json from lisa import schema from lisa.node import Node -from lisa.tools import Cp, Echo, Ls, Sed, Tar, Uname +from lisa.tools import Cp, Echo, Ln, Ls, Sed, Tar, Uname from lisa.util import field_metadata from .kernel_installer import BaseInstaller, BaseInstallerSchema @@ -35,6 +35,14 @@ class BinaryInstallerSchema(BaseInstallerSchema): ), ) + # kernel config local absolute path + kernel_config_path: str = field( + default="", + metadata=field_metadata( + required=True, + ), + ) + # initrd binary local absolute path initrd_image_path: str = field( default="", @@ -67,7 +75,7 @@ class BinaryInstaller(BaseInstaller): kernel_image_path: str = runbook.kernel_image_path initrd_image_path: str = runbook.initrd_image_path kernel_modules_path: str = runbook.kernel_modules_path - is_initrd: bool = False + kernel_config_path: str = runbook.kernel_config_path uname = node.tools[Uname] current_kernel = uname.get_linux_information().kernel_version_raw @@ -106,7 +114,6 @@ class BinaryInstaller(BaseInstaller): if initrd_image_path: err = f"Can not find initrd image path: {initrd_image_path}" assert os.path.exists(initrd_image_path), err - is_initrd = True node.shell.copy( PurePath(initrd_image_path), node.get_pure_path(f"/var/tmp/initrd.img-{new_kernel}"), @@ -116,10 +123,29 @@ class BinaryInstaller(BaseInstaller): node.get_pure_path(f"/var/tmp/initrd.img-{new_kernel}"), node.get_pure_path(f"/boot/initrd.img-{new_kernel}"), ) + else: + ln = node.tools[Ln] + ln.create_link( + target=f"/boot/initrd.img-{current_kernel}", + link=f"/boot/initrd.img-{new_kernel}", + ) + + if kernel_config_path: + # Copy kernel config + err = f"Can not find kernel config path: {kernel_config_path}" + assert os.path.exists(kernel_config_path), err + node.shell.copy( + PurePath(kernel_config_path), + node.get_pure_path(f"/var/tmp/config-{new_kernel}"), + ) + _copy_kernel_binary( + node, + node.get_pure_path(f"/var/tmp/config-{new_kernel}"), + node.get_pure_path(f"/boot/config-{new_kernel}"), + ) _update_mariner_config( node, - is_initrd, current_kernel, new_kernel, ) @@ -161,7 +187,6 @@ class Dom0Installer(SourceInstaller): _update_mariner_config( node, - True, current_kernel, new_kernel, ) @@ -184,7 +209,6 @@ def _copy_kernel_binary( def _update_mariner_config( node: Node, - is_initrd: bool, current_kernel: str, new_kernel: str, ) -> None: @@ -199,11 +223,10 @@ def _update_mariner_config( sudo=True, ) - if is_initrd: - # Modify the /boot/mariner-mshv.cfg to point new initrd binary - sed.substitute( - regexp=f"mariner_initrd_mshv=initrd.img-{current_kernel}", - replacement=f"mariner_initrd_mshv=initrd.img-{new_kernel}", - file=mariner_config, - sudo=True, - ) + # Modify the /boot/mariner-mshv.cfg to point new initrd binary + sed.substitute( + regexp=f"mariner_initrd_mshv=initrd.img-{current_kernel}", + replacement=f"mariner_initrd_mshv=initrd.img-{new_kernel}", + file=mariner_config, + sudo=True, + )