Update lmc UEFI support to use the edk2-ovmf package

Fedora now has a edk2 package so use the OVMF code from there. This also
adds using a copy of OVMF_VARS for each boot instead of reusing the one
provided by the package.
This commit is contained in:
Brian C. Lane 2016-05-17 16:44:22 -07:00
parent bfbc38a40b
commit 551b27a8fa
3 changed files with 14 additions and 3 deletions

View File

@ -89,6 +89,7 @@ Anaconda's image install feature.
Summary: livemedia-creator libvirt dependencies
Requires: lorax = %{version}-%{release}
Requires: qemu
Requires: edk2-ovmf
Recommends: qemu-kvm
%description lmc-virt

View File

@ -235,7 +235,7 @@ def lmc_parser(dracut_default=""):
"Defaults to qemu-system-<arch>")
virt_group.add_argument("--kernel-args",
help="Additional argument to pass to the installation kernel")
virt_group.add_argument("--ovmf-path", default="/usr/share/OVMF/",
virt_group.add_argument("--ovmf-path", default="/usr/share/edk2/ovmf/",
help="Path to OVMF firmware")
virt_group.add_argument("--virt-uefi", action="store_true", default=False,
help="Use OVMF firmware to boot the VM in UEFI mode")

View File

@ -64,7 +64,6 @@ DRACUT_DEFAULT = ["--xz", "--add", "livenet dmsquash-live convertfs pollcdrom qe
ROOT_PATH = "/mnt/sysimage/"
RUNTIME = "images/install.img"
UEFI_FIRMWARE="loader={0}/OVMF_CODE.fd,loader_ro=yes,loader_type=pflash,nvram_template={0}/OVMF_VARS.fd"
class InstallError(Exception):
@ -248,7 +247,12 @@ class QEMUInstall(object):
if boot_uefi and ovmf_path:
qemu_cmd += ["-drive", "file=%s/OVMF_CODE.fd,if=pflash,format=raw,unit=0,readonly=on" % ovmf_path]
qemu_cmd += ["-drive", "file=%sOVMF_VARS.fd,if=pflash,format=raw,unit=1" % ovmf_path]
# Make a copy of the OVMF_VARS.fd for this run
ovmf_vars = tempfile.mktemp(prefix="lmc-OVMF_VARS-", suffix=".fd")
shutil.copy2(joinpaths(ovmf_path, "/OVMF_VARS.fd"), ovmf_vars)
qemu_cmd += ["-drive", "file=%s,if=pflash,format=raw,unit=1" % ovmf_vars]
log.info("Running qemu")
log.debug(qemu_cmd)
@ -265,6 +269,8 @@ class QEMUInstall(object):
raise InstallError("QEMUInstall failed")
finally:
os.unlink(qemu_initrd)
if boot_uefi and ovmf_path:
os.unlink(ovmf_vars)
if log_check():
log.error("Installation error detected. See logfile for details.")
@ -1278,6 +1284,10 @@ def main():
if opts.virt_uefi and not os.path.isdir(opts.ovmf_path):
errors.append("The OVMF firmware is missing from %s" % opts.ovmf_path)
elif opts.virt_uefi and os.path.isdir(opts.ovmf_path):
for f in ["OVMF_CODE.fd", "OVMF_VARS.fd"]:
if not os.path.exists(joinpaths(opts.ovmf_path, f)):
errors.append("OVMF firmware file %s is missing from %s" % (f, opts.ovmf_path))
if os.getuid() != 0:
errors.append("You need to run this as root")