def preinstallPkgs(self): if not self.ts_pre: self.__initialize_transaction() self.ts_pre.order() cb = rpmmisc.RPMInstallCallback(self.ts_pre) cb.headmsg = "Preinstall" installlogfile = "%s/__catched_stderr.buf" % (self.instroot) # start to catch stderr output from librpm msger.enable_logstderr(installlogfile) errors = self.ts_pre.run(cb.callback, '') # stop catch msger.disable_logstderr() self.ts_pre.closeDB() self.ts_pre = None if errors is not None: if len(errors) == 0: msger.warning('scriptlet or other non-fatal errors occurred ' 'during transaction.') else: for e in errors: msger.warning(e[0]) raise RepoError('Could not run transaction.')
def buildTransaction(self): if not self.Z.resolver().resolvePool(): probs = self.Z.resolver().problems() for problem in probs: msger.warning("repo problem: %s, %s" \ % (problem.description().decode("utf-8"), problem.details().decode("utf-8"))) raise RepoError("found %d resolver problem, abort!" \ % len(probs))
def buildTransaction(self): if not self.Z: self.__initialize_zypp() if not self.Z.resolver().resolvePool(): probs = self.Z.resolver().problems() for problem in probs: description = bytes_to_string(problem.description()) details = bytes_to_string(problem.details()) msger.warning("repo problem: {}, {}".format(description, details)) raise RepoError("found %d resolver problem, abort!" \ % len(probs))
def installPkgs(self, package_objects): if not self.ts: self.__initialize_transaction() # Set filters probfilter = 0 for flag in self.probFilterFlags: probfilter |= flag self.ts.setProbFilter(probfilter) self.ts_pre.setProbFilter(probfilter) localpkgs = list(self.localpkgs.keys()) for po in package_objects: pkgname = po.name() if pkgname in localpkgs: rpmpath = self.localpkgs[pkgname] else: rpmpath = self.getLocalPkgPath(po) if not os.path.exists(rpmpath): # Maybe it is a local repo baseurl = str(po.repoInfo().baseUrls()[0]) baseurl = baseurl.strip() location = po.location() location = str(location.filename()) if baseurl.startswith("file:/"): rpmpath = baseurl[5:] + "/%s" % (location) if not os.path.exists(rpmpath): raise RpmError("Error: %s doesn't exist" % rpmpath) h = rpmmisc.readRpmHeader(self.ts, rpmpath) if pkgname in self.pre_pkgs: msger.verbose("pre-install package added: %s" % pkgname) self.ts_pre.addInstall(h, rpmpath, 'u') self.ts.addInstall(h, rpmpath, 'u') unresolved_dependencies = self.ts.check() if not unresolved_dependencies: if self.pre_pkgs: self.preinstallPkgs() self.ts.order() cb = rpmmisc.RPMInstallCallback(self.ts) installlogfile = "%s/__catched_stderr.buf" % (self.instroot) # start to catch stderr output from librpm msger.enable_logstderr(installlogfile) errors = self.ts.run(cb.callback, '') # stop catch msger.disable_logstderr() self.ts.closeDB() self.ts = None if errors is not None: if len(errors) == 0: msger.warning('scriptlet or other non-fatal errors occurred ' 'during transaction.') else: for e in errors: msger.warning(e[0]) raise RepoError('Could not run transaction.') else: for pkg, need, needflags, sense, key in unresolved_dependencies: package = '-'.join(pkg) if needflags == rpm.RPMSENSE_LESS: deppkg = ' < '.join(need) elif needflags == rpm.RPMSENSE_EQUAL: deppkg = ' = '.join(need) elif needflags == rpm.RPMSENSE_GREATER: deppkg = ' > '.join(need) else: deppkg = '-'.join(need) if sense == rpm.RPMDEP_SENSE_REQUIRES: msger.warning("[%s] Requires [%s], which is not provided" \ % (package, deppkg)) elif sense == rpm.RPMDEP_SENSE_CONFLICTS: msger.warning("[%s] Conflicts with [%s]" %(package,deppkg)) raise RepoError("Unresolved dependencies, transaction failed.")