|
| 1 | +#!/sbin/sh |
| 2 | + |
| 3 | +TMPDIR=/dev/tmp |
| 4 | +MOUNTPATH=/dev/magisk_img |
| 5 | + |
| 6 | +# Default permissions |
| 7 | +umask 022 |
| 8 | + |
| 9 | +# Initial cleanup |
| 10 | +rm -rf $TMPDIR 2>/dev/null |
| 11 | +mkdir -p $TMPDIR |
| 12 | + |
| 13 | +# echo before loading util_functions |
| 14 | +ui_print() { echo "$1"; } |
| 15 | + |
| 16 | +require_new_magisk() { |
| 17 | + ui_print "***********************************" |
| 18 | + ui_print " Please install the latest Magisk! " |
| 19 | + ui_print "***********************************" |
| 20 | + exit 1 |
| 21 | +} |
| 22 | + |
| 23 | +imageless_magisk() { |
| 24 | + [ $MAGISK_VER_CODE -gt 18100 ] |
| 25 | + return $? |
| 26 | +} |
| 27 | + |
| 28 | +########################################################################################## |
| 29 | +# Environment |
| 30 | +########################################################################################## |
| 31 | + |
| 32 | +OUTFD=$2 |
| 33 | +ZIPFILE=$3 |
| 34 | + |
| 35 | +mount /data 2>/dev/null |
| 36 | + |
| 37 | +# Load utility functions |
| 38 | +if [ -f /data/adb/magisk/util_functions.sh ]; then |
| 39 | + . /data/adb/magisk/util_functions.sh |
| 40 | + NVBASE=/data/adb |
| 41 | +else |
| 42 | + require_new_magisk |
| 43 | +fi |
| 44 | + |
| 45 | +# Preperation for flashable zips |
| 46 | +setup_flashable |
| 47 | + |
| 48 | +# Mount partitions |
| 49 | +mount_partitions |
| 50 | + |
| 51 | +# Detect version and architecture |
| 52 | +api_level_arch_detect |
| 53 | + |
| 54 | +# Setup busybox and binaries |
| 55 | +$BOOTMODE && boot_actions || recovery_actions |
| 56 | + |
| 57 | +########################################################################################## |
| 58 | +# Preparation |
| 59 | +########################################################################################## |
| 60 | + |
| 61 | +# Extract common files |
| 62 | +unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2 |
| 63 | + |
| 64 | +[ ! -f $TMPDIR/install.sh ] && abort "! Unable to extract zip file!" |
| 65 | +# Load install script |
| 66 | +. $TMPDIR/install.sh |
| 67 | + |
| 68 | +if imageless_magisk; then |
| 69 | + $BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules |
| 70 | + MODULEROOT=$NVBASE/$MODDIRNAME |
| 71 | +else |
| 72 | + $BOOTMODE && IMGNAME=magisk_merge.img || IMGNAME=magisk.img |
| 73 | + IMG=$NVBASE/$IMGNAME |
| 74 | + request_zip_size_check "$ZIPFILE" |
| 75 | + mount_magisk_img |
| 76 | + MODULEROOT=$MOUNTPATH |
| 77 | +fi |
| 78 | + |
| 79 | +MODID=`grep_prop id $TMPDIR/module.prop` |
| 80 | +MODPATH=$MODULEROOT/$MODID |
| 81 | + |
| 82 | +print_modname |
| 83 | + |
| 84 | +ui_print "******************************" |
| 85 | +ui_print "Powered by Magisk (@topjohnwu)" |
| 86 | +ui_print "******************************" |
| 87 | + |
| 88 | +########################################################################################## |
| 89 | +# Install |
| 90 | +########################################################################################## |
| 91 | + |
| 92 | +# Create mod paths |
| 93 | +rm -rf $MODPATH 2>/dev/null |
| 94 | +mkdir -p $MODPATH |
| 95 | + |
| 96 | +on_install |
| 97 | + |
| 98 | +# Remove placeholder |
| 99 | +rm -f $MODPATH/system/placeholder 2>/dev/null |
| 100 | + |
| 101 | +# Custom uninstaller |
| 102 | +[ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh |
| 103 | + |
| 104 | +# Auto Mount |
| 105 | +if imageless_magisk; then |
| 106 | + $SKIPMOUNT && touch $MODPATH/skip_mount |
| 107 | +else |
| 108 | + $SKIPMOUNT || touch $MODPATH/auto_mount |
| 109 | +fi |
| 110 | + |
| 111 | +# prop files |
| 112 | +$PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop |
| 113 | + |
| 114 | +# Module info |
| 115 | +cp -af $TMPDIR/module.prop $MODPATH/module.prop |
| 116 | +if $BOOTMODE; then |
| 117 | + # Update info for Magisk Manager |
| 118 | + if imageless_magisk; then |
| 119 | + mktouch $NVBASE/modules/$MODID/update |
| 120 | + cp -af $TMPDIR/module.prop $NVBASE/modules/$MODID/module.prop |
| 121 | + else |
| 122 | + mktouch /sbin/.magisk/img/$MODID/update |
| 123 | + cp -af $TMPDIR/module.prop /sbin/.magisk/img/$MODID/module.prop |
| 124 | + fi |
| 125 | +fi |
| 126 | + |
| 127 | +# post-fs-data mode scripts |
| 128 | +$POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh |
| 129 | + |
| 130 | +# service mode scripts |
| 131 | +$LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh |
| 132 | + |
| 133 | +# Handle replace folders |
| 134 | +for TARGET in $REPLACE; do |
| 135 | + mktouch $MODPATH$TARGET/.replace |
| 136 | +done |
| 137 | + |
| 138 | +ui_print "- Setting permissions" |
| 139 | +set_permissions |
| 140 | + |
| 141 | +########################################################################################## |
| 142 | +# Finalizing |
| 143 | +########################################################################################## |
| 144 | + |
| 145 | +cd / |
| 146 | +imageless_magisk || unmount_magisk_img |
| 147 | +$BOOTMODE || recovery_cleanup |
| 148 | +rm -rf $TMPDIR $MOUNTPATH |
| 149 | + |
| 150 | +ui_print "- Done" |
| 151 | +exit 0 |
0 commit comments