summaryrefslogtreecommitdiff
path: root/morphlib
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
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')
-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))