diff --git a/META-INF/com/google/android/update-binary b/META-INF/com/google/android/update-binary index 614871c..0ec26ba 100644 --- a/META-INF/com/google/android/update-binary +++ b/META-INF/com/google/android/update-binary @@ -1,47 +1,77 @@ #!/sbin/sh -TMPDIR=/dev/tmp -MOUNTPATH=/dev/magisk_img +################# +# Initialization +################# -# Default permissions umask 022 -# Initial cleanup -rm -rf $TMPDIR 2>/dev/null -mkdir -p $TMPDIR - # echo before loading util_functions 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 ] - return $? -} - -########################################################################################## -# Environment -########################################################################################## +######################### +# Load util_functions.sh +######################### OUTFD=$2 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 +[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk +. /data/adb/magisk/util_functions.sh +[ $MAGISK_VER_CODE -lt 19000 ] && require_new_magisk + +if [ $MAGISK_VER_CODE -ge 20400 ]; then + # New Magisk have complete installation logic within util_functions.sh + install_module + exit 0 fi +################# +# Legacy Support +################# + +TMPDIR=/dev/tmp +PERSISTDIR=/sbin/.magisk/mirror/persist + +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 "*******************" +} + +# Override abort as old scripts have some issues +abort() { + ui_print "$1" + $BOOTMODE || recovery_cleanup + [ -n $MODPATH ] && rm -rf $MODPATH + rm -rf $TMPDIR + exit 1 +} + +rm -rf $TMPDIR 2>/dev/null +mkdir -p $TMPDIR + # Preperation for flashable zips setup_flashable @@ -54,98 +84,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 -# Remove placeholder -rm -f $MODPATH/system/placeholder 2>/dev/null +########## +# Install +########## -# Custom uninstaller -[ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh +if is_legacy_script; then + unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2 -# Auto Mount -if imageless_magisk; then + # Load install script + . $TMPDIR/install.sh + + # Callbacks + print_modname + on_install + + # Custom uninstaller + [ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh + + # 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 + 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 + + # Default permissions + set_perm_recursive $MODPATH 0 0 0755 0644 fi + + # Load customization script + [ -f $MODPATH/customize.sh ] && . $MODPATH/customize.sh fi -# post-fs-data mode scripts -$POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh - -# service mode scripts -$LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh - -on_install - # 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 diff --git a/common/post-fs-data.sh b/common/post-fs-data.sh deleted file mode 100644 index a347e4c..0000000 --- a/common/post-fs-data.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/system/bin/sh -# Do NOT assume where your module will be located. -# ALWAYS use $MODDIR if you need to know where this script -# and module is placed. -# This will make sure your module will still work -# if Magisk change its mount point in the future -MODDIR=${0%/*} - -# This script will be executed in post-fs-data mode diff --git a/common/service.sh b/common/service.sh deleted file mode 100644 index 8526f5c..0000000 --- a/common/service.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/system/bin/sh -# Do NOT assume where your module will be located. -# ALWAYS use $MODDIR if you need to know where this script -# and module is placed. -# This will make sure your module will still work -# if Magisk change its mount point in the future -MODDIR=${0%/*} - -# This script will be executed in late_start service mode - -if [ ! -f /data/v2ray/manual ] ; then - $MODDIR/scripts/v2ray.service start &> /data/v2ray/run/service.log && \ - if [ -f /data/v2ray/appid.list ] || [ -f /data/v2ray/softap.list ] ; then - $MODDIR/scripts/v2ray.tproxy enable &>> /data/v2ray/run/service.log - [ -f "$MODDIR/scripts/v2ray-dns.keeper" ] && $MODDIR/scripts/v2ray-dns.service start &>> /data/v2ray/run/service.log & - fi -fi - -inotifyd $MODDIR/scripts/v2ray.inotify $MODDIR &>> /data/v2ray/run/service.log & diff --git a/common/system.prop b/common/system.prop deleted file mode 100644 index 3d42789..0000000 --- a/common/system.prop +++ /dev/null @@ -1,3 +0,0 @@ -# This file will be read by resetprop -# Example: Change dpi -# ro.sf.lcd_density=320 diff --git a/customize.sh b/customize.sh new file mode 100644 index 0000000..8e7bf77 --- /dev/null +++ b/customize.sh @@ -0,0 +1,89 @@ +#!/sbin/sh +##################### +# V2ray Customization +##################### +SKIPUNZIP=1 + +# prepare v2ray execute environment +ui_print "- Prepare V2Ray execute environment." +mkdir -p /data/v2ray +mkdir -p /data/v2ray/run +mkdir -p $MODPATH/scripts +mkdir -p $MODPATH/system/bin +mkdir -p $MODPATH/system/etc +# download latest v2ray core from official link +ui_print "- Connect official V2Ray download link." +official_v2ray_link="https://github.com/v2ray/v2ray-core/releases" +latest_v2ray_version=`curl -k -s -I "${official_v2ray_link}/latest" | grep -i location | grep -o "tag.*" | grep -o "v[0-9.]*"` +if [ "${latest_v2ray_version}" = "" ] ; then + ui_print "Error: Connect official V2Ray download link failed." + exit 1 +fi +ui_print "- Download latest V2Ray core ${latest_v2ray_version}-${ARCH}" +case "${ARCH}" in + arm) + download_v2ray_link="${official_v2ray_link}/download/${latest_v2ray_version}/v2ray-linux-arm.zip" + ;; + arm64) + download_v2ray_link="${official_v2ray_link}/download/${latest_v2ray_version}/v2ray-linux-arm64.zip" + ;; + x86) + download_v2ray_link="${official_v2ray_link}/download/${latest_v2ray_version}/v2ray-linux-32.zip" + ;; + x64) + download_v2ray_link="${official_v2ray_link}/download/${latest_v2ray_version}/v2ray-linux-64.zip" + ;; +esac +download_v2ray_zip="/data/v2ray/run/v2ray-core.zip" +curl "${download_v2ray_link}" -k -L -o "${download_v2ray_zip}" >&2 +if [ "$?" != "0" ] ; then + ui_print "Error: Download V2Ray core failed." + exit 1 +fi +# install v2ray execute file +ui_print "- Install V2Ray core $ARCH execute files" +unzip -j -o "${download_v2ray_zip}" "geoip.dat" -d /data/v2ray >&2 +unzip -j -o "${download_v2ray_zip}" "geosite.dat" -d /data/v2ray >&2 +unzip -j -o "${download_v2ray_zip}" "v2ray" -d $MODPATH/system/bin >&2 +unzip -j -o "${download_v2ray_zip}" "v2ctl" -d $MODPATH/system/bin >&2 +unzip -j -o "${ZIPFILE}" 'v2ray/scripts/*' -d $MODPATH/scripts >&2 +unzip -j -o "${ZIPFILE}" "v2ray/bin/$ARCH/v2ray-dns.keeper" -d $MODPATH/scripts >&2 +unzip -j -o "${ZIPFILE}" 'service.sh' -d $MODPATH >&2 +unzip -j -o "${ZIPFILE}" 'uninstall.sh' -d $MODPATH >&2 +rm "${download_v2ray_zip}" +# copy v2ray data and config +ui_print "- Copy V2Ray config and data files" +[ -f /data/v2ray/softap.list ] || \ +echo "softap0" > /data/v2ray/softap.list +[ -f /data/v2ray/resolv.conf ] || \ +unzip -j -o "${ZIPFILE}" "v2ray/etc/resolv.conf" -d /data/v2ray >&2 +unzip -j -o "${ZIPFILE}" "v2ray/etc/config.json.template" -d /data/v2ray >&2 +[ -f /data/v2ray/config.json ] || \ +cp /data/v2ray/config.json.template /data/v2ray/config.json +ln -s /data/v2ray/resolv.conf $MODPATH/system/etc/resolv.conf +# generate module.prop +ui_print "- Generate module.prop" +rm -rf $MODPATH/module.prop +touch $MODPATH/module.prop +echo "id=v2ray" > $MODPATH/module.prop +echo "name=V2ray for Android" >> $MODPATH/module.prop +echo -n "version=" >> $MODPATH/module.prop +echo ${latest_v2ray_version} >> $MODPATH/module.prop +echo "versionCode=20200326" >> $MODPATH/module.prop +echo "author=chendefine" >> $MODPATH/module.prop +echo "description=V2ray core with service scripts for Android" >> $MODPATH/module.prop + +inet_uid="3003" +set_perm_recursive $MODPATH 0 0 0755 0644 +set_perm $MODPATH/service.sh 0 0 0755 +set_perm $MODPATH/uninstall.sh 0 0 0755 +set_perm $MODPATH/scripts/start.sh 0 0 0755 +set_perm $MODPATH/scripts/v2ray.inotify 0 0 0755 +set_perm $MODPATH/scripts/v2ray.service 0 0 0755 +set_perm $MODPATH/scripts/v2ray.tproxy 0 0 0755 +set_perm $MODPATH/scripts/v2ray-dns.handle 0 0 0755 +set_perm $MODPATH/scripts/v2ray-dns.keeper 0 0 0755 +set_perm $MODPATH/scripts/v2ray-dns.service 0 0 0755 +set_perm $MODPATH/system/bin/v2ray ${inet_uid} ${inet_uid} 0755 +set_perm $MODPATH/system/bin/v2ctl ${inet_uid} ${inet_uid} 0755 +set_perm /data/v2ray ${inet_uid} ${inet_uid} 0755 diff --git a/install.sh b/install.sh deleted file mode 100644 index edb1bbb..0000000 --- a/install.sh +++ /dev/null @@ -1,222 +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=false - -# Set to true if you need post-fs-data script -POSTFSDATA=false - -# Set to true if you need late_start service script -LATESTARTSERVICE=true - -########################################################################################## -# 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. -########################################################################################## - -# Set what you want to display when installing your module - -print_modname() { - ui_print "*******************************" - ui_print " V2Ray for Android " - ui_print "*******************************" -} - -# Copy/extract your module files into $MODPATH in on_install. - -on_install() { - # The following is the default implementation: extract $ZIPFILE/system to $MODPATH - # Extend/change the logic to whatever you want - ## ui_print "- Extracting module files" - ## unzip -o "$ZIPFILE" 'system/*' -d $MODPATH >&2 - # prepare v2ray execute environment - ui_print "- Prepare V2Ray execute environment." - mkdir -p /data/v2ray - mkdir -p /data/v2ray/run - mkdir -p $MODPATH/scripts - mkdir -p $MODPATH/system/bin - mkdir -p $MODPATH/system/etc - - # download latest v2ray core from official link - ui_print "- Connect official V2Ray download link." - official_v2ray_link="https://github.com/v2ray/v2ray-core/releases" - latest_v2ray_version=`curl -s -I "${official_v2ray_link}/latest" | grep -i location | grep -o "tag.*" | grep -o "v[0-9.]*"` - if [ "${latest_v2ray_version}" = "" ] ; then - ui_print "Error: Connect official V2Ray download link failed." - exit 1 - fi - ui_print "- Download latest V2Ray core ${latest_v2ray_version}-${ARCH}" - case "${ARCH}" in - arm) - download_v2ray_link="${official_v2ray_link}/download/${latest_v2ray_version}/v2ray-linux-arm.zip" - ;; - arm64) - download_v2ray_link="${official_v2ray_link}/download/${latest_v2ray_version}/v2ray-linux-arm64.zip" - ;; - x86) - download_v2ray_link="${official_v2ray_link}/download/${latest_v2ray_version}/v2ray-linux-32.zip" - ;; - x64) - download_v2ray_link="${official_v2ray_link}/download/${latest_v2ray_version}/v2ray-linux-64.zip" - ;; - esac - download_v2ray_zip="/data/v2ray/run/v2ray-core.zip" - curl "${download_v2ray_link}" -L -o "${download_v2ray_zip}" >&2 - if [ "$?" != "0" ] ; then - ui_print "Error: Download V2Ray core failed." - exit 1 - fi - - # install v2ray execute file - ui_print "- Install V2Ray core $ARCH execute files" - unzip -j -o "${download_v2ray_zip}" "geoip.dat" -d /data/v2ray >&2 - unzip -j -o "${download_v2ray_zip}" "geosite.dat" -d /data/v2ray >&2 - unzip -j -o "${download_v2ray_zip}" "v2ray" -d $MODPATH/system/bin >&2 - unzip -j -o "${download_v2ray_zip}" "v2ctl" -d $MODPATH/system/bin >&2 - unzip -j -o "${ZIPFILE}" 'v2ray/scripts/*' -d $MODPATH/scripts >&2 - unzip -j -o "${ZIPFILE}" "v2ray/bin/$ARCH/v2ray-dns.keeper" -d $MODPATH/scripts >&2 - rm "${download_v2ray_zip}" - - # copy v2ray data and config - ui_print "- Copy V2Ray config and data files" - [ -f /data/v2ray/softap.list ] || \ - echo "softap0" > /data/v2ray/softap.list - [ -f /data/v2ray/resolv.conf ] || \ - unzip -j -o "${ZIPFILE}" "v2ray/etc/resolv.conf" -d /data/v2ray >&2 - unzip -j -o "${ZIPFILE}" "v2ray/etc/config.json.template" -d /data/v2ray >&2 - [ -f /data/v2ray/config.json ] || \ - cp /data/v2ray/config.json.template /data/v2ray/config.json - ln -s /data/v2ray/resolv.conf $MODPATH/system/etc/resolv.conf -} - -# Only some special files require specific permissions -# This function will be called after on_install is done -# The default permissions should be good enough for most cases - -set_permissions() { - inet_uid="3003" - # The following is the default rule, DO NOT remove - set_perm_recursive $MODPATH 0 0 0755 0644 - set_perm $MODPATH/scripts/v2ray.inotify 0 0 0755 - set_perm $MODPATH/scripts/v2ray.service 0 0 0755 - set_perm $MODPATH/scripts/v2ray.tproxy 0 0 0755 - set_perm $MODPATH/scripts/v2ray-dns.handle 0 0 0755 - set_perm $MODPATH/scripts/v2ray-dns.keeper 0 0 0755 - set_perm $MODPATH/scripts/v2ray-dns.service 0 0 0755 - set_perm $MODPATH/system/bin/v2ray ${inet_uid} ${inet_uid} 0755 - set_perm $MODPATH/system/bin/v2ctl ${inet_uid} ${inet_uid} 0755 - set_perm /data/v2ray ${inet_uid} ${inet_uid} 0755 - - # 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 -} - -# You can add more functions to assist your custom script code diff --git a/module.prop b/module.prop index cba5a1c..e209b10 100644 --- a/module.prop +++ b/module.prop @@ -1,6 +1,6 @@ id=v2ray name=V2ray for Android -version=v4.20.0 -versionCode=20190713 +version=latest_version +versionCode=20200326 author=chendefine description=V2ray core with service scripts for Android diff --git a/module_installer.sh b/module_installer.sh new file mode 100644 index 0000000..f046d33 --- /dev/null +++ b/module_installer.sh @@ -0,0 +1,183 @@ +#!/sbin/sh + +################# +# Initialization +################# + +umask 022 + +# echo before loading util_functions +ui_print() { echo "$1"; } + +require_new_magisk() { + ui_print "*******************************" + ui_print " Please install Magisk v19.0+! " + ui_print "*******************************" + exit 1 +} + +######################### +# Load util_functions.sh +######################### + +OUTFD=$2 +ZIPFILE=$3 + +mount /data 2>/dev/null + +[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk +. /data/adb/magisk/util_functions.sh +[ $MAGISK_VER_CODE -lt 19000 ] && require_new_magisk + +if [ $MAGISK_VER_CODE -ge 20400 ]; then + # New Magisk have complete installation logic within util_functions.sh + install_module + exit 0 +fi + +################# +# Legacy Support +################# + +TMPDIR=/dev/tmp +PERSISTDIR=/sbin/.magisk/mirror/persist + +is_legacy_script() { + unzip -l "$ZIPFILE" install.sh | grep -q install.sh + return $? +} + +print_modname() { + ui_print "*******************************" + ui_print " V2Ray for Android " + ui_print "*******************************" +} + +# Override abort as old scripts have some issues +abort() { + ui_print "$1" + $BOOTMODE || recovery_cleanup + [ -n $MODPATH ] && rm -rf $MODPATH + rm -rf $TMPDIR + exit 1 +} + +rm -rf $TMPDIR 2>/dev/null +mkdir -p $TMPDIR + +# Preperation for flashable zips +setup_flashable + +# Mount partitions +mount_partitions + +# Detect version and architecture +api_level_arch_detect + +# Setup busybox and binaries +$BOOTMODE && boot_actions || recovery_actions + +############## +# Preparation +############## + +# 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 +MODNAME=`grep_prop name $TMPDIR/module.prop` + +# Create mod paths +rm -rf $MODPATH 2>/dev/null +mkdir -p $MODPATH + +########## +# 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 + + # Callbacks + print_modname + on_install + + # Custom uninstaller + [ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh + + # 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 + print_modname + + unzip -o "$ZIPFILE" customize.sh -d $MODPATH >&2 + + 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 + + # Default permissions + set_perm_recursive $MODPATH 0 0 0755 0644 + fi + + # 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 + +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 / +$BOOTMODE || recovery_cleanup +rm -rf $TMPDIR + +ui_print "- Done" +exit 0 diff --git a/service.sh b/service.sh new file mode 100644 index 0000000..9165a5f --- /dev/null +++ b/service.sh @@ -0,0 +1,10 @@ +#!/system/bin/sh + +MODDIR=${0%/*} + +( +until [ $(getprop sys.boot_completed) -eq 1 ] ; do + sleep 5 +done +${MODDIR}/scripts/start.sh +)& diff --git a/v2ray/etc/config.json b/v2ray/etc/config.json index 0bf8721..fc0085e 100644 --- a/v2ray/etc/config.json +++ b/v2ray/etc/config.json @@ -121,6 +121,12 @@ "domain": ["geosite:cn"], "outboundTag": "direct" }, + { + // Bypass all BT steams. + "type": "field", + "protocol":["bittorrent"], + "outboundTag": "direct" + }, { // Blocks major ads. "type": "field", @@ -145,8 +151,6 @@ }, "servers": [ "1.1.1.1", - "8.8.8.8", - "9.9.9.9", { "address": "114.114.114.114", "port": 53, diff --git a/v2ray/etc/config.json.template b/v2ray/etc/config.json.template index 0bf8721..fc0085e 100644 --- a/v2ray/etc/config.json.template +++ b/v2ray/etc/config.json.template @@ -121,6 +121,12 @@ "domain": ["geosite:cn"], "outboundTag": "direct" }, + { + // Bypass all BT steams. + "type": "field", + "protocol":["bittorrent"], + "outboundTag": "direct" + }, { // Blocks major ads. "type": "field", @@ -145,8 +151,6 @@ }, "servers": [ "1.1.1.1", - "8.8.8.8", - "9.9.9.9", { "address": "114.114.114.114", "port": 53, diff --git a/v2ray/etc/resolv.conf b/v2ray/etc/resolv.conf index f81b9a9..0578d18 100644 --- a/v2ray/etc/resolv.conf +++ b/v2ray/etc/resolv.conf @@ -1,4 +1,2 @@ nameserver 114.114.114.114 -nameserver 223.5.5.5 nameserver 1.1.1.1 -nameserver 9.9.9.9 diff --git a/v2ray/scripts/start.sh b/v2ray/scripts/start.sh new file mode 100644 index 0000000..9768b0b --- /dev/null +++ b/v2ray/scripts/start.sh @@ -0,0 +1,15 @@ +#!/system/bin/sh + +MODDIR=${0%/*} + +start_proxy () { + ${MODDIR}/v2ray.service start &> /data/v2ray/run/service.log && \ + if [ -f /data/v2ray/appid.list ] || [ -f /data/v2ray/softap.list ] ; then + ${MODDIR}/v2ray.tproxy enable &>> /data/v2ray/run/service.log && \ + ${MODDIR}/v2ray-dns.service start &>> /data/v2ray/run/service.log & + fi +} +if [ ! -f /data/v2ray/manual ] ; then + start_proxy +fi +inotifyd ${MODDIR}/v2ray.inotify ${MODDIR}/.. &>> /data/v2ray/run/service.log &