Checksum various files from buildinstall output and put them in .treeinfo
This will be used by a verify-tree like tool that will ensure that the content on disk matches what the compose tool thinks it should.
This commit is contained in:
parent
ec8b64e6cf
commit
74e014707a
@ -23,6 +23,7 @@ import logging
|
|||||||
import urlgrabber.progress
|
import urlgrabber.progress
|
||||||
import subprocess
|
import subprocess
|
||||||
import createrepo
|
import createrepo
|
||||||
|
import ConfigParser
|
||||||
import pypungi.splittree
|
import pypungi.splittree
|
||||||
|
|
||||||
class PungiBase(object):
|
class PungiBase(object):
|
||||||
@ -660,6 +661,57 @@ class Pungi(pypungi.PungiBase):
|
|||||||
# write out the tree data for snake
|
# write out the tree data for snake
|
||||||
self.writeinfo('tree: %s' % self.mkrelative(self.topdir))
|
self.writeinfo('tree: %s' % self.mkrelative(self.topdir))
|
||||||
|
|
||||||
|
# Write out checksums for verifytree
|
||||||
|
# First open the treeinfo file so that we can config parse it
|
||||||
|
treeinfofile = os.path.join(self.topdir, '.treeinfo')
|
||||||
|
|
||||||
|
try:
|
||||||
|
treefile = open(treeinfofile, 'r')
|
||||||
|
except IOError:
|
||||||
|
self.logger.error("Could not read .treeinfo file: %s" % treefile)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# Create a ConfigParser object out of the contents so that we can
|
||||||
|
# write it back out later and not worry about formatting
|
||||||
|
treeinfo = ConfigParser.SafeConfigParser()
|
||||||
|
treeinfo.readfp(treefile)
|
||||||
|
treefile.close()
|
||||||
|
treeinfo.add_section('checksums')
|
||||||
|
|
||||||
|
# Create a function to use with os.path.walk to sum the files
|
||||||
|
# basepath is used to make the sum output relative
|
||||||
|
sums = []
|
||||||
|
def getsum(basepath, dir, files):
|
||||||
|
for file in files:
|
||||||
|
path = os.path.join(dir, file)
|
||||||
|
# don't bother summing directories. Won't work.
|
||||||
|
if os.path.isdir(path):
|
||||||
|
continue
|
||||||
|
sum = pypungi.util._doCheckSum(path, 'sha1', self.logger)
|
||||||
|
outpath = path.replace(basepath, '')
|
||||||
|
sums.append((outpath, sum))
|
||||||
|
|
||||||
|
# Walk the os/images path to get sums of all the files
|
||||||
|
os.path.walk(os.path.join(self.topdir, 'images'), getsum, self.topdir)
|
||||||
|
|
||||||
|
# Get a checksum of repomd.xml since it has within it sums for other files
|
||||||
|
repomd = os.path.join(self.topdir, 'repodata', 'repomd.xml')
|
||||||
|
sum = pypungi.util._doCheckSum(repomd, 'sha1', self.logger)
|
||||||
|
sums.append((os.path.join('repodata', 'repomd.xml'), sum))
|
||||||
|
|
||||||
|
# Now add the sums, and write the config out
|
||||||
|
try:
|
||||||
|
treefile = open(treeinfofile, 'w')
|
||||||
|
except IOError:
|
||||||
|
self.logger.error("Could not open .treeinfo for writing: %s" % treefile)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
for path, sum in sums:
|
||||||
|
treeinfo.set('checksums', path, sum)
|
||||||
|
|
||||||
|
treeinfo.write(treefile)
|
||||||
|
treefile.close()
|
||||||
|
|
||||||
def doPackageorder(self):
|
def doPackageorder(self):
|
||||||
"""Run anaconda-runtime's pkgorder on the tree, used for splitting media."""
|
"""Run anaconda-runtime's pkgorder on the tree, used for splitting media."""
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user