build_image: Remove mkerofsimage.sh.

These wrapper scripts are difficult to maintain and there's not really
any value add. The argument strings don't match and every new build flag
has to be connected in an extra place.

Bug: 222715577
Test: make with EROFS enabled
Change-Id: Ie0e51cc30aa08b004d5d8345a2a2d885e193ffa9
This commit is contained in:
David Anderson
2022-03-04 10:57:58 -08:00
parent 4e09d57fa7
commit 94ad5bb5ef
4 changed files with 54 additions and 28 deletions

View File

@@ -268,18 +268,19 @@ def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config):
"""
build_command = []
fs_type = prop_dict.get("fs_type", "")
run_e2fsck = False
run_fsck = None
needs_projid = prop_dict.get("needs_projid", 0)
needs_casefold = prop_dict.get("needs_casefold", 0)
needs_compress = prop_dict.get("needs_compress", 0)
disable_sparse = "disable_sparse" in prop_dict
manual_sparse = False
if fs_type.startswith("ext"):
build_command = [prop_dict["ext_mkuserimg"]]
if "extfs_sparse_flag" in prop_dict and not disable_sparse:
build_command.append(prop_dict["extfs_sparse_flag"])
run_e2fsck = True
run_e2fsck = RunE2fsck
build_command.extend([in_dir, out_file, fs_type,
prop_dict["mount_point"]])
build_command.append(prop_dict["image_size"])
@@ -320,17 +321,8 @@ def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config):
if "selinux_fc" in prop_dict:
build_command.append(prop_dict["selinux_fc"])
elif fs_type.startswith("erofs"):
build_command = ["mkerofsimage.sh"]
build_command.extend([in_dir, out_file])
if "erofs_sparse_flag" in prop_dict and not disable_sparse:
build_command.extend([prop_dict["erofs_sparse_flag"]])
build_command.extend(["-m", prop_dict["mount_point"]])
if target_out:
build_command.extend(["-d", target_out])
if fs_config:
build_command.extend(["-C", fs_config])
if "selinux_fc" in prop_dict:
build_command.extend(["-c", prop_dict["selinux_fc"]])
build_command = ["mkfs.erofs"]
compressor = None
if "erofs_default_compressor" in prop_dict:
compressor = prop_dict["erofs_default_compressor"]
@@ -338,16 +330,30 @@ def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config):
compressor = prop_dict["erofs_compressor"]
if compressor:
build_command.extend(["-z", compressor])
build_command.extend(["--mount-point", prop_dict["mount_point"]])
if target_out:
build_command.extend(["--product-out", target_out])
if fs_config:
build_command.extend(["--fs-config-file", fs_config])
if "selinux_fc" in prop_dict:
build_command.extend(["--file-contexts", prop_dict["selinux_fc"]])
if "timestamp" in prop_dict:
build_command.extend(["-T", str(prop_dict["timestamp"])])
if "uuid" in prop_dict:
build_command.extend(["-U", prop_dict["uuid"]])
if "block_list" in prop_dict:
build_command.extend(["-B", prop_dict["block_list"]])
build_command.extend(["--block-list-file", prop_dict["block_list"]])
if "erofs_pcluster_size" in prop_dict:
build_command.extend(["-P", prop_dict["erofs_pcluster_size"]])
build_command.extend(["-C", prop_dict["erofs_pcluster_size"]])
if "erofs_share_dup_blocks" in prop_dict:
build_command.extend(["-k", "4096"])
build_command.extend(["--chunksize", "4096"])
build_command.extend([out_file, in_dir])
if "erofs_sparse_flag" in prop_dict and not disable_sparse:
manual_sparse = True
run_fsck = RunErofsFsck
elif fs_type.startswith("squash"):
build_command = ["mksquashfsimage.sh"]
build_command.extend([in_dir, out_file])
@@ -436,18 +442,38 @@ def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config):
int(prop_dict["partition_size"]) // BYTES_IN_MB))
raise
if run_e2fsck and prop_dict.get("skip_fsck") != "true":
unsparse_image = UnsparseImage(out_file, replace=False)
if run_fsck and prop_dict.get("skip_fsck") != "true":
run_fsck(out_file)
# Run e2fsck on the inflated image file
e2fsck_command = ["e2fsck", "-f", "-n", unsparse_image]
try:
common.RunAndCheckOutput(e2fsck_command)
finally:
os.remove(unsparse_image)
if manual_sparse:
temp_file = out_file + ".sparse"
img2simg_argv = ["img2simg", out_file, temp_file]
common.RunAndCheckOutput(img2simg_argv)
os.rename(temp_file, out_file)
return mkfs_output
def RunE2fsck(out_file):
unsparse_image = UnsparseImage(out_file, replace=False)
# Run e2fsck on the inflated image file
e2fsck_command = ["e2fsck", "-f", "-n", unsparse_image]
try:
common.RunAndCheckOutput(e2fsck_command)
finally:
os.remove(unsparse_image)
def RunErofsFsck(out_file):
fsck_command = ["fsck.erofs", "--extract", out_file]
try:
common.RunAndCheckOutput(fsck_command)
except:
print("Check failed for EROFS image {}".format(out_file))
raise
def BuildImage(in_dir, prop_dict, out_file, target_out=None):
"""Builds an image for the files under in_dir and writes it to out_file.