3 # Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
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.
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.
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.
28 declare -a SETUP_INTERFACES=()
29 declare -a SETUP_FLAGS=()
31 declare -r SETUP_OPTIONS="confdir:,lockfile:,hostname:,netdev:,netmask:,netprefix:,netbcast:,interface:,flags:,context:,initstyle:"
32 declare -r SETUP_HELPMSG=$"
33 --context ... the static context of the vserver [default: none; a dynamic
34 context will be assumed]
35 --confdir ... [default: $__CONFDIR/<name>]
37 ... [default: $__RUNDIR/<name>]
40 --netbcast <broadcast>
41 --netmask <netmask>|--netprefix <prefixlen>
42 ... sets the default netmask (a.b.c.d quadruple) or prefixlen
43 (length of the interface)
44 --interface [<name-suffix>=][<device>:]<ip>[/<mask|prefixlen>]
45 ... declares an network-interface; this option can be specified
48 ... sets comma-separated list of flags; possible flags are
49 lock: Prevent the vserver from setting new security context
50 sched: Merge scheduler priority of all processes in the
51 vserver so that it acts a like a single
52 one (kernel 2.4 only).
53 nproc: Limit the number of processes in the vserver
54 according to ulimit (instead of a per user limit,
55 this becomes a per vserver limit)
56 private: No other process can join this security context.
59 ... configures the initstyle (e.g. minit,sysv,plain)
62 function setup_setOption2
65 (--context) SETUP_CONTEXT=$2;;
66 (--confdir) SETUP_CONFDIR=$2;;
67 (--lockfile) SETUP_LOCKFILE=$2;;
68 (--hostname) SETUP_HOSTNAME=$2;;
69 (--netdev) SETUP_NETDEV=$2;;
70 (--netmask) SETUP_NETMASK=$2;;
71 (--netprefix) SETUP_NETPREFIX=$2;;
72 (--netbcast) SETUP_NETBCAST=$2;;
73 (--interface) SETUP_INTERFACES=( "${SETUP_INTERFACES[@]}" "$2" );;
74 (--initstyle) SETUP_INITSTYLE=$2;;
75 (--flags) old_IFS=$IFS
78 SETUP_FLAGS=( "${SETUP_FLAGS[@]}" "$@" )
87 function _setup_writeSingleOption
89 test -z "$1" || echo "$1" >"$2"
92 function _setup_writeInterface
99 test "$name" != "$tmp" || name=
103 test "$dev" != "$tmp" || dev=
106 local mask=${tmp##*/}
107 test "$mask" != "$tmp" || mask=
109 local ip=${tmp%%/${mask}}
112 test "${mask%%.*}" != "$mask" || {
117 d=$vdir/interfaces/$idx
120 _setup_writeSingleOption "$name" $d/name
121 _setup_writeSingleOption "$dev" $d/dev
122 _setup_writeSingleOption "$ip" $d/ip
123 _setup_writeSingleOption "$mask" $d/mask
124 _setup_writeSingleOption "$prefix" $d/prefix
126 test -n "$dev" -o -n "$SETUP_NETDEV" || \
127 echo $"No device specified for interface '$idx'; do not forget to set the 'nodev' option" >&2
130 function setup_setDefaults
132 : ${SETUP_CONFDIR:=$__CONFDIR/$1}
133 : ${SETUP_LOCKFILE:=$__RUNDIR/$1}
134 findFile SETUP_FSTAB "$__CONFDIR"/.defaults/fstab "$__PKGLIBDEFAULTDIR"/fstab
137 function setup_writeOption
140 local cfgdir=${SETUP_CONFDIR:?}
143 mkdir -p "$cfgdir"/interfaces "$cfgdir"/apps/init "$cfgdir"/uts
145 _setup_writeSingleOption "$name" "$cfgdir"/name
146 _setup_writeSingleOption "$SETUP_CONTEXT" "$cfgdir"/context
147 _setup_writeSingleOption "$SETUP_HOSTNAME" "$cfgdir"/uts/nodename
148 _setup_writeSingleOption "$SETUP_NETDEV" "$cfgdir"/interfaces/dev
149 _setup_writeSingleOption "$SETUP_NETMASK" "$cfgdir"/interfaces/mask
150 _setup_writeSingleOption "$SETUP_NETPREFIX" "$cfgdir"/interfaces/prefix
151 _setup_writeSingleOption "$SETUP_NETBCAST" "$cfgdir"/interfaces/bcast
152 _setup_writeSingleOption "$SETUP_INITSTYLE" "$cfgdir"/apps/init/style
155 for i in "${SETUP_INTERFACES[@]}"; do
156 _setup_writeInterface "$cfgdir" $idx "$i"
160 test -z "$SETUP_FLAGS" || for i in "${SETUP_FLAGS[@]}"; do
162 done >"$cfgdir"/flags
164 ln -s "$SETUP_LOCKFILE" "$cfgdir"/run
167 function setup_writeInitialFstab
169 cat "${SETUP_FSTAB:?}" >"${SETUP_CONFDIR:?}"/fstab
176 setup_setOption2 --interface foo0=eth0:1.2.3.4/1
177 setup_setOption2 --interface foo1=eth0:1.2.3.4/255.255.248.0
178 setup_setOption2 --interface foo2=eth0:1.2.3.4
179 setup_setOption2 --interface foo3=1.2.3.4
180 setup_setOption2 --interface foo4=1.2.3.4/1
181 setup_setOption2 --interface eth0:1.2.3.4
182 setup_setOption2 --interface eth0:1.2.3.4/1
183 setup_setOption2 --interface 1.2.3.4
184 setup_setOption2 --interface 1.2.3.4/1