def _createRoot(self, jobList, buildTrove, start=True, reuseRoots=False, copyInConary=True): cfg = buildcfg.BuildConfiguration(False, conaryConfig=self.cfg, root=self.cfg.root, serverConfig=self.rmakeCfg, strictMode=False) cfg.copyInConary = copyInConary cfg.defaultBuildReqs = [] cfg.reuseRoots = reuseRoots if jobList and isinstance(jobList[0], trove.Trove): jobList = [(x.getName(), (None, None), (x.getVersion(), x.getFlavor()), False) for x in jobList] mgr = rootmanager.ChrootManager(self.rmakeCfg) factory = mgr.getRootFactory(cfg, jobList, [], [], buildTrove) self.captureOutput(factory.create) if start: client = factory.start() else: client = None return mgr, factory, cfg, client
def testFakeChroot(self): groupRecipe = """ class SimpleGroup(GroupRecipe): name = 'group-foo' version = '1' clearBuildReqs() def setup(r): r.add('foo:lib') """ trv = self.addComponent('group-foo:source=1', [('group-foo.recipe', groupRecipe)]) self.addComponent('foo:lib') mgr = rootmanager.ChrootManager(self.rmakeCfg) trv = self.newBuildTrove(1, *trv.getNameVersionFlavor()) factory = mgr.getRootFactory(self.buildCfg, [], [], [], trv) factory.create() logFile = logfile.LogFile(self.workDir + '/rmake.out') logFile.redirectOutput() chroot = factory.start() try: chroot.buildTrove(self.buildCfg, versions.Label('localhost@rpl:branch'), *trv.getNameVersionFlavor()) results = chroot.checkResults(wait=30, *trv.getNameVersionFlavor()) assert(results.isBuildSuccess()) finally: chroot.stop() factory.clean() assert(factory.root != '/tmp/rmake') assert(not os.path.exists('/tmp/rmake/builds/group-foo'))
def runCommand(self, daemon, cfg, argSet, args): for dir in (cfg.getBuildLogDir(), ): if os.path.exists(dir): print "Deleting %s" % dir shutil.rmtree(dir) for dir in (cfg.getCacheDir(), ): if os.path.exists(dir): print "Deleting subdirectories of %s" % dir for subDir in os.listdir(dir): shutil.rmtree(dir + '/' + subDir) rootManager = rootmanager.ChrootManager(cfg) chroots = rootManager.listChroots() print "Deleting %s chroots" % len(chroots) for chroot in chroots: rootManager.deleteChroot(chroot)
def __init__(self, serverCfg, logger, slots=1): """ param serverCfg: server.servercfg.rMakeConfiguration instance param logger: lib.logger.Logger instance param slots: number of commands that can be run at once on this node. """ self.cfg = serverCfg self.logger = logger server.Server.__init__(self, logger) self.cfg.checkBuildSanity() self.idgen = CommandIdGen() self.chrootManager = rootmanager.ChrootManager(self.cfg, self.logger) self._foundResult = False self._queuedCommands = [] # list of command classes + parameters # for commands waiting to be run self.commands = [] # list of command objects currently running self.slots = slots
def runCommand(self, daemon, cfg, argSet, args): for dir in (cfg.getReposDir(), cfg.getBuildLogDir(), cfg.getDbContentsPath(), cfg.getProxyDir(), cfg.getResolverCachePath()): if os.path.exists(dir): print "Deleting %s" % dir shutil.rmtree(dir) for dir in (cfg.getCacheDir(), ): if os.path.exists(dir): print "Deleting subdirectories of %s" % dir for subDir in os.listdir(dir): shutil.rmtree(dir + '/' + subDir) for path in (cfg.getDbPath()[1], ): if os.path.exists(path): print "Deleting %s" % path os.remove(path) rootManager = rootmanager.ChrootManager(cfg) chroots = rootManager.listChroots() print "Deleting %s chroots" % len(chroots) for chroot in chroots: rootManager.deleteChroot(chroot)
def __init__(self, cfg, client, logger): self.cfg = cfg self.client = client self.logger = logger self.chrootManager = rootmanager.ChrootManager(self.cfg, self.logger)
def testChrootFactory2(self): self.openRmakeRepository() repos = self.openRepository() self.addComponent('test1:source', '1.0', '', [('test1.recipe', test1Recipe)]) self.addComponent( 'test1:source', '2.0', '', [('test1.recipe', test1Recipe.replace('1.0', '2.0'))]) rootDir = self.rmakeCfg.getChrootDir() + '/testBuildReqs' self.makeSourceTrove('testBuildReqs', testBuildReqsRecipe % dict(rootDir=rootDir)) troveTup = repos.findTrove(self.cfg.buildLabel, ('testBuildReqs:source', None, None), None)[0] cookFlavor = deps.parseFlavor('readline,ssl,X') troveTup = (troveTup[0], troveTup[1], cookFlavor) db = self.openRmakeDatabase() job = self.newJob(troveTup) buildTrove = buildtrove.BuildTrove(job.jobId, *troveTup) buildTrove.setPublisher(job.getPublisher()) cfg = buildcfg.BuildConfiguration(False, conaryConfig=self.cfg, root=self.cfg.root, serverConfig=self.rmakeCfg) cfg.defaultBuildReqs = [] trv1 = self.addComponent( 'test1:runtime', '1.0', '', [('/usr/bin/test1', rephelp.RegularFile(contents='#!/bin/sh', perms=0755))]) trv2 = self.addCollection('test1', '1.0', [':runtime']) trv3 = self.addComponent( 'test2:runtime', '1.0', '', [('/usr/bin/test2', rephelp.RegularFile(contents='#!/bin/sh', perms=0755))]) trv4 = self.addComponent('testunreadable:runtime', '1.0', '', [ ('/usr/untraverseable', rephelp.Directory(perms=0700)), ('/usr/symlink', rephelp.Symlink(target='/usr/untraverseable')), ('/usr/untraverseable/unreadable', rephelp.RegularFile(perms=0600)) ]) self.rmakeCfg.chrootUser = '******' mgr = rootmanager.ChrootManager(self.rmakeCfg) jobList = [ (x[0], (None, None), (x[1], x[2]), False) for x in (trv1.getNameVersionFlavor(), trv2.getNameVersionFlavor(), trv3.getNameVersionFlavor(), trv4.getNameVersionFlavor()) ] logFile = logfile.LogFile(self.workDir + '/chrootlog') logFile.redirectOutput() factory = mgr.getRootFactory(cfg, jobList, [], [], buildTrove) factory.create() chrootClient = factory.start() try: logPath = chrootClient.buildTrove(cfg, cfg.getTargetLabel(troveTup[1]), *troveTup) result = chrootClient.checkResults(wait=20, *troveTup) logFile.restoreOutput() assert (result) assert result.isBuildSuccess(), repr(result.getFailureReason()) untraverseable = mgr.baseDir + '/testBuildReqs/usr/untraverseable' self.assertEquals(stat.S_IMODE(os.stat(untraverseable).st_mode), 0705) unreadable = untraverseable + '/unreadable' self.assertEquals(stat.S_IMODE(os.stat(unreadable).st_mode), 0604) cs = changeset.ChangeSetFromFile(result.getChangeSetFile()) trvCs = [ x for x in cs.iterNewTroveList() if x.getName() == 'testBuildReqs:runtime' ][0] trv = trove.Trove(trvCs) files = [x[1] for x in trv.iterFileList()] # make sure the loadInstalled picked the recipe that # matches the installed package. assert ('/foo/1.0' in files) finally: chrootClient.stop()