From 3d44bb43b8ad8e3cc26f724c28bd18ee48da1645 Mon Sep 17 00:00:00 2001 From: Jiyong Park Date: Tue, 18 Dec 2018 19:44:54 +0900 Subject: Reland "Output of apexer is deterministic" This reverts commit 1486e178485b47094ac93f26624102106c1ecb89. The added option (-U, and -E) are moved in front of the positional parameters (image file name and block size). Bug: 120811390 Test: Build two com.android.tzdata APEXes without changing the source The two APEXes are identical. Change-Id: I489bb809cdd4baf7dc56801fbc5bf68219e726d1 --- apexer/apexer.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'apexer/apexer.py') diff --git a/apexer/apexer.py b/apexer/apexer.py index ac33b2d..c15b6da 100644 --- a/apexer/apexer.py +++ b/apexer/apexer.py @@ -23,6 +23,7 @@ Typical usage: apexer input_dir output.apex """ import argparse +import hashlib import json import os import re @@ -30,6 +31,7 @@ import shutil import subprocess import sys import tempfile +import uuid if 'APEXER_TOOL_PATH' not in os.environ: sys.stderr.write(""" @@ -215,9 +217,12 @@ def CreateApex(args, work_dir): cmd.extend(['-b', '4096']) # block size cmd.extend(['-m', '0']) # reserved block percentage cmd.extend(['-t', 'ext4']) + uu = str(uuid.uuid5(uuid.NAMESPACE_URL, "www.android.com")) + cmd.extend(['-U', uu]) + cmd.extend(['-E', 'hash_seed=' + uu]) cmd.append(img_file) cmd.append(str(size_in_mb) + 'M') - RunCommand(cmd, args.verbose) + RunCommand(cmd, args.verbose, {"E2FSPROGS_FAKE_TIME": "1"}) # Compile the file context into the binary form compiled_file_contexts = os.path.join(work_dir, 'file_contexts.bin') @@ -243,13 +248,14 @@ def CreateApex(args, work_dir): cmd.extend(['-S', compiled_file_contexts]) cmd.extend(['-C', args.canned_fs_config]) cmd.append(img_file) - RunCommand(cmd, args.verbose) + RunCommand(cmd, args.verbose, {"E2FSPROGS_FAKE_TIME": "1"}) # Resize the image file to save space cmd = ['resize2fs'] cmd.append('-M') # shrink as small as possible cmd.append(img_file) - RunCommand(cmd, args.verbose) + RunCommand(cmd, args.verbose, {"E2FSPROGS_FAKE_TIME": "1"}) + cmd = ['avbtool'] cmd.append('add_hashtree_footer') @@ -257,6 +263,10 @@ def CreateApex(args, work_dir): cmd.extend(['--algorithm', 'SHA256_RSA4096']) cmd.extend(['--key', args.key]) cmd.extend(['--prop', "apex.key:" + key_name]) + # Set up the salt based on manifest content which includes name + # and version + salt = hashlib.sha256(json.dumps(manifest)).hexdigest() + cmd.extend(['--salt', salt]) cmd.extend(['--image', img_file]) RunCommand(cmd, args.verbose) -- cgit v1.2.3