[et-mgmt-tools] [PATCH 10 of 11] virt-install: correct pygrub path
john.levon at sun.com
john.levon at sun.com
Thu Jul 10 13:48:40 UTC 2008
# HG changeset patch
# User john.levon at sun.com
# Date 1215697572 25200
# Node ID 92de696f634f80d47b9413b9db5101de0edf9b7f
# Parent 443b42b45ee6f799020a9418388440b93d9ab78c
virt-install: correct pygrub path
The path to pygrub differs between OS hosts. Properly speaking, this is a
property of the hypervisor capabilities, and we'd get it from there. However,
traditionally the loader value is empty for PV Xen hosts, so we can't rely on
it, so we hard-code it based upon the current host.
Signed-off-by: John Levon <john.levon at sun.com>
diff --git a/virtinst/DistroManager.py b/virtinst/DistroManager.py
--- a/virtinst/DistroManager.py
+++ b/virtinst/DistroManager.py
@@ -218,7 +218,7 @@
else:
self._prepare_kernel_and_initrd(guest, distro, meter)
- def _get_osblob(self, install, hvm, arch = None, loader = None):
+ def _get_osblob(self, install, hvm, arch = None, loader = None, conn = None):
osblob = ""
if install or hvm:
osblob = "<os>\n"
@@ -248,7 +248,7 @@
osblob += " </os>"
else:
- osblob += "<bootloader>/usr/bin/pygrub</bootloader>"
+ osblob += "<bootloader>%s</bootloader>" % util.pygrub_path(conn)
return osblob
@@ -275,7 +275,7 @@
def prepare(self, guest, meter, distro = None):
pass
- def _get_osblob(self, install, hvm, arch = None, loader = None):
+ def _get_osblob(self, install, hvm, arch = None, loader = None, conn = None):
osblob = ""
if install or hvm:
osblob = "<os>\n"
@@ -300,7 +300,7 @@
osblob += " </os>"
else:
- osblob += "<bootloader>/usr/bin/pygrub</bootloader>"
+ osblob += "<bootloader>%s</bootloader>" % util.pygrub_path(conn)
return osblob
diff --git a/virtinst/FullVirtGuest.py b/virtinst/FullVirtGuest.py
--- a/virtinst/FullVirtGuest.py
+++ b/virtinst/FullVirtGuest.py
@@ -203,7 +203,8 @@
return ret + " </features>"
def _get_osblob(self, install):
- osblob = self.installer._get_osblob(install, True, self.arch, self.loader)
+ osblob = self.installer._get_osblob(install, hvm = True,
+ arch = self.arch, loader = self.loader, conn = self.conn)
if osblob is None:
return None
diff --git a/virtinst/ImageManager.py b/virtinst/ImageManager.py
--- a/virtinst/ImageManager.py
+++ b/virtinst/ImageManager.py
@@ -106,7 +106,7 @@
guest._install_disks.append(d)
- def _get_osblob(self, install, hvm, arch = None, loader = None):
+ def _get_osblob(self, install, hvm, arch = None, loader = None, conn = None):
osblob = "<os>\n"
if hvm:
@@ -136,7 +136,7 @@
osblob += " </os>"
elif self.boot_caps.loader == "pygrub" or (self.boot_caps.loader is None and self.boot_caps.type == "xen"):
osblob += " </os>\n"
- osblob += " <bootloader>/usr/bin/pygrub</bootloader>"
+ osblob += " <bootloader>%s</bootloader>" % util.pygrub_path(conn)
return osblob
diff --git a/virtinst/LiveCDInstaller.py b/virtinst/LiveCDInstaller.py
--- a/virtinst/LiveCDInstaller.py
+++ b/virtinst/LiveCDInstaller.py
@@ -55,7 +55,7 @@
readOnly = True)
guest._install_disks.insert(0, disk)
- def _get_osblob(self, install, hvm, arch = None, loader = None):
+ def _get_osblob(self, install, hvm, arch = None, loader = None, conn = None):
if install:
return None
diff --git a/virtinst/ParaVirtGuest.py b/virtinst/ParaVirtGuest.py
--- a/virtinst/ParaVirtGuest.py
+++ b/virtinst/ParaVirtGuest.py
@@ -33,7 +33,7 @@
self.disknode = "xvd"
def _get_osblob(self, install):
- return self.installer._get_osblob(install, hvm = False)
+ return self.installer._get_osblob(install, hvm = False, conn = self.conn)
def get_input_device(self):
return ("mouse", "xen")
diff --git a/virtinst/util.py b/virtinst/util.py
--- a/virtinst/util.py
+++ b/virtinst/util.py
@@ -19,6 +19,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301 USA.
+import platform
import random
import os.path
import re
@@ -27,6 +28,8 @@
import libvirt
from virtinst import _virtinst as _
+from virtinst import CapabilitiesParser
+
KEYBOARD_DIR = "/etc/sysconfig/keyboard"
@@ -277,3 +280,18 @@
f.close()
return keymap
+def pygrub_path(conn=None):
+ """
+ Return the pygrub path for the current host, or connection if
+ available.
+ """
+ if conn:
+ cap = CapabilitiesParser.parse(conn.getCapabilities())
+ if (cap.host.arch == "i86pc"):
+ return "/usr/lib/xen/bin/pygrub"
+ else:
+ return "/usr/bin/pygrub"
+
+ if platform.system() == "SunOS":
+ return "/usr/lib/xen/bin/pygrub"
+ return "/usr/bin/pygrub"
More information about the et-mgmt-tools
mailing list