X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=utilities%2Fovs-dev.py;h=e4314c0ef5666009b87664c84acda055727c2860;hb=8e53fe8cf7a178cf9702fb1bb916f4645058e5e7;hp=e1cc4c1364468a0a6f6c37ddafdcadd0f6323c4b;hpb=1bcf46c62e6db4786d667b495a979381eb40680e;p=cascardo%2Fovs.git diff --git a/utilities/ovs-dev.py b/utilities/ovs-dev.py index e1cc4c136..e4314c0ef 100755 --- a/utilities/ovs-dev.py +++ b/utilities/ovs-dev.py @@ -1,5 +1,5 @@ #!/usr/bin/python -# Copyright (c) 2013, 2014 Nicira, Inc. +# Copyright (c) 2013, 2014, 2015 Nicira, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -22,18 +22,22 @@ import tempfile ENV = os.environ HOME = ENV["HOME"] +PWD = os.getcwd() OVS_SRC = HOME + "/ovs" -ROOT = HOME + "/root" +if os.path.exists(PWD + "/WHY-OVS.md"): + OVS_SRC = PWD # Use current directory as OVS source tree +RUNDIR = OVS_SRC + "/_run" BUILD_GCC = OVS_SRC + "/_build-gcc" BUILD_CLANG = OVS_SRC + "/_build-clang" -PATH = "%(ovs)s/utilities:%(ovs)s/ovsdb:%(ovs)s/vswitchd" % {"ovs": BUILD_GCC} - -ENV["PATH"] = PATH + ":" + ENV["PATH"] options = None parser = None commands = [] +def set_path(build): + PATH = "%(ovs)s/utilities:%(ovs)s/ovsdb:%(ovs)s/vswitchd" % {"ovs": build} + + ENV["PATH"] = PATH + ":" + ENV["PATH"] def _sh(*args, **kwargs): print "------> " + " ".join(args) @@ -51,6 +55,11 @@ def uname(): return _sh("uname", "-r", capture=True)[0].strip() +def sudo(): + if os.geteuid() != 0: + _sh(" ".join(["sudo"] + sys.argv), check=True) + sys.exit(0) + def conf(): tag() @@ -59,9 +68,11 @@ def conf(): except OSError: pass - configure = ["../configure", "--prefix=" + ROOT, "--localstatedir=" + ROOT, - "--with-logdir=%s/log" % ROOT, "--with-rundir=%s/run" % ROOT, - "--enable-silent-rules", "--with-dbdir=" + ROOT, "--silent"] + configure = ["../configure", + "--prefix=" + RUNDIR, "--localstatedir=" + RUNDIR, + "--with-logdir=%s/log" % RUNDIR, + "--with-rundir=%s/run" % RUNDIR, + "--enable-silent-rules", "--with-dbdir=" + RUNDIR, "--silent"] cflags = "-g -fno-omit-frame-pointer" @@ -180,31 +191,34 @@ commands.append(tag) def kill(): + sudo() for proc in ["ovs-vswitchd", "ovsdb-server"]: - if os.path.exists("%s/run/openvswitch/%s.pid" % (ROOT, proc)): + if os.path.exists("%s/run/openvswitch/%s.pid" % (RUNDIR, proc)): _sh("ovs-appctl", "-t", proc, "exit", check=False) time.sleep(.1) - _sh("sudo", "killall", "-q", "-2", proc, check=False) + _sh("killall", "-q", "-2", proc, check=False) commands.append(kill) def reset(): + sudo() kill() - if os.path.exists(ROOT): - shutil.rmtree(ROOT) + if os.path.exists(RUNDIR): + shutil.rmtree(RUNDIR) for dp in _sh("ovs-dpctl dump-dps", capture=True): _sh("ovs-dpctl", "del-dp", dp.strip()) commands.append(reset) def run(): + sudo() kill() for d in ["log", "run"]: - d = "%s/%s" % (ROOT, d) + d = "%s/%s" % (RUNDIR, d) shutil.rmtree(d, ignore_errors=True) os.makedirs(d) - pki_dir = ROOT + "/pki" + pki_dir = RUNDIR + "/pki" if not os.path.exists(pki_dir): os.mkdir(pki_dir) os.chdir(pki_dir) @@ -212,14 +226,25 @@ def run(): _sh("ovs-pki req+sign ovsclient") os.chdir(OVS_SRC) - if not os.path.exists(ROOT + "/conf.db"): - _sh("ovsdb-tool", "create", ROOT + "/conf.db", + if not os.path.exists(RUNDIR + "/conf.db"): + _sh("ovsdb-tool", "create", RUNDIR + "/conf.db", OVS_SRC + "/vswitchd/vswitch.ovsschema") opts = ["--pidfile", "--log-file"] + if (options.user == "") or (options.user == "root:root"): + _sh("chown", "root:root", "-R", RUNDIR) + if '--user' in sys.argv: + sys.argv.remove("--user") + else: + _sh("chown", options.user, "-R", RUNDIR); + opts = ["--user", options.user] + opts + + if (options.monitor): + opts = ["--monitor"] + opts + _sh(*(["ovsdb-server", - "--remote=punix:%s/run/db.sock" % ROOT, + "--remote=punix:%s/run/db.sock" % RUNDIR, "--remote=db:Open_vSwitch,Open_vSwitch,manager_options", "--private-key=db:Open_vSwitch,SSL,private_key", "--certificate=db:Open_vSwitch,SSL,certificate", @@ -236,7 +261,8 @@ def run(): _sh("ovs-vsctl --no-wait set Open_vSwitch %s ovs_version=%s" % (root_uuid, version)) - cmd = [BUILD_GCC + "/vswitchd/ovs-vswitchd"] + build = BUILD_CLANG if options.clang else BUILD_GCC + cmd = [build + "/vswitchd/ovs-vswitchd"] if options.dpdk: cmd.append("--dpdk") @@ -250,7 +276,6 @@ def run(): "--suppressions=%s/tests/glibc.supp" % OVS_SRC, "--suppressions=%s/tests/openssl.supp" % OVS_SRC] + cmd else: - cmd = ["sudo"] + cmd opts = opts + ["-vconsole:off", "--detach", "--enable-dummy"] _sh(*(cmd + opts)) commands.append(run) @@ -261,13 +286,15 @@ def modinst(): print "Missing modules directory. Is this a Linux system?" sys.exit(1) + sudo() try: _sh("rmmod", "openvswitch") except subprocess.CalledProcessError, e: pass # Module isn't loaded try: - _sh("rm /lib/modules/%s/extra/openvswitch.ko" % uname()) + _sh("rm -f /lib/modules/%s/extra/openvswitch.ko" % uname()) + _sh("rm -f /lib/modules/%s/extra/vport-*.ko" % uname()) except subprocess.CalledProcessError, e: pass # Module isn't installed @@ -277,6 +304,7 @@ def modinst(): _sh("modprobe", "openvswitch") _sh("dmesg | grep openvswitch | tail -1") + _sh("find /lib/modules/%s/ -iname vport-*.ko -exec insmod '{}' \;" % uname()) commands.append(modinst) @@ -299,7 +327,7 @@ Basic Configuration: # First install the basic requirements needed to build Open vSwitch. sudo apt-get install git build-essential libtool autoconf pkg-config \\ - libssl-dev gdb linux-headers-`uname -r` + libssl-dev gdb libcap-ng linux-headers-`uname -r` # Next clone the Open vSwitch source. git clone https://github.com/openvswitch/ovs.git %(ovs)s @@ -313,6 +341,11 @@ Basic Configuration: # Install the kernel module sudo insmod %(ovs)s/datapath/linux/openvswitch.ko + # If needed, manually load all required vport modules: + sudo insmod %(ovs)s/datapath/linux/vport-vxlan.ko + sudo insmod %(ovs)s/datapath/linux/vport-geneve.ko + [...] + # Run the switch. %(v)s run @@ -327,7 +360,11 @@ Commands: modinst - Build ovs and install the kernel module. env - Print the required path environment variable. doc - Print this message. -""" % {"ovs": OVS_SRC, "v": sys.argv[0], "run": ROOT} + +Note: + If running as non-root user, "kill", "reset", "run" and "modinst" + will always run as the root user, by rerun the commands with "sudo". +""" % {"ovs": OVS_SRC, "v": sys.argv[0], "run": RUNDIR} sys.exit(0) commands.append(doc) @@ -387,6 +424,14 @@ def main(): group.add_option("--dpdk", dest="dpdk", action="callback", callback=parse_subargs, help="run ovs-vswitchd with dpdk subopts (ended by --)") + group.add_option("--clang", dest="clang", action="store_true", + help="Use binaries built by clang") + group.add_option("--user", dest="user", action="store", default="", + help="run all daemons as a non root user") + group.add_option("--monitor", dest="monitor", action="store_true", + help="run daemons with --monitor option") + + parser.add_option_group(group) options, args = parser.parse_args() @@ -396,6 +441,11 @@ def main(): print "Unknown argument " + arg doc() + if options.clang: + set_path(BUILD_CLANG) + else: + set_path(BUILD_GCC) + try: os.chdir(OVS_SRC) except OSError: