chiark / gitweb /
virt-subproc: new method adt-virt-schroot
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 25 Jul 2011 10:33:22 +0000 (11:33 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 25 Jul 2011 10:37:49 +0000 (11:37 +0100)
No manpage yet.

Makefile
debian/changelog
virt-subproc/adt-virt-schroot [new file with mode: 0755]

index 9f5c45ccbd1468bcc8c6589d1faba6ad3d00aa94..75de23dc2ab7d5d35b1ec61e80a47c4bfba26a15 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,7 @@ include settings.make
 programs =     virt-subproc/adt-virt-chroot \
                virt-subproc/adt-virt-xenlvm \
                virt-subproc/adt-virt-null \
+               virt-subproc/adt-virt-schroot \
                runner/adt-run \
                runner/adt-testreport-onepackage \
                runner/adt-testreport-runloop \
index 0cec8d8def95233711530f22869e3ec4bcb89bfe..07dab7ebc79e805df45400ac9c5ed7e2e2be478c 100644 (file)
@@ -1,3 +1,9 @@
+autopkgtest (1.3.0) unstable; urgency=low
+
+  * New adt-virt-schroot for driving schroot.
+
+ --
+
 autopkgtest (1.2.0~) unstable; urgency=low
 
   * adt-xenlvm-*: support for swap, defaulting to 5G.
diff --git a/virt-subproc/adt-virt-schroot b/virt-subproc/adt-virt-schroot
new file mode 100755 (executable)
index 0000000..32bd783
--- /dev/null
@@ -0,0 +1,97 @@
+#!/usr/bin/python2.4
+#
+# adt-virt-schroot 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
+import re as regexp
+import grp
+import pwd
+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 schroot, debuglevel
+
+       usage = "%prog [<options>] <schroot>"
+       parser = OptionParser(usage=usage)
+       pa = parser.add_option
+       pe = parser.error
+
+       pa('-d', '--debug', action='store_true', dest='debug');
+
+       (opts,args) = parser.parse_args()
+       if len(args) != 1: pe("need exactly one arg, schroot name")
+
+       schroot = args[0]
+
+       info = vsp.execute('schroot --config -c', [schroot],
+               downp=False, outp=True)
+       cfg = { }
+       ignore_re = regexp.compile('\#|\[|\s*$')
+       for entry in info.split("\n"):
+               if ignore_re.match(entry): continue
+               (key,val) = entry.split("=",2)
+               cfg[key] = val
+
+       vsp.debuglevel = opts.debug
+
+       if regexp.search('snapshot',cfg['type']):
+               capabilities.append('revert')
+
+       if [True
+               for exp_name in cfg['root-users'].split()
+               for got_uid in [os.getuid()]
+               if got_uid == pwd.getpwnam(exp_name).pw_uid
+       ] or [True
+               for exp_name in cfg['root-groups'].split()
+               for got_gid in [os.getgid()] + os.getgroups()
+               if got_gid == grp.getgrnam(exp_name).gr_gid
+       ]:
+               capabilities.append('root-on-testbed')
+
+def hook_open():
+       global schroot, sessid, downtmp
+       sessid = vsp.execute('schroot -b -c',[schroot], downp=False, outp=True)
+       vsp.down = ['schroot','-r','-c',sessid,'--','sh','-c']
+       return None
+
+def hook_cleanup():
+       global schroot, sessid, downtmp
+       vsp.execute('schroot -e -c',[sessid], downp=False)
+
+def hook_forked_inchild():
+       pass
+
+def hook_capabilities():
+       return capabilities
+
+parse_args()
+vsp.main()