# HG changeset patch
# User john.levon@xxxxxxx
# Date 1163095800 28800
# Node ID 0da173ee886e13bd4116c7d085cd4a4704ffe279
# Parent 7c80aaffe16f5e4037d10660d262ed7b22894b01
Split out bootloader-derived parameters separately from config-file-specified
ones. This allows a config file to still specify kernel/ramdisk, even if a
bootloader is being used.
Signed-off-by: John Levon <john.levon@xxxxxxx>
diff --git a/tools/pygrub/src/pygrub b/tools/pygrub/src/pygrub
--- a/tools/pygrub/src/pygrub
+++ b/tools/pygrub/src/pygrub
@@ -514,17 +514,17 @@ if __name__ == "__main__":
fs = fsimage.open(file, offset)
kernel = fs.open_file(img.kernel[1],).read()
- (tfd, fn) = tempfile.mkstemp(prefix="vmlinuz.", dir="/var/lib/xen")
+ (tfd, fn) = tempfile.mkstemp(prefix="boot_kernel.", dir="/var/lib/xen")
os.write(tfd, kernel)
os.close(tfd)
- sxp = "linux (kernel %s)" %(fn,)
+ sxp = "linux (boot_kernel %s)" %(fn,)
if img.initrd:
initrd = fs.open_file(img.initrd[1],).read()
- (tfd, fn) = tempfile.mkstemp(prefix="initrd.", dir="/var/lib/xen")
+ (tfd, fn) = tempfile.mkstemp(prefix="boot_ramdisk.",
dir="/var/lib/xen")
os.write(tfd, initrd)
os.close(tfd)
- sxp += "(ramdisk %s)" %(fn,)
+ sxp += "(boot_ramdisk %s)" %(fn,)
else:
initrd = None
sxp += "(args '%s')" %(img.args,)
diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py
+++ b/tools/python/xen/xend/image.py
@@ -70,7 +70,9 @@ class ImageHandler:
self.vm = vm
self.kernel = None
+ self.boot_kernel = None
self.ramdisk = None
+ self.boot_ramdisk = None
self.cmdline = None
self.configure(imageConfig, deviceConfig)
@@ -82,6 +84,14 @@ class ImageHandler:
return sxp.child_value(imageConfig, name, default)
self.kernel = get_cfg("kernel")
+ self.ramdisk = get_cfg("ramdisk", '')
+ self.boot_kernel = get_cfg("boot_kernel")
+ if not self.boot_kernel:
+ self.boot_kernel = self.kernel
+ self.boot_ramdisk = get_cfg("boot_ramdisk")
+ if not self.boot_ramdisk:
+ self.boot_ramdisk = self.ramdisk
+
self.cmdline = ""
ip = get_cfg("ip")
if ip:
@@ -92,7 +102,7 @@ class ImageHandler:
args = get_cfg("args")
if args:
self.cmdline += " " + args
- self.ramdisk = get_cfg("ramdisk", '')
+
self.vm.storeVm(("image/ostype", self.ostype),
("image/kernel", self.kernel),
@@ -101,8 +111,8 @@ class ImageHandler:
def cleanupBootloading(self):
- self.unlink(self.kernel)
- self.unlink(self.ramdisk)
+ self.unlink(self.boot_kernel)
+ self.unlink(self.boot_ramdisk)
def unlink(self, f):
@@ -125,10 +135,11 @@ class ImageHandler:
"""
# Set params and call buildDomain().
- if not os.path.isfile(self.kernel):
- raise VmError('Kernel image does not exist: %s' % self.kernel)
- if self.ramdisk and not os.path.isfile(self.ramdisk):
- raise VmError('Kernel ramdisk does not exist: %s' % self.ramdisk)
+ if not os.path.isfile(self.boot_kernel):
+ raise VmError('Kernel image does not exist: %s' % self.boot_kernel)
+ if self.boot_ramdisk and not os.path.isfile(self.boot_ramdisk):
+ raise VmError('Kernel ramdisk does not exist: %s' %
+ self.boot_ramdisk)
if len(self.cmdline) >= MAX_GUEST_CMDLINE:
log.warning('kernel cmdline too long, domain %d',
self.vm.getDomid())
@@ -193,21 +204,21 @@ class LinuxImageHandler(ImageHandler):
log.debug("domid = %d", self.vm.getDomid())
log.debug("memsize = %d", mem_mb)
- log.debug("image = %s", self.kernel)
+ log.debug("image = %s", self.boot_kernel)
log.debug("store_evtchn = %d", store_evtchn)
log.debug("console_evtchn = %d", console_evtchn)
log.debug("cmdline = %s", self.cmdline)
- log.debug("ramdisk = %s", self.ramdisk)
+ log.debug("ramdisk = %s", self.boot_ramdisk)
log.debug("vcpus = %d", self.vm.getVCpuCount())
log.debug("features = %s", self.vm.getFeatures())
return xc.linux_build(domid = self.vm.getDomid(),
memsize = mem_mb,
- image = self.kernel,
+ image = self.boot_kernel,
store_evtchn = store_evtchn,
console_evtchn = console_evtchn,
cmdline = self.cmdline,
- ramdisk = self.ramdisk,
+ ramdisk = self.boot_ramdisk,
features = self.vm.getFeatures())
class PPC_LinuxImageHandler(LinuxImageHandler):
@@ -226,11 +237,11 @@ class PPC_LinuxImageHandler(LinuxImageHa
log.debug("domid = %d", self.vm.getDomid())
log.debug("memsize = %d", mem_mb)
- log.debug("image = %s", self.kernel)
+ log.debug("image = %s", self.boot_kernel)
log.debug("store_evtchn = %d", store_evtchn)
log.debug("console_evtchn = %d", console_evtchn)
log.debug("cmdline = %s", self.cmdline)
- log.debug("ramdisk = %s", self.ramdisk)
+ log.debug("ramdisk = %s", self.boot_ramdisk)
log.debug("vcpus = %d", self.vm.getVCpuCount())
log.debug("features = %s", self.vm.getFeatures())
@@ -238,11 +249,11 @@ class PPC_LinuxImageHandler(LinuxImageHa
return xc.linux_build(domid = self.vm.getDomid(),
memsize = mem_mb,
- image = self.kernel,
+ image = self.boot_kernel,
store_evtchn = store_evtchn,
console_evtchn = console_evtchn,
cmdline = self.cmdline,
- ramdisk = self.ramdisk,
+ ramdisk = self.boot_ramdisk,
features = self.vm.getFeatures(),
arch_args = devtree.to_bin())
@@ -287,7 +298,7 @@ class HVMImageHandler(ImageHandler):
mem_mb = self.getRequiredInitialReservation() / 1024
log.debug("domid = %d", self.vm.getDomid())
- log.debug("image = %s", self.kernel)
+ log.debug("image = %s", self.boot_kernel)
log.debug("store_evtchn = %d", store_evtchn)
log.debug("memsize = %d", mem_mb)
log.debug("vcpus = %d", self.vm.getVCpuCount())
@@ -297,7 +308,7 @@ class HVMImageHandler(ImageHandler):
self.register_shutdown_watch()
return xc.hvm_build(domid = self.vm.getDomid(),
- image = self.kernel,
+ image = self.boot_kernel,
store_evtchn = store_evtchn,
memsize = mem_mb,
vcpus = self.vm.getVCpuCount(),
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|