diff options
-rw-r--r-- | morphlib/builder2.py | 3 | ||||
-rw-r--r-- | morphlib/stagingarea.py | 35 |
2 files changed, 22 insertions, 16 deletions
diff --git a/morphlib/builder2.py b/morphlib/builder2.py index 402c17f4..88717bb9 100644 --- a/morphlib/builder2.py +++ b/morphlib/builder2.py @@ -260,7 +260,8 @@ class ChunkBuilder(BuilderBase): def build_and_cache(self): # pragma: no cover with self.build_watch('overall-build'): - builddir, destdir = self.staging_area.chroot_open(self.artifact.source) + builddir, destdir = \ + self.staging_area.chroot_open(self.artifact.source) log_name = None try: self.get_sources(builddir) diff --git a/morphlib/stagingarea.py b/morphlib/stagingarea.py index c8b53bd3..f6d221ab 100644 --- a/morphlib/stagingarea.py +++ b/morphlib/stagingarea.py @@ -141,7 +141,8 @@ class StagingArea(object): pass def runcmd(self, argv, **kwargs): # pragma: no cover - '''Run a command in a chroot in the staging area.''' + '''Run a command in the staging area.''' + cwd = kwargs.get('cwd') or '/' if 'cwd' in kwargs: cwd = kwargs['cwd'] @@ -149,23 +150,27 @@ class StagingArea(object): else: cwd = '/' - entries = os.listdir(self.dirname) - - for friend in [self.builddirname,self.destdirname,'dev','proc','tmp']: - try: - entries.remove(friend) - except: - pass + if self._app.settings['staging-chroot']: + entries = os.listdir(self.dirname) + + friends = [self.builddirname, self.destdirname, + 'dev', 'proc', 'tmp'] + for friend in friends: + if friend in friends: + entries.remove(friend) - real_argv = ['linux-user-chroot'] + real_argv = ['linux-user-chroot'] - for entry in entries: - real_argv += ['--mount-readonly',"/"+entry] + for entry in entries: + real_argv += ['--mount-readonly',"/"+entry] - real_argv += ['--mount-proc','/proc'] - real_argv += ['--mount-bind','/dev/shm','/dev/shm'] - real_argv += [self.dirname, 'sh', '-c', - 'cd "$1" && shift && exec "$@"', '--', cwd] + real_argv += ['--mount-proc','/proc'] + real_argv += ['--mount-bind','/dev/shm','/dev/shm'] + real_argv += [self.dirname] + else: + real_argv = ['chroot', '/'] + + real_argv += ['sh', '-c', 'cd "$1" && shift && exec "$@"', '--', cwd] real_argv += argv return self._app.runcmd(real_argv, **kwargs) |