From 7a89b9314d52b4b13fadce422ebbfb95cfb222a7 Mon Sep 17 00:00:00 2001 From: Michael E Brown Date: Wed, 19 Dec 2007 16:48:45 -0600 Subject: Run rpmbuild in a login shell in the chroot. --- py/mock/backend.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'py/mock/backend.py') diff --git a/py/mock/backend.py b/py/mock/backend.py index 80b223f..9b5fba9 100644 --- a/py/mock/backend.py +++ b/py/mock/backend.py @@ -388,7 +388,7 @@ class Root(object): chrootspec = spec.replace(self.makeChrootPath(), '') # get rid of rootdir prefix # Completely/Permanently drop privs while running the following: self.doChroot( - "rpmbuild -bs --target %s --nodeps %s" % (self.target_arch, chrootspec), + "bash -l -c 'rpmbuild -bs --target %s --nodeps %s'" % (self.target_arch, chrootspec), logger=self.build_log, timeout=timeout, uidManager=self.uidManager, uid=self.chrootuid, @@ -409,7 +409,7 @@ class Root(object): self._callHooks('prebuild') self.doChroot( - "rpmbuild -bb --target %s --nodeps %s" % (self.target_arch, chrootspec), + "bash -l -c 'rpmbuild -bb --target %s --nodeps %s'" % (self.target_arch, chrootspec), logger=self.build_log, timeout=timeout, uidManager=self.uidManager, uid=self.chrootuid, -- cgit From 79ad55bfcd2afbeedda8f955e484a41c01939545 Mon Sep 17 00:00:00 2001 From: Michael E Brown Date: Wed, 19 Dec 2007 21:44:30 -0600 Subject: fix resultdir for --uniqueext builds without resultdir specified. try to standardize on single-quotes for indexing hashes. --- py/mock/backend.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'py/mock/backend.py') diff --git a/py/mock/backend.py b/py/mock/backend.py index 9b5fba9..1f6f019 100644 --- a/py/mock/backend.py +++ b/py/mock/backend.py @@ -33,11 +33,10 @@ class Root(object): self.buildrootLock = None self.sharedRootName = config['root'] - root = self.sharedRootName if config.has_key('unique-ext'): - root = "%s-%s" % (root, config['unique-ext']) + config['root'] = "%s-%s" % (config['root'], config['unique-ext']) - self.basedir = os.path.join(config['basedir'], root) + self.basedir = os.path.join(config['basedir'], config['root']) self.target_arch = config['target_arch'] self._rootdir = os.path.join(self.basedir, 'root') self.homedir = config['chroothome'] @@ -76,11 +75,11 @@ class Root(object): self.pluginConf = config['plugin_conf'] self.pluginDir = config['plugin_dir'] for key in self.pluginConf.keys(): - if not key.endswith("_opts"): continue - self.pluginConf[key]["basedir"] = self.basedir - self.pluginConf[key]["cache_topdir"] = self.cache_topdir - self.pluginConf[key]["cachedir"] = self.cachedir - self.pluginConf[key]["root"] = self.sharedRootName + if not key.endswith('_opts'): continue + self.pluginConf[key]['basedir'] = self.basedir + self.pluginConf[key]['cache_topdir'] = self.cache_topdir + self.pluginConf[key]['cachedir'] = self.cachedir + self.pluginConf[key]['root'] = self.sharedRootName # mount/umount self.umountCmds = ['umount -n %s' % self.makeChrootPath('proc'), -- cgit From 0c608ac26c2977e8dd74dc9c6518438c809b28ac Mon Sep 17 00:00:00 2001 From: Michael E Brown Date: Thu, 20 Dec 2007 16:32:58 -0600 Subject: fix privs for yum resolvdep, needs to be root to download addl filelists. --- py/mock/backend.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'py/mock/backend.py') diff --git a/py/mock/backend.py b/py/mock/backend.py index 1f6f019..d4d0eb4 100644 --- a/py/mock/backend.py +++ b/py/mock/backend.py @@ -325,27 +325,27 @@ class Root(object): decorate(traceLog()) def installSrpmDeps(self, *srpms): """figure out deps from srpm. call yum to install them""" - arg_string = self.preExistingDeps - for hdr in mock.util.yieldSrpmHeaders(srpms, plainRpmOk=1): - # get text buildreqs - a = mock.util.requiresTextFromHdr(hdr) - b = mock.util.getAddtlReqs(hdr, self.more_buildreqs) - for item in mock.util.uniqReqs(a, b): - arg_string = arg_string + " '%s'" % item - - # everything exists, okay, install them all. - # pass build reqs (as strings) to installer - if arg_string != "": - output = self._yum('resolvedep %s' % arg_string, returnOutput=1) - for line in output.split('\n'): - if line.lower().find('No Package found for'.lower()) != -1: - raise mock.exception.BuildError, "Bad build req: %s. Exiting." % line - # nothing made us exit, so we continue + try: self.uidManager.becomeUser(0, 0) - try: + arg_string = self.preExistingDeps + for hdr in mock.util.yieldSrpmHeaders(srpms, plainRpmOk=1): + # get text buildreqs + a = mock.util.requiresTextFromHdr(hdr) + b = mock.util.getAddtlReqs(hdr, self.more_buildreqs) + for item in mock.util.uniqReqs(a, b): + arg_string = arg_string + " '%s'" % item + + # everything exists, okay, install them all. + # pass build reqs (as strings) to installer + if arg_string != "": + output = self._yum('resolvedep %s' % arg_string, returnOutput=1) + for line in output.split('\n'): + if line.lower().find('No Package found for'.lower()) != -1: + raise mock.exception.BuildError, "Bad build req: %s. Exiting." % line + # nothing made us exit, so we continue self._yum('install %s' % arg_string, returnOutput=1) - finally: - self.uidManager.restorePrivs() + finally: + self.uidManager.restorePrivs() # -- cgit