10
10
from lisa import schema
11
11
from lisa .node import Node
12
12
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
15
15
16
16
from .kernel_installer import BaseInstaller , BaseInstallerSchema
17
17
from .kernel_source_installer import SourceInstaller , SourceInstallerSchema
@@ -67,8 +67,11 @@ def _output_names(self) -> List[str]:
67
67
return []
68
68
69
69
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
+ )
72
75
73
76
def install (self ) -> str :
74
77
node = self ._node
@@ -127,20 +130,21 @@ def install(self) -> str:
127
130
node .get_pure_path (f"/boot/initrd.img-{ new_kernel } " ),
128
131
)
129
132
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 :
135
134
# Mariner 2.0 initrd
136
135
target = f"/boot/initrd.img-{ current_kernel } "
137
136
link = f"/boot/initrd.img-{ new_kernel } "
138
137
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 )
144
148
145
149
if kernel_config_path :
146
150
# Copy kernel config
@@ -243,6 +247,9 @@ def _update_mariner_config(
243
247
initrd_regexp = f"mariner_initrd_mshv=initrd.img-{ current_kernel } "
244
248
initrd_replacement = f"mariner_initrd_mshv=initrd.img-{ new_kernel } "
245
249
250
+ cat = node .tools [Cat ]
251
+ cat .read (mariner_config , sudo = True , force_run = True )
252
+
246
253
# Modify file to point new kernel binary
247
254
sed .substitute (
248
255
regexp = vmlinuz_regexp ,
@@ -258,3 +265,25 @@ def _update_mariner_config(
258
265
file = mariner_config ,
259
266
sudo = True ,
260
267
)
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