X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-autoinstaller.git/blobdiff_plain/a9857928a40650c4e1b6d34b21524fe44e0abfb1..f7e92d5179e6b400c34b897fcbdfd8a61b08b68f:/host/usr/sbin/sipb-xen-lvcopy diff --git a/host/usr/sbin/sipb-xen-lvcopy b/host/usr/sbin/sipb-xen-lvcopy deleted file mode 100755 index 53c5aa8..0000000 --- a/host/usr/sbin/sipb-xen-lvcopy +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env python2.5 - -import sys -import os -import shutil -import tempfile -import time -from subprocess import call, check_call, Popen, PIPE - -# Make sure to use up fd 0 to avoid a bug in subprocess in Python <= 2.5.1 -# NB we need to do this on every Python remctl script. -# See r53624 in Python svn. -sys.stdin = open('/dev/null') - -def losetup(source, offset=0): - p = Popen(['sipb-xen-losetup', source, str(offset)], stdout=PIPE) - return p.communicate()[0].strip() - -def frob_copy_in_vm(target, *args): - '''UNUSED: maybe we'll use this someday; it does isolate the frobber.''' - # 1. prepare arguments volume - args_volume = prefix+target+'_args' - args_device = '/dev/xenvg/' + args_volume - check_call(['/sbin/lvcreate', 'xenvg', '--name', args_volume, '--size', '4K']) - file(args_device, 'w').write('\n'.join(args) + '\n') - - # 2. invoke frobber vm - copier_device = '/dev/xenvg/d_wert_hda' - check_call(['/usr/sbin/xm', 'create', 'sipb-database', - 'machine_name='+target, - 'disks=' + ' '.join(['phy:'+copier_device+',hda,w', - 'phy:'+target_device+',hdc,w', - 'phy:'+args_device+',hdd,w'])]) - - # XXX should check_call(['/sbin/lvremove', '-f', 'xenvg/'+args_volume]) - -def frob_copy(target, hostname, rootpw): - """target should be an LV device filename""" - # 1: mount filesystem - fs = losetup(target, 32256) - mntdir = tempfile.mkdtemp('', 'auto-install.frob.', '/tmp') - call(['mount', '-t', 'ext3', fs, mntdir]) - # 2: do frobbing - call(['/usr/sbin/chroot', mntdir, '/post-copy', hostname, rootpw]) - # 3: clean up - call(['umount', mntdir]) - os.rmdir(mntdir) - call(['losetup', '-d', fs]) - -def duplicate_by_vm(source, target, rootpw, nodd=False, nofrob=False): - if source != "ice3": - print "Error: can't clone that VM" - sys.exit(1) - # source, target should be machine names - prefix = 'd_' - # 1. copy (by dd) source to target - source_device = '/dev/xenvg/' + prefix + source + '_hda' - target_device = '/dev/xenvg/' + prefix + target + '_hda' - if not nodd: - check_call(['/bin/dd', 'bs=1M', 'conv=nocreat', - 'if='+source_device, 'of='+target_device]) - # 2. frob target - if not nofrob: - frob_copy(target_device, target, rootpw) - -def main(*argv): - subcommand = argv[1] - args = argv[2:] - os.environ['PATH'] = '/usr/sbin:/usr/bin:/sbin:/bin' - if subcommand == 'lvcopy': - kwargs = {} - while True: - if args[0].startswith('--'): - kwargs[args[0][2:]] = True - args = args[1:] - continue - if len(args) != 3: - print >>sys.stderr, argv[0]+': bad argument list' - return 2 - break - duplicate_by_vm(*args, **kwargs) - elif subcommand == 'test': - pass - else: - print >>sys.stderr, argv[0]+": unknown subcommand: "+subcommand - return 2 - return 0 - -if __name__ == '__main__': - sys.exit(main(*sys.argv))