diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2011-12-14 10:45:05 +0000 |
---|---|---|
committer | Lars Wirzenius <lars.wirzenius@codethink.co.uk> | 2011-12-14 14:31:44 +0000 |
commit | f6bcb363aad315e710a90f810c33341a9d502da2 (patch) | |
tree | c9db1b7b272a10dda4e271540c540f8ba7aefd36 /morphlib | |
parent | 462e7ffc911e592a310f4ae24ab5e87f308ec224 (diff) | |
download | morph-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.py | 35 |
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)) |