summaryrefslogtreecommitdiffstats
path: root/py/mock/backend.py
diff options
context:
space:
mode:
authorMichael E Brown <mebrown@michaels-house.net>2009-01-23 08:26:41 -0600
committerMichael E Brown <mebrown@michaels-house.net>2009-01-23 08:26:41 -0600
commit534b3148fd64ca6b1a8eee6dbe40bdfb61706c00 (patch)
treed39a19e06f06fa48d0894a4725ad7a99500c8966 /py/mock/backend.py
parent3e9969f8c50b85f8380c3fe00155ae5b9970fac2 (diff)
parent305c142babcbc5150b716b38e63cd8f9de6f4ef7 (diff)
downloadmock-534b3148fd64ca6b1a8eee6dbe40bdfb61706c00.tar.gz
mock-534b3148fd64ca6b1a8eee6dbe40bdfb61706c00.tar.xz
mock-534b3148fd64ca6b1a8eee6dbe40bdfb61706c00.zip
Merge branch 'buildsrpm'
* buildsrpm: unlink->rmdir another srpm -> spec change in buildsrpm. add state for building srpm. cant use srpm var, use spec file instead. its ofr info only. initial work to copy spec/sources and build srpm.
Diffstat (limited to 'py/mock/backend.py')
-rw-r--r--py/mock/backend.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/py/mock/backend.py b/py/mock/backend.py
index ed61a69..b57ece5 100644
--- a/py/mock/backend.py
+++ b/py/mock/backend.py
@@ -445,6 +445,65 @@ class Root(object):
# tell caching we are done building
self._callHooks('postbuild')
+
+ #
+ # UNPRIVLEGED:
+ # Everything in this function runs as the build user
+ # -> except hooks. :)
+ #
+ decorate(traceLog())
+ def buildsrpm(self, spec, sources, timeout):
+ """build an srpm into binary rpms, capture log"""
+
+ # tell caching we are building
+ self._callHooks('earlyprebuild')
+
+ try:
+ self._mountall()
+ self.uidManager.becomeUser(self.chrootuid, self.chrootgid)
+ self.state("setup")
+
+ # copy spec/sources
+ shutil.copy(spec, self.makeChrootPath(self.builddir, "SPECS"))
+ os.rmdir(self.makeChrootPath(self.builddir, "SOURCES"))
+ shutil.copytree(sources, self.makeChrootPath(self.builddir, "SOURCES"))
+
+ spec = self.makeChrootPath(self.builddir, "SPECS", os.path.basename(spec))
+ chrootspec = spec.replace(self.makeChrootPath(), '') # get rid of rootdir prefix
+
+ # Completely/Permanently drop privs while running the following:
+ self.state("buildsrpm")
+ os.environ["HOME"] = self.homedir
+ self.doChroot(
+ ["bash", "--login", "-c", 'rpmbuild -bs --target %s --nodeps %s' % (self.rpmbuild_arch, chrootspec)],
+ shell=False,
+ logger=self.build_log, timeout=timeout,
+ uid=self.chrootuid,
+ gid=self.chrootgid,
+ )
+
+ rebuiltSrpmFile = glob.glob("%s/%s/SRPMS/*.src.rpm" % (self.makeChrootPath(), self.builddir))
+ if len(rebuiltSrpmFile) != 1:
+ raise mock.exception.PkgError, "Didnt find single rebuilt srpm."
+
+ rebuiltSrpmFile = rebuiltSrpmFile[0]
+
+ srpms = glob.glob(self.makeChrootPath(self.builddir) + '/SRPMS/*.rpm')
+ self.root_log.debug("Copying packages to result dir")
+ for item in srpms:
+ shutil.copy2(item, self.resultdir)
+
+ finally:
+ self.uidManager.restorePrivs()
+ self._umountall()
+
+ # tell caching we are done building
+ self._callHooks('postbuild')
+
+
+
+
+
# =============
# 'Private' API
# =============