Support debian-installer based autoinstallation
authorQuentin Smith <quentin@mit.edu>
Sun, 26 Dec 2010 22:10:57 +0000 (17:10 -0500)
committerQuentin Smith <quentin@mit.edu>
Mon, 27 Dec 2010 04:12:36 +0000 (23:12 -0500)
debian/changelog
invirt-database

index 796195d..5d8decf 100644 (file)
@@ -1,3 +1,9 @@
+invirt-xen-config (0.0.30) unstable; urgency=low
+
+  * Support debian-installer based autoinstallation.
+
+ -- Quentin Smith <quentin@mit.edu>  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.
index a0dc979..e4eed03 100644 (file)
@@ -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)