From f0eb3ae48da89a4970a0ed5836797e1a926d1d1c Mon Sep 17 00:00:00 2001 From: Quentin Smith Date: Sun, 26 Dec 2010 17:10:57 -0500 Subject: [PATCH] Support debian-installer based autoinstallation --- debian/changelog | 6 ++++++ invirt-database | 61 ++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/debian/changelog b/debian/changelog index 796195d..5d8decf 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +invirt-xen-config (0.0.30) unstable; urgency=low + + * Support debian-installer based autoinstallation. + + -- Quentin Smith Sun, 26 Dec 2010 17:10:54 -0500 + invirt-xen-config (0.0.29) unstable; urgency=low * Merged in r2821,2824,2827 from hvirt branch. diff --git a/invirt-database b/invirt-database index a0dc979..e4eed03 100644 --- a/invirt-database +++ b/invirt-database @@ -48,21 +48,52 @@ else: codepath = 'paravm' if 'installer_options' in locals(): #Installer - disk.append('phy:/dev/xenvg/s_install_hda,hdb,r') - - import os - release = os.uname()[2] - kernel = '/boot/vmlinuz-%s' % release - ramdisk = '/boot/initrd.img-%s' % release - - if not machine.nics: - raise RuntimeError('You must have a nic to autoinstall') - n = machine.nics[0] - extra = 'ro noresume' - extra += (' ip=%s::%s:%s:%s:eth0:off' - % (n.ip, config.dhcp.gateway, config.dhcp.netmask, machine.name)) - extra += ' %s' % installer_options - root = '/dev/hdb1' + import shlex + install = dict(x.split("=",1) for x in shlex.split(installer_options)) + if 'preseed' in install: # d-i based installer + baseurl = install['mirror']+"/dists/"+install['dist']+"/main/installer-"+install['arch']+"/current/images" + kernelurl = baseurl + "/netboot/xen/vmlinuz" + ramdiskurl = baseurl + "/netboot/xen/initrd.gz" + + import urllib + class MyUrlOpener(urllib.FancyURLopener): + def http_error_default(self, req, fp, code, msg, hdrs): + raise IOError("%s %s" % (code, msg)) + urlopener = MyUrlOpener() + + try: + print "Fetching %s" % kernelurl + kernel, _ = urlopener.retrieve(kernelurl) + print "Fetching %s" % ramdiskurl + ramdisk, _ = urlopener.retrieve(ramdiskurl) + except IOError, _: + raise + + # For debugging, add "DEBCONF_DEBUG=5" to the arguments. + extras = ["auto=true", + "debconf/priority=critical", + "debian-installer/locale=en_US.UTF-8", + "debian-installer/exit/always_halt=true", + "url="+install['preseed'], + "--", "console=hvc0"] + + extra = str.join(" ", extras) + else: # Traditional debootstrap-based install + disk.append('phy:/dev/xenvg/s_install_hda,hdb,r') + + import os + release = os.uname()[2] + kernel = '/boot/vmlinuz-%s' % release + ramdisk = '/boot/initrd.img-%s' % release + + if not machine.nics: + raise RuntimeError('You must have a nic to autoinstall') + n = machine.nics[0] + extra = 'ro noresume' + extra += (' ip=%s::%s:%s:%s:eth0:off' + % (n.ip, config.dhcp.gateway, config.dhcp.netmask, machine.name)) + extra += ' %s' % installer_options + root = '/dev/hdb1' codepath = None memory = max(memory, 512) -- 1.7.9.5