New guest-based autoinstaller
authorEric Price <ecprice@mit.edu>
Mon, 28 Jul 2008 03:35:58 +0000 (23:35 -0400)
committerEric Price <ecprice@mit.edu>
Mon, 28 Jul 2008 03:35:58 +0000 (23:35 -0400)
svn path=/trunk/packages/sipb-xen-guest-installer/; revision=741

debian/control
debian/control.in
domU/etc/init.d/rcS [new file with mode: 0644]
domU/usr/sbin/sipb-xen-install
files/etc/xen/autoinstall.cfg [new file with mode: 0644]
files/srv/guest-installer/etch/cdrom.patch [deleted file]
files/srv/guest-installer/etch/cdrom.supplement/isolinux/isolinux.cfg [deleted file]
files/srv/guest-installer/etch/iso.url [deleted file]
files/srv/guest-installer/etch/preseed.cfg [deleted file]
files/usr/sbin/sipb-xen-install

index 3add234..2f15ed2 100644 (file)
@@ -1,12 +1,18 @@
-Source: sipb-xen-guest-installer
+Source: sipb-xen-autoinstaller
 Section: net
 Priority: extra
 Maintainer: SIPB Xen Project <sipb-xen@mit.edu>
 Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 4.2.0)
 Standards-Version: 3.7.2
 
 Section: net
 Priority: extra
 Maintainer: SIPB Xen Project <sipb-xen@mit.edu>
 Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 4.2.0)
 Standards-Version: 3.7.2
 
-Package: sipb-xen-guest-installer
+Package: sipb-xen-autoinstaller-guest
 Architecture: all
 Architecture: all
-Depends: ${misc:Depends}, patch, xen-tools, kpartx
-Description: SIPB Xen automatic guest-image installer system
+Depends: ${misc:Depends}, patch, xen-tools, kpartx, lvm2
+Description: SIPB Xen automatic guest-image installer system (guest)
+ This is our automatic guest-image installer system.
+
+Package: sipb-xen-autoinstaller-host
+Architecture: all
+Depends: ${misc:Depends}
+Description: SIPB Xen automatic guest-image installer system (host)
  This is our automatic guest-image installer system.
  This is our automatic guest-image installer system.
index 25834b4..e344653 100644 (file)
@@ -1,12 +1,18 @@
-Source: sipb-xen-guest-installer
+Source: sipb-xen-autoinstaller
 Section: net
 Priority: extra
 Maintainer: SIPB Xen Project <sipb-xen@mit.edu>
 Build-Depends: @cdbs@
 Standards-Version: 3.7.2
 
 Section: net
 Priority: extra
 Maintainer: SIPB Xen Project <sipb-xen@mit.edu>
 Build-Depends: @cdbs@
 Standards-Version: 3.7.2
 
-Package: sipb-xen-guest-installer
+Package: sipb-xen-autoinstaller-guest
 Architecture: all
 Architecture: all
-Depends: ${misc:Depends}, patch, xen-tools, kpartx
-Description: SIPB Xen automatic guest-image installer system
+Depends: ${misc:Depends}, patch, xen-tools
+Description: SIPB Xen automatic guest-image installer system (guest)
+ This is our automatic guest-image installer system.
+
+Package: sipb-xen-autoinstaller-host
+Architecture: all
+Depends: ${misc:Depends}
+Description: SIPB Xen automatic guest-image installer system (host)
  This is our automatic guest-image installer system.
  This is our automatic guest-image installer system.
diff --git a/domU/etc/init.d/rcS b/domU/etc/init.d/rcS
new file mode 100644 (file)
index 0000000..d786d7d
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+for x in $(cat /proc/cmdline); do
+    case $x in
+    ip=*)
+      /usr/lib/klibc/bin/ipconfig -d ${x#ip=}
+      ;;
+    noinstall)
+      exit 0
+      ;;
+    esac
+done
+mount -t tmpfs none /var/log
+mount -t tmpfs none /tmp
+sipb-xen-install
+busybox poweroff
+exit 0
index de4fb01..5f467ff 100644 (file)
@@ -2,29 +2,12 @@
 
 TARGET=/dev/hda
 
 
 TARGET=/dev/hda
 
-#For some strange reason, . $TARGET doesn't work reliably.
+# Read in the environment variables
+# For some strange reason, . $TARGET doesn't work reliably.
 eval `grep -a -m1 -B 100 ^return$ $TARGET | grep -v return`
 
 eval `grep -a -m1 -B 100 ^return$ $TARGET | grep -v return`
 
-
-#HOSTNAME=foobar
-#DIST=etch
-#MIRROR=http://debian.lcs.mit.edu/debian
-#IMAGESIZE=3800
-
 ARCH=amd64
 
 ARCH=amd64
 
-#LVSIZE=`lvs --noheadings --units M --nosuffix -o Size /dev/xenvg/d_foobar_hda | sed 's/\..*//'`
-
-# If this script is interrupted, it may not clean up after itself.
-# In particular, it may leave ${VOLUME}1 mounted somewhere in tmp.
-# Unmount it, then kpartx -d $VOLUME to clean up.
-
-###
-###  Create the device for SIPB-Xen purposes
-###
 echo ,${IMAGESIZE}$',L,*\n,,S\n;\n;' | sfdisk -uM -H 255 -S 63 $TARGET
 echo ,${IMAGESIZE}$',L,*\n,,S\n;\n;' | sfdisk -uM -H 255 -S 63 $TARGET
-#kpartx -a $TARGET
-
-xen-create-image --image-dev ${TARGET}1 --swap-dev ${TARGET}2 --fs ext3 --ide --arch $ARCH --dist $DIST --hostname $HOSTNAME --mirror $MIRROR --dhcp --cache=yes
 
 
-#kpartx -d $TARGET
+xen-create-image --image-dev ${TARGET}1 --swap-dev ${TARGET}2 --fs ext3 --ide --arch $ARCH --dist $DIST --hostname $HOSTNAME --mirror $MIRROR --ip=$IP --netmask=255.255.0.0 --gateway=18.181.0.1 --cache=yes
diff --git a/files/etc/xen/autoinstall.cfg b/files/etc/xen/autoinstall.cfg
new file mode 100644 (file)
index 0000000..88db3fd
--- /dev/null
@@ -0,0 +1,45 @@
+#
+# Configuration file for the Xen instance foobar, created
+# by xen-tools 3.7 on Sat Jun 21 16:24:54 2008.
+#
+
+#
+#  Kernel + memory size
+#
+#bootloader = '/usr/lib/xen-default/bin/pygrub'
+kernel      = '/boot/vmlinuz-2.6.24-19-xen'
+ramdisk     = '/boot/initrd.img-2.6.24-19-xen'
+memory      = '256'
+
+
+#
+#  Hostname
+#
+name        = 'd_foobar2'
+
+
+#
+#  Disk device(s).
+#
+disk        = [
+                  'phy:/dev/xenvg/%s_hda,hdb,r' % name,
+                  'phy:/dev/xenvg/d_%s_hda,hda,w' % target,
+              ]
+
+root = '/dev/hdb1'
+extra = 'ro noresume ip=18.181.0.216::18.181.0.1:255.255.0.0:foobar2:eth0:off'
+
+#
+#  Networking
+#
+vif         = [ 'ip=18.181.0.216,mac=00:16:3e:00:2c:ee,script=vif-bridge' ]
+
+#
+#  Behaviour
+#
+on_poweroff = 'destroy'
+on_reboot   = 'restart'
+on_crash    = 'destroy'
+
+
+
diff --git a/files/srv/guest-installer/etch/cdrom.patch b/files/srv/guest-installer/etch/cdrom.patch
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/files/srv/guest-installer/etch/cdrom.supplement/isolinux/isolinux.cfg b/files/srv/guest-installer/etch/cdrom.supplement/isolinux/isolinux.cfg
deleted file mode 100644 (file)
index b8c2935..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-PROMPT 1
-TIMEOUT 0
-DEFAULT sipb-xen-install
-LABEL sipb-xen-install
-       kernel /install.amd/vmlinuz
-       append auto=true preseed/file=/cdrom/preseed.cfg priority=critical vga=normal fb=false initrd=/install.amd/initrd.gz --
diff --git a/files/srv/guest-installer/etch/iso.url b/files/srv/guest-installer/etch/iso.url
deleted file mode 100644 (file)
index dc01ddf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-http://cdimage.debian.org/debian-cd/4.0_r1/amd64/iso-cd/debian-40r1-amd64-businesscard.iso
diff --git a/files/srv/guest-installer/etch/preseed.cfg b/files/srv/guest-installer/etch/preseed.cfg
deleted file mode 100644 (file)
index 72d59ab..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-#### Contents of the preconfiguration file
-d-i debian-installer/locale string en_US
-d-i console-keymaps-at/keymap select us
-
-### Network configuration
-# netcfg will choose an interface that has link if possible. This makes it
-# skip displaying a list if there is more than one interface.
-d-i netcfg/choose_interface select auto
-
-#d-i netcfg/dhcp_timeout string 1
-d-i netcfg/use_dhcp boolean true
-
-# Any hostname and domain names assigned from dhcp take precedence over
-# values set here. However, setting the values still prevents the questions
-# from being shown, even if values come from dhcp.
-# at bottom  #d-i netcfg/get_hostname string fillme
-d-i netcfg/get_domain string mit.edu
-
-# Disable that annoying WEP key dialog.
-d-i netcfg/wireless_wep string
-
-### Mirror settings
-# If you select ftp, the mirror/country string does not need to be set.
-#d-i mirror/protocol string ftp
-d-i mirror/country string enter information manually
-d-i mirror/http/hostname string debian.lcs.mit.edu
-d-i mirror/http/directory string /debian
-d-i mirror/http/proxy string
-
-# Suite to install.
-#d-i mirror/suite string testing
-# Suite to use for loading installer components (optional).
-#d-i mirror/udeb/suite string testing
-
-### Partitioning
-# If the system has free space you can choose to only partition that space.
-# Note: this must be preseeded with a localized (translated) value.
-#d-i partman-auto/init_automatically_partition \
-#      select Guided - use the largest continuous free space
-
-# Alternatively, you can specify a disk to partition. The device name
-# can be given in either devfs or traditional non-devfs format.
-# For example, to use the first disk:
-d-i partman-auto/disk string /dev/discs/disc0/disc
-# In addition, you'll need to specify the method to use.
-# The presently available methods are: "regular", "lvm" and "crypto"
-d-i partman-auto/method string regular
-
-# If one of the disks that are going to be automatically partitioned
-# contains an old LVM configuration, the user will normally receive a
-# warning. This can be preseeded away...
-d-i partman-auto/purge_lvm_from_device boolean true
-# And the same goes for the confirmation to write the lvm partitions.
-#d-i partman-lvm/confirm boolean true
-
-# You can choose from any of the predefined partitioning recipes.
-# Note: this must be preseeded with a localized (translated) value.
-d-i partman-auto/choose_recipe \
-       select All files in one partition (recommended for new users)
-#d-i partman-auto/choose_recipe \
-#       select Separate /home partition
-#d-i partman-auto/choose_recipe \
-#       select Separate /home, /usr, /var, and /tmp partitions
-
-# Or provide a recipe of your own...
-# The recipe format is documented in the file devel/partman-auto-recipe.txt.
-# If you have a way to get a recipe file into the d-i environment, you can
-# just point at it.
-#d-i partman-auto/expert_recipe_file string /hd-media/recipe
-
-# If not, you can put an entire recipe into the preconfiguration file in one
-# (logical) line. This example creates a small /boot partition, suitable
-# swap, and uses the rest of the space for the root partition:
-#d-i partman-auto/expert_recipe string                         \
-#      boot-root ::                                            \
-#              40 50 100 ext3                                  \
-#                      $primary{ } $bootable{ }                \
-#                      method{ format } format{ }              \
-#                      use_filesystem{ } filesystem{ ext3 }    \
-#                      mountpoint{ /boot }                     \
-#              .                                               \
-#              500 10000 1000000000 ext3                       \
-#                      method{ format } format{ }              \
-#                      use_filesystem{ } filesystem{ ext3 }    \
-#                      mountpoint{ / }                         \
-#              .                                               \
-#              64 512 300% linux-swap                          \
-#                      method{ swap } format{ }                \
-#              .
-
-# This makes partman automatically partition without confirmation.
-d-i partman/confirm_write_new_label boolean true
-d-i partman/choose_partition \
-       select Finish partitioning and write changes to disk
-d-i partman/confirm boolean true
-
-### Clock and time zone setup
-# Controls whether or not the hardware clock is set to UTC.
-d-i clock-setup/utc boolean true
-
-# You may set this to any valid setting for $TZ; see the contents of
-# /usr/share/zoneinfo/ for valid values.
-d-i time/zone string US/Eastern
-
-### Apt setup
-# You can choose to install non-free and contrib software.
-#d-i apt-setup/non-free boolean true
-#d-i apt-setup/contrib boolean true
-# Uncomment this if you don't want to use a network mirror.
-#d-i apt-setup/use_mirror boolean false
-# Uncomment this to avoid adding security sources, or
-# add a hostname to use a different server than security.debian.org.
-#d-i apt-setup/security_host string
-
-# Additional repositories, local[0-9] available
-#d-i apt-setup/local0/repository string \
-#       deb http://local.server/debian stable main
-#d-i apt-setup/local0/comment string local server
-# Enable deb-src lines
-#d-i apt-setup/local0/source boolean true
-# URL to the public key of the local repository; you must provide a key or
-# apt will complain about the unauthenticated repository and so the
-# sources.list line will be left commented out
-#d-i apt-setup/local0/key string http://local.server/key
-
-# By default the installer requires that repositories be authenticated
-# using a known gpg key. This setting can be used to disable that
-# authentication. Warning: Insecure, not recommended.
-#d-i debian-installer/allow_unauthenticated string true
-
-### Account setup
-# Skip creation of a root account (normal user account will be able to
-# use sudo).
-#d-i passwd/root-login boolean false
-# Alternatively, to skip creation of a normal user account.
-d-i passwd/make-user boolean false
-
-# Root password, either in clear text
-#d-i passwd/root-password password r00tme
-#d-i passwd/root-password-again password r00tme
-# or encrypted using an MD5 hash.
-# at bottom  #d-i passwd/root-password-crypted password [MD5 hash]
-
-# To create a normal user account.
-#d-i passwd/user-fullname string Debian User
-#d-i passwd/username string debian
-# Normal user's password, either in clear text
-#d-i passwd/user-password password insecure
-#d-i passwd/user-password-again password insecure
-# or encrypted using an MD5 hash.
-#d-i passwd/user-password-crypted password [MD5 hash]
-
-### Base system installation
-# Select the initramfs generator used to generate the initrd for 2.6 kernels.
-#d-i base-installer/kernel/linux/initramfs-generators string yaird
-
-### Boot loader installation
-# Grub is the default boot loader (for x86). If you want lilo installed
-# instead, uncomment this:
-#d-i grub-installer/skip boolean true
-
-# This is fairly safe to set, it makes grub install automatically to the MBR
-# if no other operating system is detected on the machine.
-d-i grub-installer/only_debian boolean true
-
-# This one makes grub-installer install to the MBR if it also finds some other
-# OS, which is less safe as it might not be able to boot that other OS.
-d-i grub-installer/with_other_os boolean true
-
-# Alternatively, if you want to install to a location other than the mbr,
-# uncomment and edit these lines:
-#d-i grub-installer/only_debian boolean false
-#d-i grub-installer/with_other_os boolean false
-#d-i grub-installer/bootdev  string (hd0,0)
-# To install grub to multiple disks:
-#d-i grub-installer/bootdev  string (hd0,0) (hd1,0) (hd2,0)
-
-### Package selection
-tasksel tasksel/first multiselect standard
-
-# Individual additional packages to install
-#d-i pkgsel/include string openssh-server build-essential
-
-### Finishing up the first stage install
-# Avoid that last message about the install being complete.
-d-i finish-install/reboot_in_progress note
-
-# This will prevent the installer from ejecting the CD during the reboot,
-# which is useful in some situations.
-#d-i cdrom-detect/eject boolean false
-
-### Preseeding other packages
-# Depending on what software you choose to install, or if things go wrong
-# during the installation process, it's possible that other questions may
-# be asked. You can preseed those too, of course. To get a list of every
-# possible question that could be asked during an install, do an
-# installation, and then run these commands:
-#   debconf-get-selections --installer > file
-#   debconf-get-selections >> file
-
-
-#### Advanced options
-### Running custom commands during the installation
-# d-i preseeding is inherently not secure. Nothing in the installer checks
-# for attempts at buffer overflows or other exploits of the values of a
-# preconfiguration file like this one. Only use preconfiguration files from
-# trusted locations! To drive that home, and because it's generally useful,
-# here's a way to run any shell command you'd like inside the installer,
-# automatically.
-
-# This first command is run as early as possible, just after
-# preseeding is read.
-#d-i preseed/early_command string anna-install some-udeb
-
-# This command is run just before the install finishes, but when there is
-# still a usable /target directory. You can chroot to /target and use it
-# directly, or use the apt-install and in-target commands to easily install
-# packages and run commands in the target system.
-#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
-
-
-
-# sipb-xen: automatically filled-in values get appended here. 
-# at bottom  #d-i passwd/root-password-crypted password [MD5 hash]
index 7d82f06..ad72827 100644 (file)
@@ -1,6 +1,6 @@
-#!/bin/sh
+#!/bin/bash
 
 
-export PATH #WTF?
+export PATH
 
 HOSTNAME="$2"
 DIST="$3"
 
 HOSTNAME="$2"
 DIST="$3"
@@ -8,34 +8,15 @@ MIRROR="$4"
 IMAGESIZE="$5"
 IP="$6"
 
 IMAGESIZE="$5"
 IP="$6"
 
-ARCH=amd64
+VOLUME=/dev/mapper/xenvg-d_${HOSTNAME}_hda
 
 
-#LVSIZE=`lvs --noheadings --units M --nosuffix -o Size /dev/xenvg/d_foobar_hda | sed 's/\..*//'`
+cat > $VOLUME <<EOF
+HOSTNAME=$HOSTNAME
+DIST=$DIST
+MIRROR=$MIRROR
+IMAGESIZE=$IMAGESIZE
+IP=$IP
+return
+EOF
 
 
-if [ -z "$IP" ]; then
-    IP=`host $HOSTNAME.xvm.mit.edu | sed 's/.* //' | head -n 1`
-fi
-
-VOLUME=/dev/mapper/xenvg-d_$(echo "$HOSTNAME" | sed -e 's/-/--/g')_hda
-
-# If this script is interrupted, it may not clean up after itself.
-# In particular, it may leave ${VOLUME}1 mounted somewhere in tmp.
-# Unmount it, then kpartx -d $VOLUME to clean up.
-
-###
-###  Create the device for SIPB-Xen purposes
-###
-echo ,${IMAGESIZE}$',L,*\n,,S\n;\n;' | sfdisk -uM -H 255 -S 63 $VOLUME
-kpartx -a $VOLUME
-
-# We use static IP addresses since dhcp doesn't work in paravm because
-# of a UDP checksum bug.
-
-xen-create-image --image-dev ${VOLUME}1 --swap-dev ${VOLUME}2 --fs ext3 --ide --arch $ARCH --dist $DIST --hostname $HOSTNAME --mirror $MIRROR --ip=$IP --netmask=255.255.0.0 --gateway=18.181.0.1 --template=/dev/null --cache
-
-# xen-create-image always creates a config file.  The
-# --template=/dev/null argument makes it empty, but it still should be
-# removed.
-rm -f /etc/xen/$HOSTNAME.cfg
-
-kpartx -d $VOLUME
+xm create autoinstall.cfg target=$HOSTNAME guestip=$IP