]> git.proxmox.com Git - mirror_ovs.git/blame - tutorial/ovs-sandbox
doc: Move WHY-OVS
[mirror_ovs.git] / tutorial / ovs-sandbox
CommitLineData
eeecce05
BP
1#! /bin/sh
2#
fa183acc 3# Copyright (c) 2013, 2015, 2016 Nicira, Inc.
eeecce05
BP
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at:
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17set -e
18
8da7cd8c 19run() {
eeecce05
BP
20 (cd "$sandbox" && "$@") || exit 1
21}
22
8da7cd8c 23run_xterm() {
4cf272aa
AZ
24 title=$1;
25 shift
26 run xterm -T "$title" -e "$@" &
8da7cd8c
AZ
27}
28
29rungdb() {
30 under_gdb=$1
60ceeb6c 31 gdb_run=$2
8da7cd8c 32 shift
60ceeb6c
AZ
33 shift
34
8da7cd8c
AZ
35 # Remove the --detach and to put the process under gdb control.
36 # Also remove --vconsole:off to allow error message to show up
37 # on the console.
38 # Use "DISPLAY" variable to determine out if X is supported
39 if $under_gdb && [ "$DISPLAY" ]; then
40 args=`echo $@ |sed s/--detach//g | sed s/--vconsole:off//g`
30a67866 41 xterm_title=$1
60ceeb6c
AZ
42
43 gdb_cmd=""
44 if $gdb_run; then
45 gdb_cmd="-ex run"
46 fi
47
48 run_xterm $xterm_title gdb $gdb_cmd --args $args
8da7cd8c
AZ
49 else
50 run $@
51 fi
52}
53
4b814d41
AZ
54gdb_vswitchd=false
55gdb_ovsdb=false
60ceeb6c
AZ
56gdb_vswitchd_ex=false
57gdb_ovsdb_ex=false
91ae2065 58gdb_ovn_northd=false
2c6bcfa2 59gdb_ovn_northd_ex=false
717c7fc5 60gdb_ovn_controller=false
2c6bcfa2 61gdb_ovn_controller_ex=false
36561090
RB
62gdb_ovn_controller_vtep=false
63gdb_ovn_controller_vtep_ex=false
eeecce05
BP
64builddir=
65srcdir=
66schema=
67installed=false
68built=false
ff358c71 69ovn=false
1369720c
JP
70ovnsb_schema=
71ovnnb_schema=
8da7cd8c 72
eeecce05
BP
73for option; do
74 # This option-parsing mechanism borrowed from a Autoconf-generated
75 # configure script under the following license:
76
77 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
78 # 2002, 2003, 2004, 2005, 2006, 2009, 2013 Free Software Foundation, Inc.
79 # This configure script is free software; the Free Software Foundation
80 # gives unlimited permission to copy, distribute and modify it.
81
82 # If the previous option needs an argument, assign it.
83 if test -n "$prev"; then
84 eval $prev=\$option
85 prev=
86 continue
87 fi
88 case $option in
89 *=*) optarg=`expr "X$option" : '[^=]*=\(.*\)'` ;;
90 *) optarg=yes ;;
91 esac
92
93 case $dashdash$option in
94 --)
95 dashdash=yes ;;
96 -h|--help)
97 cat <<EOF
98ovs-sandbox, for starting a sandboxed dummy Open vSwitch environment
99usage: $0 [OPTION...]
100
101If you run ovs-sandbox from an OVS build directory, it uses the OVS that
102you built. Otherwise, if you have an installed Open vSwitch, it uses
103the installed version.
104
105These options force ovs-sandbox to use a particular OVS build:
106 -b, --builddir=DIR specify Open vSwitch build directory
107 -s, --srcdir=DIR specify Open vSwitch source directory
108These options force ovs-sandbox to use an installed Open vSwitch:
109 -i, --installed use installed Open vSwitch
8da7cd8c 110 -g, --gdb-vswitchd run ovs-vswitchd under gdb
4b814d41 111 -d, --gdb-ovsdb run ovsdb-server under gdb
91ae2065 112 --gdb-ovn-northd run ovn-northd under gdb
717c7fc5 113 --gdb-ovn-controller run ovn-controller under gdb
36561090 114 --gdb-ovn-controller-vtep run ovn-controller-vtep under gdb
2c6bcfa2
RB
115 -R, --gdb-run automatically start running the daemon in gdb
116 for any daemon set to run under gdb
eeecce05 117 -S, --schema=FILE use FILE as vswitch.ovsschema
ff358c71 118 -o, --ovn enable OVN
eeecce05
BP
119
120Other options:
121 -h, --help Print this usage message.
122EOF
123 exit 0
124 ;;
125
126 --b*=*)
127 builddir=$optarg
128 built=:
129 ;;
130 -b|--b*)
131 prev=builddir
132 built=:
133 ;;
134 --sr*=*)
135 srcdir=$optarg
136 built=false
137 ;;
138 -s|--sr*)
139 prev=srcdir
140 built=false
141 ;;
142 -i|--installed)
143 installed=:
144 ;;
145 --sc*=*)
146 schema=$optarg
147 installed=:
148 ;;
149 -S|--sc*)
150 prev=schema
151 installed=:
152 ;;
8da7cd8c
AZ
153 -g|--gdb-v*)
154 gdb_vswitchd=true
60ceeb6c
AZ
155 gdb_vswitchd_ex=false
156 ;;
157 -e|--gdb-ex-v*)
158 gdb_vswitchd=true
159 gdb_vswitchd_ex=true
8da7cd8c 160 ;;
30a67866 161 -d|--gdb-ovsdb)
4b814d41 162 gdb_ovsdb=true
60ceeb6c
AZ
163 gdb_ovsdb_ex=false
164 ;;
165 -r|--gdb-ex-o*)
166 gdb_ovsdb=true
167 gdb_ovsdb_ex=true
4b814d41 168 ;;
91ae2065
RB
169 --gdb-ovn-northd)
170 gdb_ovn_northd=true
30a67866 171 ;;
717c7fc5
JP
172 --gdb-ovn-controller)
173 gdb_ovn_controller=true
174 ;;
36561090
RB
175 --gdb-ovn-controller-vtep)
176 gdb_ovn_controller_vtep=true
177 ;;
ff358c71
RB
178 -o|--ovn)
179 ovn=true
180 ;;
2c6bcfa2
RB
181 -R|--gdb-run)
182 gdb_vswitchd_ex=true
183 gdb_ovsdb_ex=true
184 gdb_ovn_northd_ex=true
185 gdb_ovn_controller_ex=true
36561090 186 gdb_ovn_controller_vtep_ex=true
2c6bcfa2 187 ;;
eeecce05
BP
188 -*)
189 echo "unrecognized option $option (use --help for help)" >&2
190 exit 1
191 ;;
192 *)
193 echo "$option: non-option arguments not supported (use --help for help)" >&2
194 exit 1
195 ;;
196 esac
197 shift
198done
199
200if $installed && $built; then
201 echo "sorry, conflicting options (use --help for help)" >&2
202 exit 1
203elif $installed || $built; then
204 :
205elif test -e vswitchd/ovs-vswitchd; then
206 built=:
207 builddir=.
208elif (ovs-vswitchd --version) >/dev/null 2>&1; then
209 installed=:
210else
211 echo "can't find an OVS build or install (use --help for help)" >&2
212 exit 1
213fi
214
215if $built; then
216 if test ! -e "$builddir"/vswitchd/ovs-vswitchd; then
217 echo "$builddir does not appear to be an OVS build directory" >&2
218 exit 1
219 fi
220 builddir=`cd $builddir && pwd`
221
222 # Find srcdir.
223 case $srcdir in
224 '')
225 srcdir=$builddir
3c8a3b31 226 if test ! -e "$srcdir"/README.rst; then
eeecce05
BP
227 srcdir=`cd $builddir/.. && pwd`
228 fi
229 ;;
230 /*) ;;
231 *) srcdir=`pwd`/$srcdir ;;
232 esac
233 schema=$srcdir/vswitchd/vswitch.ovsschema
234 if test ! -e "$schema"; then
235 echo >&2 'source directory not found, please use --srcdir'
236 exit 1
237 fi
ff358c71 238 if $ovn; then
1369720c
JP
239 ovnsb_schema=$srcdir/ovn/ovn-sb.ovsschema
240 if test ! -e "$ovnsb_schema"; then
ff358c71
RB
241 echo >&2 'source directory not found, please use --srcdir'
242 exit 1
243 fi
1369720c
JP
244 ovnnb_schema=$srcdir/ovn/ovn-nb.ovsschema
245 if test ! -e "$ovnnb_schema"; then
ff358c71
RB
246 echo >&2 'source directory not found, please use --srcdir'
247 exit 1
248 fi
36561090
RB
249 vtep_schema=$srcdir/vtep/vtep.ovsschema
250 if test ! -e "$vtep_schema"; then
251 echo >&2 'source directory not found, please use --srcdir'
252 exit 1
253 fi
ff358c71 254 fi
eeecce05
BP
255
256 # Put built tools early in $PATH.
257 if test ! -e $builddir/vswitchd/ovs-vswitchd; then
258 echo >&2 'build not found, please change set $builddir or change directory'
259 exit 1
260 fi
8013510c 261 PATH=$builddir/ovsdb:$builddir/vswitchd:$builddir/utilities:$builddir/vtep:$PATH
ff358c71 262 if $ovn; then
72eaa2ba 263 PATH=$builddir/ovn/controller:$builddir/ovn/controller-vtep:$builddir/ovn/northd:$builddir/ovn/utilities:$PATH
ff358c71 264 fi
eeecce05
BP
265 export PATH
266else
267 case $schema in
268 '')
269 for schema in \
270 /usr/local/share/openvswitch/vswitch.ovsschema \
271 /usr/share/openvswitch/vswitch.ovsschema \
272 none; do
273 if test -r $schema; then
274 break
275 fi
276 done
277 ;;
278 /*) ;;
279 *) schema=`pwd`/$schema ;;
280 esac
281 if test ! -r "$schema"; then
282 echo "can't find vswitch.ovsschema, please specify --schema" >&2
283 exit 1
284 fi
ff358c71
RB
285 if $ovn; then
286 echo "running with ovn is only supported from the build dir." >&2
287 exit 1
288 fi
eeecce05
BP
289fi
290
291# Create sandbox.
292rm -rf sandbox
293mkdir sandbox
294sandbox=`cd sandbox && pwd`
295
296# Set up environment for OVS programs to sandbox themselves.
297OVS_RUNDIR=$sandbox; export OVS_RUNDIR
298OVS_LOGDIR=$sandbox; export OVS_LOGDIR
299OVS_DBDIR=$sandbox; export OVS_DBDIR
300OVS_SYSCONFDIR=$sandbox; export OVS_SYSCONFDIR
301
302if $built; then
303 # Easy access to OVS manpages.
211d89b2 304 (cd "$builddir" && ${MAKE-make} install-man mandir="$sandbox"/man)
eeecce05
BP
305 MANPATH=$sandbox/man:; export MANPATH
306fi
307
308# Ensure cleanup.
309trap 'kill `cat "$sandbox"/*.pid`' 0 1 2 3 13 14 15
310
311# Create database and start ovsdb-server.
312touch "$sandbox"/.conf.db.~lock~
431ad535 313run ovsdb-tool create conf.db "$schema"
ff358c71
RB
314ovsdb_server_args=
315if $ovn; then
1369720c 316 touch "$sandbox"/.ovnsb.db.~lock~
ff358c71 317 touch "$sandbox"/.ovnnb.db.~lock~
1369720c 318 run ovsdb-tool create ovnsb.db "$ovnsb_schema"
9ec13182 319 run ovsdb-tool create ovnsb2.db "$ovnsb_schema"
1369720c 320 run ovsdb-tool create ovnnb.db "$ovnnb_schema"
36561090 321 run ovsdb-tool create vtep.db "$vtep_schema"
60bdd011
RM
322 ovsdb_server_args="vtep.db conf.db"
323 ovsdb_sb_server_args="ovnsb.db"
9ec13182 324 ovsdb_sb_backup_server_args="ovnsb2.db"
60bdd011 325 ovsdb_nb_server_args="ovnnb.db"
ff358c71 326fi
60ceeb6c 327rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file \
ff358c71 328 --remote=punix:"$sandbox"/db.sock $ovsdb_server_args
60bdd011
RM
329if $ovn; then
330 rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir \
331 --pidfile="$sandbox"/ovnnb_db.pid -vconsole:off \
332 --log-file="$sandbox"/ovnnb_db.log \
333 --remote=punix:"$sandbox"/ovnnb_db.sock $ovsdb_nb_server_args
334 rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir \
335 --pidfile="$sandbox"/ovnsb_db.pid -vconsole:off \
336 --log-file="$sandbox"/ovnsb_db.log \
337 --remote=punix:"$sandbox"/ovnsb_db.sock $ovsdb_sb_server_args
9ec13182
AZ
338 # Start SB back up server
339 rungdb $gdb_ovsdb $gdb_ovsdb_ex ovsdb-server --detach --no-chdir \
340 --pidfile="$sandbox"/ovnsb_db2.pid -vconsole:off \
341 --log-file="$sandbox"/ovnsb_db2.log \
342 --remote=punix:"$sandbox"/ovnsb_db2.sock \
343 --unixctl="$sandbox"/sb_backup_unixctl \
344 --sync-from=unix:"$sandbox"/ovnsb_db.sock $ovsdb_sb_backup_server_args
60bdd011 345fi
eeecce05 346
e43a07ba
AZ
347#Add a small delay to allow ovsdb-server to launch.
348sleep 0.1
349
350#Wait for ovsdb-server to finish launching.
351if test ! -e "$sandbox"/db.sock; then
352 echo -n "Waiting for ovsdb-server to start..."
353 while test ! -e "$sandbox"/db.sock; do
354 sleep 1;
355 done
356 echo " Done"
357fi
358
6b2771c3
BP
359# Initialize database.
360run ovs-vsctl --no-wait -- init
361
eeecce05 362# Start ovs-vswitchd.
60ceeb6c 363rungdb $gdb_vswitchd $gdb_vswitchd_ex ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file \
eeecce05
BP
364 --enable-dummy=override -vvconn -vnetdev_dummy
365
30a67866 366if $ovn; then
717c7fc5 367 ovs-vsctl set open . external-ids:system-id=56b18105-5706-46ef-80c4-ff20979ab068
9e6ec60a 368 ovs-vsctl set open . external-ids:hostname=sandbox
60bdd011 369 ovs-vsctl set open . external-ids:ovn-remote=unix:"$sandbox"/ovnsb_db.sock
b705f9ea 370 ovs-vsctl set open . external-ids:ovn-encap-type=geneve
717c7fc5 371 ovs-vsctl set open . external-ids:ovn-encap-ip=127.0.0.1
717c7fc5 372
fa183acc
BP
373 ovn-nbctl init
374 ovn-sbctl init
375
60bdd011
RM
376 rungdb $gdb_ovn_northd $gdb_ovn_northd_ex ovn-northd --detach \
377 --no-chdir --pidfile -vconsole:off --log-file \
378 --ovnsb-db=unix:"$sandbox"/ovnsb_db.sock \
379 --ovnnb-db=unix:"$sandbox"/ovnnb_db.sock
380 rungdb $gdb_ovn_controller $gdb_ovn_controller_ex ovn-controller \
381 --detach --no-chdir --pidfile -vconsole:off --log-file
382 rungdb $gdb_ovn_controller_vtep $gdb_ovn_controller_vtep_ex \
383 ovn-controller-vtep --detach --no-chdir --pidfile -vconsole:off \
384 --log-file --ovnsb-db=unix:"$sandbox"/ovnsb_db.sock
30a67866
RB
385fi
386
eeecce05
BP
387cat <<EOF
388
389
390
391----------------------------------------------------------------------
392You are running in a dummy Open vSwitch environment. You can use
393ovs-vsctl, ovs-ofctl, ovs-appctl, and other tools to work with the
79b4e6dc 394dummy switch.
eeecce05 395
79b4e6dc
RB
396EOF
397if $ovn; then cat << EOF
398This environment also has the OVN daemons and databases enabled.
399You can use ovn-nbctl and ovn-sbctl to interact with the OVN databases.
400
9ec13182
AZ
401The backup server of OVN SB can be accessed by:
402* ovn-sbctl --db=unix:`pwd`/sandbox/ovnsb_db2.sock
403* ovs-appctl -t `pwd`/sandbox/sb_backup_unixctl
404The backup database file is "sandbox"/ovnsb2.db
405
406
79b4e6dc
RB
407EOF
408fi
409cat <<EOF
eeecce05
BP
410Log files, pidfiles, and the configuration database are in the
411"sandbox" subdirectory.
412
413Exit the shell to kill the running daemons.
414EOF
415
416status=0; $SHELL || status=$?
417
418cat <<EOF
419----------------------------------------------------------------------
420
421
422
423EOF
424
425exit $status