diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2013-08-14 09:08:20 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2013-08-15 15:59:22 +0000 |
commit | 0569173401faa85d044c77ce9f8b1a247456c878 (patch) | |
tree | b78b630a294ba028dc2b56fc5412b305ff585bec /morphlib/stagingarea.py | |
parent | b43a0b8ed9a26ff8a39189eb1b4534a1418326a9 (diff) | |
download | morph-0569173401faa85d044c77ce9f8b1a247456c878.tar.gz |
stagingarea: use linux-user-chroot in bootstraps
This changes the semantics of the use_chroot flag to instead mean
chrooting to /
Diffstat (limited to 'morphlib/stagingarea.py')
-rw-r--r-- | morphlib/stagingarea.py | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/morphlib/stagingarea.py b/morphlib/stagingarea.py index 63d145c3..ba6fd53a 100644 --- a/morphlib/stagingarea.py +++ b/morphlib/stagingarea.py @@ -252,8 +252,8 @@ class StagingArea(object): builddir = self.builddir(source) destdir = self.destdir(source) - self.builddirname = self.relative(builddir).lstrip('/') - self.destdirname = self.relative(destdir).lstrip('/') + self.builddirname = builddir + self.destdirname = destdir self.do_mounts(setup_mounts) @@ -279,36 +279,38 @@ class StagingArea(object): kwargs['env'].update(kwargs['extra_env']) del kwargs['extra_env'] - if self.use_chroot: - cwd = kwargs.get('cwd') or '/' - if 'cwd' in kwargs: - cwd = kwargs['cwd'] - del kwargs['cwd'] - else: - cwd = '/' + cwd = kwargs.get('cwd') or '/' + if 'cwd' in kwargs: + cwd = kwargs['cwd'] + del kwargs['cwd'] + else: + cwd = '/' - do_not_mount_dirs = [os.path.join(self.dirname, d) - for d in (self.builddirname, - self.destdirname, - 'dev', 'proc', 'tmp')] + chroot_dir = self.dirname if self.use_chroot else '/' - real_argv = ['linux-user-chroot', '--chdir', cwd] - for d in morphlib.fsutils.invert_paths(os.walk(self.dirname), - do_not_mount_dirs): - if not os.path.islink(d): - real_argv += ['--mount-readonly', self.relative(d)] - real_argv += [self.dirname] + do_not_mount_dirs = [os.path.join(self.dirname, d) + for d in (self.builddirname, + self.destdirname, + 'dev', 'proc', 'tmp')] - real_argv += argv + logging.debug("Not mounting dirs %r" % do_not_mount_dirs) - try: - return self._app.runcmd(real_argv, **kwargs) - except cliapp.AppException as e: - raise cliapp.AppException('In staging area %s: running ' - 'command \'%s\' failed.' % - (self.dirname, ' '.join(argv))) - else: - return self._app.runcmd(argv, **kwargs) + real_argv = ['linux-user-chroot', '--chdir', cwd] + 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)] + + real_argv += [chroot_dir] + + real_argv += argv + + try: + return self._app.runcmd(real_argv, **kwargs) + except cliapp.AppException as e: + raise cliapp.AppException('In staging area %s: running ' + 'command \'%s\' failed.' % + (self.dirname, ' '.join(argv))) def abort(self): # pragma: no cover '''Handle what to do with a staging area in the case of failure. |