vshost-util-vserver

Build script and sources for util-vserver.
git clone https://ccx.te2000.cz/git/vshost-util-vserver
Log | Files | Refs

vserver-build.fai (5024B)


      1 #
      2 # Copyright (C) 2006 Sam Vilain <sam.vilain@catalyst.net.nz>
      3 #  
      4 # This program is free software; you can redistribute it and/or modify
      5 # it under the terms of the GNU General Public License as published by
      6 # the Free Software Foundation; version 2 of the License.
      7 #  
      8 # This program is distributed in the hope that it will be useful,
      9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11 # GNU General Public License for more details.
     12 #  
     13 # You should have received a copy of the GNU General Public License
     14 # along with this program; if not, write to the Free Software
     15 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     16 
     17 tmp=$(getopt -o '+d:f:n:a' --long debug,pkgmgmt -n "$0" -- "$@") || exit 1
     18 eval set -- "$tmp"
     19 
     20 . "$_LIB_VSERVER_BUILD_FUNCTIONS_PKGMGMT"
     21 . "$_LIB_VSERVER_FUNCTIONS"
     22 
     23 DISTRIBUTION=:
     24 
     25 FAI_VSERVER=
     26 FAI_NFSROOT=/usr/lib/fai/nfsroot
     27 FAI_DIR=/usr/local/share/fai
     28 AUTO=1
     29 
     30 use_pkgmgmt=
     31 while true; do
     32     case "$1" in
     33 	-f)		FAI_VSERVER=$2; shift; ;;
     34 	-n)		FAI_NFSROOT=$2; shift; ;;
     35 	-d)		FAI_DIR=$2; shift; ;;
     36 	-a)		AUTO=;;
     37 	--debug)	DEBUG=1; SH_DEBUG=-x; set -x;;
     38 	--)		shift; break ;;
     39 	*)		echo "vserver-build.fai: internal error: unrecognized option '$1'" >&2
     40 			exit 1
     41 			;;
     42     esac
     43     shift
     44 done
     45 
     46 getDistribution '' 1
     47 
     48 base.init
     49 base.initFilesystem "$OPTION_FORCE"
     50 
     51 setup_writeOption "$VSERVER_NAME"
     52 setup_writeInitialFstab
     53 
     54 test -z "$BUILD_INITPRE"  || "$BUILD_INITPRE" "$SETUP_CONFDIR"  "$UTIL_VSERVER_VARS"
     55 
     56 # migrate is a 2.6 feature, we need 2.6 for the secure_mount ccap
     57 if ! $_VSERVER_INFO - FEATURE migrate; then
     58     panic $"\
     59 The fai build method requires kernel features that are not present
     60 in your kernel."
     61 fi
     62 
     63 # if they specified a vserver where FAI is installed, then prefix its
     64 # root to the FAI_NFSROOT etc (unless they have already specified a
     65 # $ROOTDIR-relative path)
     66 REAL_ROOTDIR=`getPhysicalDir "$ROOTDIR"`
     67 REAL_VDIR=`getPhysicalDir "$VDIR"`
     68 echo $"ROOTDIR is $REAL_ROOTDIR"
     69 echo $"VDIR    is $REAL_VDIR"
     70 if [ -n "$FAI_VSERVER" ]
     71 then
     72     echo "FAI_VSERVER is $FAI_VSERVER"
     73     if [ `expr "$FAI_NFSROOT" : "$REAL_ROOTDIR"` -eq 0 ]
     74     then
     75         FAI_NFSROOT="$REAL_ROOTDIR/$FAI_VSERVER$FAI_NFSROOT"
     76     fi
     77     if [ `expr "$FAI_DIR" : "$REAL_ROOTDIR"` -eq 0 ]
     78     then
     79         FAI_DIR="$REAL_ROOTDIR/$FAI_VSERVER$FAI_DIR"
     80     fi
     81 fi
     82 echo $"FAI_NFSROOT is $FAI_NFSROOT"
     83 echo $"FAI_DIR     is $FAI_DIR"
     84 FAI_ROOT=/tmp/target
     85 
     86 if [ ! -e "$FAI_NFSROOT/usr/sbin/fai" ]
     87 then
     88     panic $"NFSROOT not found - did you run fai-setup?"
     89 fi
     90 
     91 if ! grep -qw VIRTUAL "$FAI_NFSROOT/usr/sbin/fai"
     92 then
     93     panic $"\
     94 ERROR: Looks like you don't have the patched FAI.
     95 See http://faiwiki.informatik.uni-koeln.de/index.php/Using_FAI_as_a_vserver_build_method
     96 for information on where to get it."
     97 fi
     98 
     99 set -e
    100 
    101 # suppresses color logo, as it does not leave the terminal in a nice
    102 # state.
    103 console=dummy
    104 
    105 killprocs() {
    106     set +e
    107     S_CONTEXT=
    108     if isVserverRunning "$SETUP_CONFDIR" S_CONTEXT
    109     then
    110 	$_VKILL -c "$S_CONTEXT" -s 15
    111 	sleep 2
    112 	$_VKILL -c "$S_CONTEXT" -s 9
    113 	sleep 2
    114 	isVserverRunning "$SETUP_CONFDIR" && warning $"\
    115 Vserver '$VSERVER_NAME' still running unexpectedly; please investigate it
    116 manually."
    117     fi
    118     [ -n "$HAVE_INTERFACES" ] && disableInterfaces "$SETUP_CONFDIR"
    119     base.__cleanup
    120 }
    121 
    122 trap killprocs INT EXIT
    123 
    124 # last chance to abort!
    125 if [ -z "$AUTO" ]
    126 then
    127     echo -n "Press ENTER to begin, or Ctrl+C to cancel: "
    128     read junk
    129 fi
    130 
    131 # set up interfaces, so that the vserver can be built with restricted
    132 # network access.
    133 generateOptions "$SETUP_CONFDIR"
    134 enableInterfaces "$SETUP_CONFDIR"
    135 HAVE_INTERFACES=1
    136 
    137 rwpaths="/var/lock /var/log /dev /var/run /etc/sysconfig"
    138 [ -d "$FAI_NFSROOT/etc/network/run" ] && rwpaths="$rwpaths /etc/network/run"
    139 
    140 export VDIR ROOTDIR FAI_VSERVER FAI_DIR FAI_NFSROOT FAI_ROOT console
    141 
    142 [ -z "$AUTO" ] && FINAL_SHELL="exec /bin/sh -i"
    143 
    144 # set up /mnt with all the mounts required
    145 $_SECURE_MOUNT -n -o ro,dev --bind "$FAI_NFSROOT" /mnt
    146 $_SECURE_MOUNT -n -t tmpfs -o size=64m,mode=1777 vm /mnt/tmp
    147 $_MKDIR -p /mnt/tmp/target
    148 $_SECURE_MOUNT -n -o rw,dev --bind "$VDIR" /mnt/tmp/target
    149 $_MKDIR -p /mnt/tmp/target/proc
    150 $_SECURE_MOUNT -n -t proc proc /mnt/tmp/target/proc
    151 for x in $rwpaths
    152 do
    153     /mnt/usr/lib/fai/mkrw -n "/mnt$x"
    154 done
    155 $_SECURE_MOUNT -n -o ro --bind "$FAI_DIR" /mnt/fai
    156 $_SECURE_MOUNT -n -t proc proc /mnt/proc
    157 
    158 cd /mnt
    159 "${CHBIND_CMD[@]}" \
    160     $_VCONTEXT --create "${OPTS_VCONTEXT_CREATE[@]}" -- \
    161     $_VUNAME --xid self --set -t nodename="${SETUP_HOSTNAME:-fai-build}" \
    162 	-t context="$SETUP_CONFDIR" -- \
    163     $_VATTRIBUTE --set --xid self "${OPTS_VATTRIBUTE[@]}" --ccap secure_mount \
    164     $_SAVE_CTXINFO "$SETUP_CONFDIR" \
    165     $_VCONTEXT --migrate-self --endsetup --chroot $SILENT_OPT \
    166 	"${OPTS_VCONTEXT_MIGRATE[@]}" "${OPTS_VCONTEXT_ENTER[@]}" -- \
    167     /bin/sh -c "/bin/sh $SH_DEBUG /etc/init.d/rcS -N vschild_build; $FINAL_SHELL"
    168 
    169 test -z "$BUILD_INITPOST" || "$BUILD_INITPOST" "$SETUP_CONFDIR" "$UTIL_VSERVER_VARS"
    170 
    171 base.setSuccess