#!/usr/bin/python2.4 # # adt-virt-chroot is part of autopkgtest # autopkgtest is a tool for testing Debian binary packages # # autopkgtest is Copyright (C) 2006-2007 Canonical Ltd. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # # See the file CREDITS for a full list of credits information (often # installed as /usr/share/doc/autopkgtest/CREDITS). import sys import os import string from optparse import OptionParser try: our_base = os.environ['AUTOPKGTEST_BASE']+'/lib' except KeyError: our_base = '/usr/share/autopkgtest/python'; sys.path.insert(1, our_base) import VirtSubproc as vsp capabilities = [] def parse_args(): global down, debuglevel usage = "%prog [] =|/path/to/chroot" parser = OptionParser(usage=usage) pa = parser.add_option pe = parser.error pa('-r', '--gain-root', type='string', dest='gain_root'); pa('-d', '--debug', action='store_true', dest='debug'); (opts,args) = parser.parse_args() if len(args) != 1: pe("need exactly one arg, chroot specification") vsp.debuglevel = opts.debug chroot_arg = args[0] if not chroot_arg: pe("chroot specification may not be empty") if chroot_arg == '=': down = ['dchroot','-q','--'] elif chroot_arg == '=': down = ['dchroot','-q','--'] elif chroot_arg[0] == '=': down = ['dchroot','-q','-c',chroot_arg[1:],'--'] elif chroot_arg[0] == '/': down = ['chroot',chroot_arg] else: pe("chroot spec must be =[DCHROOT] or /PATH/TO/CHROOT") if down[0] == 'chroot': vsp.downkind = 'auxverb' elif down[0] == 'dchroot': vsp.downkind = 'shstring' else: print >>sys.stderr, 'down[0]=%s' % `down[0]` assert(False) if opts.gain_root != None: down = opts.gain_root.split() + down if opts.gain_root or os.getuid()==0: capabilities.append('root-on-testbed') vsp.down = down def hook_open(): pass def hook_downtmp(): return vsp.downtmp_mktemp() def hook_cleanup(): vsp.downtmp_remove() def hook_forked_inchild(): pass def hook_capabilities(): return capabilities parse_args() vsp.main()