Skip to content

Commit a46e877

Browse files
committed
dom0_kernel_installer: generate initramfs and use PARTUUID
Using older initramfs does not work anymore as there are some kernel module dependencies. Hence, generate a new one. Also, replace UUID with PARTUUID since initramfs fails to understand the UUID. While at it, update validate() method to check if node's os is Mariner.
1 parent 2d5d85f commit a46e877

File tree

1 file changed

+43
-14
lines changed

1 file changed

+43
-14
lines changed

lisa/transformers/dom0_kernel_installer.py

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
from lisa import schema
1111
from lisa.node import Node
1212
from lisa.operating_system import CBLMariner
13-
from lisa.tools import Cp, Echo, Ln, Ls, Sed, Tar, Uname
14-
from lisa.util import field_metadata
13+
from lisa.tools import Cat, Cp, Echo, Ln, Ls, Sed, Tar, Uname
14+
from lisa.util import UnsupportedDistroException, field_metadata
1515

1616
from .kernel_installer import BaseInstaller, BaseInstallerSchema
1717
from .kernel_source_installer import SourceInstaller, SourceInstallerSchema
@@ -67,8 +67,11 @@ def _output_names(self) -> List[str]:
6767
return []
6868

6969
def validate(self) -> None:
70-
# nothing to validate before source installer started.
71-
...
70+
if not isinstance(self._node.os, CBLMariner):
71+
raise UnsupportedDistroException(
72+
self._node.os,
73+
f"The '{self.type_name()}' installer only support Mariner distro",
74+
)
7275

7376
def install(self) -> str:
7477
node = self._node
@@ -127,20 +130,21 @@ def install(self) -> str:
127130
node.get_pure_path(f"/boot/initrd.img-{new_kernel}"),
128131
)
129132
else:
130-
# Mariner 3.0 initrd
131-
target = f"/boot/initramfs-{current_kernel}.img"
132-
link = f"/boot/initramfs-{new_kernel}.img"
133-
134-
if isinstance(node.os, CBLMariner) and mariner_version == 2:
133+
if mariner_version == 2:
135134
# Mariner 2.0 initrd
136135
target = f"/boot/initrd.img-{current_kernel}"
137136
link = f"/boot/initrd.img-{new_kernel}"
138137

139-
ln = node.tools[Ln]
140-
ln.create_link(
141-
target=target,
142-
link=link,
143-
)
138+
ln = node.tools[Ln]
139+
ln.create_link(
140+
target=target,
141+
link=link,
142+
)
143+
else:
144+
# Mariner 3.0 and above
145+
initramfs = f"/boot/initramfs-{new_kernel}.img"
146+
dracut_cmd = f"dracut --force {initramfs} {new_kernel}"
147+
node.execute(dracut_cmd, sudo=True, shell=True)
144148

145149
if kernel_config_path:
146150
# Copy kernel config
@@ -243,6 +247,9 @@ def _update_mariner_config(
243247
initrd_regexp = f"mariner_initrd_mshv=initrd.img-{current_kernel}"
244248
initrd_replacement = f"mariner_initrd_mshv=initrd.img-{new_kernel}"
245249

250+
cat = node.tools[Cat]
251+
cat.read(mariner_config, sudo=True, force_run=True)
252+
246253
# Modify file to point new kernel binary
247254
sed.substitute(
248255
regexp=vmlinuz_regexp,
@@ -258,3 +265,25 @@ def _update_mariner_config(
258265
file=mariner_config,
259266
sudo=True,
260267
)
268+
269+
uuid = node.execute(
270+
"lsblk -o MOUNTPOINT,UUID | grep '/ ' | awk '{print $2}'",
271+
sudo=True,
272+
shell=True,
273+
expected_exit_code=0,
274+
).stdout.strip()
275+
partuuid = node.execute(
276+
"lsblk -o MOUNTPOINT,PARTUUID | grep '/ ' | awk '{print $2}'",
277+
sudo=True,
278+
shell=True,
279+
expected_exit_code=0,
280+
).stdout.strip()
281+
282+
# initramfs can only understand PARTUUID
283+
sed.substitute(
284+
regexp=f"root=UUID={uuid}",
285+
replacement=f"root=PARTUUID={partuuid}",
286+
file=mariner_config,
287+
sudo=True,
288+
)
289+
cat.read(mariner_config, sudo=True, force_run=True)

0 commit comments

Comments
 (0)