Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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'))
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
 def __init__(self, cfg, client, logger):
     self.cfg = cfg
     self.client = client
     self.logger = logger
     self.chrootManager = rootmanager.ChrootManager(self.cfg, self.logger)
Exemplo n.º 7
0
    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()