Brand new module installer script
The new module installer script completely changes the way how module installer zips are structured. More info will come later in docs. The new installer script also supports installing sepolicy.rule to persist partitions in order to make the module work on the next boot.
This commit is contained in:
parent
3beffd84d6
commit
b336655a79
@ -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
|
||||
|
||||
@ -20,9 +23,27 @@ require_new_magisk() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
##########################################################################################
|
||||
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
|
||||
@ -30,13 +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
|
||||
[ $MAGISK_VER_CODE -gt 18100 ] || require_new_magisk
|
||||
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
|
||||
@ -50,80 +67,104 @@ 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
|
||||
# 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
|
||||
##########
|
||||
|
||||
# Remove placeholder
|
||||
rm -f $MODPATH/system/placeholder 2>/dev/null
|
||||
if is_legacy_script; then
|
||||
unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2
|
||||
|
||||
# Custom uninstaller
|
||||
[ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh
|
||||
# Load install script
|
||||
. $TMPDIR/install.sh
|
||||
|
||||
# Auto Mount
|
||||
$SKIPMOUNT && touch $MODPATH/skip_mount
|
||||
# Callbacks
|
||||
print_modname
|
||||
on_install
|
||||
|
||||
# prop files
|
||||
$PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop
|
||||
# Custom uninstaller
|
||||
[ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh
|
||||
|
||||
# Module info
|
||||
cp -af $TMPDIR/module.prop $MODPATH/module.prop
|
||||
if $BOOTMODE; then
|
||||
# Update info for Magisk Manager
|
||||
mktouch $NVBASE/modules/$MODID/update
|
||||
cp -af $TMPDIR/module.prop $NVBASE/modules/$MODID/module.prop
|
||||
# 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
|
||||
|
||||
ui_print "- Extracting module files"
|
||||
unzip -o "$ZIPFILE" -d $MODPATH >&2
|
||||
|
||||
# Default permissions
|
||||
set_perm_recursive $MODPATH 0 0 0755 0644
|
||||
|
||||
# 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
|
||||
|
||||
# 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/META-INF $MODPATH/README.md $MODPATH/.git* \
|
||||
2>/dev/null
|
||||
|
||||
##############
|
||||
# Finalizing
|
||||
##########################################################################################
|
||||
##############
|
||||
|
||||
cd /
|
||||
$BOOTMODE || recovery_cleanup
|
||||
rm -rf $TMPDIR $MOUNTPATH
|
||||
rm -rf $TMPDIR
|
||||
|
||||
ui_print "- Done"
|
||||
exit 0
|
||||
|
@ -5,27 +5,8 @@
|
||||
#
|
||||
#########################################
|
||||
|
||||
##########
|
||||
# Presets
|
||||
##########
|
||||
|
||||
#MAGISK_VERSION_STUB
|
||||
|
||||
# Detect whether in boot mode
|
||||
[ -z $BOOTMODE ] && BOOTMODE=false
|
||||
$BOOTMODE || ps | grep zygote | grep -qv grep && BOOTMODE=true
|
||||
$BOOTMODE || ps -A 2>/dev/null | grep zygote | grep -qv grep && BOOTMODE=true
|
||||
|
||||
# Presets
|
||||
MAGISKTMP=/sbin/.magisk
|
||||
NVBASE=/data/adb
|
||||
[ -z $TMPDIR ] && TMPDIR=/dev/tmp
|
||||
|
||||
# Bootsigner related stuff
|
||||
BOOTSIGNERCLASS=a.a
|
||||
BOOTSIGNER="/system/bin/dalvikvm -Xnodex2oat -Xnoimage-dex2oat -cp \$APK \$BOOTSIGNERCLASS"
|
||||
BOOTSIGNED=false
|
||||
|
||||
###################
|
||||
# Helper Functions
|
||||
###################
|
||||
@ -128,15 +109,15 @@ recovery_actions() {
|
||||
}
|
||||
|
||||
recovery_cleanup() {
|
||||
export PATH=$OLD_PATH
|
||||
[ -z $OLD_LD_LIB ] || export LD_LIBRARY_PATH=$OLD_LD_LIB
|
||||
[ -z $OLD_LD_PRE ] || export LD_PRELOAD=$OLD_LD_PRE
|
||||
[ -z $OLD_LD_CFG ] || export LD_CONFIG_FILE=$OLD_LD_CFG
|
||||
ui_print "- Unmounting partitions"
|
||||
umount -l /system_root 2>/dev/null
|
||||
umount -l /system 2>/dev/null
|
||||
umount -l /vendor 2>/dev/null
|
||||
umount -l /dev/random 2>/dev/null
|
||||
export PATH=$OLD_PATH
|
||||
[ -z $OLD_LD_LIB ] || export LD_LIBRARY_PATH=$OLD_LD_LIB
|
||||
[ -z $OLD_LD_PRE ] || export LD_PRELOAD=$OLD_LD_PRE
|
||||
[ -z $OLD_LD_CFG ] || export LD_CONFIG_FILE=$OLD_LD_CFG
|
||||
}
|
||||
|
||||
#######################
|
||||
@ -165,19 +146,29 @@ find_block() {
|
||||
return 1
|
||||
}
|
||||
|
||||
mount_part() {
|
||||
$BOOTMODE && return
|
||||
# mount_name <partname> <mountpoint> <flag>
|
||||
mount_name() {
|
||||
local PART=$1
|
||||
local POINT=/${PART}
|
||||
local POINT=$2
|
||||
local FLAG=$3
|
||||
[ -L $POINT ] && rm -f $POINT
|
||||
mkdir $POINT 2>/dev/null
|
||||
mkdir -p $POINT 2>/dev/null
|
||||
is_mounted $POINT && return
|
||||
ui_print "- Mounting $PART"
|
||||
mount -o ro $POINT 2>/dev/null
|
||||
ui_print "- Mounting $POINT"
|
||||
# First try mounting with fstab
|
||||
mount $FLAG $POINT 2>/dev/null
|
||||
if ! is_mounted $POINT; then
|
||||
local BLOCK=`find_block $PART$SLOT`
|
||||
mount -o ro $BLOCK $POINT
|
||||
local BLOCK=`find_block $PART`
|
||||
mount $FLAG $BLOCK $POINT
|
||||
fi
|
||||
}
|
||||
|
||||
mount_ro_ensure() {
|
||||
# We handle ro partitions only in recovery
|
||||
$BOOTMODE && return
|
||||
local PART=$1$SLOT
|
||||
local POINT=/$1
|
||||
mount_name $PART $POINT '-o ro'
|
||||
is_mounted $POINT || abort "! Cannot mount $POINT"
|
||||
}
|
||||
|
||||
@ -190,7 +181,8 @@ mount_partitions() {
|
||||
fi
|
||||
[ -z $SLOT ] || ui_print "- Current boot slot: $SLOT"
|
||||
|
||||
mount_part system
|
||||
# Mount ro partitions
|
||||
mount_ro_ensure system
|
||||
if [ -f /system/init.rc ]; then
|
||||
SYSTEM_ROOT=true
|
||||
[ -L /system_root ] && rm -f /system_root
|
||||
@ -201,8 +193,20 @@ mount_partitions() {
|
||||
grep ' / ' /proc/mounts | grep -qv 'rootfs' || grep -q ' /system_root ' /proc/mounts \
|
||||
&& SYSTEM_ROOT=true || SYSTEM_ROOT=false
|
||||
fi
|
||||
[ -L /system/vendor ] && mount_part vendor
|
||||
[ -L /system/vendor ] && mount_ro_ensure vendor
|
||||
$SYSTEM_ROOT && ui_print "- Device is system-as-root"
|
||||
|
||||
# Persist partitions for module install in recovery
|
||||
if ! $BOOTMODE && [ ! -z $PERSISTDIR ]; then
|
||||
# Try to mount persist
|
||||
PERSISTDIR=/persist
|
||||
mount_name persist /persist
|
||||
if ! is_mounted /persist; then
|
||||
# Fallback to cache
|
||||
mount_name cache /cache
|
||||
is_mounted /cache && PERSISTDIR=/cache || PERSISTDIR=
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
get_flags() {
|
||||
@ -293,8 +297,8 @@ patch_dtbo_image() {
|
||||
return 1
|
||||
}
|
||||
|
||||
# Common installation script for flash_script.sh and addon.d.sh
|
||||
patch_boot_image() {
|
||||
# Common installation script for flash_script.sh (updater-script) and addon.d.sh
|
||||
SOURCEDMODE=true
|
||||
cd $MAGISKBIN
|
||||
|
||||
@ -448,8 +452,22 @@ request_zip_size_check() {
|
||||
|
||||
boot_actions() { return; }
|
||||
|
||||
########
|
||||
# Setup
|
||||
########
|
||||
##########
|
||||
# Presets
|
||||
##########
|
||||
|
||||
# Detect whether in boot mode
|
||||
[ -z $BOOTMODE ] && ps | grep zygote | grep -qv grep && BOOTMODE=true
|
||||
[ -z $BOOTMODE ] && ps -A 2>/dev/null | grep zygote | grep -qv grep && BOOTMODE=true
|
||||
[ -z $BOOTMODE ] && BOOTMODE=false
|
||||
|
||||
MAGISKTMP=/sbin/.magisk
|
||||
NVBASE=/data/adb
|
||||
[ -z $TMPDIR ] && TMPDIR=/dev/tmp
|
||||
|
||||
# Bootsigner related stuff
|
||||
BOOTSIGNERCLASS=a.a
|
||||
BOOTSIGNER="/system/bin/dalvikvm -Xnodex2oat -Xnoimage-dex2oat -cp \$APK \$BOOTSIGNERCLASS"
|
||||
BOOTSIGNED=false
|
||||
|
||||
resolve_vars
|
||||
|
Loading…
Reference in New Issue
Block a user