diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2009-06-23 11:23:27 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2009-06-23 11:23:27 +0100 |
commit | dcf18dfcc4b2f0478446e0064a03fe2aaf1952b1 (patch) | |
tree | 00b194e93c0ccf156e84b2a55ee3bcfbc862f860 | |
parent | d1abeffc818dee0e049525ccc6b3940680eef2e2 (diff) | |
download | xen-dcf18dfcc4b2f0478446e0064a03fe2aaf1952b1.tar.gz xen-dcf18dfcc4b2f0478446e0064a03fe2aaf1952b1.tar.bz2 xen-dcf18dfcc4b2f0478446e0064a03fe2aaf1952b1.zip |
tools: don't require hardcoded firmware path in guest config file
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
-rw-r--r-- | config/StdGNU.mk | 1 | ||||
-rw-r--r-- | config/SunOS.mk | 1 | ||||
-rw-r--r-- | tools/firmware/Makefile | 2 | ||||
-rw-r--r-- | tools/python/Makefile | 22 | ||||
-rw-r--r-- | tools/python/xen/util/auxbin.py | 5 | ||||
-rw-r--r-- | tools/python/xen/xend/XendConfig.py | 19 | ||||
-rw-r--r-- | tools/python/xen/xm/create.py | 34 |
7 files changed, 63 insertions, 21 deletions
diff --git a/config/StdGNU.mk b/config/StdGNU.mk index 4ad4e3f580..ff94379208 100644 --- a/config/StdGNU.mk +++ b/config/StdGNU.mk @@ -36,6 +36,7 @@ MANDIR = $(SHAREDIR)/man MAN1DIR = $(MANDIR)/man1 MAN8DIR = $(MANDIR)/man8 SBINDIR = $(PREFIX)/sbin +XENFIRMWAREDIR = $(LIBDIR_x86_32)/xen/boot PRIVATE_PREFIX = $(LIBDIR)/xen PRIVATE_BINDIR = $(PRIVATE_PREFIX)/bin diff --git a/config/SunOS.mk b/config/SunOS.mk index d1f315bad3..034d858b6b 100644 --- a/config/SunOS.mk +++ b/config/SunOS.mk @@ -30,6 +30,7 @@ MANDIR = $(PREFIX)/share/man MAN1DIR = $(MANDIR)/man1 MAN8DIR = $(MANDIR)/man8 SBINDIR = $(PREFIX)/sbin +XENFIRMWAREDIR = $(LIBDIR)/xen/boot PRIVATE_PREFIX = $(LIBDIR)/xen PRIVATE_BINDIR = $(PRIVATE_PREFIX)/bin diff --git a/tools/firmware/Makefile b/tools/firmware/Makefile index 2fb6035956..b483492428 100644 --- a/tools/firmware/Makefile +++ b/tools/firmware/Makefile @@ -3,7 +3,7 @@ include $(XEN_ROOT)/tools/Rules.mk # hvmloader is a 32-bit protected mode binary. TARGET := hvmloader/hvmloader -INST_DIR := $(DESTDIR)$(LIBDIR_x86_32)/xen/boot +INST_DIR := $(DESTDIR)$(XENFIRMWAREDIR) SUBDIRS := SUBDIRS += rombios diff --git a/tools/python/Makefile b/tools/python/Makefile index d5037ae2f5..67edb46306 100644 --- a/tools/python/Makefile +++ b/tools/python/Makefile @@ -13,19 +13,20 @@ POTFILE := $(PODIR)/xen-xm.pot I18NSRCFILES = $(shell find xen/xm/ -name '*.py') CATALOGS = $(patsubst %,xen/xm/messages/%.mo,$(LINGUAS)) NLSDIR = $(SHAREDIR)/locale -xenpath = "xen/util/path.py" +XENPATH = "xen/util/path.py" .PHONY: build buildpy genpath genpath: - rm -f ${xenpath} - echo "SBINDIR=\"$(SBINDIR)\"" >> ${xenpath} - echo "BINDIR=\"$(BINDIR)\"" >> ${xenpath} - echo "LIBEXEC=\"$(LIBEXEC)\"" >> ${xenpath} - echo "LIBDIR=\"$(LIBDIR)\"" >> ${xenpath} - echo "SHAREDIR=\"$(SHAREDIR)\"" >> ${xenpath} - echo "PRIVATE_BINDIR=\"$(PRIVATE_BINDIR)\"" >> ${xenpath} - echo "XEN_CONFIG_DIR=\"$(XEN_CONFIG_DIR)\"" >> ${xenpath} - echo "XEN_SCRIPT_DIR=\"$(XEN_SCRIPT_DIR)\"" >> ${xenpath} + rm -f $(XENPATH) + echo "SBINDIR=\"$(SBINDIR)\"" >> $(XENPATH) + echo "BINDIR=\"$(BINDIR)\"" >> $(XENPATH) + echo "LIBEXEC=\"$(LIBEXEC)\"" >> $(XENPATH) + echo "LIBDIR=\"$(LIBDIR)\"" >> $(XENPATH) + echo "SHAREDIR=\"$(SHAREDIR)\"" >> $(XENPATH) + echo "PRIVATE_BINDIR=\"$(PRIVATE_BINDIR)\"" >> $(XENPATH) + echo "XENFIRMWAREDIR=\"$(XENFIRMWAREDIR)\"" >> $(XENPATH) + echo "XEN_CONFIG_DIR=\"$(XEN_CONFIG_DIR)\"" >> $(XENPATH) + echo "XEN_SCRIPT_DIR=\"$(XEN_SCRIPT_DIR)\"" >> $(XENPATH) buildpy: genpath CC="$(CC)" CFLAGS="$(CFLAGS)" $(PYTHON) setup.py build @@ -91,6 +92,7 @@ test: .PHONY: clean clean: + rm -f $(XENPATH) rm -rf build *.pyc *.pyo *.o *.a *~ $(CATALOGS) xen/util/auxbin.pyc rm -f $(DEPS) diff --git a/tools/python/xen/util/auxbin.py b/tools/python/xen/util/auxbin.py index 971a382795..056d1fd3a3 100644 --- a/tools/python/xen/util/auxbin.py +++ b/tools/python/xen/util/auxbin.py @@ -19,8 +19,7 @@ import os import os.path import sys -from xen.util.path import SBINDIR,BINDIR,LIBEXEC,LIBDIR,PRIVATE_BINDIR -from xen.util.path import XEN_CONFIG_DIR, XEN_SCRIPT_DIR +from xen.util.path import * def execute(exe, args = None): exepath = pathTo(exe) @@ -33,7 +32,7 @@ def execute(exe, args = None): print exepath, ": ", exn sys.exit(1) -SEARCHDIRS = [ BINDIR, SBINDIR, LIBEXEC, PRIVATE_BINDIR ] +SEARCHDIRS = [ BINDIR, SBINDIR, LIBEXEC, PRIVATE_BINDIR, XENFIRMWAREDIR ] def pathTo(exebin): for dir in SEARCHDIRS: exe = os.path.join(dir, exebin) diff --git a/tools/python/xen/xend/XendConfig.py b/tools/python/xen/xend/XendConfig.py index a9c9c4d53a..398e73e78e 100644 --- a/tools/python/xen/xend/XendConfig.py +++ b/tools/python/xen/xend/XendConfig.py @@ -16,6 +16,7 @@ #============================================================================ import logging +import os import re import time import types @@ -39,7 +40,7 @@ from xen.util.blkif import blkdev_name_to_number, blkdev_uname_to_file from xen.util.pci import pci_opts_list_from_sxp, pci_convert_sxp_to_dict from xen.xend.XendSXPDev import dev_dict_to_sxp from xen.util import xsconstants -import xen.util.auxbin +from xen.util import auxbin log = logging.getLogger("xend.XendConfig") log.setLevel(logging.WARN) @@ -460,7 +461,11 @@ class XendConfig(dict): if self.is_hvm() or self.has_rfb(): if 'device_model' not in self['platform']: - self['platform']['device_model'] = xen.util.auxbin.pathTo("qemu-dm") + self['platform']['device_model'] = auxbin.pathTo("qemu-dm") + # device_model may be set to 'qemu-dm' or 'stubdom-dm' w/o a path + if os.path.dirname(self['platform']['device_model']) != "": + self['platform']['device_model'] = \ + auxbin.pathTo(self['platform']['device_model']) if self.is_hvm(): if 'timer_mode' not in self['platform']: @@ -478,11 +483,17 @@ class XendConfig(dict): if 'loader' not in self['platform']: # Old configs may have hvmloader set as PV_kernel param if self.has_key('PV_kernel') and self['PV_kernel'] != '': + if self['PV_kernel'] == 'hvmloader': + self['PV_kernel'] = auxbin.pathTo("hvmloader") self['platform']['loader'] = self['PV_kernel'] self['PV_kernel'] = '' else: - self['platform']['loader'] = "/usr/lib/xen/boot/hvmloader" + self['platform']['loader'] = auxbin.pathTo("hvmloader") log.debug("Loader is %s" % str(self['platform']['loader'])) + elif self['platform']['loader'] == 'hvmloader': + self['platform']['loader'] = auxbin.pathTo("hvmloader") + if not os.path.exists(self['platform']['loader']): + raise VmError("kernel '%s' not found" % str(self['platform']['loader'])) # Compatibility hack, can go away soon. if 'soundhw' not in self['platform'] and \ @@ -1550,7 +1561,7 @@ class XendConfig(dict): # is invoked for pvfb services if 'device_model' not in target['platform']: target['platform']['device_model'] = \ - xen.util.auxbin.pathTo("qemu-dm") + auxbin.pathTo("qemu-dm") # Finally, if we are a pvfb, we need to make a vkbd # as well that is not really exposed to Xen API diff --git a/tools/python/xen/xm/create.py b/tools/python/xen/xm/create.py index e1fad288cb..93e019038e 100644 --- a/tools/python/xen/xm/create.py +++ b/tools/python/xen/xm/create.py @@ -653,11 +653,39 @@ def configure_image(vals): return None config_image = [ vals.builder ] if vals.kernel: - config_image.append([ 'kernel', os.path.abspath(vals.kernel) ]) + if os.path.dirname(vals.kernel) != "" and os.path.exists(vals.kernel): + config_image.append([ 'kernel', vals.kernel ]) + elif vals.kernel == 'hvmloader': + # Keep hvmloader w/o a path and let xend find it. + # This allows guest migration to a Dom0 having different + # xen install pathes. + config_image.append([ 'kernel', vals.kernel ]) + elif os.path.exists(os.path.abspath(vals.kernel)) + # Keep old behaviour, if path is valid. + config_image.append([ 'kernel', os.path.abspath(vals.kernel) ]) + else: + raise ValueError('Cannot find kernel "%s"' % vals.kernel) if vals.ramdisk: - config_image.append([ 'ramdisk', os.path.abspath(vals.ramdisk) ]) + if os.path.dirname(vals.ramdisk) != "" and os.path.exists(vals.ramdisk): + config_image.append([ 'ramdisk', vals.ramdisk ]) + elif os.path.exists(os.path.abspath(vals.ramdisk)): + # Keep old behaviour, if path is valid. + config_image.append([ 'ramdisk', os.path.abspath(vals.ramdisk) ]) + else: + raise ValueError('Cannot find ramdisk "%s"' % vals.ramdisk) if vals.loader: - config_image.append([ 'loader', os.path.abspath(vals.loader) ]) + if os.path.dirname(vals.loader) != "" and os.path.exists(vals.loader): + config_image.append([ 'loader', vals.loader ]) + elif vals.loader == 'hvmloader': + # Keep hvmloader w/o a path and let xend find it. + # This allows guest migration to a Dom0 having different + # xen install pathes. + config_image.append([ 'loader', vals.loader ]) + elif os.path.exists(os.path.abspath(vals.loader)): + # Keep old behaviour, if path is valid. + config_image.append([ 'loader', os.path.abspath(vals.loader) ]) + else: + raise ValueError('Cannot find loader "%s"' % vals.loader) if vals.cmdline_ip: cmdline_ip = strip('ip=', vals.cmdline_ip) config_image.append(['ip', cmdline_ip]) |