#!/usr/bin/python # # yumcache # # Copyright (C) 2007 Red Hat, Inc. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # from optparse import OptionParser import os import glob import shutil import sys import tempfile import yum class CacheConf: """Dynamic yum configuration""" def __init__( self, repopath): if os.environ.has_key('TMPDIR'): self.fd, self.name = tempfile.mkstemp(".conf", "yum-", os.environ['TMPDIR']) self.cachedir = tempfile.mkdtemp("", "yum-cache-", os.environ['TMPDIR']) else: self.fd, self.name = tempfile.mkstemp(".conf", "yum-", "/tmp") self.cachedir = tempfile.mkdtemp("", "yum-cache-", "/tmp") self.repopath = repopath self.yumconfstr = """ [main] distroverpkg=redhat-release cachedir=%s gpgcheck=0 [cache] baseurl=file://%s enabled=1 """ % (self.cachedir, self.repopath) os.write(self.fd, self.yumconfstr) os.close(self.fd) class YumCacheGenerator(yum.YumBase): def __init__(self, repopath): yum.YumBase.__init__(self) self.repopath = repopath self.config = CacheConf(repopath) self.doConfigSetup(self.config.name) os.unlink(self.config.name) def log(self, level, msg): pass def errorlog(self, level, msg): pass def filelog(self, level, msg): pass def write(self): self.repos.disableRepo('*') self.repos.enableRepo('cache') self.doRepoSetup() self.repos.populateSack(with='metadata', pickleonly=1) self.repos.populateSack(with='filelists', pickleonly=1) for cache in glob.glob("%s/cache/*.sqlite" %( self.config.cachedir,)): shutil.move(cache, "%s/repodata" % (self.config.repopath)) shutil.rmtree(self.config.cachedir) def usage(): print "yumcache " if __name__ == "__main__": parser = OptionParser() (options, args) = parser.parse_args() if len(args) != 1: usage() sys.exit(1) repopath = args[0] if not os.path.exists("%s/repodata/repomd.xml" % (repopath)): sys.stderr.write("No metadata found in %s" % (repopath,)) sys.exit(2) y = YumCacheGenerator(repopath) y.write()