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
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
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