From 9a8eeacee8047dafc900f1edae97b3e457b720f5 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Thu, 21 Jun 2018 10:53:49 +0800 Subject: [PATCH] Fix output of addon.d, and add support for addon.d-v2 --- scripts/addon.d.sh | 90 ++++++++++++++++++++++++++++----------- scripts/flash_script.sh | 2 +- scripts/util_functions.sh | 45 ++++++++++---------- 3 files changed, 89 insertions(+), 48 deletions(-) diff --git a/scripts/addon.d.sh b/scripts/addon.d.sh index 3bc774096..9052a6dea 100644 --- a/scripts/addon.d.sh +++ b/scripts/addon.d.sh @@ -1,4 +1,5 @@ #!/sbin/sh +# ADDOND_VERSION=2 ########################################################################################## # # Magisk Survival Script for ROMs with addon.d support @@ -9,42 +10,44 @@ ########################################################################################## . /tmp/backuptool.functions +[ -z $backuptool_ab ] && backuptool_ab=false -main() { - # Magisk binaries - MAGISKBIN=/data/adb/magisk - APK=/data/adb/magisk.apk - [ -f $APK ] || APK=/data/magisk/magisk.apk - [ -f $APK ] || APK=/data/app/com.topjohnwu.magisk*/*.apk +initialize() { + # This path should work in any cases + TMPDIR=/dev/tmp mount /data 2>/dev/null + MAGISKBIN=/data/adb/magisk if [ ! -d $MAGISKBIN ]; then echo "! Cannot find Magisk binaries!" exit 1 fi - # Wait for post addon.d processes to finish - sleep 5 - # Load utility functions . $MAGISKBIN/util_functions.sh + APK=/data/adb/magisk.apk + [ -f $APK ] || APK=/data/magisk/magisk.apk + [ -f $APK ] || APK=/data/app/com.topjohnwu.magisk*/*.apk +} + +show_logo() { ui_print "************************" ui_print "* Magisk v$MAGISK_VER addon.d" ui_print "************************" +} - mount_partitions - - api_level_arch_detect - - recovery_actions - - remove_system_su - +detection() { + find_boot_image + find_dtbo_image [ -z $BOOTIMAGE ] && abort "! Unable to detect boot image" - ui_print "- Found boot image: $BOOTIMAGE" + ui_print "- Found boot/ramdisk image: $BOOTIMAGE" + [ -z $DTBOIMAGE ] || ui_print "- Found dtbo image: $DTBOIMAGE" + get_flags +} +installation() { [ -f $APK ] && eval $BOOTSIGNER -verify < $BOOTIMAGE && BOOTSIGNED=true $BOOTSIGNED && ui_print "- Boot image is signed with AVB 1.0" @@ -52,23 +55,54 @@ main() { cd $MAGISKBIN # Source the boot patcher - . $MAGISKBIN/boot_patch.sh "$BOOTIMAGE" + . ./boot_patch.sh "$BOOTIMAGE" flash_boot_image new-boot.img "$BOOTIMAGE" rm -f new-boot.img if [ -f stock_boot* ]; then rm -f /data/stock_boot* 2>/dev/null - mv stock_boot* /data + $DATA && mv stock_boot* /data + fi + + $KEEPVERITY || patch_dtbo_image + + if [ -f stock_dtbo* ]; then + rm -f /data/stock_dtbo* 2>/dev/null + $DATA && mv stock_dtbo* /data fi cd / - recovery_cleanup +} +finalize() { ui_print "- Done" exit 0 } +main_v1() { + # Wait for post addon.d processes to finish + sleep 5 + recovery_actions + show_logo + mount_partitions + detection + installation + recovery_cleanup + finalize +} + +main_v2() { + boot_actions + show_logo + mount_partitions + # Swap the slot + if [ ! -z $SLOT ]; then [ $SLOT = _a ] && SLOT=_b || SLOT=_a; fi + detection + installation + finalize +} + case "$1" in backup) # Stub @@ -86,9 +120,15 @@ case "$1" in # Stub ;; post-restore) - # Get the FD for ui_print - OUTFD=`ps | grep -v grep | grep -oE "update(.*)" | cut -d" " -f3` - # Run the main function in a parallel subshell - (main) & + initialize + if $backuptool_ab; then + # addon.d-v2 + main_v2 + else + OUTFD=1 + get_outfd + # Run in background, hack for addon.d-v1 + (main_v1) & + fi ;; esac diff --git a/scripts/flash_script.sh b/scripts/flash_script.sh index 6e56e1408..b4c57603d 100644 --- a/scripts/flash_script.sh +++ b/scripts/flash_script.sh @@ -120,7 +120,7 @@ SOURCEDMODE=true cd $MAGISKBIN # Source the boot patcher -. $COMMONDIR/boot_patch.sh "$BOOTIMAGE" +. ./boot_patch.sh "$BOOTIMAGE" flash_boot_image new-boot.img "$BOOTIMAGE" rm -f new-boot.img diff --git a/scripts/util_functions.sh b/scripts/util_functions.sh index 58c462bca..f53b49021 100644 --- a/scripts/util_functions.sh +++ b/scripts/util_functions.sh @@ -23,15 +23,11 @@ BOOTSIGNER="/system/bin/dalvikvm -Xnodex2oat -Xnoimage-dex2oat -cp \$APK com.top BOOTSIGNED=false get_outfd() { - readlink /proc/$$/fd/$OUTFD 2>/dev/null | grep /tmp >/dev/null - if [ "$?" -eq "0" ]; then - OUTFD=0 - - for FD in `ls /proc/$$/fd`; do - readlink /proc/$$/fd/$FD 2>/dev/null | grep pipe >/dev/null - if [ "$?" -eq "0" ]; then - ps | grep " 3 $FD " | grep -v grep >/dev/null - if [ "$?" -eq "0" ]; then + if [ $OUTFD -eq 1 ]; then + # We will have to manually find out OUTFD + for FD in `ls /proc/self/fd`; do + if readlink /proc/self/fd/$FD | grep -q pipe; then + if ps | grep -v grep | grep -q " 3 $FD "; then OUTFD=$FD break fi @@ -299,19 +295,7 @@ api_level_arch_detect() { if [ "$ABILONG" = "x86_64" ]; then ARCH=x64; ARCH32=x86; IS64BIT=true; fi; } -boot_actions() { - if [ ! -d /sbin/.core/mirror/bin ]; then - mkdir -p /sbin/.core/mirror/bin - mount -o bind $MAGISKBIN /sbin/.core/mirror/bin - fi - MAGISKBIN=/sbin/.core/mirror/bin -} - -recovery_actions() { - # TWRP bug fix - mount -o bind /dev/urandom /dev/random - # Preserve environment varibles - OLD_PATH=$PATH +setup_bb() { if [ ! -d $TMPDIR/bin ]; then # Add busybox to PATH mkdir -p $TMPDIR/bin @@ -319,6 +303,23 @@ recovery_actions() { $MAGISKBIN/busybox --install -s $TMPDIR/bin export PATH=$TMPDIR/bin:$PATH fi +} + +boot_actions() { + if [ ! -d /sbin/.core/mirror/bin ]; then + mkdir -p /sbin/.core/mirror/bin + mount -o bind $MAGISKBIN /sbin/.core/mirror/bin + fi + MAGISKBIN=/sbin/.core/mirror/bin + setup_bb +} + +recovery_actions() { + # TWRP bug fix + mount -o bind /dev/urandom /dev/random + # Preserve environment varibles + OLD_PATH=$PATH + setup_bb # Temporarily block out all custom recovery binaries/libs mv /sbin /sbin_tmp # Unset library paths