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()
def kill():
+ sudo()
for proc in ["ovs-vswitchd", "ovsdb-server"]:
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(RUNDIR):
shutil.rmtree(RUNDIR)
def run():
+ sudo()
kill()
for d in ["log", "run"]:
d = "%s/%s" % (RUNDIR, d)
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" % RUNDIR,
"--remote=db:Open_vSwitch,Open_vSwitch,manager_options",
"--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)
print "Missing modules directory. Is this a Linux system?"
sys.exit(1)
+ sudo()
try:
_sh("rmmod", "openvswitch")
except subprocess.CalledProcessError, e:
# 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
modinst - Build ovs and install the kernel module.
env - Print the required path environment variable.
doc - Print this message.
+
+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)
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)