vm_cpus = 1
vm_mem = 2
vm_mac5 = 3
-machines = { 'bees-knees' : ['david-letterman', 2, 6144, 10],
- 'cats-whiskers' : ['david-letterman', 2, 6144, 20],
- 'not-backward' : ['david-letterman', 2, 2560, 30],
- 'busy-beaver' : ['conan-obrien', 2, 4096, 40],
- 'pancake-bunny' : ['conan-obrien', 2, 4096, 50],
- 'whole-enchilada': ['jay-leno', 1, 2048, 60],
- 'real-mccoy' : ['jay-leno', 2, 4096, 70],
- 'not-forward' : ['jay-leno', 2, 512, 80],
- 'old-faithful' : ['johnny-carson', 2, 4096, 90],
- 'better-mousetrap' : ['johnny-carson', 2, 4096,100],
+machines = { 'bees-knees' : ['david-letterman', 2, 2560, '10'],
+ 'cats-whiskers' : ['david-letterman', 2, 6144, '20'],
+ 'not-backward' : ['david-letterman', 2, 2560, '30'],
+ 'busy-beaver' : ['conan-obrien', 2, 4096, '40'],
+ 'pancake-bunny' : ['conan-obrien', 2, 4096, '50'],
+ 'whole-enchilada': ['jay-leno', 2, 4096, '60'],
+ 'real-mccoy' : ['jay-leno', 2, 4096, '70'],
+ 'not-forward' : ['jay-leno', 1, 512, '80'],
+ 'old-faithful' : ['johnny-carson', 2, 4096, '90'],
+ 'better-mousetrap' : ['johnny-carson', 2, 4096, 'a0'],
+ 'shining-armor' : ['david-letterman', 2, 6144, 'b0'],
}
vm = machines[machine_name]
if os.path.exists(install_dir): return
print "Downloading %s..." % install_dir
fedora_release = install[1:],
- download_dir = "ftp://mirrors.mit.edu/fedora/linux/releases/%s/Fedora/x86_64/os" % fedora_release
+ download_dir = "ftp://mirrors.mit.edu/fedora/linux/releases/%s/Fedora/x86_64/os/isolinux" % fedora_release
os.mkdir(install_dir)
subprocess.check_call(["wget", "-r", "-nd", download_dir], cwd=install_dir)
-def make_ramdisk(base_image, machine_name, install):
+def serve_kickstart(machine_name, install):
"""
- Create a ramdisk containing our kickstart file in /root/kickstart.ks
+ Serve a parametrized /root/kickstart.ks to localhost once.
"""
import socket
- import tempfile
- import subprocess
- import os
- import os.path
- import gzip
- import StringIO
import string
- import shutil
+ import re
+ import os
+ import BaseHTTPServer
+ import sys
# some calculations
hostname = machine_name + ".mit.edu"
ip = socket.gethostbyname(hostname)
- # create the playground
- tmpdir = tempfile.mkdtemp()
- rootdir = os.path.join(tmpdir, "root")
+ source_server = "shining-armor.mit.edu" # hard-coded
+ source_ip = re.sub('^18.181.0.', '172.21.0.', socket.gethostbyname(source_server))
- # add the kickstart file
- os.mkdir(rootdir)
+ # generate the kickstart file
ks_orig = open("/etc/xen/scripts.ks").read()
ks = string.Template(ks_orig).substitute(
local_mirror = "ftp://mirrors.mit.edu",
official_mirror = "http://download3.fedora.redhat.com/pub",
arch = "x86_64",
- fedora_release = install[1:],
+ fedora_release = re.sub('^f', '', install),
hostname = hostname,
ip = ip,
+ backend_ip = re.sub('^18.181.0.', '172.21.0.', ip),
+ branch = "branches/fc13-dev",
+ source_server = source_server,
+ source_ip = source_ip,
)
- open(os.path.join(rootdir, "scripts.ks"), 'w').write(ks)
-
- # generate the final image
- (tmpfd, tmpname) = tempfile.mkstemp(suffix=".img")
- tmp = os.fdopen(tmpfd, 'w')
- tmp.write(gzip.open(base_image).read())
- tmp.close()
- find = subprocess.Popen(["find", ".", "-depth", "-print"],
- stdout=subprocess.PIPE, cwd=tmpdir)
- cpio = subprocess.Popen(["cpio", "-v", "--append", "-o", "--file", tmpname, "-H", "newc"],
- stdin=find.stdout, cwd=tmpdir)
- cpio.communicate()
- find.wait()
-
- print "Using initramfs at %s" % tmpname
- return tmpname
+
+ class SingleFileHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+ def do_GET(self):
+ self.send_response(200)
+ self.end_headers()
+ self.wfile.write(ks)
+
+ if os.fork(): return
+
+ # brief race condition
+ try:
+ BaseHTTPServer.HTTPServer(('', 55555), SingleFileHandler).handle_request()
+ except Exception, e:
+ print "Serving kickstart failed."
+ print e
+ else:
+ print "Kickstart served"
+
+ sys.exit()
if 'install' in locals():
- kernel = "/root/%s-install/vmlinuz" % install
- extra = "selinux=0 ks=file:/root/scripts.ks"
maybe_download_isolinux(install)
- ramdisk = make_ramdisk("/root/%s-install/initrd.img" % install, machine_name, install)
+
+ kernel = "/root/%s-install/vmlinuz" % install
+ ramdisk = "/root/%s-install/initrd.img" % install
+
+ ip = socket.gethostbyname(machine_name + ".mit.edu")
+
+ serve_kickstart(machine_name, install)
+
+ ks_url = "http://%s.mit.edu:55555/" % vm[vm_host]
+ extra = ' '.join([
+ "selinux=0",
+ "ks=" + ks_url,
+ "ip=" + ip,
+ "netmask=255.255.0.0",
+ "gateway=18.181.0.1",
+ "dns=18.70.0.160,18.71.0.151,18.72.0.3",
+ "ksdevice=eth0",
+ # "syslog=18.181.0.51:514 debug=1 loglevel=debug telnet",
+ ])
+ on_reboot = 'destroy' # don't rerun the installer
+
elif 'type' in locals() and type == 'hvm':
kernel = "/usr/lib/xen/boot/hvmloader"
builder = "hvm"