aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/StdGNU.mk1
-rw-r--r--config/SunOS.mk1
-rw-r--r--tools/firmware/Makefile2
-rw-r--r--tools/python/Makefile22
-rw-r--r--tools/python/xen/util/auxbin.py5
-rw-r--r--tools/python/xen/xend/XendConfig.py19
-rw-r--r--tools/python/xen/xm/create.py34
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])