Build repeatable system images with mke2fs.
We have added support in mkuserimg_mke2fs.sh that allows specifying filesystem UUID and hash seed UUID. This CL generates and passes the UUIDs based on the image name and build fingerprint. This way we can rebuild and get identical images. Note that this only applies to images generated with `m dist` and with signing tools (sign_target_files_apks.py and add_img_to_target_files.py). Images under $OUT (built with `make`) are not affected. Bug: 64994964 Test: lunch marlin-userdebug; run `m dist` twice (after deleting the intermediate files under $OUT/obj/PACKAGING), and compare the generated images. Change-Id: I41cf4e5869582bb930af2f35a8e9c79bff43b2a2
This commit is contained in:
parent
a2acdadcc0
commit
3aa21e6bb9
2 changed files with 20 additions and 0 deletions
|
@ -58,6 +58,7 @@ import shlex
|
|||
import shutil
|
||||
import subprocess
|
||||
import tempfile
|
||||
import uuid
|
||||
import zipfile
|
||||
|
||||
import build_image
|
||||
|
@ -257,6 +258,19 @@ def CreateImage(input_dir, info_dict, what, output_file, block_list=None):
|
|||
if block_list:
|
||||
image_props["block_list"] = block_list.name
|
||||
|
||||
# Use repeatable ext4 FS UUID and hash_seed UUID (based on partition name and
|
||||
# build fingerprint).
|
||||
uuid_seed = what + "-"
|
||||
if "build.prop" in info_dict:
|
||||
build_prop = info_dict["build.prop"]
|
||||
if "ro.build.fingerprint" in build_prop:
|
||||
uuid_seed += build_prop["ro.build.fingerprint"]
|
||||
elif "ro.build.thumbprint" in build_prop:
|
||||
uuid_seed += build_prop["ro.build.thumbprint"]
|
||||
image_props["uuid"] = str(uuid.uuid5(uuid.NAMESPACE_URL, uuid_seed))
|
||||
hash_seed = "hash_seed-" + uuid_seed
|
||||
image_props["hash_seed"] = str(uuid.uuid5(uuid.NAMESPACE_URL, hash_seed))
|
||||
|
||||
succ = build_image.BuildImage(os.path.join(temp_dir, what),
|
||||
image_props, output_file.name)
|
||||
assert succ, "build " + what + ".img image failed"
|
||||
|
|
|
@ -475,6 +475,12 @@ def BuildImage(in_dir, prop_dict, out_file, target_out=None):
|
|||
build_command.extend(["-e", prop_dict["flash_erase_block_size"]])
|
||||
if "flash_logical_block_size" in prop_dict:
|
||||
build_command.extend(["-o", prop_dict["flash_logical_block_size"]])
|
||||
# Specify UUID and hash_seed if using mke2fs.
|
||||
if prop_dict["ext_mkuserimg"] == "mkuserimg_mke2fs.sh":
|
||||
if "uuid" in prop_dict:
|
||||
build_command.extend(["-U", prop_dict["uuid"]])
|
||||
if "hash_seed" in prop_dict:
|
||||
build_command.extend(["-S", prop_dict["hash_seed"]])
|
||||
if "selinux_fc" in prop_dict:
|
||||
build_command.append(prop_dict["selinux_fc"])
|
||||
elif fs_type.startswith("squash"):
|
||||
|
|
Loading…
Reference in a new issue