Merge "releasetools: Remove deprecated BOARD_BUILD_SYSTEM_ROOT_IMAGE" into main

This commit is contained in:
Yi-Yo Chiang
2023-12-05 03:29:42 +00:00
committed by Gerrit Code Review
7 changed files with 19 additions and 77 deletions

View File

@@ -821,7 +821,6 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
d["mount_point"] = mount_point d["mount_point"] = mount_point
if mount_point == "system": if mount_point == "system":
copy_prop("system_headroom", "partition_headroom") copy_prop("system_headroom", "partition_headroom")
copy_prop("system_root_image", "system_root_image")
copy_prop("root_dir", "root_dir") copy_prop("root_dir", "root_dir")
copy_prop("root_fs_config", "root_fs_config") copy_prop("root_fs_config", "root_fs_config")
elif mount_point == "data": elif mount_point == "data":

View File

@@ -1156,8 +1156,7 @@ class PartitionBuildProps(object):
return self.build_props.get(prop) return self.build_props.get(prop)
def LoadRecoveryFSTab(read_helper, fstab_version, recovery_fstab_path, def LoadRecoveryFSTab(read_helper, fstab_version, recovery_fstab_path):
system_root_image=False):
class Partition(object): class Partition(object):
def __init__(self, mount_point, fs_type, device, length, context, slotselect): def __init__(self, mount_point, fs_type, device, length, context, slotselect):
self.mount_point = mount_point self.mount_point = mount_point
@@ -1216,12 +1215,6 @@ def LoadRecoveryFSTab(read_helper, fstab_version, recovery_fstab_path,
device=pieces[0], length=length, context=context, device=pieces[0], length=length, context=context,
slotselect=slotselect) slotselect=slotselect)
# / is used for the system mount point when the root directory is included in
# system. Other areas assume system is always at "/system" so point /system
# at /.
if system_root_image:
assert '/system' not in d and '/' in d
d["/system"] = d["/"]
return d return d
@@ -1237,22 +1230,19 @@ def _FindAndLoadRecoveryFstab(info_dict, input_file, read_helper):
# ../RAMDISK/system/etc/recovery.fstab. This function has to handle both # ../RAMDISK/system/etc/recovery.fstab. This function has to handle both
# cases, since it may load the info_dict from an old build (e.g. when # cases, since it may load the info_dict from an old build (e.g. when
# generating incremental OTAs from that build). # generating incremental OTAs from that build).
system_root_image = info_dict.get('system_root_image') == 'true'
if info_dict.get('no_recovery') != 'true': if info_dict.get('no_recovery') != 'true':
recovery_fstab_path = 'RECOVERY/RAMDISK/system/etc/recovery.fstab' recovery_fstab_path = 'RECOVERY/RAMDISK/system/etc/recovery.fstab'
if not DoesInputFileContain(input_file, recovery_fstab_path): if not DoesInputFileContain(input_file, recovery_fstab_path):
recovery_fstab_path = 'RECOVERY/RAMDISK/etc/recovery.fstab' recovery_fstab_path = 'RECOVERY/RAMDISK/etc/recovery.fstab'
return LoadRecoveryFSTab( return LoadRecoveryFSTab(
read_helper, info_dict['fstab_version'], recovery_fstab_path, read_helper, info_dict['fstab_version'], recovery_fstab_path)
system_root_image)
if info_dict.get('recovery_as_boot') == 'true': if info_dict.get('recovery_as_boot') == 'true':
recovery_fstab_path = 'BOOT/RAMDISK/system/etc/recovery.fstab' recovery_fstab_path = 'BOOT/RAMDISK/system/etc/recovery.fstab'
if not DoesInputFileContain(input_file, recovery_fstab_path): if not DoesInputFileContain(input_file, recovery_fstab_path):
recovery_fstab_path = 'BOOT/RAMDISK/etc/recovery.fstab' recovery_fstab_path = 'BOOT/RAMDISK/etc/recovery.fstab'
return LoadRecoveryFSTab( return LoadRecoveryFSTab(
read_helper, info_dict['fstab_version'], recovery_fstab_path, read_helper, info_dict['fstab_version'], recovery_fstab_path)
system_root_image)
return None return None
@@ -1980,11 +1970,6 @@ def HasRamdisk(partition_name, info_dict=None):
if info_dict.get("gki_boot_image_without_ramdisk") == "true": if info_dict.get("gki_boot_image_without_ramdisk") == "true":
return False # A GKI boot.img has no ramdisk since Android-13. return False # A GKI boot.img has no ramdisk since Android-13.
if info_dict.get("system_root_image") == "true":
# The ramdisk content is merged into the system.img, so there is NO
# ramdisk in the boot.img or boot-<kernel version>.img.
return False
if info_dict.get("init_boot") == "true": if info_dict.get("init_boot") == "true":
# The ramdisk is moved to the init_boot.img, so there is NO # The ramdisk is moved to the init_boot.img, so there is NO
# ramdisk in the boot.img or boot-<kernel version>.img. # ramdisk in the boot.img or boot-<kernel version>.img.
@@ -3853,14 +3838,11 @@ def MakeRecoveryPatch(input_dir, output_sink, recovery_img, boot_img,
output_sink(recovery_img_path, recovery_img.data) output_sink(recovery_img_path, recovery_img.data)
else: else:
system_root_image = info_dict.get("system_root_image") == "true"
include_recovery_dtbo = info_dict.get("include_recovery_dtbo") == "true" include_recovery_dtbo = info_dict.get("include_recovery_dtbo") == "true"
include_recovery_acpio = info_dict.get("include_recovery_acpio") == "true" include_recovery_acpio = info_dict.get("include_recovery_acpio") == "true"
path = os.path.join(input_dir, recovery_resource_dat_path) path = os.path.join(input_dir, recovery_resource_dat_path)
# With system-root-image, boot and recovery images will have mismatching # Use bsdiff to handle mismatching entries (Bug: 72731506)
# entries (only recovery has the ramdisk entry) (Bug: 72731506). Use bsdiff if include_recovery_dtbo or include_recovery_acpio:
# to handle such a case.
if system_root_image or include_recovery_dtbo or include_recovery_acpio:
diff_program = ["bsdiff"] diff_program = ["bsdiff"]
bonus_args = "" bonus_args = ""
assert not os.path.exists(path) assert not os.path.exists(path)

View File

@@ -83,9 +83,8 @@ Usage: sign_target_files_apks [flags] input_target_files output_target_files
--replace_verity_public_key <key> --replace_verity_public_key <key>
Replace the certificate (public key) used for verity verification. The Replace the certificate (public key) used for verity verification. The
key file replaces the one at BOOT/RAMDISK/verity_key (or ROOT/verity_key key file replaces the one at BOOT/RAMDISK/verity_key. It expects the key
for devices using system_root_image). It expects the key filename WITH filename WITH the extension (e.g. verity_key.pub).
the extension (e.g. verity_key.pub).
--replace_verity_keyid <path_to_X509_PEM_cert_file> --replace_verity_keyid <path_to_X509_PEM_cert_file>
Replace the veritykeyid in BOOT/cmdline of input_target_file_zip Replace the veritykeyid in BOOT/cmdline of input_target_file_zip
@@ -555,8 +554,6 @@ def ProcessTargetFiles(input_tf_zip, output_tf_zip, misc_info,
# Sets this to zero for targets without APK files, e.g., gki_arm64. # Sets this to zero for targets without APK files, e.g., gki_arm64.
maxsize = 0 maxsize = 0
system_root_image = misc_info.get("system_root_image") == "true"
for info in input_tf_zip.infolist(): for info in input_tf_zip.infolist():
filename = info.filename filename = info.filename
if filename.startswith("IMAGES/"): if filename.startswith("IMAGES/"):

View File

@@ -99,11 +99,10 @@ class BuildImageTest(test_utils.ReleaseToolsTestCase):
} }
self.assertRaises(BuildImageError, CheckHeadroom, ext4fs_output, prop_dict) self.assertRaises(BuildImageError, CheckHeadroom, ext4fs_output, prop_dict)
def test_SetUpInDirAndFsConfig_SystemRootImageTrue_NonSystem(self): def test_SetUpInDirAndFsConfig_NonSystem(self):
prop_dict = { prop_dict = {
'fs_config': 'fs-config', 'fs_config': 'fs-config',
'mount_point': 'vendor', 'mount_point': 'vendor',
'system_root_image': 'true',
} }
in_dir, fs_config = SetUpInDirAndFsConfig('/path/to/in_dir', prop_dict) in_dir, fs_config = SetUpInDirAndFsConfig('/path/to/in_dir', prop_dict)
self.assertEqual('/path/to/in_dir', in_dir) self.assertEqual('/path/to/in_dir', in_dir)

View File

@@ -1348,7 +1348,6 @@ class CommonUtilsTest(test_utils.ReleaseToolsTestCase):
INFO_DICT_DEFAULT = { INFO_DICT_DEFAULT = {
'recovery_api_version': 3, 'recovery_api_version': 3,
'fstab_version': 2, 'fstab_version': 2,
'system_root_image': 'true',
'no_recovery': 'true', 'no_recovery': 'true',
'recovery_as_boot': 'true', 'recovery_as_boot': 'true',
} }
@@ -1377,14 +1376,8 @@ class CommonUtilsTest(test_utils.ReleaseToolsTestCase):
info_values = ''.join( info_values = ''.join(
['{}={}\n'.format(k, v) for k, v in sorted(info_dict.items())]) ['{}={}\n'.format(k, v) for k, v in sorted(info_dict.items())])
common.ZipWriteStr(target_files_zip, 'META/misc_info.txt', info_values) common.ZipWriteStr(target_files_zip, 'META/misc_info.txt', info_values)
common.ZipWriteStr(target_files_zip, fstab_path,
FSTAB_TEMPLATE = "/dev/block/system {} ext4 ro,barrier=1 defaults" "/dev/block/system /system ext4 ro,barrier=1 defaults")
if info_dict.get('system_root_image') == 'true':
fstab_values = FSTAB_TEMPLATE.format('/')
else:
fstab_values = FSTAB_TEMPLATE.format('/system')
common.ZipWriteStr(target_files_zip, fstab_path, fstab_values)
common.ZipWriteStr( common.ZipWriteStr(
target_files_zip, 'META/file_contexts', 'file-contexts') target_files_zip, 'META/file_contexts', 'file-contexts')
return target_files return target_files
@@ -1397,7 +1390,6 @@ class CommonUtilsTest(test_utils.ReleaseToolsTestCase):
loaded_dict = common.LoadInfoDict(target_files_zip) loaded_dict = common.LoadInfoDict(target_files_zip)
self.assertEqual(3, loaded_dict['recovery_api_version']) self.assertEqual(3, loaded_dict['recovery_api_version'])
self.assertEqual(2, loaded_dict['fstab_version']) self.assertEqual(2, loaded_dict['fstab_version'])
self.assertIn('/', loaded_dict['fstab'])
self.assertIn('/system', loaded_dict['fstab']) self.assertIn('/system', loaded_dict['fstab'])
def test_LoadInfoDict_legacyRecoveryFstabPath(self): def test_LoadInfoDict_legacyRecoveryFstabPath(self):
@@ -1408,7 +1400,6 @@ class CommonUtilsTest(test_utils.ReleaseToolsTestCase):
loaded_dict = common.LoadInfoDict(target_files_zip) loaded_dict = common.LoadInfoDict(target_files_zip)
self.assertEqual(3, loaded_dict['recovery_api_version']) self.assertEqual(3, loaded_dict['recovery_api_version'])
self.assertEqual(2, loaded_dict['fstab_version']) self.assertEqual(2, loaded_dict['fstab_version'])
self.assertIn('/', loaded_dict['fstab'])
self.assertIn('/system', loaded_dict['fstab']) self.assertIn('/system', loaded_dict['fstab'])
@test_utils.SkipIfExternalToolsUnavailable() @test_utils.SkipIfExternalToolsUnavailable()
@@ -1420,7 +1411,6 @@ class CommonUtilsTest(test_utils.ReleaseToolsTestCase):
loaded_dict = common.LoadInfoDict(unzipped) loaded_dict = common.LoadInfoDict(unzipped)
self.assertEqual(3, loaded_dict['recovery_api_version']) self.assertEqual(3, loaded_dict['recovery_api_version'])
self.assertEqual(2, loaded_dict['fstab_version']) self.assertEqual(2, loaded_dict['fstab_version'])
self.assertIn('/', loaded_dict['fstab'])
self.assertIn('/system', loaded_dict['fstab']) self.assertIn('/system', loaded_dict['fstab'])
@test_utils.SkipIfExternalToolsUnavailable() @test_utils.SkipIfExternalToolsUnavailable()
@@ -1432,15 +1422,11 @@ class CommonUtilsTest(test_utils.ReleaseToolsTestCase):
loaded_dict = common.LoadInfoDict(unzipped) loaded_dict = common.LoadInfoDict(unzipped)
self.assertEqual(3, loaded_dict['recovery_api_version']) self.assertEqual(3, loaded_dict['recovery_api_version'])
self.assertEqual(2, loaded_dict['fstab_version']) self.assertEqual(2, loaded_dict['fstab_version'])
self.assertIn('/', loaded_dict['fstab'])
self.assertIn('/system', loaded_dict['fstab']) self.assertIn('/system', loaded_dict['fstab'])
def test_LoadInfoDict_systemRootImageFalse(self): def test_LoadInfoDict_recoveryAsBootFalse(self):
# Devices not using system-as-root nor recovery-as-boot. Non-A/B devices
# launched prior to P will likely have this config.
info_dict = copy.copy(self.INFO_DICT_DEFAULT) info_dict = copy.copy(self.INFO_DICT_DEFAULT)
del info_dict['no_recovery'] del info_dict['no_recovery']
del info_dict['system_root_image']
del info_dict['recovery_as_boot'] del info_dict['recovery_as_boot']
target_files = self._test_LoadInfoDict_createTargetFiles( target_files = self._test_LoadInfoDict_createTargetFiles(
info_dict, info_dict,
@@ -1452,22 +1438,6 @@ class CommonUtilsTest(test_utils.ReleaseToolsTestCase):
self.assertNotIn('/', loaded_dict['fstab']) self.assertNotIn('/', loaded_dict['fstab'])
self.assertIn('/system', loaded_dict['fstab']) self.assertIn('/system', loaded_dict['fstab'])
def test_LoadInfoDict_recoveryAsBootFalse(self):
# Devices using system-as-root, but with standalone recovery image. Non-A/B
# devices launched since P will likely have this config.
info_dict = copy.copy(self.INFO_DICT_DEFAULT)
del info_dict['no_recovery']
del info_dict['recovery_as_boot']
target_files = self._test_LoadInfoDict_createTargetFiles(
info_dict,
'RECOVERY/RAMDISK/system/etc/recovery.fstab')
with zipfile.ZipFile(target_files, 'r', allowZip64=True) as target_files_zip:
loaded_dict = common.LoadInfoDict(target_files_zip)
self.assertEqual(3, loaded_dict['recovery_api_version'])
self.assertEqual(2, loaded_dict['fstab_version'])
self.assertIn('/', loaded_dict['fstab'])
self.assertIn('/system', loaded_dict['fstab'])
def test_LoadInfoDict_noRecoveryTrue(self): def test_LoadInfoDict_noRecoveryTrue(self):
# Device doesn't have a recovery partition at all. # Device doesn't have a recovery partition at all.
info_dict = copy.copy(self.INFO_DICT_DEFAULT) info_dict = copy.copy(self.INFO_DICT_DEFAULT)
@@ -1499,7 +1469,6 @@ class CommonUtilsTest(test_utils.ReleaseToolsTestCase):
loaded_dict = common.LoadInfoDict(unzipped, True) loaded_dict = common.LoadInfoDict(unzipped, True)
self.assertEqual(3, loaded_dict['recovery_api_version']) self.assertEqual(3, loaded_dict['recovery_api_version'])
self.assertEqual(2, loaded_dict['fstab_version']) self.assertEqual(2, loaded_dict['fstab_version'])
self.assertIn('/', loaded_dict['fstab'])
self.assertIn('/system', loaded_dict['fstab']) self.assertIn('/system', loaded_dict['fstab'])
self.assertEqual( self.assertEqual(
os.path.join(unzipped, 'ROOT'), loaded_dict['root_dir']) os.path.join(unzipped, 'ROOT'), loaded_dict['root_dir'])

View File

@@ -156,7 +156,6 @@ class ValidateTargetFilesTest(test_utils.ReleaseToolsTestCase):
verity_key_mincrypt) verity_key_mincrypt)
info_dict = { info_dict = {
'system_root_image' : 'true',
'verity' : 'true', 'verity' : 'true',
} }
options = { options = {

View File

@@ -361,18 +361,15 @@ def ValidateVerifiedBootImages(input_tmp, info_dict, options):
"Mismatching mincrypt verity key files" "Mismatching mincrypt verity key files"
logging.info('Verified the content of /verity_key') logging.info('Verified the content of /verity_key')
# For devices with a separate ramdisk (i.e. non-system-as-root), there must verity_key_ramdisk = os.path.join(
# be a copy in ramdisk. input_tmp, 'BOOT', 'RAMDISK', 'verity_key')
if info_dict.get("system_root_image") != "true": assert os.path.exists(
verity_key_ramdisk = os.path.join( verity_key_ramdisk), 'Missing verity_key in ramdisk'
input_tmp, 'BOOT', 'RAMDISK', 'verity_key')
assert os.path.exists(
verity_key_ramdisk), 'Missing verity_key in ramdisk'
assert filecmp.cmp( assert filecmp.cmp(
verity_key_mincrypt, verity_key_ramdisk, shallow=False), \ verity_key_mincrypt, verity_key_ramdisk, shallow=False), \
'Mismatching verity_key files in root and ramdisk' 'Mismatching verity_key files in root and ramdisk'
logging.info('Verified the content of /verity_key in ramdisk') logging.info('Verified the content of /verity_key in ramdisk')
# Then verify the verity signed system/vendor/product images, against the # Then verify the verity signed system/vendor/product images, against the
# verity pubkey in mincrypt format. # verity pubkey in mincrypt format.