From 5e3b218917be924b67bd355a37b8f0cb6ac3c8c2 Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Tue, 3 Oct 2006 18:37:41 +0000 Subject: [PATCH] Make sure we're running on a sufficiently capable kernel. Indent killprocs correctly. Don't require a static xid by using save_ctxinfo. Use secure-mount instead of mount. Set a default hostname if none was specified. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2346 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- scripts/vserver-build.fai | 64 ++++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 29 deletions(-) diff --git a/scripts/vserver-build.fai b/scripts/vserver-build.fai index 9c6506d..7890aaa 100644 --- a/scripts/vserver-build.fai +++ b/scripts/vserver-build.fai @@ -52,13 +52,20 @@ setup_writeInitialFstab test -z "$BUILD_INITPRE" || "$BUILD_INITPRE" "$SETUP_CONFDIR" "$UTIL_VSERVER_VARS" +# migrate is a 2.6 feature, we need 2.6 for the secure_mount ccap +if ! $_VSERVER_INFO - FEATURE migrate; then + panic $"\ +The fai build method requires kernel features that are not present +in your kernel." +fi + # if they specified a vserver where FAI is installed, then prefix its # root to the FAI_NFSROOT etc (unless they have already specified a # $ROOTDIR-relative path) REAL_ROOTDIR=`getPhysicalDir "$ROOTDIR"` REAL_VDIR=`getPhysicalDir "$VDIR"` -echo "ROOTDIR is $REAL_ROOTDIR" -echo "VDIR is $REAL_VDIR" +echo $"ROOTDIR is $REAL_ROOTDIR" +echo $"VDIR is $REAL_VDIR" if [ -n "$FAI_VSERVER" ] then echo "FAI_VSERVER is $FAI_VSERVER" @@ -71,26 +78,23 @@ then FAI_DIR="$REAL_ROOTDIR/$FAI_VSERVER$FAI_DIR" fi fi -echo "FAI_NFSROOT is $FAI_NFSROOT" -echo "FAI_DIR is $FAI_DIR" +echo $"FAI_NFSROOT is $FAI_NFSROOT" +echo $"FAI_DIR is $FAI_DIR" FAI_ROOT=/tmp/target if [ ! -e "$FAI_NFSROOT/usr/sbin/fai" ] then - colpanic "NFSROOT not found - did you run fai-setup?" - exit 1 + panic $"NFSROOT not found - did you run fai-setup?" fi if ! grep -qw VIRTUAL "$FAI_NFSROOT/usr/sbin/fai" then - echo "*** Looks like you don't have the patched FAI." - echo "*** get it from svn://svn.debian.org/svn/fai/people/mugwump/vserver" - exit 1 + panic $"\ +*** Looks like you don't have the patched FAI. +*** get it from svn://svn.debian.org/svn/fai/people/mugwump/vserver" fi -# setup a new filesystem namespace set -e -#[ -d $FAI_NFSROOT/var/log/fai ] || mkdir $FAI_NFSROOT/var/log/fai # suppresses color logo, as it does not leave the terminal in a nice # state. @@ -109,15 +113,16 @@ then fi killprocs() { - base.__cleanup - if [ -e "/proc/virtual/$SETUP_CONTEXT" ] - then - $_VKILL -c "$SETUP_CONTEXT" -s 15 - sleep 2 - $_VKILL -c "$SETUP_CONTEXT" -s 9 - fi - set -x - disableInterfaces "$SETUP_CONFDIR" + base.__cleanup + S_CONTEXT=$($_CAT "$SETUP_CONFDIR"/run 2>/dev/null) + if [ $? -eq 0 -a -d "/proc/virtual/$S_CONTEXT" ] + then + $_VKILL -c "$S_CONTEXT" -s 15 + sleep 2 + $_VKILL -c "$S_CONTEXT" -s 9 + fi + set -x + disableInterfaces "$SETUP_CONFDIR" } trap killprocs INT EXIT @@ -129,24 +134,25 @@ export VDIR ROOTDIR FAI_VSERVER FAI_DIR FAI_NFSROOT FAI_ROOT console [ -z "$AUTO" ] && FINAL_SHELL="exec /bin/sh -i" -mount -n -o ro --bind "$FAI_NFSROOT" /mnt -mount -n -t tmpfs -o size=64m,mode=1777 vm /mnt/tmp -mkdir -p /mnt/tmp/target -mount -n --bind "$VDIR" /mnt/tmp/target -mkdir -p /mnt/tmp/target/proc -mount -n -t proc proc /mnt/tmp/target/proc +$_SECURE_MOUNT -n -o ro --bind "$FAI_NFSROOT" /mnt +$_SECURE_MOUNT -n -t tmpfs -o size=64m,mode=1777 vm /mnt/tmp +$_MKDIR -p /mnt/tmp/target +$_SECURE_MOUNT -n --bind "$VDIR" /mnt/tmp/target +$_MKDIR -p /mnt/tmp/target/proc +$_SECURE_MOUNT -n -t proc proc /mnt/tmp/target/proc for x in $rwpaths do /mnt/usr/lib/fai/mkrw -n "/mnt$x" done -mount -n -o ro --bind "$FAI_DIR" /mnt/fai -mount -n -t proc proc /mnt/proc +$_SECURE_MOUNT -n -o ro --bind "$FAI_DIR" /mnt/fai +$_SECURE_MOUNT -n -t proc proc /mnt/proc cd /mnt $_CHBIND "${CHBIND_OPTS[@]}" \ $_VCONTEXT --create "${OPTS_VCONTEXT_CREATE[@]}" -- \ - $_VUNAME --xid self --set -t nodename="$SETUP_HOSTNAME" -- \ + $_VUNAME --xid self --set -t nodename="${SETUP_HOSTNAME:-fai-build}" -- \ $_VATTRIBUTE --set --xid self "${OPTS_VATTRIBUTE[@]}" --ccap secure_mount \ + $_SAVE_CTXINFO "$SETUP_CONFDIR" \ $_VCONTEXT --migrate-self --endsetup --chroot $SILENT_OPT \ "${OPTS_VCONTEXT_MIGRATE[@]}" "${OPTS_VCONTEXT_ENTER[@]}" -- \ /bin/sh -c "/bin/sh $SH_DEBUG /etc/init.d/rcS -N vschild_build; $FINAL_SHELL" -- 1.8.1.5