#!/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'] except KeyError: our_base = '/usr/share/autopkgtest'; sys.path.insert(1, our_base+'/python') 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 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(): global downtmp vsp.execute('true', downp=True) downtmp = vsp.execute('mktemp -t -d', downp=True, outp=True) return downtmp def hook_cleanup(): vsp.execute('rm -rf --', [downtmp], downp=True) def hook_forked_inchild(): pass def hook_capabilities(): return capabilities parse_args() vsp.main()