From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> Support setting the <loader> XML element to the BIOS path using -boot loader=PATH. The same loader must be used both for the initial VM install and post-install configs --- man/en/virt-install.pod.in | 5 +++++ virtinst/Boot.py | 12 ++++++++++++ virtinst/Installer.py | 11 +++++++++-- virtinst/cli.py | 3 +++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/man/en/virt-install.pod.in b/man/en/virt-install.pod.in index 460d95e..45ebc46 100644 --- a/man/en/virt-install.pod.in +++ b/man/en/virt-install.pod.in @@ -357,6 +357,11 @@ network PXE boot. Additionally enable BIOS boot menu prompt. Have guest permanently boot off a local kernel/initrd pair, with the specified kernel options. +=item B<--boot loader=BIOSPATH> + +Use BIOSPATH as the virtual machine BIOS. Only valid for fully virtualized +guests. + =back =back diff --git a/virtinst/Boot.py b/virtinst/Boot.py index e8ef539..5e71525 100644 --- a/virtinst/Boot.py +++ b/virtinst/Boot.py @@ -43,6 +43,7 @@ class Boot(XMLBuilderDomain.XMLBuilderDomain): self._kernel = None self._initrd = None self._kernel_args = None + self._loader = None def _get_enable_bootmenu(self): return self._enable_bootmenu @@ -93,9 +94,20 @@ class Boot(XMLBuilderDomain.XMLBuilderDomain): kernel_args = _xml_property(_get_kernel_args, _set_kernel_args, xpath="./os/cmdline") + def _get_loader(self): + return self._loader + def _set_loader(self, val): + self._loader = val + loader = _xml_property(_get_loader, _set_loader, + xpath="./os/loader") + def _get_xml_config(self): xml = "" + if self.loader: + xml = _util.xml_append(xml, " <loader>%s</loader>" % + _util.xml_escape(self.loader)) + if self.kernel: xml = _util.xml_append(xml, " <kernel>%s</kernel>" % _util.xml_escape(self.kernel)) diff --git a/virtinst/Installer.py b/virtinst/Installer.py index 0e1a714..108ea6a 100644 --- a/virtinst/Installer.py +++ b/virtinst/Installer.py @@ -121,6 +121,10 @@ class Installer(XMLBuilderDomain.XMLBuilderDomain): return self._bootconfig bootconfig = property(_get_bootconfig) + def _get_install_bootconfig(self): + return self._install_bootconfig + install_bootconfig = property(_get_install_bootconfig) + # Hypervisor name (qemu, kvm, xen, lxc, etc.) def get_type(self): return self._type @@ -324,8 +328,11 @@ class Installer(XMLBuilderDomain.XMLBuilderDomain): hvxen = (hvtype == "xen") - if not loader and self.is_hvm() and hvxen: - loader = "/usr/lib/xen/boot/hvmloader" + if not loader and self.is_hvm(): + if self.install_bootconfig.loader: + loader = self.install_bootconfig.loader + elif hvxen: + loader = "/usr/lib/xen/boot/hvmloader" # Use older libvirt 'linux' value for back compat if os_type == "xen" and hvxen: diff --git a/virtinst/cli.py b/virtinst/cli.py index d846209..99e6ea7 100644 --- a/virtinst/cli.py +++ b/virtinst/cli.py @@ -1370,6 +1370,8 @@ def parse_boot(guest, optstring): return setattr(guest.installer.bootconfig, paramname, val) + if paramname == "loader": + setattr(guest.installer.install_bootconfig, paramname, val) # Convert menu= value if "menu" in opts: @@ -1389,6 +1391,7 @@ def parse_boot(guest, optstring): set_param("enable_bootmenu", "menu", menu) set_param("kernel", "kernel") set_param("initrd", "initrd") + set_param("loader", "loader") set_param("kernel_args", ["kernel_args", "extra_args"]) # Build boot order -- 1.7.7.6