fixed getopt long-option string
[util-vserver.git] / util-vserver / scripts / vserver-setup.functions
1 # $Id$  --*- sh -*--
2
3 # Copyright (C) 2003 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_BCAST=
23 SETUP_LOCKFILE=
24 SETUP_LOCKREVDIR=
25 SETUP_CONFDIR=
26
27 declare -a SETUP_INTERFACES=()
28 declare -a SETUP_FLAGS=()
29
30 declare -r SETUP_OPTIONS="confdir:,lockfile:,lockrevdir:,hostname:,netdev:,netmask:,netprefix:,netbcast:,interface:,flags:"
31 declare -r SETUP_HELPMSG=$"
32     --confdir   ...  [default: $CONFDIR/<name>]
33     --lockfile <filename>
34                 ...  [default: $RUNDIR/<name>]
35     --lockrevdir <dirname>
36                 ...  [default: $RUNDIR/rev/]
37     --hostname <hostname>
38     --netdev   <device>
39     --netmask <netmask>|--netprefix <prefix>
40                 ...  sets the  default netmask  (a.b.c.d quadruple)  or prefix
41                      (length of the interface)
42     --interface [<name-suffix>=][<device>:]<ip>[/<mask|prefix>]
43                 ...  declares an network-interface;  this option can be specified
44                      multiple times
45     --flags <flags>+
46                 ...  sets comma-separated list of flags; possible flags are
47                      lock:  Prevent the vserver from setting new security context
48                      sched: Merge  scheduler priority  of all processes in the
49                             vserver so that it acts a like a single one.
50                      nproc: Limit the number of processes in the vserver
51                             according to ulimit  (instead of a per user limit,
52                             this becomes a per vserver limit)
53                      private: No other process can join this security context.
54                             Even root
55 "
56
57 function setup_setOption2
58 {
59     case "$1" in
60         --confdir)      SETUP_CONFDIR=$2;;
61         --lockfile)     SETUP_LOCKFILE=$2;;
62         --lockrevdir)   SEUTP_LOCKREVDIR=$2;;
63         --hostname)     SETUP_HOSTNAME=$2;;
64         --netdev)       SETUP_NETDEV=$2;;
65         --netmask)      SETUP_NETMASK=$2;;
66         --netprefix)    SETUP_NETPREFIX=$2;;
67         --netbcast)     SETUP_BCAST=$2;;
68         --interface)    SETUP_INTERFACES=( "${SETUP_INTERFACES[@]}" "$2" );;
69         --flags)        old_IFS=$IFS
70                         IFS=,
71                         set -- $2
72                         SETUP_FLAGS=( "${SETUP_FLAGS[@]}" "$@" )
73                         IFS=$old_IFS
74                         ;;
75         *)              return 1;;
76     esac
77
78     return 0
79 }
80
81 function _setup_writeSingleOption
82 {
83     test -z "$1" || echo "$1" >"$2"
84 }
85
86 function _setup_writeInterface
87 {
88     local vdir=$1
89     local idx=$2
90     local tmp=$3
91
92     local name=${tmp%%=*}
93     test "$name" != "$tmp" || name=
94
95     tmp=${tmp##${name}=}
96     local dev=${tmp%%:*}
97     test "$dev" != "$tmp" || dev=
98
99     tmp=${tmp##${dev}:}
100     local mask=${tmp##*/}
101     test "$mask" != "$tmp"  || mask=
102
103     local ip=${tmp%%/${mask}}
104
105     local prefix=
106     test "${mask%%.*}" != "$mask" || {
107         prefix=$mask
108         mask=
109     }
110
111     d=$vdir/interfaces/$idx
112     mkdir "$d"
113     
114     _setup_writeSingleOption "$name"   $d/name
115     _setup_writeSingleOption "$dev"    $d/dev
116     _setup_writeSingleOption "$ip"     $d/ip
117     _setup_writeSingleOption "$mask"   $d/mask
118     _setup_writeSingleOption "$prefix" $d/prefix
119 }
120
121 function setup_setDefaults
122 {
123     : ${SETUP_CONFDIR:=$CONFDIR/$1}
124     : ${SETUP_LOCKFILE:=$RUNDIR/$1}
125     : ${SETUP_LOCKREVDIR:=$RUNDIR/rev}
126 }
127
128 function setup_writeOption
129 {
130     local name=$1
131     local cfgdir=$SETUP_CONFDIR
132     local i
133
134     mkdir -p "$cfgdir/interfaces"
135
136     _setup_writeSingleOption "$name"            "$cfgdir"/name
137     _setup_writeSingleOption "$SETUP_HOSTNAME"  "$cfgdir"/hostname
138     _setup_writeSingleOption "$SETUP_NETDEV"    "$cfgdir"/interfaces/dev
139     _setup_writeSingleOption "$SETUP_NETMASK"   "$cfgdir"/interfaces/mask
140     _setup_writeSingleOption "$SETUP_NETPREFIX" "$cfgdir"/interfaces/prefix
141
142     local idx=0
143     for i in "${SETUP_INTERFACES[@]}"; do
144         _setup_writeInterface "$cfgdir" $idx "$i"
145         let ++idx
146     done
147
148     test -z "$SETUP_FLAGS" || for i in "${SETUP_FLAGS[@]}"; do
149         echo "$i"
150     done >"$cfgdir"/flags
151
152     ln -s "$SETUP_LOCKFILE"   "$cfgdir/run"
153     ln -s "$SETUP_LOCKREVDIR" "$cfgdir/run.rev"
154 }
155
156 function setup_writeInitialFstab
157 {
158     cat <<EOF >$SETUP_CONFDIR/fstab
159 none    /proc           proc    defaults                0 0
160 none    /tmp            tmpfs   size=16m,mode=1777      0 0
161 none    /dev/pts        devpts  gid=5,mode=620          0 0
162 EOF
163 }
164
165 function setup_test
166 {
167     SETUP_INTERFACES=()
168
169     setup_setOption2 --interface foo0=eth0:1.2.3.4/1
170     setup_setOption2 --interface foo1=eth0:1.2.3.4/255.255.248.0
171     setup_setOption2 --interface foo2=eth0:1.2.3.4
172     setup_setOption2 --interface foo3=1.2.3.4
173     setup_setOption2 --interface foo4=1.2.3.4/1
174     setup_setOption2 --interface eth0:1.2.3.4
175     setup_setOption2 --interface eth0:1.2.3.4/1
176     setup_setOption2 --interface 1.2.3.4
177     setup_setOption2 --interface 1.2.3.4/1
178
179     setup_writeOption xx
180 }