From 9e6fed9b472f84318cda631e865544ee60b8c637 Mon Sep 17 00:00:00 2001 From: m0viefreak Date: Fri, 3 Jan 2020 23:50:01 +0100 Subject: [PATCH 1/3] Update magisk installer script to latest version --- .../META-INF/com/google/android/update-binary | 182 ++++++++++-------- 1 file changed, 102 insertions(+), 80 deletions(-) diff --git a/edxp-core/template_override/META-INF/com/google/android/update-binary b/edxp-core/template_override/META-INF/com/google/android/update-binary index 923d0bd57..29240cda4 100644 --- a/edxp-core/template_override/META-INF/com/google/android/update-binary +++ b/edxp-core/template_override/META-INF/com/google/android/update-binary @@ -1,12 +1,15 @@ #!/sbin/sh -TMPDIR=/dev/tmp -MOUNTPATH=/dev/magisk_img +################# +# Initialization +################# -# Default permissions umask 022 -# Initial cleanup +# Global vars +TMPDIR=/dev/tmp +PERSISTDIR=/sbin/.magisk/mirror/persist + rm -rf $TMPDIR 2>/dev/null mkdir -p $TMPDIR @@ -14,20 +17,33 @@ mkdir -p $TMPDIR ui_print() { echo "$1"; } require_new_magisk() { - ui_print "***********************************" - ui_print " Please install the latest Magisk! " - ui_print "***********************************" + ui_print "*******************************" + ui_print " Please install Magisk v19.0+! " + ui_print "*******************************" exit 1 } -imageless_magisk() { - [ $MAGISK_VER_CODE -gt 18100 ] +is_legacy_script() { + unzip -l "$ZIPFILE" install.sh | grep -q install.sh return $? } -########################################################################################## +print_modname() { + local len + len=`echo -n $MODNAME | wc -c` + len=$((len + 2)) + local pounds=`printf "%${len}s" | tr ' ' '*'` + ui_print "$pounds" + ui_print " $MODNAME " + ui_print "$pounds" + ui_print "*******************" + ui_print " Powered by Magisk " + ui_print "*******************" +} + +############## # Environment -########################################################################################## +############## OUTFD=$2 ZIPFILE=$3 @@ -35,12 +51,9 @@ ZIPFILE=$3 mount /data 2>/dev/null # Load utility functions -if [ -f /data/adb/magisk/util_functions.sh ]; then - . /data/adb/magisk/util_functions.sh - NVBASE=/data/adb -else - require_new_magisk -fi +[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk +. /data/adb/magisk/util_functions.sh +[ $MAGISK_VER_CODE -gt 18100 ] || require_new_magisk # Preperation for flashable zips setup_flashable @@ -54,98 +67,107 @@ api_level_arch_detect # Setup busybox and binaries $BOOTMODE && boot_actions || recovery_actions -########################################################################################## +############## # Preparation -########################################################################################## - -# Extract common files -unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2 - -[ ! -f $TMPDIR/install.sh ] && abort "! Unable to extract zip file!" -# Load install script -. $TMPDIR/install.sh +############## -if imageless_magisk; then - $BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules - MODULEROOT=$NVBASE/$MODDIRNAME -else - $BOOTMODE && IMGNAME=magisk_merge.img || IMGNAME=magisk.img - IMG=$NVBASE/$IMGNAME - request_zip_size_check "$ZIPFILE" - mount_magisk_img - MODULEROOT=$MOUNTPATH -fi +# Extract prop file +unzip -o "$ZIPFILE" module.prop -d $TMPDIR >&2 +[ ! -f $TMPDIR/module.prop ] && abort "! Unable to extract zip file!" +$BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules +MODULEROOT=$NVBASE/$MODDIRNAME MODID=`grep_prop id $TMPDIR/module.prop` MODPATH=$MODULEROOT/$MODID - -print_modname - -ui_print "******************************" -ui_print "Powered by Magisk (@topjohnwu)" -ui_print "******************************" - -########################################################################################## -# Install -########################################################################################## +MODNAME=`grep_prop name $TMPDIR/module.prop` # Create mod paths rm -rf $MODPATH 2>/dev/null mkdir -p $MODPATH -on_install +########## +# Install +########## + +if is_legacy_script; then + unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2 + + # Load install script + . $TMPDIR/install.sh -# Remove placeholder -rm -f $MODPATH/system/placeholder 2>/dev/null + # Callbacks + print_modname + on_install -# Custom uninstaller -[ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh + # Custom uninstaller + [ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh -# Auto Mount -if imageless_magisk; then + # Skip mount $SKIPMOUNT && touch $MODPATH/skip_mount + + # prop file + $PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop + + # Module info + cp -af $TMPDIR/module.prop $MODPATH/module.prop + + # post-fs-data scripts + $POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh + + # service scripts + $LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh + + ui_print "- Setting permissions" + set_permissions else - $SKIPMOUNT || touch $MODPATH/auto_mount -fi + print_modname -# prop files -$PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop + unzip -o "$ZIPFILE" customize.sh -d $MODPATH >&2 -# Module info -cp -af $TMPDIR/module.prop $MODPATH/module.prop -if $BOOTMODE; then - # Update info for Magisk Manager - if imageless_magisk; then - mktouch $NVBASE/modules/$MODID/update - cp -af $TMPDIR/module.prop $NVBASE/modules/$MODID/module.prop - else - mktouch /sbin/.magisk/img/$MODID/update - cp -af $TMPDIR/module.prop /sbin/.magisk/img/$MODID/module.prop - fi -fi + if ! grep -q '^SKIPUNZIP=1$' $MODPATH/customize.sh 2>/dev/null; then + ui_print "- Extracting module files" + unzip -o "$ZIPFILE" -x 'META-INF/*' -d $MODPATH >&2 -# post-fs-data mode scripts -$POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh + # Default permissions + set_perm_recursive $MODPATH 0 0 0755 0644 + fi -# service mode scripts -$LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh + # Load customization script + [ -f $MODPATH/customize.sh ] && . $MODPATH/customize.sh +fi # Handle replace folders for TARGET in $REPLACE; do + ui_print "- Replace target: $TARGET" mktouch $MODPATH$TARGET/.replace done -ui_print "- Setting permissions" -set_permissions +if $BOOTMODE; then + # Update info for Magisk Manager + mktouch $NVBASE/modules/$MODID/update + cp -af $MODPATH/module.prop $NVBASE/modules/$MODID/module.prop +fi + +# Copy over custom sepolicy rules +if [ -f $MODPATH/sepolicy.rule -a -e $PERSISTDIR ]; then + ui_print "- Installing custom sepolicy patch" + PERSISTMOD=$PERSISTDIR/magisk/$MODID + mkdir -p $PERSISTMOD + cp -af $MODPATH/sepolicy.rule $PERSISTMOD/sepolicy.rule +fi + +# Remove stuffs that don't belong to modules +rm -rf \ +$MODPATH/system/placeholder $MODPATH/customize.sh \ +$MODPATH/README.md $MODPATH/.git* 2>/dev/null -########################################################################################## +############## # Finalizing -########################################################################################## +############## cd / -imageless_magisk || unmount_magisk_img $BOOTMODE || recovery_cleanup -rm -rf $TMPDIR $MOUNTPATH +rm -rf $TMPDIR ui_print "- Done" -exit 0 \ No newline at end of file +exit 0 From 3f34f82a024cbf6fe8ec37c4817f9a5661a46a54 Mon Sep 17 00:00:00 2001 From: m0viefreak Date: Sat, 4 Jan 2020 00:53:58 +0100 Subject: [PATCH 2/3] Use new Magisk installer method - Convert install.sh to new customize.sh - Set SKIPUNZIP=1 and handle the extraction ourselves --- edxp-core/build.gradle | 4 +- edxp-core/template_override/common/service.sh | 7 - edxp-core/template_override/customize.sh | 50 +++++ edxp-core/template_override/install.sh | 186 ------------------ .../{common => }/post-fs-data.sh | 0 .../{common => }/system.prop | 0 .../{common => }/util_functions.sh | 0 7 files changed, 52 insertions(+), 195 deletions(-) delete mode 100644 edxp-core/template_override/common/service.sh create mode 100644 edxp-core/template_override/customize.sh delete mode 100644 edxp-core/template_override/install.sh rename edxp-core/template_override/{common => }/post-fs-data.sh (100%) rename edxp-core/template_override/{common => }/system.prop (100%) rename edxp-core/template_override/{common => }/util_functions.sh (100%) diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index e8bd8295c..9ed5e112d 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -161,8 +161,8 @@ afterEvaluate { into zipPathMagiskRelease } copy { - from "${projectDir}/template_override/common/util_functions.sh" - into "${zipPathMagiskRelease}/common" + from "${projectDir}/template_override/util_functions.sh" + into "${zipPathMagiskRelease}/" filter { line -> line .replaceAll('%VERSION%', "$version") .replaceAll('%VERSION_CODE%', "$versionCode") diff --git a/edxp-core/template_override/common/service.sh b/edxp-core/template_override/common/service.sh deleted file mode 100644 index 451241712..000000000 --- a/edxp-core/template_override/common/service.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/system/bin/sh -# Please don't hardcode /magisk/modname/... ; instead, please use $MODDIR/... -# This will make your scripts compatible even if Magisk change its mount point in the future -MODDIR=${0%/*} - -# This script will be executed in late_start service mode -# More info in the main Magisk thread diff --git a/edxp-core/template_override/customize.sh b/edxp-core/template_override/customize.sh new file mode 100644 index 000000000..e8b696616 --- /dev/null +++ b/edxp-core/template_override/customize.sh @@ -0,0 +1,50 @@ +SKIPUNZIP=1 + +RIRU_PATH="/data/misc/riru" + +check_riru_version() { + [[ ! -f "$RIRU_PATH/api_version" ]] && abort "! Please Install Riru - Core v19 or above" + VERSION=$(cat "$RIRU_PATH/api_version") + ui_print "- Riru API version is $VERSION" + [[ "$VERSION" -ge 4 ]] || abort "! Please Install Riru - Core v19 or above" +} + +check_architecture() { + if [[ "$ARCH" != "arm" && "$ARCH" != "arm64" && "$ARCH" != "x86" && "$ARCH" != "x64" ]]; then + abort "! Unsupported platform: $ARCH" + else + ui_print "- Device platform: $ARCH" + fi +} + +check_architecture +check_riru_version + +unzip -o "$ZIPFILE" module.prop post-fs-data.sh sepolicy.rule system.prop util_functions.sh -d "$MODPATH" >&2 + +if [[ "$ARCH" == "x86" || "$ARCH" == "x64" ]]; then + ui_print "- Extracting x86/64 libraries" + unzip -o "$ZIPFILE" 'system_x86/*' -d "$MODPATH" >&2 + mv "$MODPATH/system_x86/lib" "$MODPATH/system/lib" + mv "$MODPATH/system_x86/lib64" "$MODPATH/system/lib64" +else + ui_print "- Extracting arm/arm64 libraries" + unzip -o "$ZIPFILE" 'system/*' -d "$MODPATH" >&2 +fi + +if [[ "$IS64BIT" = false ]]; then + ui_print "- Removing 64-bit libraries" + rm -rf "$MODPATH/system/lib64" +fi + +TARGET="$RIRU_PATH/modules" + +ui_print "- Extracting extra files" +unzip -o "$ZIPFILE" 'data/*' -d "$TMPDIR" >&2 + +[[ -d "$TARGET" ]] || mkdir -p "$TARGET" || abort "! Can't mkdir -p $TARGET" +cp -af "$TMPDIR$TARGET/." "$TARGET" || abort "! Can't cp -af $TMPDIR$TARGET/. $TARGET" + +ui_print "- Files copied" + +set_perm_recursive "$MODPATH" 0 0 0755 0644 diff --git a/edxp-core/template_override/install.sh b/edxp-core/template_override/install.sh deleted file mode 100644 index 80e553193..000000000 --- a/edxp-core/template_override/install.sh +++ /dev/null @@ -1,186 +0,0 @@ -########################################################################################## -# -# Magisk Module Installer Script -# -########################################################################################## -########################################################################################## -# -# Instructions: -# -# 1. Place your files into system folder (delete the placeholder file) -# 2. Fill in your module's info into module.prop -# 3. Configure and implement callbacks in this file -# 4. If you need boot scripts, add them into common/post-fs-data.sh or common/service.sh -# 5. Add your additional or modified system properties into common/system.prop -# -########################################################################################## - - ########################################################################################## -# Config Flags -########################################################################################## - - # Set to true if you do *NOT* want Magisk to mount -# any files for you. Most modules would NOT want -# to set this flag to true -SKIPMOUNT=false - - # Set to true if you need to load system.prop -PROPFILE=true - - # Set to true if you need post-fs-data script -POSTFSDATA=true - - # Set to true if you need late_start service script -LATESTARTSERVICE=false - - ########################################################################################## -# Replace list -########################################################################################## - - # List all directories you want to directly replace in the system -# Check the documentations for more info why you would need this - - # Construct your list in the following format -# This is an example -REPLACE_EXAMPLE=" -/system/app/Youtube -/system/priv-app/SystemUI -/system/priv-app/Settings -/system/framework -" - - # Construct your own list here -REPLACE=" -" - - ########################################################################################## -# -# Function Callbacks -# -# The following functions will be called by the installation framework. -# You do not have the ability to modify update-binary, the only way you can customize -# installation is through implementing these functions. -# -# When running your callbacks, the installation framework will make sure the Magisk -# internal busybox path is *PREPENDED* to PATH, so all common commands shall exist. -# Also, it will make sure /data, /system, and /vendor is properly mounted. -# -########################################################################################## -########################################################################################## -# -# The installation framework will export some variables and functions. -# You should use these variables and functions for installation. -# -# ! DO NOT use any Magisk internal paths as those are NOT public API. -# ! DO NOT use other functions in util_functions.sh as they are NOT public API. -# ! Non public APIs are not guranteed to maintain compatibility between releases. -# -# Available variables: -# -# MAGISK_VER (string): the version string of current installed Magisk -# MAGISK_VER_CODE (int): the version code of current installed Magisk -# BOOTMODE (bool): true if the module is currently installing in Magisk Manager -# MODPATH (path): the path where your module files should be installed -# TMPDIR (path): a place where you can temporarily store files -# ZIPFILE (path): your module's installation zip -# ARCH (string): the architecture of the device. Value is either arm, arm64, x86, or x64 -# IS64BIT (bool): true if $ARCH is either arm64 or x64 -# API (int): the API level (Android version) of the device -# -# Availible functions: -# -# ui_print -# print to console -# Avoid using 'echo' as it will not display in custom recovery's console -# -# abort -# print error message to console and terminate installation -# Avoid using 'exit' as it will skip the termination cleanup steps -# -# set_perm [context] -# if [context] is empty, it will default to "u:object_r:system_file:s0" -# this function is a shorthand for the following commands -# chown owner.group target -# chmod permission target -# chcon context target -# -# set_perm_recursive [context] -# if [context] is empty, it will default to "u:object_r:system_file:s0" -# for all files in , it will call: -# set_perm file owner group filepermission context -# for all directories in (including itself), it will call: -# set_perm dir owner group dirpermission context -# -########################################################################################## -########################################################################################## -# If you need boot scripts, DO NOT use general boot scripts (post-fs-data.d/service.d) -# ONLY use module scripts as it respects the module status (remove/disable) and is -# guaranteed to maintain the same behavior in future Magisk releases. -# Enable boot scripts by setting the flags in the config section above. -########################################################################################## - - RIRU_PATH="/data/misc/riru" - - print_modname() { - ui_print "*******************************" - ui_print "* Riru - EdXposed *" - ui_print "*******************************" -} - - check_riru_version() { - [[ ! -f "$RIRU_PATH/api_version" ]] && abort "! Please Install Riru - Core v19 or above" - VERSION=$(cat "$RIRU_PATH/api_version") - ui_print "- Riru API version is $VERSION" - [[ "$VERSION" -ge 4 ]] || abort "! Please Install Riru - Core v19 or above" -} - - check_architecture() { - if [[ "$ARCH" != "arm" && "$ARCH" != "arm64" && "$ARCH" != "x86" && "$ARCH" != "x64" ]]; then - abort "! Unsupported platform: $ARCH" - else - ui_print "- Device platform: $ARCH" - fi -} - - on_install() { - check_architecture - check_riru_version - - if [[ "$ARCH" == "x86" || "$ARCH" == "x64" ]]; then - ui_print "- Extracting x86/64 libraries" - unzip -o "$ZIPFILE" 'system_x86/*' -d $MODPATH >&2 - mv "$MODPATH/system_x86/lib" "$MODPATH/system/lib" - mv "$MODPATH/system_x86/lib64" "$MODPATH/system/lib64" - else - ui_print "- Extracting arm/arm64 libraries" - unzip -o "$ZIPFILE" 'system/*' -d $MODPATH >&2 - fi - - if [[ "$IS64BIT" = false ]]; then - ui_print "- Removing 64-bit libraries" - rm -rf "$MODPATH/system/lib64" - fi - - TARGET="$RIRU_PATH/modules" - - ui_print "- Extracting extra files" - unzip -o "$ZIPFILE" 'data/*' -d "$TMPDIR" >&2 - - [[ -d "$TARGET" ]] || mkdir -p "$TARGET" || abort "! Can't mkdir -p $TARGET" - cp -af "$TMPDIR$TARGET/." "$TARGET" || abort "! Can't cp -af $TMPDIR$TARGET/. $TARGET" - - cp -af "$TMPDIR/util_functions.sh" "$MODPATH/util_functions.sh" || abort "! Can't cp -af $TMPDIR/util_functions.sh $MODPATH/util_functions.sh" - - ui_print "- Files copied" -} - - set_permissions() { - # The following is the default rule, DO NOT remove - set_perm_recursive $MODPATH 0 0 0755 0644 - - # Here are some examples: - # set_perm_recursive $MODPATH/system/lib 0 0 0755 0644 - # set_perm $MODPATH/system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0 - # set_perm $MODPATH/system/bin/dex2oat 0 2000 0755 u:object_r:dex2oat_exec:s0 - # set_perm $MODPATH/system/lib/libart.so 0 0 0644 -} diff --git a/edxp-core/template_override/common/post-fs-data.sh b/edxp-core/template_override/post-fs-data.sh similarity index 100% rename from edxp-core/template_override/common/post-fs-data.sh rename to edxp-core/template_override/post-fs-data.sh diff --git a/edxp-core/template_override/common/system.prop b/edxp-core/template_override/system.prop similarity index 100% rename from edxp-core/template_override/common/system.prop rename to edxp-core/template_override/system.prop diff --git a/edxp-core/template_override/common/util_functions.sh b/edxp-core/template_override/util_functions.sh similarity index 100% rename from edxp-core/template_override/common/util_functions.sh rename to edxp-core/template_override/util_functions.sh From 83cfc3efb5d995d01c135ada5e335a54aa013566 Mon Sep 17 00:00:00 2001 From: m0viefreak Date: Sat, 4 Jan 2020 01:00:46 +0100 Subject: [PATCH 3/3] Support Magisk 20.2 custom sepolicy.rule No need for custom Magisk builds anymore. --- README.md | 2 +- edxp-core/template_override/post-fs-data.sh | 14 -------------- edxp-core/template_override/sepolicy.rule | 12 ++++++++++++ 3 files changed, 13 insertions(+), 15 deletions(-) create mode 100644 edxp-core/template_override/sepolicy.rule diff --git a/README.md b/README.md index 4b0a9305e..d33be7b98 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ and zip binaries can be downloaded from [here](http://gnuwin32.sourceforge.net/p ## Install -1. Install Magisk v19.0+ (for latest EdXposed or Huawei devices, use our custom Magisk: Change Magisk update channel to [this](http://edxp.meowcat.org/repo/version.json)). +1. Install Magisk v19.0+ (for latest EdXposed or Huawei devices, use at least official Magisk v20.2+ or use our custom Magisk: Change Magisk update channel to [this](http://edxp.meowcat.org/repo/version.json)). 2. Install [Riru-Core](https://github.com/RikkaApps/Riru/releases) v19+ from Magisk repo. 3. [Download](#download) and install EdXposed in Magisk Manager or recovery mode. 4. Install [companion application](#companion-applications). diff --git a/edxp-core/template_override/post-fs-data.sh b/edxp-core/template_override/post-fs-data.sh index ba9a00202..66c2bd1c9 100644 --- a/edxp-core/template_override/post-fs-data.sh +++ b/edxp-core/template_override/post-fs-data.sh @@ -6,20 +6,6 @@ MODDIR=${0%/*} # This script will be executed in post-fs-data mode # More info in the main Magisk thread -# necessary for using mmap in system_server process -#supolicy --live "allow system_server system_server process {execmem}" -# supolicy --live "allow system_server system_server memprotect {mmap_zero}" - -# for built-in apps // TODO maybe narrow down the target classes -#supolicy --live "allow coredomain coredomain process {execmem}" - -# read configs set in our app -#supolicy --live "allow coredomain app_data_file * *" -#supolicy --live "attradd {system_app platform_app} mlstrustedsubject" - -# read module apk file in zygote -#supolicy --live "allow zygote apk_data_file * *" - . ${MODDIR}/util_functions.sh start_log_catchers diff --git a/edxp-core/template_override/sepolicy.rule b/edxp-core/template_override/sepolicy.rule new file mode 100644 index 000000000..6a14063f1 --- /dev/null +++ b/edxp-core/template_override/sepolicy.rule @@ -0,0 +1,12 @@ +# necessary for using mmap in system_server process +allow system_server system_server process {execmem} + +# for built-in apps // TODO maybe narrow down the target classes +allow coredomain coredomain process {execmem} + +# read configs set in our app +allow coredomain app_data_file * * +attradd {system_app platform_app} mlstrustedsubject + +# read module apk file in zygote +allow zygote apk_data_file * *