From 6dd34aec479c5538de8acd9aade9c06b83b9e7e7 Mon Sep 17 00:00:00 2001 From: osm0sis Date: Sat, 2 Nov 2019 00:26:08 -0300 Subject: [PATCH] scripts: refactor and major addon.d fixes - remove redundant addon.d.sh script bits that were covered elsewhere ($TMPDIR in util_functions.sh, find_dtbo_image in patch_dtbo_image) - refactor addon.d.sh and flash_script.sh for simplicity and readability, and put common flashing script in util_functions.sh (as patch_boot_image), which should greatly help avoid them getting out of sync going forward and fixes compressing ramdisk support and post-patch cleanup for addon.d - add check_data to addon.d.sh since moving stock_boot* and stock_dtbo* backups depend on it and so weren't occuring with addon.d - fix find_manager_apk with working fallback for recovery addon.d execution (where `magisk --sqlite` will not work for hidden Manager), Manager DynAPK hiding, and print a useful log warning if an APK can't be found --- scripts/addon.d.sh | 81 ++++++++++++--------------------------- scripts/flash_script.sh | 39 ++----------------- scripts/util_functions.sh | 48 +++++++++++++++++++++-- 3 files changed, 73 insertions(+), 95 deletions(-) diff --git a/scripts/addon.d.sh b/scripts/addon.d.sh index 95c18d0bd..53aa676c4 100644 --- a/scripts/addon.d.sh +++ b/scripts/addon.d.sh @@ -20,9 +20,6 @@ else fi initialize() { - # This path should work in any cases - TMPDIR=/dev/tmp - mount /data 2>/dev/null MAGISKBIN=/data/adb/magisk @@ -43,71 +40,43 @@ initialize() { fi } -show_logo() { - ui_print "************************" - ui_print "* Magisk v$MAGISK_VER addon.d" - ui_print "************************" -} - -installation() { - find_manager_apk - get_flags - find_boot_image - find_dtbo_image - [ -z $BOOTIMAGE ] && abort "! Unable to detect target image" - ui_print "- Target image: $BOOTIMAGE" - [ -z $DTBOIMAGE ] || ui_print "- DTBO image: $DTBOIMAGE" - - remove_system_su - - [ -f $APK ] && eval $BOOTSIGNER -verify < $BOOTIMAGE && BOOTSIGNED=true - $BOOTSIGNED && ui_print "- Boot image is signed with AVB 1.0" - - SOURCEDMODE=true - cd $MAGISKBIN - - # Source the boot patcher - . ./boot_patch.sh "$BOOTIMAGE" - - ui_print "- Flashing new boot image" - flash_image new-boot.img "$BOOTIMAGE" || abort "! Insufficient partition size" - rm -f new-boot.img - - if [ -f stock_boot* ]; then - rm -f /data/stock_boot* 2>/dev/null - $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 / -} - -finalize() { - ui_print "- Done" - exit 0 -} - main() { if ! $backuptool_ab; then # Wait for post addon.d-v1 processes to finish sleep 5 fi + $BOOTMODE || recovery_actions - show_logo + + ui_print "************************" + ui_print "* Magisk v$MAGISK_VER addon.d" + ui_print "************************" + mount_partitions + check_data + get_flags + if $backuptool_ab; then # Swap the slot for addon.d-v2 if [ ! -z $SLOT ]; then [ $SLOT = _a ] && SLOT=_b || SLOT=_a; fi fi - installation + + find_boot_image + + [ -z $BOOTIMAGE ] && abort "! Unable to detect target image" + ui_print "- Target image: $BOOTIMAGE" + + remove_system_su + find_manager_apk + patch_boot_image + + cd / + # Cleanups $BOOTMODE || recovery_cleanup - finalize + rm -rf $TMPDIR + + ui_print "- Done" + exit 0 } case "$1" in diff --git a/scripts/flash_script.sh b/scripts/flash_script.sh index f8f47e4cf..df92b5e48 100644 --- a/scripts/flash_script.sh +++ b/scripts/flash_script.sh @@ -1,7 +1,7 @@ #MAGISK ########################################################################################## # -# Magisk Flash Script +# Magisk Flash Script (updater-script) # by topjohnwu # # This script will detect, construct the environment for Magisk @@ -103,43 +103,10 @@ fi $BOOTMODE || recovery_actions ########################################################################################## -# Boot patching +# Boot/DTBO Patching ########################################################################################## -eval $BOOTSIGNER -verify < $BOOTIMAGE && BOOTSIGNED=true -$BOOTSIGNED && ui_print "- Boot image is signed with AVB 1.0" - -SOURCEDMODE=true -cd $MAGISKBIN - -$IS64BIT && mv -f magiskinit64 magiskinit || rm -f magiskinit64 - -# Source the boot patcher -. ./boot_patch.sh "$BOOTIMAGE" - -ui_print "- Flashing new boot image" - -if ! flash_image new-boot.img "$BOOTIMAGE"; then - ui_print "- Compressing ramdisk to fit in partition" - ./magiskboot cpio ramdisk.cpio compress - ./magiskboot repack "$BOOTIMAGE" - flash_image new-boot.img "$BOOTIMAGE" || abort "! Insufficient partition size" -fi - -./magiskboot cleanup -rm -f new-boot.img - -if [ -f stock_boot* ]; then - rm -f /data/stock_boot* 2>/dev/null - $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 +patch_boot_image cd / # Cleanups diff --git a/scripts/util_functions.sh b/scripts/util_functions.sh index 046a483fc..a2af6444b 100644 --- a/scripts/util_functions.sh +++ b/scripts/util_functions.sh @@ -293,6 +293,45 @@ patch_dtbo_image() { return 1 } +patch_boot_image() { + # Common installation script for flash_script.sh (updater-script) and addon.d.sh + eval $BOOTSIGNER -verify < $BOOTIMAGE && BOOTSIGNED=true + $BOOTSIGNED && ui_print "- Boot image is signed with AVB 1.0" + + SOURCEDMODE=true + cd $MAGISKBIN + + $IS64BIT && mv -f magiskinit64 magiskinit 2>/dev/null || rm -f magiskinit64 + + # Source the boot patcher + . ./boot_patch.sh "$BOOTIMAGE" + + ui_print "- Flashing new boot image" + + if ! flash_image new-boot.img "$BOOTIMAGE"; then + ui_print "- Compressing ramdisk to fit in partition" + ./magiskboot cpio ramdisk.cpio compress + ./magiskboot repack "$BOOTIMAGE" + flash_image new-boot.img "$BOOTIMAGE" || abort "! Insufficient partition size" + fi + + ./magiskboot cleanup + rm -f new-boot.img + + if [ -f stock_boot* ]; then + rm -f /data/stock_boot* 2>/dev/null + $DATA && mv stock_boot* /data + fi + + # Patch DTBO together with boot image + $KEEPVERITY || patch_dtbo_image + + if [ -f stock_dtbo* ]; then + rm -f /data/stock_dtbo* 2>/dev/null + $DATA && mv stock_dtbo* /data + fi +} + sign_chromeos() { ui_print "- Signing ChromeOS boot image" @@ -360,13 +399,16 @@ check_data() { } find_manager_apk() { - APK=/data/adb/magisk.apk + [ -z $APK ] && APK=/data/adb/magisk.apk [ -f $APK ] || APK=/data/magisk/magisk.apk [ -f $APK ] || APK=/data/app/com.topjohnwu.magisk*/*.apk if [ ! -f $APK ]; then - DBAPK=`magisk --sqlite "SELECT value FROM strings WHERE key='requester'" | cut -d= -f2` - [ -z "$DBAPK" ] || APK=/data/app/$DBAPK*/*.apk + DBAPK=`magisk --sqlite "SELECT value FROM strings WHERE key='requester'" 2>/dev/null | cut -d= -f2` + [ -z $DBAPK ] && DBAPK=`strings /data/adb/magisk.db | grep 5requester | cut -c11-` + [ -z $DBAPK ] || APK=/data/user_de/*/$DBAPK/dyn/*.apk + [ -f $APK ] || APK=/data/app/$DBAPK*/*.apk fi + [ -f $APK ] || ui_print "! Unable to detect Magisk Manager APK for BootSigner" } #################