[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RFC: Output files for netboot-xen flavour



Hi,

Since the netboot-bigmem flavour was named netboot-xen I thought perhaps
it made sense to tidy up the files in the output directory. All the
pxelinux.{0/cfg} stuff is not necessary for Xen, only the kernel, initrd
and perhaps a Xen configuration file are required.

I've attached a patch which implements this and would appreciate any
comments. In particular I'm pretty sure dumping xm-debian.cfg into
build/config/i386 is not the right place -- any suggestions? Xen doesn't
currently produce a udeb and I'm reluctant to add a build-dep on a Xen
package to pull the file from just for this.

The output with the patch is:
        installer/build/dest/netboot/xen/
        installer/build/dest/netboot/xen/initrd.gz
        installer/build/dest/netboot/xen/vmlinuz
        installer/build/dest/netboot/xen/xm-debian.cfg

The URLs in xm-debian.cfg are subject to finalisation still but
ultimately I hope users will be able to use a command like:
        xm create xm-debian.cfg install=true install-mirror=http://ftp.XX.debian.org
which will grab the installer from a mirror and start it.

Once the images start building I plan to update
http://wiki.debian.org/Xen and/or
http://wiki.debian.org/DebianInstaller/Xen
with details on how to use it. If there is anywhere else (release
notes?) where this could/should be mentioned I'd appreciate a pointer.

Ian.
-- 
Ian Campbell

I prefer the most unjust peace to the most righteous war.
		-- Cicero

Even peace may be purchased at too high a price.
		-- Poor Richard
Index: installer/build/config/i386.cfg
===================================================================
--- installer/build/config/i386.cfg	(revision 54526)
+++ installer/build/config/i386.cfg	(working copy)
@@ -1,4 +1,4 @@
-MEDIUM_SUPPORTED = cdrom netboot netboot-gtk hd-media # netboot-xen #floppy #monolithic
+MEDIUM_SUPPORTED = cdrom netboot netboot-gtk netboot-xen hd-media #floppy #monolithic
 
 # The version of the kernel to use.
 BASEVERSION = 2.6.25-2
Index: installer/build/config/i386/netboot-xen.cfg
===================================================================
--- installer/build/config/i386/netboot-xen.cfg	(revision 54526)
+++ installer/build/config/i386/netboot-xen.cfg	(working copy)
@@ -5,3 +5,8 @@
 MANIFEST-NETBOOT_DIR = "PXE boot directory for tftp server (Xen)"
 MANIFEST-NETBOOT_TAR = "tarball of PXE boot directory (Xen)"
 MANIFEST-MINIISO = "tiny CD image that boots the netboot installer (Xen)"
+XENCFG = $(SOME_DEST)/$(EXTRANAME)xm-debian.cfg
+TARGET = $(INITRD) $(KERNEL) $(XENCFG)
+
+$(XENCFG): config/i386/xm-debian.cfg
+	   cp $< $@
Index: installer/build/config/i386/xm-debian.cfg
===================================================================
--- installer/build/config/i386/xm-debian.cfg	(revision 0)
+++ installer/build/config/i386/xm-debian.cfg	(revision 0)
@@ -0,0 +1,174 @@
+#  -*- mode: python; -*-
+#============================================================================
+# Example Python setup script for Debian guest installation.
+#============================================================================
+#
+# Standard options are configured as normal. Only a subset are included below.
+# See /usr/share/doc/xen-utils-common/examples for full examples.
+#
+# After standard options are configure use
+#    xm create xm-debian.cfg install=true"
+# to start the Debian Installer.
+#
+# In the installation case the following additional variables exist:
+# install-arch: which architecture to install. e.g. i386 or amd64
+# install-suite: which Debian version to install. e.g. lenny or sid
+# install-mirror: which Debian mirror to use e.g. http://ftp.uk.debian.org/debian
+# install-installer: where to obtain the Debian Installer bits, by
+#   default these are located under install-mirror. To use a nightly
+#   snapshot: http://people.debian.org/~joeyh/d-i/images/daily/
+# install-extra: extra command line arguments
+#============================================================================
+
+
+#----------------------------------------------------------------------------
+# Standard variables
+
+# Initial memory allocation (in megabytes) for the new domain.
+memory = 128
+
+# A name for your domain. All domains must have different names.
+name = "ExampleDomain"
+
+# 128-bit UUID for the domain.  The default behavior is to generate a new UUID
+# on each call to 'xm create'.
+#uuid = "06ed00fe-1162-4fc4-b5d8-11993ee4a8b9"
+
+# List of which CPUS this domain is allowed to use, default Xen picks
+#cpus = ""         # leave to Xen to pick
+#cpus = "0"        # all vcpus run on CPU0
+#cpus = "0-3,5,^1" # run on cpus 0,2,3,5
+
+# Number of Virtual CPUS to use, default is 1
+#vcpus = 1
+
+#----------------------------------------------------------------------------
+# Define network interfaces.
+
+# By default, no network interfaces are configured.  You may have one created
+# with sensible defaults using an empty vif clause:
+#
+# vif = [ '' ]
+#
+# or optionally override backend, bridge, ip, mac, script, type, or vifname:
+#
+# vif = [ 'mac=00:16:3e:00:00:11, bridge=xenbr0' ]
+#
+# or more than one interface may be configured:
+#
+# vif = [ '', 'bridge=xenbr1' ]
+
+vif = [ '' ]
+
+#----------------------------------------------------------------------------
+# Define the disk devices you want the domain to have access to, and
+# what you want them accessible as.
+# Each disk entry is of the form phy:UNAME,DEV,MODE
+# where UNAME is the device, DEV is the device name the domain will see,
+# and MODE is r for read-only, w for read-write.
+
+disk = [ 'phy:hda1,hda1,w' ]
+
+#----------------------------------------------------------------------------
+# Define frame buffer device.
+#
+# By default, no frame buffer device is configured.
+#
+# To create one using the SDL backend and sensible defaults:
+#
+# vfb = [ 'type=sdl' ]
+#
+# This uses environment variables XAUTHORITY and DISPLAY.  You
+# can override that:
+#
+# vfb = [ 'type=sdl,xauthority=/home/bozo/.Xauthority,display=:1' ]
+#
+# To create one using the VNC backend and sensible defaults:
+#
+# vfb = [ 'type=vnc' ]
+#
+# The backend listens on 127.0.0.1 port 5900+N by default, where N is
+# the domain ID.  You can override both address and N:
+#
+# vfb = [ 'type=vnc,vnclisten=127.0.0.1,vncdisplay=1' ]
+#
+# Or you can bind the first unused port above 5900:
+#
+# vfb = [ 'type=vnc,vnclisten=0.0.0.0,vnunused=1' ]
+#
+# You can override the password:
+#
+# vfb = [ 'type=vnc,vncpasswd=MYPASSWD' ]
+#
+# Empty password disables authentication.  Defaults to the vncpasswd
+# configured in xend-config.sxp.
+
+
+#============================================================================
+#
+global var_check_boot_with_default
+def var_check_bool_with_default(default,var,val):
+   if type(val) == bool:
+      return val
+   elif type(val) == str:
+      if val.lower in ["t", "tr", "tru", "true"]:
+         return True
+      else:
+         return False
+   else:
+      return default
+global var_check_with_default
+def var_check_with_default(default,var,val):
+   if val: return val
+   else: return default
+
+xm_vars.var('install', use='Install Debian, default: false',
+            check=lambda var, val: var_check_bool_with_default(False, var, val))
+
+xm_vars.var("install-arch", use='Debian mirror to install from (default: i386)',
+            check=lambda var, val: var_check_with_default('i386', var, val))
+xm_vars.var("install-mirror", use='Debian mirror to install from (default: http://ftp.debian.org/debian)',
+            check=lambda var, val: var_check_with_default('http://ftp.debian.org/debian', var, val))
+xm_vars.var("install-suite", use='Debian suite to install (default: lenny)',
+            check=lambda var, val: var_check_with_default("lenny", var, val))
+xm_vars.var("install-installer", use='Debian installer to use (default: uses install-mirror)',
+            check=lambda var, val: var_check_with_default(None, var, val))
+xm_vars.var("install-extra", use='Extra command line options (default: None)',
+            check=lambda var, val: var_check_with_default(None, var, val))
+xm_vars.check()
+
+if not xm_vars.env['install']:
+   bootloader="pygrub"
+else:
+   import os.path
+   print "Install Mirror: %s" % xm_vars.env['install-mirror']
+   print "Install Suite: %s" % xm_vars.env['install-suite']
+   if xm_vars.env['install-installer']:
+      installer = xm_vars.env['install-installer']
+   else:
+      installer = os.path.join(xm_vars.env['install-mirror'],"dists",xm_vars.env['install-suite'],"main","installer-"+xm_vars.env['install-arch'],
+                               "current","images")
+   print "Installer: %s" % installer
+
+   import urllib
+   (kernel,_) = urllib.urlretrieve(os.path.join(installer, "netboot", "xen", "debian-installer", xm_vars.env['install-arch'], "linux"))
+   (ramdisk,_) = urllib.urlretrieve(os.path.join(installer, "netboot", "xen", "debian-installer", xm_vars.env['install-arch'], "initrd.gz"))
+
+   if xm_vars.env['install-extra']:
+      extras=[xm_vars.env['install-extra']]
+   else:
+      extras=[]
+
+   # Reboot will just restart the installer since this file is not
+   # reparsed, so halt and restart that way.
+   extras.append("debian-installer/exit/always_halt=true")
+   extras.append("--")
+   extras.append("quiet")
+
+   try:
+      vfb
+   except NameError, e:
+      extras.append("console=hvc0")
+
+   extra = str.join(" ", extras)
+   print "command line is \"%s\"" % extra

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: