summaryrefslogtreecommitdiff
path: root/morphlib/execute.py
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2011-12-14 10:45:05 +0000
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2011-12-14 14:31:44 +0000
commitf6bcb363aad315e710a90f810c33341a9d502da2 (patch)
treec9db1b7b272a10dda4e271540c540f8ba7aefd36 /morphlib/execute.py
parent462e7ffc911e592a310f4ae24ab5e87f308ec224 (diff)
downloadmorph-f6bcb363aad315e710a90f810c33341a9d502da2.tar.gz
remove fake fakeroot and sudo from chroot and make morph not use them when running as root
This is just sufficient to get stuff working for bootstrapping.
Diffstat (limited to 'morphlib/execute.py')
-rw-r--r--morphlib/execute.py35
1 files changed, 17 insertions, 18 deletions
diff --git a/morphlib/execute.py b/morphlib/execute.py
index b502cb11..aedf8d4f 100644
--- a/morphlib/execute.py
+++ b/morphlib/execute.py
@@ -52,6 +52,21 @@ class Execute(object):
def _setup_env(self):
self.env = dict(os.environ)
+ def _prefix(self, argv, as_root, as_fakeroot):
+ if as_root:
+ if os.getuid() == 0:
+ prefix = ['env']
+ else:
+ prefix = ['sudo']
+ envs = ["%s=%s" % x for x in self.env.iteritems()]
+ argv = prefix + envs + argv
+ elif as_fakeroot and os.getuid() != 0:
+ if not self._fakeroot_session:
+ self._fakeroot_session = tempfile.mkstemp()[1]
+ argv = ['fakeroot', '-i', self._fakeroot_session, '-s',
+ self._fakeroot_session, '--'] + argv
+ return argv
+
def run(self, commands, as_root=False, as_fakeroot=False, _log=True):
'''Execute a list of commands.
@@ -64,15 +79,7 @@ class Execute(object):
for command in commands:
self.msg('# %s' % command)
argv = ['sh', '-c', command]
- if as_root:
- argv = (['sudo'] +
- ["%s=%s" % x for x in self.env.iteritems()] +
- argv) # pragma: no cover
- elif as_fakeroot:
- if not self._fakeroot_session:
- self._fakeroot_session = tempfile.mkstemp()[1]
- argv = ['fakeroot', '-i', self._fakeroot_session, '-s',
- self._fakeroot_session, '--'] + argv
+ argv = self._prefix(argv, as_root, as_fakeroot)
logging.debug('run: argv=%s' % repr(argv))
logging.debug('run: env=%s' % repr(self.env))
logging.debug('run: cwd=%s' % repr(self.dirname))
@@ -110,15 +117,7 @@ class Execute(object):
if 'env' not in kwargs:
kwargs['env'] = self.env
- if as_root:
- argv = (['sudo'] +
- ["%s=%s" % x for x in self.env.iteritems()] +
- argv) # pragma: no cover
- elif as_fakeroot:
- if not self._fakeroot_session:
- self._fakeroot_session = tempfile.mkstemp()[1]
- argv = ['fakeroot', '-i', self._fakeroot_session, '-s',
- self._fakeroot_session, '--'] + argv
+ argv = self._prefix(argv, as_root, as_fakeroot)
logging.debug('runv: argv=%s' % repr(argv))
logging.debug('runv: env=%s' % repr(self.env))
logging.debug('runv: cwd=%s' % repr(self.dirname))