Commit 6dd34aec authored by osm0sis's avatar osm0sis Committed by John Wu

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
parent 4cd15467
...@@ -20,9 +20,6 @@ else ...@@ -20,9 +20,6 @@ else
fi fi
initialize() { initialize() {
# This path should work in any cases
TMPDIR=/dev/tmp
mount /data 2>/dev/null mount /data 2>/dev/null
MAGISKBIN=/data/adb/magisk MAGISKBIN=/data/adb/magisk
...@@ -43,73 +40,45 @@ initialize() { ...@@ -43,73 +40,45 @@ initialize() {
fi fi
} }
show_logo() { main() {
if ! $backuptool_ab; then
# Wait for post addon.d-v1 processes to finish
sleep 5
fi
$BOOTMODE || recovery_actions
ui_print "************************" ui_print "************************"
ui_print "* Magisk v$MAGISK_VER addon.d" ui_print "* Magisk v$MAGISK_VER addon.d"
ui_print "************************" ui_print "************************"
}
installation() { mount_partitions
find_manager_apk check_data
get_flags 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
find_boot_image find_boot_image
find_dtbo_image
[ -z $BOOTIMAGE ] && abort "! Unable to detect target image" [ -z $BOOTIMAGE ] && abort "! Unable to detect target image"
ui_print "- Target image: $BOOTIMAGE" ui_print "- Target image: $BOOTIMAGE"
[ -z $DTBOIMAGE ] || ui_print "- DTBO image: $DTBOIMAGE"
remove_system_su remove_system_su
find_manager_apk
[ -f $APK ] && eval $BOOTSIGNER -verify < $BOOTIMAGE && BOOTSIGNED=true patch_boot_image
$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 / cd /
} # Cleanups
$BOOTMODE || recovery_cleanup
rm -rf $TMPDIR
finalize() {
ui_print "- Done" ui_print "- Done"
exit 0 exit 0
} }
main() {
if ! $backuptool_ab; then
# Wait for post addon.d-v1 processes to finish
sleep 5
fi
$BOOTMODE || recovery_actions
show_logo
mount_partitions
if $backuptool_ab; then
# Swap the slot for addon.d-v2
if [ ! -z $SLOT ]; then [ $SLOT = _a ] && SLOT=_b || SLOT=_a; fi
fi
installation
$BOOTMODE || recovery_cleanup
finalize
}
case "$1" in case "$1" in
backup) backup)
# Stub # Stub
......
#MAGISK #MAGISK
########################################################################################## ##########################################################################################
# #
# Magisk Flash Script # Magisk Flash Script (updater-script)
# by topjohnwu # by topjohnwu
# #
# This script will detect, construct the environment for Magisk # This script will detect, construct the environment for Magisk
...@@ -103,43 +103,10 @@ fi ...@@ -103,43 +103,10 @@ fi
$BOOTMODE || recovery_actions $BOOTMODE || recovery_actions
########################################################################################## ##########################################################################################
# Boot patching # Boot/DTBO Patching
########################################################################################## ##########################################################################################
eval $BOOTSIGNER -verify < $BOOTIMAGE && BOOTSIGNED=true patch_boot_image
$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
cd / cd /
# Cleanups # Cleanups
......
...@@ -293,6 +293,45 @@ patch_dtbo_image() { ...@@ -293,6 +293,45 @@ patch_dtbo_image() {
return 1 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() { sign_chromeos() {
ui_print "- Signing ChromeOS boot image" ui_print "- Signing ChromeOS boot image"
...@@ -360,13 +399,16 @@ check_data() { ...@@ -360,13 +399,16 @@ check_data() {
} }
find_manager_apk() { 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/magisk/magisk.apk
[ -f $APK ] || APK=/data/app/com.topjohnwu.magisk*/*.apk [ -f $APK ] || APK=/data/app/com.topjohnwu.magisk*/*.apk
if [ ! -f $APK ]; then if [ ! -f $APK ]; then
DBAPK=`magisk --sqlite "SELECT value FROM strings WHERE key='requester'" | cut -d= -f2` DBAPK=`magisk --sqlite "SELECT value FROM strings WHERE key='requester'" 2>/dev/null | cut -d= -f2`
[ -z "$DBAPK" ] || APK=/data/app/$DBAPK*/*.apk [ -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 fi
[ -f $APK ] || ui_print "! Unable to detect Magisk Manager APK for BootSigner"
} }
################# #################
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment