8 from pathlib import Path, PurePath
10 def sha256_file(filename):
11 sha256 = hashlib.sha256()
12 with io.open(filename, mode="rb") as fd:
14 sha256.update(content)
15 return sha256.hexdigest()
18 return json.dumps(data, indent=4, sort_keys=True)
20 def target_file_url(channel, filename):
21 basename = PurePath(filename).name
22 return '%(baseurl)s/%(channel)s/%(subdir)s/%(basename)s' % {
23 'baseurl': 'http://dl.amnesia.boum.org/tails',
25 'subdir': PurePath(basename).stem,
29 def idf_content(build_target, channel, product_name, version, img, iso):
30 installation_paths = [
34 'url': target_file_url(channel, iso),
35 'sha256': sha256_file(iso),
36 'size': Path(iso).stat().st_size,
41 installation_paths += {
44 'url': target_file_url(channel, img),
45 'sha256': sha256_file(img),
46 'size': Path(img).stat().st_size,
50 'build_target': build_target,
52 'product-name': product_name,
55 'installation-paths': installation_paths,
59 if __name__ == '__main__':
61 parser = argparse.ArgumentParser()
62 parser.add_argument('--build-target', dest='build_target', default='amd64')
63 parser.add_argument('--channel', default='stable')
64 parser.add_argument('--product-name', dest='product_name', default='Tails')
65 parser.add_argument('--version', default=None, required=True,
66 help='Version of Tails .')
67 parser.add_argument('--img', default=None,
68 help='Path to the USB image.')
69 parser.add_argument('--iso', default=None, required=True,
70 help='Path to the ISO file.')
71 args = parser.parse_args()
73 print(idf_content(build_target=args.build_target,
75 product_name=args.product_name,