diff --git a/virttest/qemu_vm.py b/virttest/qemu_vm.py index 73bd2ad467..ea7e030ae4 100644 --- a/virttest/qemu_vm.py +++ b/virttest/qemu_vm.py @@ -1438,6 +1438,9 @@ def add_kernel(filename): def add_initrd(filename): return " -initrd '%s'" % filename + def add_shim(filename): + return " -shim '%s'" % filename + def add_rtc(devices): # Pay attention that rtc-td-hack is for early version # if "rtc " in help: @@ -2933,6 +2936,11 @@ def __iothread_conflict_check(params): initrd = utils_misc.get_path(data_dir.get_data_dir(), initrd) devices.insert(StrDev("initrd", cmdline=add_initrd(initrd))) + shim = params.get("shim") + if shim: + shim = utils_misc.get_path(data_dir.get_data_dir(), shim) + devices.insert(StrDev("shim", cmdline=add_shim(shim))) + for host_port, guest_port in redirs: cmd = add_tcp_redir(devices, host_port, guest_port) devices.insert(StrDev("tcp-redir", cmdline=cmd)) diff --git a/virttest/shared/cfg/guest-os/Linux/RHEL.cfg b/virttest/shared/cfg/guest-os/Linux/RHEL.cfg index 68185890f6..1c4c5f4462 100644 --- a/virttest/shared/cfg/guest-os/Linux/RHEL.cfg +++ b/virttest/shared/cfg/guest-os/Linux/RHEL.cfg @@ -13,6 +13,7 @@ # kernel_params += ":sr1:/ks.cfg" kernel_params += " nicdelay=60 " boot_path = images/pxeboot + shim_target_efi_path = EFI/BOOT aarch64: kernel_params += " earlyprintk=pl011,0x9000000 console=ttyAMA0 debug ignore_loglevel rootwait" ppc64, ppc64le: diff --git a/virttest/tests/unattended_install.py b/virttest/tests/unattended_install.py index 97f0f64ede..4513e580fc 100644 --- a/virttest/tests/unattended_install.py +++ b/virttest/tests/unattended_install.py @@ -183,6 +183,8 @@ def __init__(self, test, params, vm): "driver_in_floppy", "vga", "unattended_file_kernel_param_name", + "shim_target_efi_path", + "shim", ] for a in self.attributes: @@ -266,6 +268,8 @@ def get_unattended_file(backend): self.kernel = os.path.join(root_dir, self.kernel) if getattr(self, "initrd"): self.initrd = os.path.join(root_dir, self.initrd) + if getattr(self, "shim"): + self.shim = os.path.join(root_dir, self.shim) if self.medium == "nfs": self.nfs_mount = tempfile.mkdtemp(prefix="nfs_", dir=self.tmpdir) @@ -984,6 +988,11 @@ def setup_cdrom(self): assert os.path.getsize(self.kernel) > 0 i.copy(os.path.join(self.boot_path, os.path.basename(self.initrd)), self.initrd) assert os.path.getsize(self.initrd) > 0 + i.copy( + os.path.join(self.shim_target_efi_path, os.path.basename(self.shim)), + self.shim, + ) + assert os.path.getsize(self.shim) > 0 if self.unattended_file.endswith(".preseed"): self.preseed_initrd() @@ -1063,6 +1072,7 @@ def setup_url(self): kernel_basename = os.path.basename(self.kernel) initrd_basename = os.path.basename(self.initrd) + shim_basename = os.path.basename(self.shim) sha1sum_kernel_cmd = "sha1sum %s" % kernel_basename sha1sum_kernel_output = process.run( sha1sum_kernel_cmd, ignore_status=True, verbose=DEBUG @@ -1081,12 +1091,24 @@ def setup_url(self): except IndexError: sha1sum_initrd = "" + sha1sum_shim_cmd = "sha1sum %s" % shim_basename + sha1sum_shim_output = process.run( + sha1sum_shim_cmd, ignore_status=True, verbose=DEBUG + ).stdout_text + try: + sha1sum_shim = sha1sum_shim_output.split()[0] + except IndexError: + sha1sum_shim = "" + url_kernel = os.path.join( self.url, self.boot_path, os.path.basename(self.kernel) ) url_initrd = os.path.join( self.url, self.boot_path, os.path.basename(self.initrd) ) + url_shim = os.path.join( + self.url, self.shim_target_efi_path, os.path.basename(self.shim) + ) if not sha1sum_kernel == self.params.get("sha1sum_vmlinuz", None): if os.path.isfile(self.kernel): @@ -1106,6 +1128,15 @@ def setup_url(self): os.path.join(self.image_path, os.path.basename(self.initrd)), ) + if not sha1sum_shim == self.params.get("sha1sum_shim", None): + if os.path.isfile(self.shim): + os.remove(self.shim) + LOG.info("Downloading %s -> %s", url_shim, self.image_path) + download.get_file( + url_shim, + os.path.join(self.image_path, os.path.basename(self.shim)), + ) + if "repo=cdrom" in self.kernel_params: # Red Hat self.kernel_params = re.sub( @@ -1154,6 +1185,13 @@ def setup_nfs(self): self.image_path, ) process.run(initrd_fetch_cmd, verbose=DEBUG) + shim_fetch_cmd = "cp %s/%s/%s %s" % ( + self.nfs_mount, + self.shim_target_efi_path, + os.path.basename(self.shim), + self.image_path, + ) + process.run(shim_fetch_cmd, verbose=DEBUG) finally: utils_disk.cleanup(self.nfs_mount)