+++ /dev/null
-#!/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))
+++ /dev/null
-#!/usr/bin/env python
-
-import sys
-import os
-import shutil
-import tempfile
-from subprocess import call
-
-data_dir = '/srv/guest-installer'
-
-def make_debian_cd(name, tmptree, passhashfile):
- basetree = os.path.join(data_dir, name)
- cdtree = os.path.join(tmptree, 'cdrom')
- shutil.copytree(os.path.join(basetree, 'cdrom'), cdtree, symlinks=True)
- new_preseed = file(os.path.join(cdtree, 'preseed.cfg'), 'w')
- old_preseed = file(os.path.join(basetree, 'preseed.cfg'))
- new_preseed.write(old_preseed.read())
- passhash = file(passhashfile).read()
- new_preseed.write('d-i passwd/root-password-crypted password '+passhash+'\n')
- new_preseed.close()
- output_iso = os.path.join(tmptree, 'install.iso')
- call('''mkisofs -r -V "SIPB-Xen_Custom_Install_CD" -cache-inodes -J -l
- -b isolinux/isolinux.bin -c isolinux/boot.cat
- -no-emul-boot -boot-load-size 4 -boot-info-table'''.split()
- + ['-o', output_iso, cdtree])
- return output_iso
-
-if __name__ == '__main__':
- print make_debian_cd(*sys.argv[1:])