|
| 1 | +#!/sbin/sh |
| 2 | + |
| 3 | +################# |
| 4 | +# Initialization |
| 5 | +################# |
| 6 | + |
| 7 | +umask 022 |
| 8 | + |
| 9 | +# echo before loading util_functions |
| 10 | +ui_print() { echo "$1"; } |
| 11 | + |
| 12 | +require_new_magisk() { |
| 13 | + ui_print "*******************************" |
| 14 | + ui_print " Please install Magisk v19.0+! " |
| 15 | + ui_print "*******************************" |
| 16 | + exit 1 |
| 17 | +} |
| 18 | + |
| 19 | +######################### |
| 20 | +# Load util_functions.sh |
| 21 | +######################### |
| 22 | + |
| 23 | +OUTFD=$2 |
| 24 | +ZIPFILE=$3 |
| 25 | + |
| 26 | +mount /data 2>/dev/null |
| 27 | + |
| 28 | +[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk |
| 29 | +. /data/adb/magisk/util_functions.sh |
| 30 | +[ $MAGISK_VER_CODE -lt 19000 ] && require_new_magisk |
| 31 | + |
| 32 | +if [ $MAGISK_VER_CODE -ge 20400 ]; then |
| 33 | + # New Magisk have complete installation logic within util_functions.sh |
| 34 | + install_module |
| 35 | + exit 0 |
| 36 | +fi |
| 37 | + |
| 38 | +################# |
| 39 | +# Legacy Support |
| 40 | +################# |
| 41 | + |
| 42 | +TMPDIR=/dev/tmp |
| 43 | +PERSISTDIR=/sbin/.magisk/mirror/persist |
| 44 | + |
| 45 | +is_legacy_script() { |
| 46 | + unzip -l "$ZIPFILE" install.sh | grep -q install.sh |
| 47 | + return $? |
| 48 | +} |
| 49 | + |
| 50 | +print_modname() { |
| 51 | + local len |
| 52 | + len=`echo -n $MODNAME | wc -c` |
| 53 | + len=$((len + 2)) |
| 54 | + local pounds=`printf "%${len}s" | tr ' ' '*'` |
| 55 | + ui_print "$pounds" |
| 56 | + ui_print " $MODNAME " |
| 57 | + ui_print "$pounds" |
| 58 | + ui_print "*******************" |
| 59 | + ui_print " Powered by Magisk " |
| 60 | + ui_print "*******************" |
| 61 | +} |
| 62 | + |
| 63 | +# Override abort as old scripts have some issues |
| 64 | +abort() { |
| 65 | + ui_print "$1" |
| 66 | + $BOOTMODE || recovery_cleanup |
| 67 | + [ -n $MODPATH ] && rm -rf $MODPATH |
| 68 | + rm -rf $TMPDIR |
| 69 | + exit 1 |
| 70 | +} |
| 71 | + |
| 72 | +rm -rf $TMPDIR 2>/dev/null |
| 73 | +mkdir -p $TMPDIR |
| 74 | + |
| 75 | +# Preperation for flashable zips |
| 76 | +setup_flashable |
| 77 | + |
| 78 | +# Mount partitions |
| 79 | +mount_partitions |
| 80 | + |
| 81 | +# Detect version and architecture |
| 82 | +api_level_arch_detect |
| 83 | + |
| 84 | +# Setup busybox and binaries |
| 85 | +$BOOTMODE && boot_actions || recovery_actions |
| 86 | + |
| 87 | +############## |
| 88 | +# Preparation |
| 89 | +############## |
| 90 | + |
| 91 | +# Extract prop file |
| 92 | +unzip -o "$ZIPFILE" module.prop -d $TMPDIR >&2 |
| 93 | +[ ! -f $TMPDIR/module.prop ] && abort "! Unable to extract zip file!" |
| 94 | + |
| 95 | +$BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules |
| 96 | +MODULEROOT=$NVBASE/$MODDIRNAME |
| 97 | +MODID=`grep_prop id $TMPDIR/module.prop` |
| 98 | +MODPATH=$MODULEROOT/$MODID |
| 99 | +MODNAME=`grep_prop name $TMPDIR/module.prop` |
| 100 | + |
| 101 | +# Create mod paths |
| 102 | +rm -rf $MODPATH 2>/dev/null |
| 103 | +mkdir -p $MODPATH |
| 104 | + |
| 105 | +########## |
| 106 | +# Install |
| 107 | +########## |
| 108 | + |
| 109 | +if is_legacy_script; then |
| 110 | + unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2 |
| 111 | + |
| 112 | + # Load install script |
| 113 | + . $TMPDIR/install.sh |
| 114 | + |
| 115 | + # Callbacks |
| 116 | + print_modname |
| 117 | + on_install |
| 118 | + |
| 119 | + # Custom uninstaller |
| 120 | + [ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh |
| 121 | + |
| 122 | + # Skip mount |
| 123 | + $SKIPMOUNT && touch $MODPATH/skip_mount |
| 124 | + |
| 125 | + # prop file |
| 126 | + $PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop |
| 127 | + |
| 128 | + # Module info |
| 129 | + cp -af $TMPDIR/module.prop $MODPATH/module.prop |
| 130 | + |
| 131 | + # post-fs-data scripts |
| 132 | + $POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh |
| 133 | + |
| 134 | + # service scripts |
| 135 | + $LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh |
| 136 | + |
| 137 | + ui_print "- Setting permissions" |
| 138 | + set_permissions |
| 139 | +else |
| 140 | + print_modname |
| 141 | + |
| 142 | + unzip -o "$ZIPFILE" customize.sh -d $MODPATH >&2 |
| 143 | + |
| 144 | + if ! grep -q '^SKIPUNZIP=1$' $MODPATH/customize.sh 2>/dev/null; then |
| 145 | + ui_print "- Extracting module files" |
| 146 | + unzip -o "$ZIPFILE" -x 'META-INF/*' -d $MODPATH >&2 |
| 147 | + |
| 148 | + # Default permissions |
| 149 | + set_perm_recursive $MODPATH 0 0 0755 0644 |
| 150 | + fi |
| 151 | + |
| 152 | + # Load customization script |
| 153 | + [ -f $MODPATH/customize.sh ] && . $MODPATH/customize.sh |
| 154 | +fi |
| 155 | + |
| 156 | +# Handle replace folders |
| 157 | +for TARGET in $REPLACE; do |
| 158 | + ui_print "- Replace target: $TARGET" |
| 159 | + mktouch $MODPATH$TARGET/.replace |
| 160 | +done |
| 161 | + |
| 162 | +if $BOOTMODE; then |
| 163 | + # Update info for Magisk Manager |
| 164 | + mktouch $NVBASE/modules/$MODID/update |
| 165 | + cp -af $MODPATH/module.prop $NVBASE/modules/$MODID/module.prop |
| 166 | +fi |
| 167 | + |
| 168 | +# Copy over custom sepolicy rules |
| 169 | +if [ -f $MODPATH/sepolicy.rule -a -e $PERSISTDIR ]; then |
| 170 | + ui_print "- Installing custom sepolicy patch" |
| 171 | + PERSISTMOD=$PERSISTDIR/magisk/$MODID |
| 172 | + mkdir -p $PERSISTMOD |
| 173 | + cp -af $MODPATH/sepolicy.rule $PERSISTMOD/sepolicy.rule |
| 174 | +fi |
| 175 | + |
| 176 | +# Remove stuffs that don't belong to modules |
| 177 | +rm -rf \ |
| 178 | +$MODPATH/system/placeholder $MODPATH/customize.sh \ |
| 179 | +$MODPATH/README.md $MODPATH/.git* 2>/dev/null |
| 180 | + |
| 181 | +############# |
| 182 | +# Finalizing |
| 183 | +############# |
| 184 | + |
| 185 | +cd / |
| 186 | +$BOOTMODE || recovery_cleanup |
| 187 | +rm -rf $TMPDIR |
| 188 | + |
| 189 | +ui_print "- Done" |
| 190 | +exit 0 |
0 commit comments