summaryrefslogtreecommitdiff
path: root/morphlib/stagingarea.py
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2013-08-14 09:08:20 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2013-08-15 15:59:22 +0000
commit0569173401faa85d044c77ce9f8b1a247456c878 (patch)
treeb78b630a294ba028dc2b56fc5412b305ff585bec /morphlib/stagingarea.py
parentb43a0b8ed9a26ff8a39189eb1b4534a1418326a9 (diff)
downloadmorph-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.py58
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.