Browse Source

add: config tool's for Linux-Network-Namespaces (sudo)

micha 3 years ago
parent
commit
e2abdac5b9
4 changed files with 108 additions and 28 deletions
  1. 0 28
      netns.sh
  2. 33 0
      netns/_exec
  3. 31 0
      netns/create
  4. 44 0
      netns/exec

+ 0 - 28
netns.sh

@@ -1,28 +0,0 @@
-#!/usr/bin/bash
-#x
-
-nr="2$1"
-echo $1
-#exit 
-ip netns del "blue$nr"
-ip l del veth0$nr
-
-ip netns add "blue$nr"
-ip netns list
-#ip link add veth0$nr type veth peer name veth1$nr
-ip link add veth0$nr type veth peer name veth1$nr netns "blue$nr"
-ip link set dev veth0$nr up
-ip netns exec "blue$nr" ip link set dev veth1$nr up
-ip link set veth0$nr master br0
-ip link list
-#ip link set veth1$nr netns "blue$nr"
-
-ip netns exec "blue$nr" ip addr add 10.10.10.$nr/24 dev veth1$nr
-ip netns exec "blue$nr" ip addr add 10.0.25.$nr/24 dev veth1$nr
-ip netns exec "blue$nr" ip addr add 2.0.0.$nr/8 dev veth1$nr:1
-ip netns
-echo "$2"
-if [ "x$2" = 'xbash' ]; then
-    #ip netns exec "blue$nr" 'su - user' 
-    ip netns exec "blue$nr" su - pi
-fi

+ 33 - 0
netns/_exec

@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+import os
+import sys 
+import pwd
+
+
+from optparse import OptionParser
+parser = OptionParser()
+parser.add_option("--id",  dest="id",
+                  help="set netns id = ip")
+
+parser.add_option("--cmd", dest="cmd",
+                  help="cmd to execute in network-namespace")
+parser.add_option("--user", dest="user",
+                  help="username")
+(options, args) = parser.parse_args()
+print("option",options)
+
+if options.id is None:
+    print("please set network-namespace --id=xx")
+    sys.exit()
+
+if options.cmd is None:
+    print("exec: please set --cmd=xxxx")
+    sys.exit()
+
+cmd="sudo ip netns exec \"green_1{id}\" su \"{user}\" -c '{cmd}' "  # ok
+#cmd="sudo /opt/netns/exec \"green_{id}\" su \"{user}\" -c 'screen -d -m -S \"green_{id}\" \"{cmd}\"' "  # ok
+print(cmd)
+cmd2=cmd.format(user=options.user,id=options.id,cmd=options.cmd)
+print(cmd2)
+os.system(cmd2)
+

+ 31 - 0
netns/create

@@ -0,0 +1,31 @@
+#!/usr/bin/bash
+#x
+color="green_"
+nr="1$1"
+echo "arg: $1"
+if [ "x$1" = 'x' ]; then
+    echo "please enter a netns id 00-24"
+    exit 
+fi
+ip netns del "$color$nr"
+ip l del veth0$nr
+
+ip netns add "$color$nr"
+#ip netns list
+#ip link add veth0$nr type veth peer name veth1$nr
+ip link add veth0$nr type veth peer name veth1$nr netns "$color$nr"
+ip link set dev veth0$nr up
+ip netns exec "$color$nr" ip link set dev veth1$nr up
+ip link set veth0$nr master br0
+#ip link list
+#ip link set veth1$nr netns "$color$nr"
+
+ip netns exec "$color$nr" ip addr add 10.10.10.$nr/24 dev veth1$nr
+ip netns exec "$color$nr" ip addr add 10.0.25.$nr/24 dev veth1$nr
+ip netns exec "$color$nr" ip addr add 2.0.0.$nr/8 dev veth1$nr:1
+ip netns
+#echo "$2"
+#if [ "x$2" = 'xbash' ]; then
+#    #ip netns exec "$color$nr" 'su - user' 
+#    ip netns exec "$color$nr" su - pi
+#fi

+ 44 - 0
netns/exec

@@ -0,0 +1,44 @@
+#!/usr/bin/env python3
+#echo "name green_$1 command $2"
+
+#CMD="su user -c 'screen -d -m -S "'"'"$1"'"'" "'"'"$2"'"'"' "
+#echo "cmd: $CMD"
+#CMD2="sudo ip netns exec "'"'"green_$1"'"'" $CMD"
+#echo "cmd: $CMD2"
+import os
+import sys 
+import pwd
+
+#username = os.getlogin( ) 
+username = pwd.getpwuid(os.getuid())[0]
+print([username])
+if username == "root":
+    print( "do not execute this programm with root or sudo")
+    sys.exit()
+
+from optparse import OptionParser
+parser = OptionParser()
+parser.add_option("--id",  dest="id",
+                  help="set netns id = ip")
+
+parser.add_option("--cmd", dest="cmd",
+                  help="cmd to execute in network-namespace")
+(options, args) = parser.parse_args()
+print("option",options)
+#print( dir(parser))
+
+if options.id is None:
+    print("please set network-namespace --id=xx")
+    sys.exit()
+
+if options.cmd is None:
+    print("exec: please set --cmd=xxxx")
+    sys.exit()
+
+
+cmd="sudo /opt/netns/_exec --id=\"{id}\" --user=\"{user}\" --cmd=\"{cmd}\" "  # ok
+print(cmd)
+cmd2=cmd.format(user=username,id=options.id,cmd=options.cmd)
+print(cmd2)
+os.system(cmd2)
+