forked from openkylin/platform_build
fix device specific fs_config on build server
fs_config function from libcutils, in order to properly set the xattr FS used to define device specific uid, gid, permissions and capabilities, now needs TARGET_OUT make variable to be passed explicitly to all tools using it: fs_config fs_get_stats used by mktarball.sh make_ext4fs used by mkuserimg.sh mksquashfs used by mksquashfsimage.sh Bug: 21989305 Bug: 22048934 Change-Id: I6caf9cf870882fce2ead93027767092c29b75ded Signed-off-by: Thierry Strudel <tstrudel@google.com>
This commit is contained in:
parent
26b3ec5a68
commit
74a81e6633
|
@ -460,12 +460,12 @@ BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img
|
|||
INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET)
|
||||
$(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)
|
||||
$(call pretty,"Target ram disk: $@")
|
||||
$(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
|
||||
$(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@
|
||||
|
||||
.PHONY: ramdisk-nodeps
|
||||
ramdisk-nodeps: $(MKBOOTFS) | $(MINIGZIP)
|
||||
@echo "make $@: ignoring dependencies"
|
||||
$(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET)
|
||||
$(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $(INSTALLED_RAMDISK_TARGET)
|
||||
|
||||
ifneq ($(strip $(TARGET_NO_KERNEL)),true)
|
||||
|
||||
|
@ -884,7 +884,7 @@ define build-recoveryimage-target
|
|||
$(hide) cp $(RECOVERY_INSTALL_OTA_KEYS) $(TARGET_RECOVERY_ROOT_OUT)/res/keys
|
||||
$(hide) cat $(INSTALLED_DEFAULT_PROP_TARGET) $(recovery_build_prop) \
|
||||
> $(TARGET_RECOVERY_ROOT_OUT)/default.prop
|
||||
$(hide) $(MKBOOTFS) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk)
|
||||
$(hide) $(MKBOOTFS) -d $(TARGET_OUT) $(TARGET_RECOVERY_ROOT_OUT) | $(MINIGZIP) > $(recovery_ramdisk)
|
||||
$(if $(filter true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT)), \
|
||||
$(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1).unsigned, \
|
||||
$(hide) $(MKBOOTIMG) $(INTERNAL_RECOVERYIMAGE_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(1) --id > $(RECOVERYIMAGE_ID_FILE))
|
||||
|
@ -995,7 +995,7 @@ define build-systemimage-target
|
|||
skip_fsck=true)
|
||||
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
||||
./build/tools/releasetools/build_image.py \
|
||||
$(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) \
|
||||
$(TARGET_OUT) $(systemimage_intermediates)/system_image_info.txt $(1) $(TARGET_OUT) \
|
||||
|| ( echo "Out of space? the tree size of $(TARGET_OUT) is (MB): " 1>&2 ;\
|
||||
du -sm $(TARGET_OUT) 1>&2;\
|
||||
if [ "$(INTERNAL_USERIMAGES_EXT_VARIANT)" == "ext4" ]; then \
|
||||
|
@ -1062,7 +1062,7 @@ define build-systemtarball-target
|
|||
$(call create-system-vendor-symlink)
|
||||
$(MKTARBALL) $(FS_GET_STATS) \
|
||||
$(PRODUCT_OUT) system $(PRIVATE_SYSTEM_TAR) \
|
||||
$(INSTALLED_SYSTEMTARBALL_TARGET)
|
||||
$(INSTALLED_SYSTEMTARBALL_TARGET) $(TARGET_OUT)
|
||||
endef
|
||||
|
||||
ifndef SYSTEM_TARBALL_FORMAT
|
||||
|
@ -1130,7 +1130,7 @@ define build-boottarball-target
|
|||
$(hide) echo $(BOARD_KERNEL_CMDLINE) > $(PRODUCT_OUT)/boot/cmdline
|
||||
$(hide) $(MKTARBALL) $(FS_GET_STATS) \
|
||||
$(PRODUCT_OUT) boot $(PRIVATE_BOOT_TAR) \
|
||||
$(INSTALLED_BOOTTARBALL_TARGET)
|
||||
$(INSTALLED_BOOTTARBALL_TARGET) $(TARGET_OUT)
|
||||
endef
|
||||
|
||||
ifndef BOOT_TARBALL_FORMAT
|
||||
|
@ -1174,7 +1174,7 @@ define build-userdataimage-target
|
|||
$(call generate-userimage-prop-dictionary, $(userdataimage_intermediates)/userdata_image_info.txt, skip_fsck=true)
|
||||
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
||||
./build/tools/releasetools/build_image.py \
|
||||
$(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt $(INSTALLED_USERDATAIMAGE_TARGET)
|
||||
$(TARGET_OUT_DATA) $(userdataimage_intermediates)/userdata_image_info.txt $(INSTALLED_USERDATAIMAGE_TARGET) $(TARGET_OUT)
|
||||
$(hide) $(call assert-max-image-size,$(INSTALLED_USERDATAIMAGE_TARGET),$(BOARD_USERDATAIMAGE_PARTITION_SIZE))
|
||||
endef
|
||||
|
||||
|
@ -1198,7 +1198,7 @@ define build-userdatatarball-target
|
|||
"$(INSTALLED_USERDATATARBALL_TARGET)")
|
||||
$(MKTARBALL) $(FS_GET_STATS) \
|
||||
$(PRODUCT_OUT) data $(PRIVATE_USERDATA_TAR) \
|
||||
$(INSTALLED_USERDATATARBALL_TARGET)
|
||||
$(INSTALLED_USERDATATARBALL_TARGET) $(TARGET_OUT)
|
||||
endef
|
||||
|
||||
userdata_tar := $(PRODUCT_OUT)/userdata.tar
|
||||
|
@ -1229,7 +1229,7 @@ define build-cacheimage-target
|
|||
$(call generate-userimage-prop-dictionary, $(cacheimage_intermediates)/cache_image_info.txt, skip_fsck=true)
|
||||
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
||||
./build/tools/releasetools/build_image.py \
|
||||
$(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET)
|
||||
$(TARGET_OUT_CACHE) $(cacheimage_intermediates)/cache_image_info.txt $(INSTALLED_CACHEIMAGE_TARGET) $(TARGET_OUT)
|
||||
$(hide) $(call assert-max-image-size,$(INSTALLED_CACHEIMAGE_TARGET),$(BOARD_CACHEIMAGE_PARTITION_SIZE))
|
||||
endef
|
||||
|
||||
|
@ -1267,7 +1267,7 @@ define build-vendorimage-target
|
|||
$(call generate-userimage-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt, skip_fsck=true)
|
||||
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
|
||||
./build/tools/releasetools/build_image.py \
|
||||
$(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET)
|
||||
$(TARGET_OUT_VENDOR) $(vendorimage_intermediates)/vendor_image_info.txt $(INSTALLED_VENDORIMAGE_TARGET) $(TARGET_OUT)
|
||||
$(hide) $(call assert-max-image-size,$(INSTALLED_VENDORIMAGE_TARGET),$(BOARD_VENDORIMAGE_PARTITION_SIZE))
|
||||
endef
|
||||
|
||||
|
@ -1519,10 +1519,10 @@ endif
|
|||
$(hide) (cd $(zip_root) && zip -qry ../$(notdir $@) .)
|
||||
@# Run fs_config on all the system, vendor, boot ramdisk,
|
||||
@# and recovery ramdisk files in the zip, and save the output
|
||||
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt
|
||||
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="VENDOR/" } /^VENDOR\// {print "vendor/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/vendor_filesystem_config.txt
|
||||
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt
|
||||
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt
|
||||
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="SYSTEM/" } /^SYSTEM\// {print "system/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/filesystem_config.txt
|
||||
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="VENDOR/" } /^VENDOR\// {print "vendor/" $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/vendor_filesystem_config.txt
|
||||
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="BOOT/RAMDISK/" } /^BOOT\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/boot_filesystem_config.txt
|
||||
$(hide) zipinfo -1 $@ | awk 'BEGIN { FS="RECOVERY/RAMDISK/" } /^RECOVERY\/RAMDISK\// {print $$2}' | $(HOST_OUT_EXECUTABLES)/fs_config -C -D $(TARGET_OUT) -S $(SELINUX_FC) > $(zip_root)/META/recovery_filesystem_config.txt
|
||||
$(hide) (cd $(zip_root) && zip -q ../$(notdir $@) META/*filesystem_config.txt)
|
||||
$(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH MKBOOTIMG=$(MKBOOTIMG) \
|
||||
./build/tools/releasetools/add_img_to_target_files -p $(HOST_OUT) $@
|
||||
|
|
|
@ -68,16 +68,17 @@ static struct selabel_handle* get_sehnd(const char* context_file) {
|
|||
}
|
||||
|
||||
static void usage() {
|
||||
fprintf(stderr, "Usage: fs_config [-S context_file] [-C]\n");
|
||||
fprintf(stderr, "Usage: fs_config [-D product_out_path] [-S context_file] [-C]\n");
|
||||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
char buffer[1024];
|
||||
const char* context_file = NULL;
|
||||
const char* product_out_path = NULL;
|
||||
struct selabel_handle* sehnd = NULL;
|
||||
int print_capabilities = 0;
|
||||
int opt;
|
||||
while((opt = getopt(argc, argv, "CS:")) != -1) {
|
||||
while((opt = getopt(argc, argv, "CS:D:")) != -1) {
|
||||
switch(opt) {
|
||||
case 'C':
|
||||
print_capabilities = 1;
|
||||
|
@ -85,6 +86,9 @@ int main(int argc, char** argv) {
|
|||
case 'S':
|
||||
context_file = optarg;
|
||||
break;
|
||||
case 'D':
|
||||
product_out_path = optarg;
|
||||
break;
|
||||
default:
|
||||
usage();
|
||||
exit(EXIT_FAILURE);
|
||||
|
@ -115,7 +119,7 @@ int main(int argc, char** argv) {
|
|||
|
||||
unsigned uid = 0, gid = 0, mode = 0;
|
||||
uint64_t capabilities;
|
||||
fs_config(buffer, is_dir, &uid, &gid, &mode, &capabilities);
|
||||
fs_config(buffer, is_dir, product_out_path, &uid, &gid, &mode, &capabilities);
|
||||
printf("%s %d %d %o", buffer, uid, gid, mode);
|
||||
|
||||
if (sehnd != NULL) {
|
||||
|
|
|
@ -25,11 +25,12 @@ print_help(void)
|
|||
{
|
||||
fprintf(stderr, "fs_get_stats: retrieve the target file stats "
|
||||
"for the specified file\n");
|
||||
fprintf(stderr, "usage: fs_get_stats cur_perms is_dir filename\n");
|
||||
fprintf(stderr, "usage: fs_get_stats cur_perms is_dir filename targetout\n");
|
||||
fprintf(stderr, "\tcur_perms - The current permissions of "
|
||||
"the file\n");
|
||||
fprintf(stderr, "\tis_dir - Is filename is a dir, 1. Otherwise, 0.\n");
|
||||
fprintf(stderr, "\tfilename - The filename to lookup\n");
|
||||
fprintf(stderr, "\ttargetout - The target out path to query device specific FS configs\n");
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
|
@ -42,7 +43,7 @@ main(int argc, const char *argv[])
|
|||
unsigned uid = (unsigned)-1;
|
||||
unsigned gid = (unsigned)-1;
|
||||
|
||||
if (argc < 4) {
|
||||
if (argc < 5) {
|
||||
ERROR("Invalid arguments\n");
|
||||
print_help();
|
||||
exit(-1);
|
||||
|
@ -58,7 +59,7 @@ main(int argc, const char *argv[])
|
|||
is_dir = 1;
|
||||
|
||||
uint64_t capabilities;
|
||||
fs_config(argv[3], is_dir, &uid, &gid, &perms, &capabilities);
|
||||
fs_config(argv[3], is_dir, argv[4], &uid, &gid, &perms, &capabilities);
|
||||
fprintf(stdout, "%d %d 0%o\n", uid, gid, perms);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -5,8 +5,9 @@
|
|||
# $3: subdir to tar up (from $2)
|
||||
# $4: target tar name
|
||||
# $5: target tarball name (usually $(3).bz2)
|
||||
# $6: TARGET_OUT path to query device specific FS configs
|
||||
|
||||
if [ $# -ne 5 ]; then
|
||||
if [ $# -ne 6 ]; then
|
||||
echo "Error: wrong number of arguments in cmd: $0 $* "
|
||||
exit 1
|
||||
fi
|
||||
|
@ -16,6 +17,7 @@ start_dir=`readlink -f $2`
|
|||
dir_to_tar=$3
|
||||
target_tar=`readlink -f $4`
|
||||
target_tarball=`readlink -f $5`
|
||||
target_out=`readlink -f $6`
|
||||
|
||||
cd $2
|
||||
|
||||
|
@ -28,7 +30,7 @@ files=`find ${dir_to_tar} \! -type d -print`
|
|||
for f in ${subdirs} ${files} ; do
|
||||
curr_perms=`stat -c 0%a $f`
|
||||
[ -d "$f" ] && is_dir=1 || is_dir=0
|
||||
new_info=`${fs_get_stats} ${curr_perms} ${is_dir} ${f}`
|
||||
new_info=`${fs_get_stats} ${curr_perms} ${is_dir} ${f} ${target_out}`
|
||||
new_uid=`echo ${new_info} | awk '{print $1;}'`
|
||||
new_gid=`echo ${new_info} | awk '{print $2;}'`
|
||||
new_perms=`echo ${new_info} | awk '{print $3;}'`
|
||||
|
|
|
@ -204,13 +204,14 @@ def MakeVerityEnabledImage(out_file, prop_dict):
|
|||
shutil.rmtree(tempdir_name, ignore_errors=True)
|
||||
return True
|
||||
|
||||
def BuildImage(in_dir, prop_dict, out_file):
|
||||
def BuildImage(in_dir, prop_dict, out_file, target_out=None):
|
||||
"""Build an image to out_file from in_dir with property prop_dict.
|
||||
|
||||
Args:
|
||||
in_dir: path of input directory.
|
||||
prop_dict: property dictionary.
|
||||
out_file: path of the output image file.
|
||||
target_out: path of the product out directory to read device specific FS config files.
|
||||
|
||||
Returns:
|
||||
True iff the image is built successfully.
|
||||
|
@ -272,6 +273,8 @@ def BuildImage(in_dir, prop_dict, out_file):
|
|||
build_command.extend(["-T", str(prop_dict["timestamp"])])
|
||||
if fs_config:
|
||||
build_command.extend(["-C", fs_config])
|
||||
if target_out:
|
||||
build_command.extend(["-D", target_out])
|
||||
if "block_list" in prop_dict:
|
||||
build_command.extend(["-B", prop_dict["block_list"]])
|
||||
build_command.extend(["-L", prop_dict["mount_point"]])
|
||||
|
@ -282,6 +285,8 @@ def BuildImage(in_dir, prop_dict, out_file):
|
|||
build_command.extend([in_dir, out_file])
|
||||
build_command.extend(["-s"])
|
||||
build_command.extend(["-m", prop_dict["mount_point"]])
|
||||
if target_out:
|
||||
build_command.extend(["-d", target_out])
|
||||
if "selinux_fc" in prop_dict:
|
||||
build_command.extend(["-c", prop_dict["selinux_fc"]])
|
||||
if "squashfs_compressor" in prop_dict:
|
||||
|
@ -467,13 +472,14 @@ def LoadGlobalDict(filename):
|
|||
|
||||
|
||||
def main(argv):
|
||||
if len(argv) != 3:
|
||||
if len(argv) != 4:
|
||||
print __doc__
|
||||
sys.exit(1)
|
||||
|
||||
in_dir = argv[0]
|
||||
glob_dict_file = argv[1]
|
||||
out_file = argv[2]
|
||||
target_out = argv[3]
|
||||
|
||||
glob_dict = LoadGlobalDict(glob_dict_file)
|
||||
if "mount_point" in glob_dict:
|
||||
|
@ -499,7 +505,7 @@ def main(argv):
|
|||
|
||||
image_properties = ImagePropFromGlobalDict(glob_dict, mount_point)
|
||||
|
||||
if not BuildImage(in_dir, image_properties, out_file):
|
||||
if not BuildImage(in_dir, image_properties, out_file, target_out):
|
||||
print >> sys.stderr, "error: failed to build %s from %s" % (out_file,
|
||||
in_dir)
|
||||
exit(1)
|
||||
|
|
Loading…
Reference in New Issue