+++ /dev/null
-#!/usr/bin/env python2.5
-
-import sys
-import os
-from subprocess import call
-
-def losetup(source, offset=0):
- # XXX we avoid colliding with other instances of ourself,
- # but when it comes to other loop-device users we just
- # pick a range things don't seem to use and hope...
- lockfilename = '/tmp/losetup.lock'
- os.close(os.open(lockfilename, os.O_CREAT+os.O_EXCL)) #lock
- try:
- loopdevice = None
- for i in xrange(32,60): # totally arbitrary, just looks to be unused on black-mesa
- filename = '/dev/loop%d'%i
- if 0 == len(file(filename).read(1)):
- loopdevice = filename # it's empty
- break
- if loopdevice is not None:
- call(['losetup', '-o', str(offset), loopdevice, source])
- else:
- raise RuntimeError('out of loop devices for copying VM image: too many at once?')
- finally:
- os.unlink(lockfilename) #unlock
- return loopdevice
-
-def main(*argv):
- args = argv[1:]
- os.environ['PATH'] = '/usr/sbin:/usr/bin:/sbin:/bin'
- if not (1 <= len(args) <= 2):
- print >>sys.stderr, 'usage: %s sourcedevice [offset]' % argv[0]
- print >>sys.stderr, 'prints resulting loopback device; don\'t forget to losetup -d'
- return 2
- print losetup(*args)
- return 0
-
-if __name__ == '__main__':
- sys.exit(main(*sys.argv))