+++ /dev/null
-# $Id: vserver-setup.functions 2517 2007-03-18 22:02:22Z dhozac $ --*- sh -*--
-
-# Copyright (C) 2003,2004,2005,2006 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; version 2 of the License.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-SETUP_HOSTNAME=
-SETUP_NETDEV=
-SETUP_NETMASK=
-SETUP_NETPREFIX=
-SETUP_NETBCAST=
-SETUP_LOCKFILE=
-SETUP_CONFDIR=
-SETUP_CONTEXT=
-SETUP_INITSTYLE=
-SETUP_CPUSET=
-SETUP_CPUSETCPUS=
-SETUP_CPUSETMEMS=
-SETUP_CPUSETVIRT=
-
-declare -a SETUP_INTERFACES=()
-declare -a SETUP_FLAGS=()
-
-declare -r SETUP_OPTIONS="confdir:,lockfile:,hostname:,netdev:,netmask:,netprefix:,netbcast:,interface:,flags:,context:,initstyle:,cpuset:,cpusetcpus:,cpusetmems:,cpusetvirt"
-declare -r SETUP_HELPMSG=$"
- --context ... the static context of the vserver [default: none; one will
- be generated for you]
- --confdir ... [default: $__CONFDIR/<name>]
- --lockfile <filename>
- ... [default: $__RUNDIR/<name>]
- --hostname <hostname>
- --netdev <device>
- --netbcast <broadcast>
- --netmask <netmask>|--netprefix <prefixlen>
- ... sets the default netmask (a.b.c.d quadruple) or prefixlen
- (length of the interface)
- --interface [<name-suffix>=][<device>:]<ip>[/<mask|prefixlen>]
- ... declares an network-interface; this option can be specified
- multiple times
- --flags <flags>+
- ... sets comma-separated list of flags; possible flags are
- lock: Prevent the vserver from setting new security context
- sched: Merge scheduler priority of all processes in the
- vserver so that it acts a like a single
- one (kernel 2.4 only).
- nproc: Limit the number of processes in the vserver
- according to ulimit (instead of a per user limit,
- this becomes a per vserver limit)
- private: No other process can join this security context.
- Even root
- --cpuset <name>
- ... declares the CPUSET this vserver will run in [default: none]
- --cpusetcpus <number[-number][:<exclusive>]>
- ... sets which cpus belong to the CPUSET,
- exclusive is a flag (0|1) prohibiting any other cpuset from
- using those cpus
- --cpusetmems <number[-number][:<exclusive>]>
- ... sets which memory pools belong to the CPUSET,
- exclusive is a flag (0|1) prohibiting any other cpuset from
- using those memory pools
- --cpusetvirt
- ... virtualize cpuset (guest will see only CPUs defined in cpuset)
- Requires kernel patch from http://www.bullopensource.org/cpuset/
- --initstyle <style>
- ... configures the initstyle (e.g. minit,sysv,plain)
-"
-
-function setup_setOption2
-{
- case "$1" in
- (--context) SETUP_CONTEXT=$2;;
- (--confdir) SETUP_CONFDIR=$2;;
- (--lockfile) SETUP_LOCKFILE=$2;;
- (--hostname) SETUP_HOSTNAME=$2;;
- (--netdev) SETUP_NETDEV=$2;;
- (--netmask) SETUP_NETMASK=$2;;
- (--netprefix) SETUP_NETPREFIX=$2;;
- (--netbcast) SETUP_NETBCAST=$2;;
- (--interface) SETUP_INTERFACES=( "${SETUP_INTERFACES[@]}" "$2" );;
- (--initstyle) SETUP_INITSTYLE=$2;;
- (--cpuset) SETUP_CPUSET=$2;;
- (--cpusetcpus) old_IFS=$IFS
- IFS=:
- set -- $2
- SETUP_CPUSETCPUS=$1
- SETUP_CPUSETCPUSEXCL=$2
- IFS=$old_IFS
- ;;
- (--cpusetmems) old_IFS=$IFS
- IFS=:
- set -- $2
- SETUP_CPUSETMEMS=$1
- SETUP_CPUSETMEMSEXCL=$2
- IFS=$old_IFS
- ;;
- (--cpusetvirt) SETUP_CPUSETVIRT=1;;
- (--flags) old_IFS=$IFS
- IFS=,
- set -- $2
- SETUP_FLAGS=( "${SETUP_FLAGS[@]}" "$@" )
- IFS=$old_IFS
- ;;
- (*) return 1;;
- esac
-
- return 0
-}
-
-function _setup_writeSingleOption
-{
- test -z "$1" || echo "$1" >"$2"
-}
-
-function _setup_writeInterface
-{
- local vdir=$1
- local idx=$2
- local tmp=$3
-
- local name=${tmp%%=*}
- test "$name" != "$tmp" || name=
-
- tmp=${tmp##${name}=}
- local dev=${tmp%%:*}
- local nodev=
- test "$dev" != "$tmp" || dev=
-
- tmp=${tmp##${dev}:}
- test "$dev" != "nodev" || {
- dev=
- nodev=1
- }
- local mask=${tmp##*/}
- test "$mask" != "$tmp" || mask=
-
- local ip=${tmp%%/${mask}}
-
- local prefix=
- test "${mask%%.*}" != "$mask" || {
- prefix=$mask
- mask=
- }
-
- d=$vdir/interfaces/$idx
- mkdir "$d"
-
- _setup_writeSingleOption "$name" $d/name
- _setup_writeSingleOption "$dev" $d/dev
- _setup_writeSingleOption "$ip" $d/ip
- _setup_writeSingleOption "$mask" $d/mask
- _setup_writeSingleOption "$prefix" $d/prefix
-
- test -n "$dev" -o -n "$SETUP_NETDEV" || {
- test -n "$nodev" || \
- echo $"No device specified for interface '$idx'; setting 'nodev'" >&2
- $_TOUCH $d/nodev
- }
-}
-
-function setup_setDefaults
-{
- : ${SETUP_CONFDIR:=$__CONFDIR/$1}
- : ${SETUP_LOCKFILE:=$__RUNDIR/$1}
- findFile SETUP_FSTAB "$__CONFDIR"/.defaults/fstab "$__PKGLIBDEFAULTDIR"/fstab
-}
-
-function _setup_generateContext
-{
- if test -z "$SETUP_CONTEXT" && test ! -e "$__CONFDIR/.defaults/context.dynamic"; then
- if test -e "$__CONFDIR/.defaults/context.next"; then
- SETUP_CONTEXT=`$_CAT "$__CONFDIR/.defaults/context.next"`
- else
- SETUP_CONTEXT=`$_CAT "$__PKGLIBDEFAULTDIR/context.start"`
- fi
- expr "$SETUP_CONTEXT" + 1 > "$__CONFDIR/.defaults/context.next"
- fi
-}
-
-function setup_writeOption
-{
- local name=$1
- local cfgdir=${SETUP_CONFDIR:?}
- local i
-
- mkdir -p "$cfgdir"/interfaces "$cfgdir"/apps/init "$cfgdir"/uts "$cfgdir"/cpuset
-
- _setup_generateContext
-
- _setup_writeSingleOption "$name" "$cfgdir"/name
- _setup_writeSingleOption "$SETUP_CONTEXT" "$cfgdir"/context
- _setup_writeSingleOption "$SETUP_HOSTNAME" "$cfgdir"/uts/nodename
- _setup_writeSingleOption "$SETUP_NETDEV" "$cfgdir"/interfaces/dev
- _setup_writeSingleOption "$SETUP_NETMASK" "$cfgdir"/interfaces/mask
- _setup_writeSingleOption "$SETUP_NETPREFIX" "$cfgdir"/interfaces/prefix
- _setup_writeSingleOption "$SETUP_NETBCAST" "$cfgdir"/interfaces/bcast
- _setup_writeSingleOption "$SETUP_INITSTYLE" "$cfgdir"/apps/init/style
- _setup_writeSingleOption "$SETUP_CPUSET" "$cfgdir"/cpuset/name
- _setup_writeSingleOption "$SETUP_CPUSETCPUS" "$cfgdir"/cpuset/cpus
- _setup_writeSingleOption "$SETUP_CPUSETCPUSEXCL" "$cfgdir"/cpuset/cpus_exclusive
- _setup_writeSingleOption "$SETUP_CPUSETMEMS" "$cfgdir"/cpuset/mems
- _setup_writeSingleOption "$SETUP_CPUSETMEMSEXCL" "$cfgdir"/cpuset/mem_exclusive
- _setup_writeSingleOption "$SETUP_CPUSETVIRT" "$cfgdir"/cpuset/virtualized
-
- local idx=0
- for i in "${SETUP_INTERFACES[@]}"; do
- _setup_writeInterface "$cfgdir" $idx "$i"
- let ++idx
- done
-
- test -z "$SETUP_FLAGS" || for i in "${SETUP_FLAGS[@]}"; do
- echo "$i"
- done >"$cfgdir"/flags
-
- ln -s "$SETUP_LOCKFILE" "$cfgdir"/run
-}
-
-function setup_writeInitialFstab
-{
- cat "${SETUP_FSTAB:?}" >"${SETUP_CONFDIR:?}"/fstab
-}
-
-function setup_test
-{
- SETUP_INTERFACES=()
-
- setup_setOption2 --interface foo0=eth0:1.2.3.4/1
- setup_setOption2 --interface foo1=eth0:1.2.3.4/255.255.248.0
- setup_setOption2 --interface foo2=eth0:1.2.3.4
- setup_setOption2 --interface foo3=1.2.3.4
- setup_setOption2 --interface foo4=1.2.3.4/1
- setup_setOption2 --interface eth0:1.2.3.4
- setup_setOption2 --interface eth0:1.2.3.4/1
- setup_setOption2 --interface 1.2.3.4
- setup_setOption2 --interface 1.2.3.4/1
-
- setup_writeOption xx
-}