| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 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 |
|---|
| 135 |
local dev=${tmp%%:*} |
|---|
| 136 |
local nodev= |
|---|
| 137 |
test "$dev" != "$tmp" || dev= |
|---|
| 138 |
|
|---|
| 139 |
tmp=${tmp |
|---|
| 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 |
} |
|---|