diff --git a/arm64/gapps/product/etc/sysconfig/component-overrides.xml b/arm64/gapps/product/etc/sysconfig/component-overrides.xml
new file mode 100644
index 0000000000..4634feca48
--- /dev/null
+++ b/arm64/gapps/product/etc/sysconfig/component-overrides.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/scripts/build.sh b/scripts/build.sh
index 0ac31f84f4..fbf88bc0ef 100755
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -33,28 +33,34 @@ if [ "$TMPDIR" ] && [ ! -d "$TMPDIR" ]; then
mkdir -p "$TMPDIR"
fi
WORK_DIR=$(mktemp -d -t wsa-build-XXXXXXXXXX_) || exit 1
-ROOT_MNT="$WORK_DIR/system_root"
+
+# lowerdir
+ROOT_MNT_RO="$WORK_DIR/erofs"
+VENDOR_MNT_RO="$ROOT_MNT_RO/vendor"
+PRODUCT_MNT_RO="$ROOT_MNT_RO/product"
+SYSTEM_EXT_MNT_RO="$ROOT_MNT_RO/system_ext"
+
+# merged
+ROOT_MNT="$WORK_DIR/system_root_merged"
SYSTEM_MNT="$ROOT_MNT/system"
VENDOR_MNT="$ROOT_MNT/vendor"
PRODUCT_MNT="$ROOT_MNT/product"
SYSTEM_EXT_MNT="$ROOT_MNT/system_ext"
+
+declare -A LOWER_PARTITION=(["zsystem"]="$ROOT_MNT_RO" ["vendor"]="$VENDOR_MNT_RO" ["product"]="$PRODUCT_MNT_RO" ["system_ext"]="$SYSTEM_EXT_MNT_RO")
+declare -A MERGED_PARTITION=(["zsystem"]="$ROOT_MNT" ["vendor"]="$VENDOR_MNT" ["product"]="$PRODUCT_MNT" ["system_ext"]="$SYSTEM_EXT_MNT")
DOWNLOAD_DIR=../download
DOWNLOAD_CONF_NAME=download.list
PYTHON_VENV_DIR="$(dirname "$PWD")/python3-env"
umount_clean() {
- if [ -d "$ROOT_MNT" ]; then
+ if [ -d "$ROOT_MNT" ] || [ -d "$ROOT_MNT_RO" ]; then
echo "Cleanup Mount Directory"
- if [ -d "$VENDOR_MNT" ]; then
- sudo umount -v "$VENDOR_MNT"
- fi
- if [ -d "$PRODUCT_MNT" ]; then
- sudo umount -v "$PRODUCT_MNT"
- fi
- if [ -d "$SYSTEM_EXT_MNT" ]; then
- sudo umount -v "$SYSTEM_EXT_MNT"
- fi
- sudo umount -v "$ROOT_MNT"
-
+ for PART in "${LOWER_PARTITION[@]}"; do
+ [ -d "$PART" ] && sudo umount -v "$PART"
+ done
+ for PART in "${MERGED_PARTITION[@]}"; do
+ [ -d "$PART" ] && sudo umount -v "$PART"
+ done
sudo rm -rf "${WORK_DIR:?}"
else
rm -rf "${WORK_DIR:?}"
@@ -125,17 +131,69 @@ exit_with_message() {
}
resize_img() {
- e2fsck -pf "$1" || return 1
+ sudo e2fsck -pf "$1" || return 1
if [ "$2" ]; then
- resize2fs "$1" "$2" || return 1
+ sudo resize2fs "$1" "$2" || return 1
else
- resize2fs -M "$1" || return 1
+ sudo resize2fs -M "$1" || return 1
fi
return 0
}
-vhdx_to_img() {
+vhdx_to_raw_img() {
qemu-img convert -q -f vhdx -O raw "$1" "$2" || return 1
+ rm -f "$1" || return 1
+}
+
+mk_overlayfs() {
+ local lowerdir="$1"
+ local upperdir workdir merged context own
+ merged="$3"
+ case "$2" in
+ system)
+ upperdir="$WORK_DIR/upper/$2"
+ workdir="$WORK_DIR/worker/$2"
+ ;;
+ *)
+ upperdir="$WORK_DIR/upper/system/$2"
+ workdir="$WORK_DIR/worker/system/$2"
+ ;;
+ esac
+ echo "mk_overlayfs: label $2
+ lowerdir=$lowerdir
+ upperdir=$upperdir
+ workdir=$workdir
+ merged=$merged"
+ sudo mkdir -p -m 755 "$workdir" "$upperdir" "$merged"
+ case "$2" in
+ vendor)
+ context="u:object_r:vendor_file:s0"
+ own="0:2000"
+ ;;
+ system)
+ context="u:object_r:rootfs:s0"
+ own="0:0"
+ ;;
+ *)
+ context="u:object_r:system_file:s0"
+ own="0:0"
+ ;;
+ esac
+ sudo chown -R "$own" "$upperdir" "$workdir" "$merged"
+ sudo setfattr -n security.selinux -v "$context" "$upperdir"
+ sudo setfattr -n security.selinux -v "$context" "$workdir"
+ sudo setfattr -n security.selinux -v "$context" "$merged"
+ sudo mount -vt overlay overlay -ouserxattr,lowerdir="$lowerdir",upperdir="$upperdir",workdir="$workdir" "$merged"
+}
+
+mk_erofs_umount() {
+ sudo mkfs.erofs -zlz4hc -T1230768000 --chunksize=4096 --exclude-regex="lost+found" "$2".erofs "$1" || abort "Failed to make erofs image from $1"
+ sudo umount -v "$1"
+ sudo rm -f "$2"
+ sudo mv "$2".erofs "$2"
+}
+
+ro_ext4_img_to_rw() {
resize_img "$2" "$(($(du --apparent-size -sB512 "$2" | cut -f1) * 2))"s || return 1
e2fsck -fp -E unshare_blocks "$2" || return 1
resize_img "$2" || return 1
@@ -576,74 +634,96 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
echo -e "Extract done\n"
fi
-echo "Calculate the required space"
-EXTRA_SIZE=10240
-
-SYSTEM_EXT_NEED_SIZE=$EXTRA_SIZE
-if [ -d "$WORK_DIR/gapps/system_ext" ]; then
- SYSTEM_EXT_NEED_SIZE=$((SYSTEM_EXT_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps/system_ext" | cut -f1)))
+if [[ "$DOWN_WSA_MAIN_VERSION" -ge 2302 ]]; then
+ echo "Convert vhdx to RAW image"
+ vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/system_ext.vhdx" "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
+ vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/product.vhdx" "$WORK_DIR/wsa/$ARCH/product.img" || abort
+ vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/system.vhdx" "$WORK_DIR/wsa/$ARCH/system.img" || abort
+ vhdx_to_raw_img "$WORK_DIR/wsa/$ARCH/vendor.vhdx" "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
+ echo -e "Convert vhdx to RAW image done\n"
fi
-
-PRODUCT_NEED_SIZE=$EXTRA_SIZE
-if [ -d "$WORK_DIR/gapps/product" ]; then
- PRODUCT_NEED_SIZE=$((PRODUCT_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps/product" | cut -f1)))
+if [[ "$DOWN_WSA_MAIN_VERSION" -ge 2304 ]]; then
+ echo "Mount images"
+ sudo mkdir -p -m 755 "$ROOT_MNT_RO" || abort
+ sudo chown "0:0" "$ROOT_MNT_RO" || abort
+ sudo setfattr -n security.selinux -v "u:object_r:rootfs:s0" "$ROOT_MNT_RO" || abort
+ sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/system.img" "$ROOT_MNT_RO" || abort
+ sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT_RO" || abort
+ sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT_RO" || abort
+ sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT_RO" || abort
+ echo -e "done\n"
+ echo "Create overlayfs for EROFS"
+ mk_overlayfs "$ROOT_MNT_RO" system "$ROOT_MNT" || abort
+ mk_overlayfs "$VENDOR_MNT_RO" vendor "$VENDOR_MNT" || abort
+ mk_overlayfs "$PRODUCT_MNT_RO" product "$PRODUCT_MNT" || abort
+ mk_overlayfs "$SYSTEM_EXT_MNT_RO" system_ext "$SYSTEM_EXT_MNT" || abort
+ echo -e "Create overlayfs for EROFS done\n"
+elif [[ "$DOWN_WSA_MAIN_VERSION" -ge 2302 ]]; then
+ echo "Remove read-only flag for read-only EXT4 image"
+ ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/system_ext.img" "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
+ ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/product.img" "$WORK_DIR/wsa/$ARCH/product.img" || abort
+ ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/system.img" "$WORK_DIR/wsa/$ARCH/system.img" || abort
+ ro_ext4_img_to_rw "$WORK_DIR/wsa/$ARCH/vendor.img" "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
+ echo -e "Remove read-only flag for read-only EXT4 image\n"
fi
+if [[ "$DOWN_WSA_MAIN_VERSION" -lt 2304 ]]; then
+ echo "Calculate the required space"
+ EXTRA_SIZE=10240
-SYSTEM_NEED_SIZE=$EXTRA_SIZE
-if [ -d "$WORK_DIR/gapps" ]; then
- SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps" | cut -f1) - PRODUCT_NEED_SIZE - SYSTEM_EXT_NEED_SIZE))
-fi
-if [ "$ROOT_SOL" = "magisk" ]; then
- if [ -d "$WORK_DIR/magisk" ]; then
- MAGISK_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/magisk/magisk" | cut -f1)
- SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + MAGISK_SIZE))
- fi
- if [ -f "$MAGISK_PATH" ]; then
- MAGISK_APK_SIZE=$(du --apparent-size -sB512 "$MAGISK_PATH" | cut -f1)
- SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + MAGISK_APK_SIZE))
+ SYSTEM_EXT_NEED_SIZE=$EXTRA_SIZE
+ if [ -d "$WORK_DIR/gapps/system_ext" ]; then
+ SYSTEM_EXT_NEED_SIZE=$((SYSTEM_EXT_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps/system_ext" | cut -f1)))
fi
-fi
-if [ -d "../$ARCH/system" ]; then
- SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + $(du --apparent-size -sB512 "../$ARCH/system" | cut -f1)))
-fi
-VENDOR_NEED_SIZE=$EXTRA_SIZE
-echo -e "done\n"
+ PRODUCT_NEED_SIZE=$EXTRA_SIZE
+ if [ -d "$WORK_DIR/gapps/product" ]; then
+ PRODUCT_NEED_SIZE=$((PRODUCT_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps/product" | cut -f1)))
+ fi
-echo "Expand images"
-if [[ "$DOWN_WSA_MAIN_VERSION" -ge 2302 ]]; then
- echo "Convert vhdx to img and remove read-only flag"
- vhdx_to_img "$WORK_DIR/wsa/$ARCH/system_ext.vhdx" "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
- vhdx_to_img "$WORK_DIR/wsa/$ARCH/product.vhdx" "$WORK_DIR/wsa/$ARCH/product.img" || abort
- vhdx_to_img "$WORK_DIR/wsa/$ARCH/system.vhdx" "$WORK_DIR/wsa/$ARCH/system.img" || abort
- vhdx_to_img "$WORK_DIR/wsa/$ARCH/vendor.vhdx" "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
- echo -e "Convert vhdx to img and remove read-only flag done\n"
+ SYSTEM_NEED_SIZE=$EXTRA_SIZE
+ if [ -d "$WORK_DIR/gapps" ]; then
+ SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + $(du --apparent-size -sB512 "$WORK_DIR/gapps" | cut -f1) - PRODUCT_NEED_SIZE - SYSTEM_EXT_NEED_SIZE))
+ fi
+ if [ "$ROOT_SOL" = "magisk" ]; then
+ if [ -d "$WORK_DIR/magisk" ]; then
+ MAGISK_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/magisk/magisk" | cut -f1)
+ SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + MAGISK_SIZE))
+ fi
+ if [ -f "$MAGISK_PATH" ]; then
+ MAGISK_APK_SIZE=$(du --apparent-size -sB512 "$MAGISK_PATH" | cut -f1)
+ SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + MAGISK_APK_SIZE))
+ fi
+ fi
+ if [ -d "../$ARCH/system" ]; then
+ SYSTEM_NEED_SIZE=$((SYSTEM_NEED_SIZE + $(du --apparent-size -sB512 "../$ARCH/system" | cut -f1)))
+ fi
+ VENDOR_NEED_SIZE=$EXTRA_SIZE
+ echo -e "done\n"
+ echo "Expand images"
+ SYSTEM_EXT_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/system_ext.img" | cut -f1)
+ PRODUCT_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/product.img" | cut -f1)
+ SYSTEM_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/system.img" | cut -f1)
+ VENDOR_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/vendor.img" | cut -f1)
+ SYSTEM_EXT_TARGET_SIZE=$((SYSTEM_EXT_NEED_SIZE * 2 + SYSTEM_EXT_IMG_SIZE))
+ PRODUCT_TAGET_SIZE=$((PRODUCT_NEED_SIZE * 2 + PRODUCT_IMG_SIZE))
+ SYSTEM_TAGET_SIZE=$((SYSTEM_IMG_SIZE * 2))
+ VENDOR_TAGET_SIZE=$((VENDOR_NEED_SIZE * 2 + VENDOR_IMG_SIZE))
+
+ resize_img "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_TARGET_SIZE"s || abort
+ resize_img "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_TAGET_SIZE"s || abort
+ resize_img "$WORK_DIR/wsa/$ARCH/system.img" "$SYSTEM_TAGET_SIZE"s || abort
+ resize_img "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_TAGET_SIZE"s || abort
+
+ echo -e "Expand images done\n"
+
+ echo "Mount images"
+ sudo mkdir "$ROOT_MNT" || abort
+ sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/system.img" "$ROOT_MNT" || abort
+ sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT" || abort
+ sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT" || abort
+ sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT" || abort
+ echo -e "done\n"
fi
-
-SYSTEM_EXT_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/system_ext.img" | cut -f1)
-PRODUCT_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/product.img" | cut -f1)
-SYSTEM_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/system.img" | cut -f1)
-VENDOR_IMG_SIZE=$(du --apparent-size -sB512 "$WORK_DIR/wsa/$ARCH/vendor.img" | cut -f1)
-SYSTEM_EXT_TARGET_SIZE=$((SYSTEM_EXT_NEED_SIZE * 2 + SYSTEM_EXT_IMG_SIZE))
-PRODUCT_TAGET_SIZE=$((PRODUCT_NEED_SIZE * 2 + PRODUCT_IMG_SIZE))
-SYSTEM_TAGET_SIZE=$((SYSTEM_IMG_SIZE * 2))
-VENDOR_TAGET_SIZE=$((VENDOR_NEED_SIZE * 2 + VENDOR_IMG_SIZE))
-
-resize_img "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_TARGET_SIZE"s || abort
-resize_img "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_TAGET_SIZE"s || abort
-resize_img "$WORK_DIR/wsa/$ARCH/system.img" "$SYSTEM_TAGET_SIZE"s || abort
-resize_img "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_TAGET_SIZE"s || abort
-
-echo -e "Expand images done\n"
-
-echo "Mount images"
-sudo mkdir "$ROOT_MNT" || abort
-sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/system.img" "$ROOT_MNT" || abort
-sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/vendor.img" "$VENDOR_MNT" || abort
-sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/product.img" "$PRODUCT_MNT" || abort
-sudo mount -vo loop "$WORK_DIR/wsa/$ARCH/system_ext.img" "$SYSTEM_EXT_MNT" || abort
-echo -e "done\n"
-
if [ "$REMOVE_AMAZON" ]; then
echo "Remove Amazon Appstore"
find "${PRODUCT_MNT:?}"/{etc/permissions,etc/sysconfig,framework,priv-app} 2>/dev/null | grep -e amazon -e venezia | sudo xargs rm -rf
@@ -677,7 +757,6 @@ for module in \$(ls /data/adb/modules); do
fi
done
EOF
-
sudo find "$ROOT_MNT/sbin" -type f -exec chmod 0755 {} \;
sudo find "$ROOT_MNT/sbin" -type f -exec chown root:root {} \;
sudo find "$ROOT_MNT/sbin" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
@@ -691,7 +770,6 @@ EOF
LS_SVC_NAME=$(Gen_Rand_Str 12)
sudo tee -a "$SYSTEM_MNT/etc/init/hw/init.rc" </dev/null
on post-fs-data
- start adbd
mkdir /dev/$MAGISK_TMP_PATH
mount tmpfs tmpfs /dev/$MAGISK_TMP_PATH mode=0755
copy /sbin/magisk64 /dev/$MAGISK_TMP_PATH/magisk64
@@ -773,7 +851,7 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
done
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
- find "$WORK_DIR/gapps/" -maxdepth 1 -mindepth 1 -type d -not -path '*product' -exec sudo cp --preserve=all -r {} "$SYSTEM_MNT" \; || abort
+ find "$WORK_DIR/gapps/" -maxdepth 1 -mindepth 1 -type d -exec sudo cp --preserve=all -r {} "$SYSTEM_MNT" \; || abort
elif [ "$GAPPS_BRAND" = "MindTheGapps" ]; then
sudo cp --preserve=all -r "$WORK_DIR/gapps/system_ext/"* "$SYSTEM_EXT_MNT/" || abort
if [ -e "$SYSTEM_EXT_MNT/priv-app/SetupWizard" ]; then
@@ -783,6 +861,8 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
sudo cp --preserve=all -r "$WORK_DIR/gapps/product/"* "$PRODUCT_MNT" || abort
find "$WORK_DIR/gapps/product/overlay" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/overlay/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:vendor_overlay_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/product/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/etc/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
+ find "$WORK_DIR/gapps/product/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/etc/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
if [ "$GAPPS_BRAND" = "OpenGApps" ]; then
find "$WORK_DIR/gapps/app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
@@ -795,12 +875,10 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
find "$WORK_DIR/gapps/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_MNT/etc/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
else
find "$WORK_DIR/gapps/product/app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/product/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/etc/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR/gapps/product/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/priv-app/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR/gapps/product/framework/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/framework/placeholder" -type d -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR/gapps/product/app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/app/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
- find "$WORK_DIR/gapps/product/etc/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/etc/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR/gapps/product/priv-app/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/priv-app/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR/gapps/product/framework/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$PRODUCT_MNT/framework/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
find "$WORK_DIR/gapps/system_ext/etc/permissions/" -maxdepth 1 -mindepth 1 -printf '%P\n' | xargs -I placeholder sudo find "$SYSTEM_EXT_MNT/etc/permissions/placeholder" -type f -exec setfattr -n security.selinux -v "u:object_r:system_file:s0" {} \; || abort
@@ -826,20 +904,35 @@ if [ "$GAPPS_BRAND" != 'none' ]; then
echo -e "done\n"
fi
fi
-echo "Umount images"
-sudo find "$ROOT_MNT" -exec touch -ht 200901010000.00 {} \;
-sudo umount -v "$VENDOR_MNT"
-sudo umount -v "$PRODUCT_MNT"
-sudo umount -v "$SYSTEM_EXT_MNT"
-sudo umount -v "$ROOT_MNT"
-echo -e "done\n"
-echo "Shrink images"
-resize_img "$WORK_DIR/wsa/$ARCH/system.img" || abort
-resize_img "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
-resize_img "$WORK_DIR/wsa/$ARCH/product.img" || abort
-resize_img "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
-echo -e "Shrink images done\n"
+if [[ "$DOWN_WSA_MAIN_VERSION" -ge 2304 ]]; then
+ echo "Create EROFS images"
+ mk_erofs_umount "$VENDOR_MNT" "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
+ mk_erofs_umount "$PRODUCT_MNT" "$WORK_DIR/wsa/$ARCH/product.img" || abort
+ mk_erofs_umount "$SYSTEM_EXT_MNT" "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
+ mk_erofs_umount "$ROOT_MNT" "$WORK_DIR/wsa/$ARCH/system.img" || abort
+ echo -e "Create EROFS images done\n"
+ echo "Umount images"
+ sudo umount -v "$VENDOR_MNT_RO"
+ sudo umount -v "$PRODUCT_MNT_RO"
+ sudo umount -v "$SYSTEM_EXT_MNT_RO"
+ sudo umount -v "$ROOT_MNT_RO"
+ echo -e "done\n"
+else
+ echo "Umount images"
+ sudo find "$ROOT_MNT" -exec touch -ht 200901010000.00 {} \;
+ sudo umount -v "$VENDOR_MNT"
+ sudo umount -v "$PRODUCT_MNT"
+ sudo umount -v "$SYSTEM_EXT_MNT"
+ sudo umount -v "$ROOT_MNT"
+ echo -e "done\n"
+ echo "Shrink images"
+ resize_img "$WORK_DIR/wsa/$ARCH/system.img" || abort
+ resize_img "$WORK_DIR/wsa/$ARCH/vendor.img" || abort
+ resize_img "$WORK_DIR/wsa/$ARCH/product.img" || abort
+ resize_img "$WORK_DIR/wsa/$ARCH/system_ext.img" || abort
+ echo -e "Shrink images done\n"
+fi
if [[ "$DOWN_WSA_MAIN_VERSION" -ge 2302 ]]; then
echo "Convert images to vhdx"
diff --git a/scripts/extractWSA.py b/scripts/extractWSA.py
index 1dfc1132b1..143f22f03e 100644
--- a/scripts/extractWSA.py
+++ b/scripts/extractWSA.py
@@ -52,7 +52,7 @@
archdir.mkdir()
uid = os.getuid()
workdir_rw = os.access(workdir, os.W_OK)
-print(f"Uid {uid} can write to {archdir} {workdir_rw}", flush=True)
+
with zipfile.ZipFile(wsa_zip_path) as zip:
for f in zip.filelist:
if arch in f.filename.lower():
@@ -72,21 +72,17 @@
environ_file.write(f'WSA_REL={rel_long}\n')
filename_lower = f.filename.lower()
if 'language' in filename_lower or 'scale' in filename_lower:
- print(f"unzipping {filename_lower}", flush=True)
name = f.filename.split("_")[2].split(".")[0]
zip.extract(f, workdir)
with zipfile.ZipFile(workdir / f.filename) as l:
for g in l.filelist:
if g.filename == 'resources.pri':
g.filename = f'resources.{name}.pri'
- print(f"extracting {g.filename}", flush=True)
l.extract(g, pridir)
elif g.filename == 'AppxManifest.xml':
g.filename = f'resources.{name}.xml'
- print(f"extracting {g.filename}", flush=True)
l.extract(g, xmldir)
elif re.search(u'Images/.+\.png', g.filename):
- print(f"extracting {g.filename}", flush=True)
l.extract(g, archdir)
with zipfile.ZipFile(zip_path) as zip:
stat = Path(zip_path).stat()
diff --git a/x64/gapps/product/etc/sysconfig/component-overrides.xml b/x64/gapps/product/etc/sysconfig/component-overrides.xml
new file mode 100644
index 0000000000..4634feca48
--- /dev/null
+++ b/x64/gapps/product/etc/sysconfig/component-overrides.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
diff --git a/xml/priconfig.xml b/xml/priconfig.xml
index 75877494fd..be00740502 100644
--- a/xml/priconfig.xml
+++ b/xml/priconfig.xml
@@ -1,4 +1,21 @@
+