diff options
author | Richard Maw <richard.maw@gmail.com> | 2014-10-29 18:14:15 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2014-10-30 15:12:17 +0000 |
commit | af63ece0a8db78bb5d0b7b67061b305d528fe993 (patch) | |
tree | fe39baa9811c84564bc60a7e66ca9c900d864224 /morphlib/stagingarea.py | |
parent | 64861f8dba8bd038c3ddfeb48dbef140a4332c6a (diff) | |
download | morph-af63ece0a8db78bb5d0b7b67061b305d528fe993.tar.gz |
Make build commands use containerised_cmdline
Diffstat (limited to 'morphlib/stagingarea.py')
-rw-r--r-- | morphlib/stagingarea.py | 45 |
1 files changed, 14 insertions, 31 deletions
diff --git a/morphlib/stagingarea.py b/morphlib/stagingarea.py index 25e33b3f..8a9faca6 100644 --- a/morphlib/stagingarea.py +++ b/morphlib/stagingarea.py @@ -267,16 +267,11 @@ class StagingArea(object): def runcmd(self, argv, **kwargs): # pragma: no cover '''Run a command in a chroot in the staging area.''' assert 'env' not in kwargs - kwargs['env'] = self.env + kwargs['env'] = dict(self.env) if 'extra_env' in kwargs: kwargs['env'].update(kwargs['extra_env']) del kwargs['extra_env'] - if 'cwd' in kwargs: - cwd = kwargs['cwd'] - del kwargs['cwd'] - else: - cwd = '/' ccache_dir = kwargs.pop('ccache_dir', None) chroot_dir = self.dirname if self.use_chroot else '/' @@ -289,40 +284,28 @@ class StagingArea(object): for d in staging_dirs] if not self.use_chroot: do_not_mount_dirs += [temp_dir] - logging.debug("Not mounting dirs %r" % do_not_mount_dirs) - real_argv = ['linux-user-chroot', '--chdir', cwd, '--unshare-net'] - for d in morphlib.fsutils.invert_paths(os.walk(chroot_dir), - do_not_mount_dirs): - if not os.path.islink(d): - real_argv += ['--mount-readonly', self.relative(d)] - - if self.use_chroot: - proc_target = os.path.join(self.dirname, 'proc') - if not os.path.exists(proc_target): - os.makedirs(proc_target) - real_argv += ['--mount-proc', self.relative(proc_target)] - + mount_proc = self.use_chroot if ccache_dir and not self._app.settings['no-ccache']: ccache_target = os.path.join( self.dirname, kwargs['env']['CCACHE_DIR'].lstrip('/')) - real_argv += ['--mount-bind', ccache_dir, - self.relative(ccache_target)] - - real_argv += [chroot_dir] - - real_argv += argv + binds = ((ccache_dir, ccache_target),) + else: + binds = () + cmdline = morphlib.util.containerised_cmdline( + argv, cwd=kwargs.pop('cwd', '/'), + root=chroot_dir, mounts=self.to_mount, + binds=binds, mount_proc=mount_proc, + writable_paths=do_not_mount_dirs) try: - if 'logfile' in kwargs and kwargs['logfile'] != None: - logfile = kwargs['logfile'] - del kwargs['logfile'] - + if kwargs.get('logfile') != None: + logfile = kwargs.pop('logfile') teecmd = ['tee', '-a', logfile] - return self._app.runcmd(real_argv, teecmd, **kwargs) + return self._app.runcmd(cmdline, teecmd, **kwargs) else: - return self._app.runcmd(real_argv, **kwargs) + return self._app.runcmd(cmdline, **kwargs) except cliapp.AppException as e: raise cliapp.AppException('In staging area %s: running ' 'command \'%s\' failed.' % |