lxcsu userspace package
[lxc-userspace.git] / lxcsu
1 #!/usr/bin/python
2
3
4 import setns
5 import os
6
7 from optparse import OptionParser
8
9 parser = OptionParser()
10 parser.add_option("-n", "--net",
11                   action="store_true", dest="netns", default=False,
12                   help="Enter network namespace")
13 parser.add_option("-m", "--mnt",
14                   action="store_true", dest="mntns", default=False,
15                   help="Enter mount namespace")
16
17 (options, args) = parser.parse_args()
18
19 try:
20         slice_name = args[0]
21 except IndexError:
22         print "You must specify a vm name"
23         exit(1)
24
25
26 try:
27         cmd = 'grep %s /proc/*/cgroup | grep freezer'%slice_name
28         output = os.popen(cmd).readlines()
29 except:
30         print "Error finding slice %s"%slice_name
31         exit(1)
32
33 slice_spec = None
34 for e in output:
35         try:
36                 l = e.rstrip()
37                 path = l.split(':')[0]  
38                 comp = l.rsplit(':')[-1]
39                 slice_name_check = comp.rsplit('/')[-1]
40
41                 if (slice_name_check == slice_name):
42                         slice_path = path
43                         pid = slice_path.split('/')[2]
44                         cmdline = open('/proc/%s/cmdline'%pid).read().rstrip('\n\x00')
45                         if (cmdline == '/sbin/init'):
46                                 slice_spec = slice_path
47                                 break
48         except:
49                 break
50
51 if (not slice_spec):
52         print "Could not find any processes associated with %s"%slice_name
53
54
55 #os.closerange(0,1024)
56
57 r1 = setns.chcontext('/proc/%s/ns/utc'%pid)
58 r2 = setns.chcontext('/proc/%s/ns/ipc'%pid)
59 path = '/proc/%s/ns/net'%pid
60 r3 = setns.chcontext(path)
61 os.system('whoami')
62 open('/proc/lxcsu','w').write(pid)
63 os.system('mount none -t proc /proc')
64 os.execv('/bin/sh',['/bin/sh'])