[Thincrust-devel] [patch] act md5/sha256 disk signature support for appliance-creator
Bryan Kearney
bkearney at redhat.com
Tue Oct 21 14:43:33 UTC 2008
Couple of nits below. Other then that, ACK.
Joey Boggs wrote:
> Updated patch, mostly everything is the same, added in the progress bar
> just like virt-image uses during verification. Generates sha1/sha256 if
> available and is off by default.
>
> appliance-creator --generate-checksum
> diff --git a/appcreate/appliance.py b/appcreate/appliance.py
> index 054c69a..4345a9c 100644
> --- a/appcreate/appliance.py
> +++ b/appcreate/appliance.py
> @@ -29,6 +29,7 @@ from imgcreate.errors import *
> from imgcreate.fs import *
> from imgcreate.creator import *
> from appcreate.partitionedfs import *
> +import urlgrabber.progress as progress
>
> class ApplianceImageCreator(ImageCreator):
> """Installs a system into a file containing a partitioned disk image.
> @@ -40,7 +41,7 @@ class ApplianceImageCreator(ImageCreator):
>
> """
>
> - def __init__(self, ks, name, format, package, vmem, vcpu):
> + def __init__(self, ks, name, format, package, vmem, vcpu, checksum):
> """Initialize a ApplianceImageCreator instance.
>
> This method takes the same arguments as ImageCreator.__init__()
> @@ -55,6 +56,7 @@ class ApplianceImageCreator(ImageCreator):
> self.__vmem = vmem
> self.__vcpu = vcpu
> self.__package = package
> + self.__checksum = checksum
>
>
> def _get_fstab(self):
> @@ -305,8 +307,46 @@ class ApplianceImageCreator(ImageCreator):
> xml += " </devices>\n"
> xml += " </domain>\n"
> xml += " <storage>\n"
> - for name in self.__disks.keys():
> - xml += " <disk file='%s-%s.%s' use='system' format='%s'/>\n" % (self.name,name, self.__format, self.__format)
> +
> + if self.__checksum is True:
> + for name in self.__disks.keys():
> + diskpath = "%s/%s-%s.%s" % (self.__imgdir,self.name,name, self.__format)
> + disk_size = os.path.getsize(diskpath)
> + meter_ct = 0
> + meter = progress.TextMeter()
> + meter.start(size=disk_size, text="Generating disk signature for %s-%s.%s" % (self.name,name,self.__format))
> + xml += "<disk file='%s-%s.%s' use='system' format='%s'>\n" % (self.name,name, self.__format, self.__format)
In this case, the indentation is off. I think the disk and checksums
should each go in one more indenteation level.
> +
> + try:
> + import hashlib
> + m1 = hashlib.sha1()
> + m2 = hashlib.sha256()
> + except:
> + import sha
> + m1 = sha.new()
> + m2 = None
> + f = open(diskpath,"r")
> + while 1:
> + chunk = f.read(65536)
> + if not chunk:
> + break
> + m1.update(chunk)
> + if m2:
> + m2.update(chunk)
> + meter.update(meter_ct)
> + meter_ct = meter_ct + 65536
> +
> + sha1checksum = m1.hexdigest()
> + xml += """ <checksum type="sha1">%s</checksum>\n""" % sha1checksum
The other tags use a single '. Can you stay consistent. As with above,
need to indent one more level.
> +
> + if m2:
> + sha256checksum = m2.hexdigest()
> + xml += """ <checksum type="sha256">%s</checksum>\n""" % sha256checksum
> + xml += " </disk>\n"
Same
> + else:
> + for name in self.__disks.keys():
> + xml += " <disk file='%s-%s.%s' use='system' format='%s'/>\n" % (self.name,name, self.__format, self.__format)
Indent is good here.
> +
> xml += " </storage>\n"
> xml += "</image>\n"
>
> diff --git a/tools/appliance-creator b/tools/appliance-creator
> index 6d990de..1442f89 100755
> --- a/tools/appliance-creator
> +++ b/tools/appliance-creator
> @@ -47,6 +47,8 @@ def parse_options(args):
> help="amount of virtual memory for appliance in MB (default: 512)")
> appopt.add_option("", "--vcpu", type="int", dest="vcpu", default=1,
> help="number of virtual cpus for appliance (default: 1)")
> + appopt.add_option("", "--generate-checksum", action="store_true", dest="checksum",
> + help=("Generate a checksum for the created appliance"))
> parser.add_option_group(appopt)
>
> # options related to the config of your system
> @@ -101,7 +103,7 @@ def main():
> if options.name:
> name = options.name
>
> - creator = appcreate.ApplianceImageCreator(ks, name, options.format, options.package, options.vmem, options.vcpu)
> + creator = appcreate.ApplianceImageCreator(ks, name, options.format, options.package, options.vmem, options.vcpu, options.checksum)
> creator.tmpdir = options.tmpdir
>
> try:
>
>
More information about the Thincrust-devel
mailing list