Example #1
0
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
Example #2
0
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
Example #3
0
    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
Example #4
0
    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
Example #5
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
Example #6
0
        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()
Example #7
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()