From 95b8460a40423a7f42150da4adf0fc875b5199c1 Mon Sep 17 00:00:00 2001 From: smit-gardhariya Date: Wed, 20 Nov 2024 13:58:54 +0530 Subject: [PATCH] Add support for mariner-3.0 in dom0 kernel installer dom0 image based on mariner 3.0 has different parameter that need to be changed while installing kernel under different file. Add support for it under kernel installer transformer. Signed-off-by: Smit Gardhariya --- lisa/transformers/dom0_kernel_installer.py | 48 ++++++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/lisa/transformers/dom0_kernel_installer.py b/lisa/transformers/dom0_kernel_installer.py index 19a63c0b48..e28041167f 100644 --- a/lisa/transformers/dom0_kernel_installer.py +++ b/lisa/transformers/dom0_kernel_installer.py @@ -9,6 +9,7 @@ from lisa import schema from lisa.node import Node +from lisa.operating_system import CBLMariner from lisa.tools import Cp, Echo, Ln, Ls, Sed, Tar, Uname from lisa.util import field_metadata @@ -80,6 +81,9 @@ def install(self) -> str: uname = node.tools[Uname] current_kernel = uname.get_linux_information().kernel_version_raw + mariner_version = node.os.information.version.major + print(f"mariner_version: {mariner_version}") + # Kernel absolute path: /home/user/vmlinuz-5.15.57.1+ # Naming convention : vmlinuz- new_kernel = os.path.basename(kernel_image_path).split("-")[1].strip() @@ -124,10 +128,19 @@ def install(self) -> str: node.get_pure_path(f"/boot/initrd.img-{new_kernel}"), ) else: + # Mariner 2.0 initrd + target = f"/boot/initrd.img-{current_kernel}" + link = f"/boot/initrd.img-{new_kernel}" + + if isinstance(node.os, CBLMariner) and mariner_version == "3.0": + # Mariner 3.0 initrd + target = f"/boot/initramfs-{current_kernel}.img" + link = f"/boot/initramfs-{new_kernel}.img" + ln = node.tools[Ln] ln.create_link( - target=f"/boot/initrd.img-{current_kernel}", - link=f"/boot/initrd.img-{new_kernel}", + target=target, + link=link, ) if kernel_config_path: @@ -148,6 +161,7 @@ def install(self) -> str: node, current_kernel, new_kernel, + mariner_version, ) return new_kernel @@ -185,10 +199,13 @@ def install(self) -> str: uname = node.tools[Uname] current_kernel = uname.get_linux_information().kernel_version_raw + mariner_version = node.os.information.version.major + print(f"mariner_version: {mariner_version}") _update_mariner_config( node, current_kernel, new_kernel, + mariner_version, ) return new_kernel @@ -211,22 +228,35 @@ def _update_mariner_config( node: Node, current_kernel: str, new_kernel: str, + mariner_version: str, ) -> None: - mariner_config: str = "/boot/mariner-mshv.cfg" sed = node.tools[Sed] - # Modify the /boot/mariner-mshv.cfg to point new kernel binary + # Param for Dom0 2.0 kernel installation + mariner_config = "/boot/mariner-mshv.cfg" + vmlinuz_regexp = f"vmlinuz-{current_kernel}" + vmlinuz_replacement = f"vmlinuz-{new_kernel}" + initrd_regexp = f"mariner_initrd_mshv=initrd.img-{current_kernel}" + initrd_replacement = f"mariner_initrd_mshv=initrd.img-{new_kernel}" + + if isinstance(node.os, CBLMariner) and mariner_version == "3.0": + # Change param for Dom0 3.0 kernel installation + mariner_config = "/boot/grub2/grub.cfg" + initrd_regexp = f"initramfs-{current_kernel}.img" + initrd_replacement = f"initramfs-{new_kernel}.img" + + # Modify file to point new kernel binary sed.substitute( - regexp=f"mariner_linux_mshv=vmlinuz-{current_kernel}", - replacement=f"mariner_linux_mshv=vmlinuz-{new_kernel}", + regexp=vmlinuz_regexp, + replacement=vmlinuz_replacement, file=mariner_config, sudo=True, ) - # Modify the /boot/mariner-mshv.cfg to point new initrd binary + # Modify file 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}", + regexp=initrd_regexp, + replacement=initrd_replacement, file=mariner_config, sudo=True, )