[CRIU] [PATCH 07/12] build: Move crit tool into crit directory

Cyrill Gorcunov gorcunov at openvz.org
Fri Feb 12 10:05:13 PST 2016


Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 crit      | 275 --------------------------------------------------------------
 crit/crit | 275 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 275 insertions(+), 275 deletions(-)
 delete mode 100755 crit
 create mode 100755 crit/crit

diff --git a/crit b/crit
deleted file mode 100755
index 93cbc987e6a7..000000000000
--- a/crit
+++ /dev/null
@@ -1,275 +0,0 @@
-#!/usr/bin/env python
-import argparse
-import sys
-import json
-import os
-
-import pycriu
-
-def inf(opts):
-	if opts['in']:
-		return open(opts['in'], 'r')
-	else:
-		return sys.stdin
-
-def outf(opts):
-	if opts['out']:
-		return open(opts['out'], 'w+')
-	else:
-		return sys.stdout
-
-def dinf(opts, name):
-	return open(os.path.join(opts['dir'], name))
-
-def decode(opts):
-	indent = None
-
-	try:
-		img = pycriu.images.load(inf(opts), opts['pretty'])
-	except pycriu.images.MagicException as exc:
-		print >>sys.stderr, "Unknown magic %#x.\n"\
-				"Maybe you are feeding me an image with "\
-				"raw data(i.e. pages.img)?" % exc.magic
-		sys.exit(1)
-
-	if opts['pretty']:
-		indent = 4
-
-	f = outf(opts)
-	json.dump(img, f, indent=indent)
-	if f == sys.stdout:
-		f.write("\n")
-
-def encode(opts):
-	img = json.load(inf(opts))
-	pycriu.images.dump(img, outf(opts))
-
-def info(opts):
-	infs = pycriu.images.info(inf(opts))
-	json.dump(infs, sys.stdout, indent = 4)
-	print
-
-#
-# Explorers
-#
-
-class ps_item:
-	def __init__(self, p, core):
-		self.pid = p['pid']
-		self.ppid = p['ppid']
-		self.p = p
-		self.core = core
-		self.kids = []
-
-def show_ps(p, opts, depth = 0):
-	print "%7d%7d%7d   %s%s" % (p.pid, p.p['pgid'], p.p['sid'],
-			' ' * (4 * depth), p.core['tc']['comm'])
-	for kid in p.kids:
-		show_ps(kid, opts, depth + 1)
-
-def explore_ps(opts):
-	pss = { }
-	ps_img = pycriu.images.load(dinf(opts, 'pstree.img'))
-	for p in ps_img['entries']:
-		core = pycriu.images.load(dinf(opts, 'core-%d.img' % p['pid']))
-		ps = ps_item(p, core['entries'][0])
-		pss[ps.pid] = ps
-
-	# Build tree
-	psr = None
-	for pid in pss:
-		p = pss[pid]
-		if p.ppid == 0:
-			psr = p
-			continue
-
-		pp = pss[p.ppid]
-		pp.kids.append(p)
-
-	print "%7s%7s%7s   %s" % ('PID', 'PGID', 'SID', 'COMM')
-	show_ps(psr, opts)
-
-
-def ftype_find_in_image(opts, ft, fid, img):
-	if ft['img'] == None:
-		ft['img'] = pycriu.images.load(dinf(opts, img))['entries']
-	for f in ft['img']:
-		if f['id'] == fid:
-			return f
-	return None
-
-def ftype_reg(opts, ft, fid):
-	rf = ftype_find_in_image(opts, ft, fid, 'reg-files.img')
-	return rf and rf['name'] or 'unknown path'
-
-def ftype_pipe(opts, ft, fid):
-	p = ftype_find_in_image(opts, ft, fid, 'pipes.img')
-	return p and 'pipe[%d]' % p['pipe_id'] or 'pipe[?]'
-
-def ftype_unix(opts, ft, fid):
-	ux = ftype_find_in_image(opts, ft, fid, 'unixsk.img')
-	if not ux:
-		return 'unix[?]'
-
-	n = ux['name'] and ' %s' % ux['name'].decode('base64') or ''
-	return 'unix[%d (%d)%s]' % (ux['ino'], ux['peer'], n)
-
-file_types = {
-	'REG':		{'get': ftype_reg,	'img': None},
-	'PIPE':		{'get': ftype_pipe,	'img': None},
-	'UNIXSK':	{'get': ftype_unix,	'img': None},
-}
-
-def ftype_gen(opts, ft, fid):
-	return '%s.%d' % (ft['typ'], fid)
-
-files_cache = { }
-
-def get_file_str(opts, fd):
-	key = (fd['type'], fd['id'])
-	f = files_cache.get(key, None)
-	if not f:
-		ft = file_types.get(fd['type'], {'get': ftype_gen, 'typ': fd['type']})
-		f = ft['get'](opts, ft, fd['id'])
-		files_cache[key] = f
-
-	return f
-
-def explore_fds(opts):
-	ps_img = pycriu.images.load(dinf(opts, 'pstree.img'))
-	for p in ps_img['entries']:
-		pid = p['pid']
-		idi = pycriu.images.load(dinf(opts, 'ids-%s.img' % pid))
-		fdt = idi['entries'][0]['files_id']
-		fdi = pycriu.images.load(dinf(opts, 'fdinfo-%d.img' % fdt))
-
-		print "%d" % pid
-		for fd in fdi['entries']:
-			print "\t%7d: %s" % (fd['fd'], get_file_str(opts, fd))
-
-		fdi = pycriu.images.load(dinf(opts, 'fs-%d.img' % pid))['entries'][0]
-		print "\t%7s: %s" % ('cwd', get_file_str(opts, {'type': 'REG', 'id': fdi['cwd_id']}))
-		print "\t%7s: %s" % ('root', get_file_str(opts, {'type': 'REG', 'id': fdi['root_id']}))
-
-
-class vma_id:
-	def __init__(self):
-		self.__ids = {}
-		self.__last = 1
-
-	def get(self, iid):
-		ret = self.__ids.get(iid, None)
-		if not ret:
-			ret = self.__last
-			self.__last += 1
-			self.__ids[iid] = ret
-
-		return ret
-
-def explore_mems(opts):
-	ps_img = pycriu.images.load(dinf(opts, 'pstree.img'))
-	vids = vma_id()
-	for p in ps_img['entries']:
-		pid = p['pid']
-		mmi = pycriu.images.load(dinf(opts, 'mm-%d.img' % pid))['entries'][0]
-
-		print "%d" % pid
-		print "\t%-36s    %s" % ('exe', get_file_str(opts, {'type': 'REG', 'id': mmi['exe_file_id']}))
-
-		for vma in mmi['vmas']:
-			st = vma['status']
-			if st & (1 << 10):
-				fn = ' ' + 'ips[%lx]' % vids.get(vma['shmid'])
-			elif st & (1 << 8):
-				fn = ' ' + 'shmem[%lx]' % vids.get(vma['shmid'])
-			elif st & (1 << 11):
-				fn = ' ' + 'packet[%lx]' % vids.get(vma['shmid'])
-			elif st & ((1 << 6) | (1 << 7)):
-				fn = ' ' + get_file_str(opts, {'type': 'REG', 'id': vma['shmid']})
-				if vma['pgoff']:
-					fn += ' + %#lx' % vma['pgoff']
-				if st & (1 << 7):
-					fn += ' (s)'
-			elif st & (1 << 1):
-				fn = ' [stack]'
-			elif st & (1 << 2):
-				fn = ' [vsyscall]'
-			elif st & (1 << 3):
-				fn = ' [vdso]'
-			elif vma['flags'] & 0x0100: # growsdown
-				fn = ' [stack?]'
-			else:
-				fn = ''
-
-			if not st & (1 << 0):
-				fn += ' *'
-
-			prot = vma['prot'] & 0x1 and 'r' or '-'
-			prot += vma['prot'] & 0x2 and 'w' or '-'
-			prot += vma['prot'] & 0x4 and 'x' or '-'
-
-			astr = '%08lx-%08lx' % (vma['start'], vma['end'])
-			print "\t%-36s%s%s" % (astr, prot, fn)
-
-
-explorers = { 'ps': explore_ps, 'fds': explore_fds, 'mems': explore_mems }
-
-def explore(opts):
-	explorers[opts['what']](opts)
-
-def main():
-	desc = 'CRiu Image Tool'
-	parser = argparse.ArgumentParser(description=desc,
-			formatter_class=argparse.RawTextHelpFormatter)
-
-	subparsers = parser.add_subparsers(help='Use crit CMD --help for command-specific help')
-
-	# Decode
-	decode_parser = subparsers.add_parser('decode',
-			help = 'convert criu image from binary type to json')
-	decode_parser.add_argument('--pretty',
-			help = 'Multiline with indents and some numerical fields in field-specific format',
-			action = 'store_true')
-	decode_parser.add_argument('-i',
-			    '--in',
-			help = 'criu image in binary format to be decoded (stdin by default)')
-	decode_parser.add_argument('-o',
-			    '--out',
-			help = 'where to put criu image in json format (stdout by default)')
-	decode_parser.set_defaults(func=decode)
-
-	# Encode
-	encode_parser = subparsers.add_parser('encode',
-			help = 'convert criu image from json type to binary')
-	encode_parser.add_argument('-i',
-			    '--in',
-			help = 'criu image in json format to be encoded (stdin by default)')
-	encode_parser.add_argument('-o',
-			    '--out',
-			help = 'where to put criu image in binary format (stdout by default)')
-	encode_parser.set_defaults(func=encode)
-
-	# Info
-	info_parser = subparsers.add_parser('info',
-			help = 'show info about image')
-	info_parser.add_argument("in")
-	info_parser.set_defaults(func=info)
-
-	# Explore
-	x_parser = subparsers.add_parser('x', help = 'explore image dir')
-	x_parser.add_argument('dir')
-	x_parser.add_argument('what', choices = [ 'ps', 'fds', 'mems' ])
-	x_parser.set_defaults(func=explore)
-
-	# Show
-	show_parser = subparsers.add_parser('show',
-			help = "convert criu image from binary to human-readable json")
-	show_parser.add_argument("in")
-	show_parser.set_defaults(func=decode, pretty=True, out=None)
-
-	opts = vars(parser.parse_args())
-
-	opts["func"](opts)
-
-if __name__ == '__main__':
-	main()
diff --git a/crit/crit b/crit/crit
new file mode 100755
index 000000000000..93cbc987e6a7
--- /dev/null
+++ b/crit/crit
@@ -0,0 +1,275 @@
+#!/usr/bin/env python
+import argparse
+import sys
+import json
+import os
+
+import pycriu
+
+def inf(opts):
+	if opts['in']:
+		return open(opts['in'], 'r')
+	else:
+		return sys.stdin
+
+def outf(opts):
+	if opts['out']:
+		return open(opts['out'], 'w+')
+	else:
+		return sys.stdout
+
+def dinf(opts, name):
+	return open(os.path.join(opts['dir'], name))
+
+def decode(opts):
+	indent = None
+
+	try:
+		img = pycriu.images.load(inf(opts), opts['pretty'])
+	except pycriu.images.MagicException as exc:
+		print >>sys.stderr, "Unknown magic %#x.\n"\
+				"Maybe you are feeding me an image with "\
+				"raw data(i.e. pages.img)?" % exc.magic
+		sys.exit(1)
+
+	if opts['pretty']:
+		indent = 4
+
+	f = outf(opts)
+	json.dump(img, f, indent=indent)
+	if f == sys.stdout:
+		f.write("\n")
+
+def encode(opts):
+	img = json.load(inf(opts))
+	pycriu.images.dump(img, outf(opts))
+
+def info(opts):
+	infs = pycriu.images.info(inf(opts))
+	json.dump(infs, sys.stdout, indent = 4)
+	print
+
+#
+# Explorers
+#
+
+class ps_item:
+	def __init__(self, p, core):
+		self.pid = p['pid']
+		self.ppid = p['ppid']
+		self.p = p
+		self.core = core
+		self.kids = []
+
+def show_ps(p, opts, depth = 0):
+	print "%7d%7d%7d   %s%s" % (p.pid, p.p['pgid'], p.p['sid'],
+			' ' * (4 * depth), p.core['tc']['comm'])
+	for kid in p.kids:
+		show_ps(kid, opts, depth + 1)
+
+def explore_ps(opts):
+	pss = { }
+	ps_img = pycriu.images.load(dinf(opts, 'pstree.img'))
+	for p in ps_img['entries']:
+		core = pycriu.images.load(dinf(opts, 'core-%d.img' % p['pid']))
+		ps = ps_item(p, core['entries'][0])
+		pss[ps.pid] = ps
+
+	# Build tree
+	psr = None
+	for pid in pss:
+		p = pss[pid]
+		if p.ppid == 0:
+			psr = p
+			continue
+
+		pp = pss[p.ppid]
+		pp.kids.append(p)
+
+	print "%7s%7s%7s   %s" % ('PID', 'PGID', 'SID', 'COMM')
+	show_ps(psr, opts)
+
+
+def ftype_find_in_image(opts, ft, fid, img):
+	if ft['img'] == None:
+		ft['img'] = pycriu.images.load(dinf(opts, img))['entries']
+	for f in ft['img']:
+		if f['id'] == fid:
+			return f
+	return None
+
+def ftype_reg(opts, ft, fid):
+	rf = ftype_find_in_image(opts, ft, fid, 'reg-files.img')
+	return rf and rf['name'] or 'unknown path'
+
+def ftype_pipe(opts, ft, fid):
+	p = ftype_find_in_image(opts, ft, fid, 'pipes.img')
+	return p and 'pipe[%d]' % p['pipe_id'] or 'pipe[?]'
+
+def ftype_unix(opts, ft, fid):
+	ux = ftype_find_in_image(opts, ft, fid, 'unixsk.img')
+	if not ux:
+		return 'unix[?]'
+
+	n = ux['name'] and ' %s' % ux['name'].decode('base64') or ''
+	return 'unix[%d (%d)%s]' % (ux['ino'], ux['peer'], n)
+
+file_types = {
+	'REG':		{'get': ftype_reg,	'img': None},
+	'PIPE':		{'get': ftype_pipe,	'img': None},
+	'UNIXSK':	{'get': ftype_unix,	'img': None},
+}
+
+def ftype_gen(opts, ft, fid):
+	return '%s.%d' % (ft['typ'], fid)
+
+files_cache = { }
+
+def get_file_str(opts, fd):
+	key = (fd['type'], fd['id'])
+	f = files_cache.get(key, None)
+	if not f:
+		ft = file_types.get(fd['type'], {'get': ftype_gen, 'typ': fd['type']})
+		f = ft['get'](opts, ft, fd['id'])
+		files_cache[key] = f
+
+	return f
+
+def explore_fds(opts):
+	ps_img = pycriu.images.load(dinf(opts, 'pstree.img'))
+	for p in ps_img['entries']:
+		pid = p['pid']
+		idi = pycriu.images.load(dinf(opts, 'ids-%s.img' % pid))
+		fdt = idi['entries'][0]['files_id']
+		fdi = pycriu.images.load(dinf(opts, 'fdinfo-%d.img' % fdt))
+
+		print "%d" % pid
+		for fd in fdi['entries']:
+			print "\t%7d: %s" % (fd['fd'], get_file_str(opts, fd))
+
+		fdi = pycriu.images.load(dinf(opts, 'fs-%d.img' % pid))['entries'][0]
+		print "\t%7s: %s" % ('cwd', get_file_str(opts, {'type': 'REG', 'id': fdi['cwd_id']}))
+		print "\t%7s: %s" % ('root', get_file_str(opts, {'type': 'REG', 'id': fdi['root_id']}))
+
+
+class vma_id:
+	def __init__(self):
+		self.__ids = {}
+		self.__last = 1
+
+	def get(self, iid):
+		ret = self.__ids.get(iid, None)
+		if not ret:
+			ret = self.__last
+			self.__last += 1
+			self.__ids[iid] = ret
+
+		return ret
+
+def explore_mems(opts):
+	ps_img = pycriu.images.load(dinf(opts, 'pstree.img'))
+	vids = vma_id()
+	for p in ps_img['entries']:
+		pid = p['pid']
+		mmi = pycriu.images.load(dinf(opts, 'mm-%d.img' % pid))['entries'][0]
+
+		print "%d" % pid
+		print "\t%-36s    %s" % ('exe', get_file_str(opts, {'type': 'REG', 'id': mmi['exe_file_id']}))
+
+		for vma in mmi['vmas']:
+			st = vma['status']
+			if st & (1 << 10):
+				fn = ' ' + 'ips[%lx]' % vids.get(vma['shmid'])
+			elif st & (1 << 8):
+				fn = ' ' + 'shmem[%lx]' % vids.get(vma['shmid'])
+			elif st & (1 << 11):
+				fn = ' ' + 'packet[%lx]' % vids.get(vma['shmid'])
+			elif st & ((1 << 6) | (1 << 7)):
+				fn = ' ' + get_file_str(opts, {'type': 'REG', 'id': vma['shmid']})
+				if vma['pgoff']:
+					fn += ' + %#lx' % vma['pgoff']
+				if st & (1 << 7):
+					fn += ' (s)'
+			elif st & (1 << 1):
+				fn = ' [stack]'
+			elif st & (1 << 2):
+				fn = ' [vsyscall]'
+			elif st & (1 << 3):
+				fn = ' [vdso]'
+			elif vma['flags'] & 0x0100: # growsdown
+				fn = ' [stack?]'
+			else:
+				fn = ''
+
+			if not st & (1 << 0):
+				fn += ' *'
+
+			prot = vma['prot'] & 0x1 and 'r' or '-'
+			prot += vma['prot'] & 0x2 and 'w' or '-'
+			prot += vma['prot'] & 0x4 and 'x' or '-'
+
+			astr = '%08lx-%08lx' % (vma['start'], vma['end'])
+			print "\t%-36s%s%s" % (astr, prot, fn)
+
+
+explorers = { 'ps': explore_ps, 'fds': explore_fds, 'mems': explore_mems }
+
+def explore(opts):
+	explorers[opts['what']](opts)
+
+def main():
+	desc = 'CRiu Image Tool'
+	parser = argparse.ArgumentParser(description=desc,
+			formatter_class=argparse.RawTextHelpFormatter)
+
+	subparsers = parser.add_subparsers(help='Use crit CMD --help for command-specific help')
+
+	# Decode
+	decode_parser = subparsers.add_parser('decode',
+			help = 'convert criu image from binary type to json')
+	decode_parser.add_argument('--pretty',
+			help = 'Multiline with indents and some numerical fields in field-specific format',
+			action = 'store_true')
+	decode_parser.add_argument('-i',
+			    '--in',
+			help = 'criu image in binary format to be decoded (stdin by default)')
+	decode_parser.add_argument('-o',
+			    '--out',
+			help = 'where to put criu image in json format (stdout by default)')
+	decode_parser.set_defaults(func=decode)
+
+	# Encode
+	encode_parser = subparsers.add_parser('encode',
+			help = 'convert criu image from json type to binary')
+	encode_parser.add_argument('-i',
+			    '--in',
+			help = 'criu image in json format to be encoded (stdin by default)')
+	encode_parser.add_argument('-o',
+			    '--out',
+			help = 'where to put criu image in binary format (stdout by default)')
+	encode_parser.set_defaults(func=encode)
+
+	# Info
+	info_parser = subparsers.add_parser('info',
+			help = 'show info about image')
+	info_parser.add_argument("in")
+	info_parser.set_defaults(func=info)
+
+	# Explore
+	x_parser = subparsers.add_parser('x', help = 'explore image dir')
+	x_parser.add_argument('dir')
+	x_parser.add_argument('what', choices = [ 'ps', 'fds', 'mems' ])
+	x_parser.set_defaults(func=explore)
+
+	# Show
+	show_parser = subparsers.add_parser('show',
+			help = "convert criu image from binary to human-readable json")
+	show_parser.add_argument("in")
+	show_parser.set_defaults(func=decode, pretty=True, out=None)
+
+	opts = vars(parser.parse_args())
+
+	opts["func"](opts)
+
+if __name__ == '__main__':
+	main()
-- 
2.5.0



More information about the CRIU mailing list