vshost-util-vserver

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

vserver-setup.functions (7969B)


      1 # $Id$	--*- sh -*--
      2 
      3 # Copyright (C) 2003,2004,2005,2006 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
      4 #  
      5 # This program is free software; you can redistribute it and/or modify
      6 # it under the terms of the GNU General Public License as published by
      7 # the Free Software Foundation; version 2 of the License.
      8 #  
      9 # This program is distributed in the hope that it will be useful,
     10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     12 # GNU General Public License for more details.
     13 #  
     14 # You should have received a copy of the GNU General Public License
     15 # along with this program; if not, write to the Free Software
     16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
     17 
     18 SETUP_HOSTNAME=
     19 SETUP_NETDEV=
     20 SETUP_NETMASK=
     21 SETUP_NETPREFIX=
     22 SETUP_NETBCAST=
     23 SETUP_LOCKFILE=
     24 SETUP_CONFDIR=
     25 SETUP_CONTEXT=
     26 SETUP_INITSTYLE=
     27 SETUP_CPUSET=
     28 SETUP_CPUSETCPUS=
     29 SETUP_CPUSETMEMS=
     30 SETUP_CPUSETVIRT=
     31 
     32 declare -a SETUP_INTERFACES=()
     33 declare -a SETUP_FLAGS=()
     34 
     35 declare -r SETUP_OPTIONS="confdir:,lockfile:,hostname:,netdev:,netmask:,netprefix:,netbcast:,interface:,flags:,context:,initstyle:,cpuset:,cpusetcpus:,cpusetmems:,cpusetvirt"
     36 declare -r SETUP_HELPMSG=$"
     37     --context   ...  the static context of the vserver [default: none; one will
     38                      be generated for you]
     39     --confdir   ...  [default: $__CONFDIR/<name>]
     40     --lockfile <filename>
     41 		...  [default: $__RUNDIR/<name>]
     42     --hostname <hostname>
     43     --netdev   <device>
     44     --netbcast <broadcast>
     45     --netmask <netmask>|--netprefix <prefixlen>
     46                 ...  sets the  default netmask  (a.b.c.d quadruple)  or prefixlen
     47 		     (length of the interface)
     48     --interface [<name-suffix>=][<device>:]<ip>[/<mask|prefixlen>]
     49                 ...  declares an network-interface;  this option can be specified
     50 		     multiple times
     51     --flags <flags>+
     52                 ...  sets comma-separated list of flags; possible flags are
     53 		     lock:  Prevent the vserver from setting new security context
     54 		     sched: Merge  scheduler priority  of all processes in the
     55 		            vserver so that it acts a like a single
     56 		            one (kernel 2.4 only).
     57                      nproc: Limit the number of processes in the vserver
     58 		            according to ulimit  (instead of a per user limit,
     59 			    this becomes a per vserver limit)
     60 		     private: No other process can join this security context.
     61 		            Even root
     62     --cpuset <name>
     63                 ...  declares the CPUSET this vserver will run in [default: none]
     64     --cpusetcpus <number[-number][:<exclusive>]>
     65                 ...  sets which cpus belong to the CPUSET,
     66                      exclusive is a flag (0|1) prohibiting any other cpuset from
     67                      using those cpus
     68     --cpusetmems <number[-number][:<exclusive>]>
     69                 ...  sets which memory pools belong to the CPUSET,
     70                      exclusive is a flag (0|1) prohibiting any other cpuset from
     71                      using those memory pools
     72     --cpusetvirt
     73                 ...  virtualize cpuset (guest will see only CPUs defined in cpuset)
     74                      Requires kernel patch from http://www.bullopensource.org/cpuset/
     75     --initstyle <style>
     76                 ...  configures the initstyle (e.g. minit,sysv,plain)
     77 "
     78 
     79 function setup_setOption2
     80 {
     81     case "$1" in
     82 	(--context)	SETUP_CONTEXT=$2;;
     83 	(--confdir)	SETUP_CONFDIR=$2;;
     84 	(--lockfile)	SETUP_LOCKFILE=$2;;
     85 	(--hostname)	SETUP_HOSTNAME=$2;;
     86 	(--netdev)	SETUP_NETDEV=$2;;
     87 	(--netmask)	SETUP_NETMASK=$2;;
     88 	(--netprefix)	SETUP_NETPREFIX=$2;;
     89 	(--netbcast)	SETUP_NETBCAST=$2;;
     90 	(--interface)	SETUP_INTERFACES=( "${SETUP_INTERFACES[@]}" "$2" );;
     91 	(--initstyle)	SETUP_INITSTYLE=$2;;
     92 	(--cpuset)	SETUP_CPUSET=$2;;
     93 	(--cpusetcpus)	old_IFS=$IFS
     94 			IFS=:
     95 			set -- $2
     96 			SETUP_CPUSETCPUS=$1
     97 			SETUP_CPUSETCPUSEXCL=$2
     98 			IFS=$old_IFS
     99 			;;
    100 	(--cpusetmems)	old_IFS=$IFS
    101 			IFS=:
    102 			set -- $2
    103 			SETUP_CPUSETMEMS=$1
    104 			SETUP_CPUSETMEMSEXCL=$2
    105 			IFS=$old_IFS
    106 			;;
    107 	(--cpusetvirt)  SETUP_CPUSETVIRT=1;;
    108 	(--flags)	old_IFS=$IFS
    109 			IFS=,
    110 			set -- $2
    111 			SETUP_FLAGS=( "${SETUP_FLAGS[@]}" "$@" )
    112 			IFS=$old_IFS
    113 			;;
    114 	(*)		return 1;;
    115     esac
    116 
    117     return 0
    118 }
    119 
    120 function _setup_writeSingleOption
    121 {
    122     test -z "$1" || echo "$1" >"$2"
    123 }
    124 
    125 function _setup_writeInterface
    126 {
    127     local vdir=$1
    128     local idx=$2
    129     local tmp=$3
    130 
    131     local name=${tmp%%=*}
    132     test "$name" != "$tmp" || name=
    133 
    134     tmp=${tmp##${name}=}
    135     local dev=${tmp%%:*}
    136     local nodev=
    137     test "$dev" != "$tmp"  || dev=
    138 
    139     tmp=${tmp##${dev}:}
    140     test "$dev" != "nodev" || {
    141 	dev=
    142 	nodev=1
    143     }
    144     local mask=${tmp##*/}
    145     test "$mask" != "$tmp"  || mask=
    146 
    147     local ip=${tmp%%/${mask}}
    148 
    149     local prefix=
    150     test "${mask%%.*}" != "$mask" || {
    151 	prefix=$mask
    152 	mask=
    153     }
    154 
    155     d=$vdir/interfaces/$idx
    156     mkdir "$d"
    157     
    158     _setup_writeSingleOption "$name"   $d/name
    159     _setup_writeSingleOption "$dev"    $d/dev
    160     _setup_writeSingleOption "$ip"     $d/ip
    161     _setup_writeSingleOption "$mask"   $d/mask
    162     _setup_writeSingleOption "$prefix" $d/prefix
    163 
    164     test -n "$dev" -o -n "$SETUP_NETDEV" || {
    165 	test -n "$nodev" || \
    166 	    echo $"No device specified for interface '$idx'; setting 'nodev'" >&2
    167 	$_TOUCH $d/nodev
    168     }
    169 }
    170 
    171 function setup_setDefaults
    172 {
    173     : ${SETUP_CONFDIR:=$__CONFDIR/$1}
    174     : ${SETUP_LOCKFILE:=$__RUNDIR/$1}
    175     findFile SETUP_FSTAB "$__CONFDIR"/.defaults/fstab "$__PKGLIBDEFAULTDIR"/fstab
    176 }
    177 
    178 function _setup_generateContext
    179 {
    180     if test -z "$SETUP_CONTEXT" && test ! -e "$__CONFDIR/.defaults/context.dynamic"; then
    181 	if test -e "$__CONFDIR/.defaults/context.next"; then
    182 	    SETUP_CONTEXT=`$_CAT "$__CONFDIR/.defaults/context.next"`
    183 	else
    184 	    SETUP_CONTEXT=`$_CAT "$__PKGLIBDEFAULTDIR/context.start"`
    185 	fi
    186 	expr "$SETUP_CONTEXT" + 1 > "$__CONFDIR/.defaults/context.next"
    187     fi
    188 }
    189 
    190 function setup_writeOption
    191 {
    192     local name=$1
    193     local cfgdir=${SETUP_CONFDIR:?}
    194     local i
    195 
    196     mkdir -p "$cfgdir"/interfaces "$cfgdir"/apps/init "$cfgdir"/uts "$cfgdir"/cpuset
    197 
    198     _setup_generateContext
    199 
    200     _setup_writeSingleOption "$name"            "$cfgdir"/name
    201     _setup_writeSingleOption "$SETUP_CONTEXT"   "$cfgdir"/context
    202     _setup_writeSingleOption "$SETUP_HOSTNAME"  "$cfgdir"/uts/nodename
    203     _setup_writeSingleOption "$SETUP_NETDEV"    "$cfgdir"/interfaces/dev
    204     _setup_writeSingleOption "$SETUP_NETMASK"   "$cfgdir"/interfaces/mask
    205     _setup_writeSingleOption "$SETUP_NETPREFIX" "$cfgdir"/interfaces/prefix
    206     _setup_writeSingleOption "$SETUP_NETBCAST"  "$cfgdir"/interfaces/bcast
    207     _setup_writeSingleOption "$SETUP_INITSTYLE" "$cfgdir"/apps/init/style
    208     _setup_writeSingleOption "$SETUP_CPUSET"    "$cfgdir"/cpuset/name
    209     _setup_writeSingleOption "$SETUP_CPUSETCPUS"     "$cfgdir"/cpuset/cpus
    210     _setup_writeSingleOption "$SETUP_CPUSETCPUSEXCL" "$cfgdir"/cpuset/cpus_exclusive
    211     _setup_writeSingleOption "$SETUP_CPUSETMEMS"     "$cfgdir"/cpuset/mems
    212     _setup_writeSingleOption "$SETUP_CPUSETMEMSEXCL" "$cfgdir"/cpuset/mem_exclusive
    213     _setup_writeSingleOption "$SETUP_CPUSETVIRT"     "$cfgdir"/cpuset/virtualized
    214 
    215     local idx=0
    216     for i in "${SETUP_INTERFACES[@]}"; do
    217 	_setup_writeInterface "$cfgdir" $idx "$i"
    218 	let ++idx
    219     done
    220 
    221     test -z "$SETUP_FLAGS" || for i in "${SETUP_FLAGS[@]}"; do
    222 	echo "$i"
    223     done >"$cfgdir"/cflags
    224 
    225     ln -s "$SETUP_LOCKFILE"   "$cfgdir"/run
    226 }
    227 
    228 function setup_writeInitialFstab
    229 {
    230     cat "${SETUP_FSTAB:?}" >"${SETUP_CONFDIR:?}"/fstab
    231 }
    232 
    233 function setup_test
    234 {
    235     SETUP_INTERFACES=()
    236 
    237     setup_setOption2 --interface foo0=eth0:1.2.3.4/1
    238     setup_setOption2 --interface foo1=eth0:1.2.3.4/255.255.248.0
    239     setup_setOption2 --interface foo2=eth0:1.2.3.4
    240     setup_setOption2 --interface foo3=1.2.3.4
    241     setup_setOption2 --interface foo4=1.2.3.4/1
    242     setup_setOption2 --interface eth0:1.2.3.4
    243     setup_setOption2 --interface eth0:1.2.3.4/1
    244     setup_setOption2 --interface 1.2.3.4
    245     setup_setOption2 --interface 1.2.3.4/1
    246 
    247     setup_writeOption xx
    248 }