Esempio n. 1
0
    def addRepository(self, name, url=None, mirrorlist=None):
        def _varSubstitute(option):
            # takes a variable and substitutes like dnf configs do
            arch = hawkey.detect_arch()
            option = option.replace("$basearch", dnf.rpm.basearch(arch))
            option = option.replace("$arch", arch)
            # If the url includes $releasever substitute user's value or
            # current system's version.
            if option.find("$releasever") > -1:
                if self.releasever:
                    option = option.replace("$releasever", self.releasever)
                else:
                    try:
                        detected_releasever = dnf.rpm.detect_releasever("/")
                    except dnf.exceptions.Error:
                        detected_releasever = None
                    if detected_releasever:
                        option = option.replace("$releasever",
                                                detected_releasever)
                    else:
                        raise CreatorError(
                            "$releasever in repo url, but no releasever set")
            return option

        try:
            # dnf 2
            repo = dnf.repo.Repo(name, parent_conf=self.conf)
        except TypeError as e:
            # dnf 1
            repo = dnf.repo.Repo(name, cachedir=self.conf.cachedir)
        if url:
            # some overly clever trickery in dnf 3 prevents us just
            # using repo.baseurl.append here:
            # https://bugzilla.redhat.com/show_bug.cgi?id=1595917
            # with the change to representing it as a tuple in DNF 3.6
            # this '+= (tuple)' approach seems to work for DNF 2,
            # 3.0-3.5 *and* 3.6
            repo.baseurl += (_varSubstitute(url), )
        if mirrorlist:
            repo.mirrorlist = _varSubstitute(mirrorlist)
        repo.enable()
        repo.set_progress_bar(DownloadProgress())
        self.repos.add(repo)
        return repo
Esempio n. 2
0
    def runInstall(self):
        import dnf.exceptions
        os.environ["HOME"] = "/"
        try:
            res = self.resolve()
        except dnf.exceptions.RepoError as e:
            raise CreatorError("Unable to download from repo : %s" % (e, ))
        except dnf.exceptions.Error as e:
            raise CreatorError("Failed to build transaction : %s" % (e, ))
        # Empty transactions are generally fine, we might be rebuilding an
        # existing image with no packages added
        if not res:
            return True

        dlpkgs = self.transaction.install_set
        self.download_packages(dlpkgs, DownloadProgress())
        # FIXME: sigcheck?

        ret = self.do_transaction(TransactionProgress())
        print("")
        self._cleanupRpmdbLocks(self.conf.installroot)
        return ret
Esempio n. 3
0
    def addRepository(self, name, url=None, mirrorlist=None):
        def _varSubstitute(option):
            # takes a variable and substitutes like dnf configs do
            arch = hawkey.detect_arch()
            option = option.replace("$basearch", dnf.rpm.basearch(arch))
            option = option.replace("$arch", arch)
            # If the url includes $releasever substitute user's value or
            # current system's version.
            if option.find("$releasever") > -1:
                if self.releasever:
                    option = option.replace("$releasever", self.releasever)
                else:
                    try:
                        detected_releasever = dnf.rpm.detect_releasever("/")
                    except dnf.exceptions.Error:
                        detected_releasever = None
                    if detected_releasever:
                        option = option.replace("$releasever",
                                                detected_releasever)
                    else:
                        raise CreatorError(
                            "$releasever in repo url, but no releasever set")
            return option

        try:
            # dnf 2
            repo = dnf.repo.Repo(name, parent_conf=self.conf)
        except TypeError as e:
            # dnf 1
            repo = dnf.repo.Repo(name, cachedir=self.conf.cachedir)
        if url:
            repo.baseurl.append(_varSubstitute(url))
        if mirrorlist:
            repo.mirrorlist = _varSubstitute(mirrorlist)
        repo.enable()
        repo.set_progress_bar(DownloadProgress())
        self.repos.add(repo)
        return repo