def getFreeCachespace(config, operations): """Check if there is enough diskspace for caching the rpms for the given operations. Return 1 if there is enough space (with 30 MB slack), 0 otherwise (after warning the user).""" return 1 cachedir = rpmconfig.cachedir while 1: try: os.stat(cachedir) break except OSError: cachedir = os.path.dirname(cachedir) statvfs = os.statvfs(cachedir) freespace = statvfs[0] * statvfs[4] for (op, pkg) in operations: # No packages will get downloaded for erase operations. if op == OP_ERASE: continue # Also local files won't be cached either. if pkg.source.startswith("file:/") or pkg.source[0] == "/": continue try: freespace -= pkg['signature']['size_in_sig'][0]+pkg.range_header[0] except KeyError: raise ValueError, "Missing signature:size_in sig in package" if freespace < 31457280: log.info1("Less than 30MB of diskspace left in %s for caching rpms", cachedir) return 0 return 1
def getFreeCachespace(config, operations): """Check if there is enough diskspace for caching the rpms for the given operations. Return 1 if there is enough space (with 30 MB slack), 0 otherwise (after warning the user).""" return 1 cachedir = rpmconfig.cachedir while 1: try: os.stat(cachedir) break except OSError: cachedir = os.path.dirname(cachedir) statvfs = os.statvfs(cachedir) freespace = statvfs[0] * statvfs[4] for (op, pkg) in operations: # No packages will get downloaded for erase operations. if op == OP_ERASE: continue # Also local files won't be cached either. if pkg.source.startswith("file:/") or pkg.source[0] == "/": continue try: freespace -= pkg['signature']['size_in_sig'][0] + pkg.range_header[ 0] except KeyError: raise ValueError, "Missing signature:size_in sig in package" if freespace < 31457280: log.info1("Less than 30MB of diskspace left in %s for caching rpms", cachedir) return 0 return 1
def createRepo(self): """Create repodata metadata for self.source. Return 1 on success, 0 on failure. Assumes self.source is a local file system path without schema prefix.""" import gzip, libxml2 log.info1("Pass 1: Parsing package headers for file requires.") self.__readDir(self.source, "") filename = functions._uriToFilename(self.source) datapath = os.path.join(filename, "repodata") if not os.path.isdir(datapath): try: os.makedirs(datapath) except OSError, e: log.error("%s: Couldn't create repodata: %s", filename, e) return 0
return 0 try: rfd = open(os.path.join(datapath, "repomd.xml")) except IOError: return 0 #try: # ofd = gzip.GzipFile(os.path.join(datapath, "other.xml.gz"), "wb") #except IOError: # return 0 pdoc = libxml2.newDoc("1.0") proot = pdoc.newChild(None, "metadata", None) fdoc = libxml2.newDoc("1.0") froot = fdoc.newChild(None, "filelists", None) #odoc = libxml2.newDoc("1.0") #oroot = odoc.newChild(None, "filelists", None) log.info1("Pass 2: Writing repodata information.") pfd.write('<?xml version="1.0" encoding="UTF-8"?>\n') pfd.write('<metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="%d">\n' % len(self.getPkgs())) ffd.write('<?xml version="1.0" encoding="UTF-8"?>\n') ffd.write('<filelists xmlns:rpm="http://linux.duke.edu/filelists" packages="%d">\n' % len(self.getPkgs())) for pkg in self.getPkgs(): log.info2("Processing complete data of package %s.", pkg.getNEVRA()) pkg.header_read = 0 try: pkg.open() pkg.read() except (IOError, ValueError), e: log.warning("%s: %s", pkg.getNEVRA(), e) continue # If it is a source rpm change the arch to "src". Only valid
operation = pyrpm.RpmResolver.OP_INSTALL elif update_flag == 1: operation = pyrpm.RpmResolver.OP_UPDATE else: # erase_flag operation = pyrpm.RpmResolver.OP_ERASE instlist = pyrpm.RpmResolver(installed, operation) for r in rpms: ret = instlist.append(r) if ret == pyrpm.RpmResolver.ALREADY_INSTALLED: log.error("Package %s is already installed", r.getNEVRA()) sys.exit(ret) elif ret == pyrpm.RpmResolver.OLD_PACKAGE: log.info1("%s: A newer package is already installed", r.getNEVRA()) elif ret == pyrpm.RpmResolver.NOT_INSTALLED: log.error("Package %s is not installed", r.getNEVRA()) sys.exit(ret) elif ret == pyrpm.RpmResolver.UPDATE_FAILED: log.error("Update of %s failed", r.getNEVRA()) sys.exit(ret) elif ret == pyrpm.RpmResolver.OBSOLETE_FAILED: log.error("%s: Uninstall of obsolete failed", r.getNEVRA()) sys.exit(ret) # else: all ok for rpm,list in instlist.updates: print "Package %s is an update for" % rpm.getNEVRA() for r in list: print "\t%s" % r.getNEVRA()
return 0 try: rfd = open(os.path.join(datapath, "repomd.xml")) except IOError: return 0 #try: # ofd = gzip.GzipFile(os.path.join(datapath, "other.xml.gz"), "wb") #except IOError: # return 0 pdoc = libxml2.newDoc("1.0") proot = pdoc.newChild(None, "metadata", None) fdoc = libxml2.newDoc("1.0") froot = fdoc.newChild(None, "filelists", None) #odoc = libxml2.newDoc("1.0") #oroot = odoc.newChild(None, "filelists", None) log.info1("Pass 2: Writing repodata information.") pfd.write('<?xml version="1.0" encoding="UTF-8"?>\n') pfd.write( '<metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="%d">\n' % len(self.getPkgs())) ffd.write('<?xml version="1.0" encoding="UTF-8"?>\n') ffd.write( '<filelists xmlns:rpm="http://linux.duke.edu/filelists" packages="%d">\n' % len(self.getPkgs())) for pkg in self.getPkgs(): log.info2("Processing complete data of package %s.", pkg.getNEVRA()) pkg.header_read = 0 try: pkg.open() pkg.read()