X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=scripts%2Fvserver-build.fai;h=6e2333fc92f17f0948edebe7076705116e04eaf9;hb=925e69ce006ee22fbc35b8328dcd4942d9215c96;hp=9c6506dc3a9b3ac2dfb8166e0c4a703c3743e956;hpb=38bf3b3b70899e4dedfaf08a5a87ef07be4af147;p=util-vserver.git diff --git a/scripts/vserver-build.fai b/scripts/vserver-build.fai index 9c6506d..6e2333f 100644 --- a/scripts/vserver-build.fai +++ b/scripts/vserver-build.fai @@ -25,6 +25,7 @@ DISTRIBUTION=: FAI_VSERVER= FAI_NFSROOT=/usr/lib/fai/nfsroot FAI_DIR=/usr/local/share/fai +AUTO=1 use_pkgmgmt= while true; do @@ -32,7 +33,7 @@ while true; do -f) FAI_VSERVER=$2; shift; ;; -n) FAI_NFSROOT=$2; shift; ;; -d) FAI_DIR=$2; shift; ;; - -a) AUTO=1; ;; + -a) AUTO=;; --debug) DEBUG=1; SH_DEBUG=-x; set -x;; --) shift; break ;; *) echo "vserver-build.fai: internal error: unrecognized option '$1'" >&2 @@ -52,13 +53,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,35 +79,47 @@ 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 $"\ +ERROR: Looks like you don't have the patched FAI. +See http://faiwiki.informatik.uni-koeln.de/index.php/Using_FAI_as_a_vserver_build_method +for information on where to get it." 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. console=dummy -# set up interfaces, so that the vserver can be built with restricted -# network access. -generateOptions "$SETUP_CONFDIR" -enableInterfaces "$SETUP_CONFDIR" +killprocs() { + set +e + S_CONTEXT= + if isVserverRunning "$SETUP_CONFDIR" S_CONTEXT + then + $_VKILL -c "$S_CONTEXT" -s 15 + sleep 2 + $_VKILL -c "$S_CONTEXT" -s 9 + sleep 2 + isVserverRunning "$SETUP_CONFDIR" && warning $"\ +Vserver '$VSERVER_NAME' still running unexpectedly; please investigate it +manually." + fi + [ -n "$HAVE_INTERFACES" ] && disableInterfaces "$SETUP_CONFDIR" + base.__cleanup +} + +trap killprocs INT EXIT # last chance to abort! if [ -z "$AUTO" ] @@ -108,19 +128,11 @@ then read junk 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" -} - -trap killprocs INT EXIT +# set up interfaces, so that the vserver can be built with restricted +# network access. +generateOptions "$SETUP_CONFDIR" +enableInterfaces "$SETUP_CONFDIR" +HAVE_INTERFACES=1 rwpaths="/var/lock /var/log /dev /var/run /etc/sysconfig" [ -d "$FAI_NFSROOT/etc/network/run" ] && rwpaths="$rwpaths /etc/network/run" @@ -129,24 +141,27 @@ 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 +# set up /mnt with all the mounts required +$_SECURE_MOUNT -n -o ro,dev --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 -o rw,dev --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[@]}" \ +"${CHBIND_CMD[@]}" \ $_VCONTEXT --create "${OPTS_VCONTEXT_CREATE[@]}" -- \ - $_VUNAME --xid self --set -t nodename="$SETUP_HOSTNAME" -- \ + $_VUNAME --xid self --set -t nodename="${SETUP_HOSTNAME:-fai-build}" \ + -t context="$SETUP_CONFDIR" -- \ $_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"