Scripts fixes and improvements

- ensure all scripts use $NVBASE $MAGISKBIN $POSTFSDATAD and $SERVICED where appropriate
- simplify new grep_cmdline() using xargs and more sed
- show correct active sepolicy $RULESDIR on devices with no encryption
- add support for Android 12 .capex (compressed apex) files
This commit is contained in:
osm0sis 2021-11-17 22:53:33 -04:00 committed by John Wu
parent fef44bd24f
commit 68ac409bfd
3 changed files with 28 additions and 23 deletions

View File

@ -91,7 +91,7 @@ restore_imgs() {
} }
post_ota() { post_ota() {
cd /data/adb cd $NVBASE
cp -f $1 bootctl cp -f $1 bootctl
rm -f $1 rm -f $1
chmod 755 bootctl chmod 755 bootctl

View File

@ -114,20 +114,20 @@ else
mount -t tmpfs -o 'mode=0755' tmpfs /dev/avd-magisk mount -t tmpfs -o 'mode=0755' tmpfs /dev/avd-magisk
fi fi
# Magisk stuffs # Magisk stuff
mkdir -p /data/adb/magisk 2>/dev/null mkdir -p $MAGISKBIN 2>/dev/null
unzip -oj app-debug.apk 'assets/*' -x 'assets/chromeos/*' -d /data/adb/magisk unzip -oj app-debug.apk 'assets/*' -x 'assets/chromeos/*' -d $MAGISKBIN
mkdir /data/adb/modules 2>/dev/null mkdir $NVBASE/modules 2>/dev/null
mkdir /data/adb/post-fs-data.d 2>/dev/null mkdir $POSTFSDATAD 2>/dev/null
mkdir /data/adb/services.d 2>/dev/null mkdir $SERVICED 2>/dev/null
for file in magisk32 magisk64 magiskinit; do for file in magisk32 magisk64 magiskinit; do
chmod 755 ./$file chmod 755 ./$file
cp -af ./$file $MAGISKTMP/$file cp -af ./$file $MAGISKTMP/$file
cp -af ./$file /data/adb/magisk/$file cp -af ./$file $MAGISKBIN/$file
done done
cp -af ./magiskboot /data/adb/magisk/magiskboot cp -af ./magiskboot $MAGISKBIN/magiskboot
cp -af ./busybox /data/adb/magisk/busybox cp -af ./busybox $MAGISKBIN/busybox
ln -s ./magisk64 $MAGISKTMP/magisk ln -s ./magisk64 $MAGISKTMP/magisk
ln -s ./magisk $MAGISKTMP/su ln -s ./magisk $MAGISKTMP/su

View File

@ -22,9 +22,9 @@ toupper() {
grep_cmdline() { grep_cmdline() {
local REGEX="s/^$1=//p" local REGEX="s/^$1=//p"
local CL=$(cat /proc/cmdline 2>/dev/null) { echo $(cat /proc/cmdline)$(sed -e 's/[^"]//g' -e 's/""//g' /proc/cmdline) | xargs -n 1; \
POSTFIX=$([ $(expr $(echo "$CL" | tr -d -c '"' | wc -m) % 2) == 0 ] && echo -n '' || echo -n '"') sed -e 's/ = /=/g' -e 's/, /,/g' -e 's/"//g' /proc/bootconfig; \
{ eval "for i in $CL$POSTFIX; do echo \$i; done" ; cat /proc/bootconfig 2>/dev/null | sed 's/[[:space:]]*=[[:space:]]*\(.*\)/=\1/g' | sed 's/"//g'; } | sed -n "$REGEX" 2>/dev/null } 2>/dev/null | sed -n "$REGEX"
} }
grep_prop() { grep_prop() {
@ -323,6 +323,9 @@ mount_apex() {
local PATTERN='s/.*"name":[^"]*"\([^"]*\).*/\1/p' local PATTERN='s/.*"name":[^"]*"\([^"]*\).*/\1/p'
for APEX in /system/apex/*; do for APEX in /system/apex/*; do
if [ -f $APEX ]; then if [ -f $APEX ]; then
# handle CAPEX APKs, extract actual APEX APK first
unzip -qo $APEX original_apex -d /apex
[ -f /apex/original_apex ] && APEX=/apex/original_apex # unzip doesn't do return codes
# APEX APKs, extract and loop mount # APEX APKs, extract and loop mount
unzip -qo $APEX apex_payload.img -d /apex unzip -qo $APEX apex_payload.img -d /apex
DEST=$(unzip -qp $APEX apex_manifest.pb | strings | head -n 1) DEST=$(unzip -qp $APEX apex_manifest.pb | strings | head -n 1)
@ -335,7 +338,7 @@ mount_apex() {
ui_print "- Mounting $DEST" ui_print "- Mounting $DEST"
mount -t ext4 -o ro,noatime $LOOPDEV $DEST mount -t ext4 -o ro,noatime $LOOPDEV $DEST
fi fi
rm -f /apex/apex_payload.img rm -f /apex/original_apex /apex/apex_payload.img
elif [ -d $APEX ]; then elif [ -d $APEX ]; then
# APEX folders, bind mount directory # APEX folders, bind mount directory
if [ -f $APEX/apex_manifest.json ]; then if [ -f $APEX/apex_manifest.json ]; then
@ -560,13 +563,13 @@ check_data() {
find_magisk_apk() { find_magisk_apk() {
local DBAPK local DBAPK
[ -z $APK ] && APK=/data/adb/magisk.apk [ -z $APK ] && APK=$NVBASE/magisk.apk
[ -f $APK ] || APK=/data/magisk/magisk.apk [ -f $APK ] || APK=$MAGISKBIN/magisk.apk
[ -f $APK ] || APK=/data/app/com.topjohnwu.magisk*/*.apk [ -f $APK ] || APK=/data/app/com.topjohnwu.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'" 2>/dev/null | cut -d= -f2) 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 -oE 'requester..*' | cut -c10-) [ -z $DBAPK ] && DBAPK=$(strings $NVBASE/magisk.db | grep -oE 'requester..*' | cut -c10-)
[ -z $DBAPK ] || APK=/data/user_de/*/$DBAPK/dyn/*.apk [ -z $DBAPK ] || APK=/data/user_de/*/$DBAPK/dyn/*.apk
[ -f $APK ] || [ -z $DBAPK ] || APK=/data/app/$DBAPK*/*.apk [ -f $APK ] || [ -z $DBAPK ] || APK=/data/app/$DBAPK*/*.apk
[ -f $APK ] || [ -z $DBAPK ] || APK=/data/app/*/$DBAPK*/*.apk [ -f $APK ] || [ -z $DBAPK ] || APK=/data/app/*/$DBAPK*/*.apk
@ -578,7 +581,7 @@ run_migrations() {
local LOCSHA1 local LOCSHA1
local TARGET local TARGET
# Legacy app installation # Legacy app installation
local BACKUP=/data/adb/magisk/stock_boot*.gz local BACKUP=$MAGISKBIN/stock_boot*.gz
if [ -f $BACKUP ]; then if [ -f $BACKUP ]; then
cp $BACKUP /data cp $BACKUP /data
rm -f $BACKUP rm -f $BACKUP
@ -596,7 +599,7 @@ run_migrations() {
# Stock backups # Stock backups
LOCSHA1=$SHA1 LOCSHA1=$SHA1
for name in boot dtb dtbo dtbs; do for name in boot dtb dtbo dtbs; do
BACKUP=/data/adb/magisk/stock_${name}.img BACKUP=$MAGISKBIN/stock_${name}.img
[ -f $BACKUP ] || continue [ -f $BACKUP ] || continue
if [ $name = 'boot' ]; then if [ $name = 'boot' ]; then
LOCSHA1=`$MAGISKBIN/magiskboot sha1 $BACKUP` LOCSHA1=`$MAGISKBIN/magiskboot sha1 $BACKUP`
@ -615,10 +618,12 @@ copy_sepolicy_rules() {
# Find current active RULESDIR # Find current active RULESDIR
local RULESDIR local RULESDIR
local active_dir=$(magisk --path)/.magisk/mirror/sepolicy.rules local ACTIVEDIR=$(magisk --path)/.magisk/mirror/sepolicy.rules
if [ -L $active_dir ]; then if [ -L $ACTIVEDIR ]; then
RULESDIR=$(readlink $active_dir) RULESDIR=$(readlink $ACTIVEDIR)
[ "${RULESDIR:0:1}" != "/" ] && RULESDIR="$(magisk --path)/.magisk/mirror/$RULESDIR" [ "${RULESDIR:0:1}" != "/" ] && RULESDIR="$(magisk --path)/.magisk/mirror/$RULESDIR"
elif ! $ISENCRYPTED; then
RULESDIR=$NVBASE/modules
elif [ -d /data/unencrypted ] && ! grep ' /data ' /proc/mounts | grep -qE 'dm-|f2fs'; then elif [ -d /data/unencrypted ] && ! grep ' /data ' /proc/mounts | grep -qE 'dm-|f2fs'; then
RULESDIR=/data/unencrypted/magisk RULESDIR=/data/unencrypted/magisk
elif grep -q ' /cache ' /proc/mounts; then elif grep -q ' /cache ' /proc/mounts; then
@ -642,7 +647,7 @@ copy_sepolicy_rules() {
fi fi
# Copy all enabled sepolicy.rule # Copy all enabled sepolicy.rule
for r in /data/adb/modules*/*/sepolicy.rule; do for r in $NVBASE/modules*/*/sepolicy.rule; do
[ -f "$r" ] || continue [ -f "$r" ] || continue
local MODDIR=${r%/*} local MODDIR=${r%/*}
[ -f $MODDIR/disable ] && continue [ -f $MODDIR/disable ] && continue