From 0ac4088e3af253cc141fef0b6e348650dcd280d9 Mon Sep 17 00:00:00 2001 From: Eric Price Date: Sun, 22 Jun 2008 09:32:08 -0400 Subject: [PATCH] Getting towards the autoinstaller in domU. Works with etch, almost works with Hardy but has network trouble. svn path=/trunk/packages/sipb-xen-guest-installer/; revision=641 --- debian/control | 4 +- domU/usr/lib/xen-tools/debian.d/91-make-fstab | 99 ++++++++++++++++++++ domU/usr/lib/xen-tools/debian.d/97-setup-grub | 61 ++++++++++++ .../usr/lib/xen-tools/debian.d/patches/common.diff | 1 + .../lib/xen-tools/debian.d/patches/inittab.diff | 1 + domU/usr/lib/xen-tools/edgy.d/91-make-fstab | 99 ++++++++++++++++++++ domU/usr/lib/xen-tools/edgy.d/97-setup-grub | 1 + domU/usr/lib/xen-tools/edgy.d/patches/common.diff | 1 + domU/usr/lib/xen-tools/edgy.d/patches/event.d.diff | 1 + domU/usr/lib/xen-tools/patches/common.diff | 38 ++++++++ domU/usr/lib/xen-tools/patches/event.d.diff | 14 +++ domU/usr/lib/xen-tools/patches/inittab.diff | 11 +++ domU/usr/sbin/sipb-xen-install | 30 ++++++ 13 files changed, 359 insertions(+), 2 deletions(-) create mode 100644 domU/usr/lib/xen-tools/debian.d/91-make-fstab create mode 100644 domU/usr/lib/xen-tools/debian.d/97-setup-grub create mode 120000 domU/usr/lib/xen-tools/debian.d/patches/common.diff create mode 120000 domU/usr/lib/xen-tools/debian.d/patches/inittab.diff create mode 100644 domU/usr/lib/xen-tools/edgy.d/91-make-fstab create mode 120000 domU/usr/lib/xen-tools/edgy.d/97-setup-grub create mode 120000 domU/usr/lib/xen-tools/edgy.d/patches/common.diff create mode 120000 domU/usr/lib/xen-tools/edgy.d/patches/event.d.diff create mode 100644 domU/usr/lib/xen-tools/patches/common.diff create mode 100644 domU/usr/lib/xen-tools/patches/event.d.diff create mode 100644 domU/usr/lib/xen-tools/patches/inittab.diff create mode 100644 domU/usr/sbin/sipb-xen-install diff --git a/debian/control b/debian/control index 0df6d21..6f8afa1 100644 --- a/debian/control +++ b/debian/control @@ -5,8 +5,8 @@ Maintainer: SIPB Xen Project Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 4.1.0) Standards-Version: 3.7.2 -Package: sipb-xen-remctl-auto +Package: sipb-xen-guest-installer-domU Architecture: all -Depends: ${misc:Depends}, remctl-server +Depends: ${misc:Depends}, patch, xen-tools, kpartx Description: Installs the SIPB Xen automatic remctl management system This is our automatic remctl configuration management system. diff --git a/domU/usr/lib/xen-tools/debian.d/91-make-fstab b/domU/usr/lib/xen-tools/debian.d/91-make-fstab new file mode 100644 index 0000000..e86b4db --- /dev/null +++ b/domU/usr/lib/xen-tools/debian.d/91-make-fstab @@ -0,0 +1,99 @@ +#!/bin/sh + +# This is a copy of 90-make-fstab, with a bug fixed. +# It should be removed once the bug is fixed upstream. + +# +# This script is responsible for setting up /etc/fstab upon the +# new instance. +# +# This should be a simple job, but it is complicated by some of the +# differences between filesystems - some root filesystems will require +# the installation of new packages, and we have to handle that here. +# +# Steve +# -- +# http://www.steve.org.uk/ + + +prefix=$1 + +# +# Source our common functions +# +if [ -e /usr/lib/xen-tools/common.sh ]; then + . /usr/lib/xen-tools/common.sh +else + . ./hooks/common.sh +fi + + +# +# Log our start +# +logMessage Script $0 starting + + +# +# Make sure we use ide style device names if required +# +device=sda +if [ "${ide}" ]; then + device=hda +fi + +# +# Now we have the options we can create the fstab. +# +has_xfs=0 +has_reiserfs=0 +cat < ${prefix}/etc/fstab +# /etc/fstab: static file system information. +# +# +proc /proc proc defaults 0 0 +E_O_FSTAB +for part in `seq 1 ${NUMPARTITIONS}`; do + eval "PARTITION=\"\${PARTITION${part}}\"" + OLDIFS="${IFS}" + IFS=: + x=0 + for partdata in ${PARTITION}; do + eval "partdata${x}=\"${partdata}\"" + x=$(( $x+1 )) + done + IFS="${OLDIFS}" + + case "${partdata2}" in + xfs) + has_xfs=1 + ;; + reiserfs) + has_reiserfs=1 + ;; + esac + + if [ "${partdata2}" = "swap" ]; then + echo "${partdata7} none swap sw 0 0" >> ${prefix}/etc/fstab + else + echo "${partdata7} ${partdata3} ${partdata2} ${partdata4} 0 1" >> ${prefix}/etc/fstab + fi +done + + +# +# Finally we can install any required packages for the given root +# filesystem +# +if [ $has_xfs -eq 1 ]; then + installDebianPackage ${prefix} xfsprogs +fi +if [ $has_reiserfs -eq 1 ]; then + installDebianPackage ${prefix} reiserfsprogs +fi + + +# +# Log our finish +# +logMessage Script $0 finished diff --git a/domU/usr/lib/xen-tools/debian.d/97-setup-grub b/domU/usr/lib/xen-tools/debian.d/97-setup-grub new file mode 100644 index 0000000..366fcd0 --- /dev/null +++ b/domU/usr/lib/xen-tools/debian.d/97-setup-grub @@ -0,0 +1,61 @@ +#!/bin/sh +# +# This script sets up the ParaVM to use pygrub +# + +prefix=$1 + +# +# Source our common functions +# +if [ -e /usr/lib/xen-tools/common.sh ]; then + . /usr/lib/xen-tools/common.sh +else + . ./hooks/common.sh +fi + +echo SCRIPT = $0 +dir=`dirname "$0"` + + +logMessage Script $0 starting + +# To avoid UDP checksum problems. + +installDebianPackage ${prefix} ethtool + +# +# Install the xen kernel. linux-image-xen is in ubuntu, +# linux-image-xen-amd64 in debian. +installDebianPackage ${prefix} linux-image-xen +installDebianPackage ${prefix} linux-image-xen-amd64 + +installDebianPackage ${prefix} grub + +# +# Make the /boot/grub directory +# +mkdir -p ${prefix}/boot/grub + +# +# Create stock menu.lst +# +chroot ${prefix} /usr/sbin/update-grub -y + +# +# Patches to add xen kernels, use serial console, etc. +# +for patch in $dir/patches/*; do + patch -l -d ${prefix} -p1 < $patch +done + +# +# Regenerate automagic kernels list +# +chroot ${prefix} /usr/sbin/update-grub -y + +# +# Log our finish +# +logMessage Script $0 finished + diff --git a/domU/usr/lib/xen-tools/debian.d/patches/common.diff b/domU/usr/lib/xen-tools/debian.d/patches/common.diff new file mode 120000 index 0000000..cfe2fed --- /dev/null +++ b/domU/usr/lib/xen-tools/debian.d/patches/common.diff @@ -0,0 +1 @@ +../../patches/common.diff \ No newline at end of file diff --git a/domU/usr/lib/xen-tools/debian.d/patches/inittab.diff b/domU/usr/lib/xen-tools/debian.d/patches/inittab.diff new file mode 120000 index 0000000..33a991a --- /dev/null +++ b/domU/usr/lib/xen-tools/debian.d/patches/inittab.diff @@ -0,0 +1 @@ +../../patches/inittab.diff \ No newline at end of file diff --git a/domU/usr/lib/xen-tools/edgy.d/91-make-fstab b/domU/usr/lib/xen-tools/edgy.d/91-make-fstab new file mode 100644 index 0000000..e86b4db --- /dev/null +++ b/domU/usr/lib/xen-tools/edgy.d/91-make-fstab @@ -0,0 +1,99 @@ +#!/bin/sh + +# This is a copy of 90-make-fstab, with a bug fixed. +# It should be removed once the bug is fixed upstream. + +# +# This script is responsible for setting up /etc/fstab upon the +# new instance. +# +# This should be a simple job, but it is complicated by some of the +# differences between filesystems - some root filesystems will require +# the installation of new packages, and we have to handle that here. +# +# Steve +# -- +# http://www.steve.org.uk/ + + +prefix=$1 + +# +# Source our common functions +# +if [ -e /usr/lib/xen-tools/common.sh ]; then + . /usr/lib/xen-tools/common.sh +else + . ./hooks/common.sh +fi + + +# +# Log our start +# +logMessage Script $0 starting + + +# +# Make sure we use ide style device names if required +# +device=sda +if [ "${ide}" ]; then + device=hda +fi + +# +# Now we have the options we can create the fstab. +# +has_xfs=0 +has_reiserfs=0 +cat < ${prefix}/etc/fstab +# /etc/fstab: static file system information. +# +# +proc /proc proc defaults 0 0 +E_O_FSTAB +for part in `seq 1 ${NUMPARTITIONS}`; do + eval "PARTITION=\"\${PARTITION${part}}\"" + OLDIFS="${IFS}" + IFS=: + x=0 + for partdata in ${PARTITION}; do + eval "partdata${x}=\"${partdata}\"" + x=$(( $x+1 )) + done + IFS="${OLDIFS}" + + case "${partdata2}" in + xfs) + has_xfs=1 + ;; + reiserfs) + has_reiserfs=1 + ;; + esac + + if [ "${partdata2}" = "swap" ]; then + echo "${partdata7} none swap sw 0 0" >> ${prefix}/etc/fstab + else + echo "${partdata7} ${partdata3} ${partdata2} ${partdata4} 0 1" >> ${prefix}/etc/fstab + fi +done + + +# +# Finally we can install any required packages for the given root +# filesystem +# +if [ $has_xfs -eq 1 ]; then + installDebianPackage ${prefix} xfsprogs +fi +if [ $has_reiserfs -eq 1 ]; then + installDebianPackage ${prefix} reiserfsprogs +fi + + +# +# Log our finish +# +logMessage Script $0 finished diff --git a/domU/usr/lib/xen-tools/edgy.d/97-setup-grub b/domU/usr/lib/xen-tools/edgy.d/97-setup-grub new file mode 120000 index 0000000..9c09136 --- /dev/null +++ b/domU/usr/lib/xen-tools/edgy.d/97-setup-grub @@ -0,0 +1 @@ +../debian.d/97-setup-grub \ No newline at end of file diff --git a/domU/usr/lib/xen-tools/edgy.d/patches/common.diff b/domU/usr/lib/xen-tools/edgy.d/patches/common.diff new file mode 120000 index 0000000..cfe2fed --- /dev/null +++ b/domU/usr/lib/xen-tools/edgy.d/patches/common.diff @@ -0,0 +1 @@ +../../patches/common.diff \ No newline at end of file diff --git a/domU/usr/lib/xen-tools/edgy.d/patches/event.d.diff b/domU/usr/lib/xen-tools/edgy.d/patches/event.d.diff new file mode 120000 index 0000000..23bd944 --- /dev/null +++ b/domU/usr/lib/xen-tools/edgy.d/patches/event.d.diff @@ -0,0 +1 @@ +../../patches/event.d.diff \ No newline at end of file diff --git a/domU/usr/lib/xen-tools/patches/common.diff b/domU/usr/lib/xen-tools/patches/common.diff new file mode 100644 index 0000000..6f385d5 --- /dev/null +++ b/domU/usr/lib/xen-tools/patches/common.diff @@ -0,0 +1,38 @@ +--- /usr/sbin/update-grub.orig 2008-05-03 23:30:37.000000000 -0400 ++++ /usr/sbin/update-grub 2008-05-03 23:30:55.000000000 -0400 +@@ -911,13 +911,6 @@ + is_xen= + fi + +- if [ ! "$in_domU" ] && [ "$is_xen" ]; then +- # skip xen kernels +- continue +- elif [ "$in_domU" ] && ! [ "$is_xen" ]; then +- # skip non-xen kernels +- continue +- fi + kern="/boot/$kern" + newerKernels="" + for i in $sortedKernels ; do +--- /boot/grub/menu.lst.orig 2008-05-04 03:17:31.000000000 -0400 ++++ /boot/grub/menu.lst 2008-05-04 03:19:09.000000000 -0400 +@@ -59,7 +59,7 @@ + ## e.g. kopt=root=/dev/hda1 ro + ## kopt_2_6_8=root=/dev/hdc1 ro + ## kopt_2_6_8_2_686=root=/dev/hdc2 ro +-# kopt=root=/dev/hda1 ro ++# kopt=root=/dev/hda1 ro console=ttyS0,9600,8n1 + + ## default grub root device + ## e.g. groot=(hd0,0) +--- /etc/network/interfaces~ 2008-06-22 06:47:55.000000000 -0400 ++++ /etc/network/interfaces 2008-06-22 06:49:21.000000000 -0400 +@@ -8,7 +8,7 @@ + # The primary network interface + auto eth0 + iface eth0 inet dhcp +-# post-up ethtool -K eth0 tx off ++ pre-up ethtool -K eth0 tx off + + # + # The commented out line above will disable TCP checksumming which diff --git a/domU/usr/lib/xen-tools/patches/event.d.diff b/domU/usr/lib/xen-tools/patches/event.d.diff new file mode 100644 index 0000000..5513b05 --- /dev/null +++ b/domU/usr/lib/xen-tools/patches/event.d.diff @@ -0,0 +1,14 @@ +--- /etc/event.d/ttyS0.orig 2008-06-22 01:57:29.000000000 -0400 ++++ /etc/event.d/ttyS0 2008-06-22 03:12:01.000000000 -0400 +@@ -0,0 +1,11 @@ ++start on runlevel 2 ++start on runlevel 3 ++start on runlevel 4 ++start on runlevel 5 ++ ++stop on runlevel 0 ++stop on runlevel 1 ++stop on runlevel 6 ++ ++respawn ++exec /sbin/getty 115300 ttyS0 diff --git a/domU/usr/lib/xen-tools/patches/inittab.diff b/domU/usr/lib/xen-tools/patches/inittab.diff new file mode 100644 index 0000000..3eb80d2 --- /dev/null +++ b/domU/usr/lib/xen-tools/patches/inittab.diff @@ -0,0 +1,11 @@ +--- /etc/inittab.orig 2008-05-04 02:48:09.000000000 -0400 ++++ /etc/inittab 2008-05-04 02:52:09.000000000 -0400 +@@ -60,7 +60,7 @@ + + # Example how to put a getty on a serial line (for a terminal) + # +-#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 ++T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 + #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 + + # Example how to put a getty on a modem line. diff --git a/domU/usr/sbin/sipb-xen-install b/domU/usr/sbin/sipb-xen-install new file mode 100644 index 0000000..de4fb01 --- /dev/null +++ b/domU/usr/sbin/sipb-xen-install @@ -0,0 +1,30 @@ +#!/bin/bash + +TARGET=/dev/hda + +#For some strange reason, . $TARGET doesn't work reliably. +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 + +#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 +#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 -- 1.7.9.5