scripts: fixes for Tegra partition naming + bootsigner on Android 10
- adjust mount scripts to support SOS, APP and CAC Tegra partition naming (vendor is still vendor, oddly) - -Xnodex2oat is removed on Android 10 in AOSP (despite it still erroneously showing in dalvikvm --help); older devices will still run safely without it - Android 10 dynamically linked binaries need APEX mounts and variables so add this to recovery_actions/cleanup (thanks @Zackptg5) - clean up known systemless root leftovers because we're helpful
This commit is contained in:
parent
a7435dad6d
commit
f2d2f28e23
@ -94,7 +94,7 @@ ensure_bb() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
recovery_actions() {
|
recovery_actions() {
|
||||||
# Make sure random don't get blocked
|
# Make sure random won't get blocked
|
||||||
mount -o bind /dev/urandom /dev/random
|
mount -o bind /dev/urandom /dev/random
|
||||||
# Unset library paths
|
# Unset library paths
|
||||||
OLD_LD_LIB=$LD_LIBRARY_PATH
|
OLD_LD_LIB=$LD_LIBRARY_PATH
|
||||||
@ -110,10 +110,12 @@ recovery_actions() {
|
|||||||
|
|
||||||
recovery_cleanup() {
|
recovery_cleanup() {
|
||||||
ui_print "- Unmounting partitions"
|
ui_print "- Unmounting partitions"
|
||||||
umount -l /system 2>/dev/null
|
(umount_apex
|
||||||
umount -l /system_root 2>/dev/null
|
umount -l /system
|
||||||
umount -l /vendor 2>/dev/null
|
umount -l /system_root
|
||||||
umount -l /dev/random 2>/dev/null
|
umount -l /vendor
|
||||||
|
umount -l /persist
|
||||||
|
umount -l /dev/random) 2>/dev/null
|
||||||
export PATH=$OLD_PATH
|
export PATH=$OLD_PATH
|
||||||
[ -z $OLD_LD_LIB ] || export LD_LIBRARY_PATH=$OLD_LD_LIB
|
[ -z $OLD_LD_LIB ] || export LD_LIBRARY_PATH=$OLD_LD_LIB
|
||||||
[ -z $OLD_LD_PRE ] || export LD_PRELOAD=$OLD_LD_PRE
|
[ -z $OLD_LD_PRE ] || export LD_PRELOAD=$OLD_LD_PRE
|
||||||
@ -166,9 +168,9 @@ mount_name() {
|
|||||||
mount_ro_ensure() {
|
mount_ro_ensure() {
|
||||||
# We handle ro partitions only in recovery
|
# We handle ro partitions only in recovery
|
||||||
$BOOTMODE && return
|
$BOOTMODE && return
|
||||||
local PART=$1$SLOT
|
local PART=$1
|
||||||
local POINT=/$1
|
local POINT=$2
|
||||||
mount_name $PART $POINT '-o ro'
|
mount_name "$PART" $POINT '-o ro'
|
||||||
is_mounted $POINT || abort "! Cannot mount $POINT"
|
is_mounted $POINT || abort "! Cannot mount $POINT"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,7 +184,7 @@ mount_partitions() {
|
|||||||
[ -z $SLOT ] || ui_print "- Current boot slot: $SLOT"
|
[ -z $SLOT ] || ui_print "- Current boot slot: $SLOT"
|
||||||
|
|
||||||
# Mount ro partitions
|
# Mount ro partitions
|
||||||
mount_ro_ensure system
|
mount_ro_ensure "system$SLOT app$SLOT" /system
|
||||||
if [ -f /system/init.rc ]; then
|
if [ -f /system/init.rc ]; then
|
||||||
SYSTEM_ROOT=true
|
SYSTEM_ROOT=true
|
||||||
[ -L /system_root ] && rm -f /system_root
|
[ -L /system_root ] && rm -f /system_root
|
||||||
@ -193,9 +195,12 @@ mount_partitions() {
|
|||||||
grep ' / ' /proc/mounts | grep -qv 'rootfs' || grep -q ' /system_root ' /proc/mounts \
|
grep ' / ' /proc/mounts | grep -qv 'rootfs' || grep -q ' /system_root ' /proc/mounts \
|
||||||
&& SYSTEM_ROOT=true || SYSTEM_ROOT=false
|
&& SYSTEM_ROOT=true || SYSTEM_ROOT=false
|
||||||
fi
|
fi
|
||||||
[ -L /system/vendor ] && mount_ro_ensure vendor
|
[ -L /system/vendor ] && mount_ro_ensure vendor$SLOT /vendor
|
||||||
$SYSTEM_ROOT && ui_print "- Device is system-as-root"
|
$SYSTEM_ROOT && ui_print "- Device is system-as-root"
|
||||||
|
|
||||||
|
# Allow /system/bin commands (dalvikvm) on Android 10+ in recovery
|
||||||
|
$BOOTMODE || mount_apex
|
||||||
|
|
||||||
# Mount persist partition in recovery
|
# Mount persist partition in recovery
|
||||||
if ! $BOOTMODE && [ ! -z $PERSISTDIR ]; then
|
if ! $BOOTMODE && [ ! -z $PERSISTDIR ]; then
|
||||||
# Try to mount persist
|
# Try to mount persist
|
||||||
@ -203,12 +208,66 @@ mount_partitions() {
|
|||||||
mount_name persist /persist
|
mount_name persist /persist
|
||||||
if ! is_mounted /persist; then
|
if ! is_mounted /persist; then
|
||||||
# Fallback to cache
|
# Fallback to cache
|
||||||
mount_name cache /cache
|
mount_name "cache cac" /cache
|
||||||
is_mounted /cache && PERSISTDIR=/cache || PERSISTDIR=
|
is_mounted /cache && PERSISTDIR=/cache || PERSISTDIR=
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mount_apex() {
|
||||||
|
[ -d /system/apex ] || return
|
||||||
|
# APEX files present; need to extract and mount the payload imgs or if already extracted, mount folders
|
||||||
|
local APEX DEST LOOP MINORX NUM
|
||||||
|
[ -L /apex ] && rm -f /apex
|
||||||
|
[ -e /dev/block/loop1 ] && MINORX=$(ls -l /dev/block/loop1 | awk '{ print $6 }') || MINORX=1
|
||||||
|
NUM=0
|
||||||
|
for APEX in /system/apex/*; do
|
||||||
|
DEST=/apex/$(basename $APEX .apex)
|
||||||
|
[ "$DEST" == /apex/com.android.runtime.release ] && DEST=/apex/com.android.runtime
|
||||||
|
mkdir -p $DEST
|
||||||
|
case $APEX in
|
||||||
|
*.apex)
|
||||||
|
unzip -qo $APEX apex_payload.img -d /apex
|
||||||
|
mv -f /apex/apex_payload.img $DEST.img
|
||||||
|
mount -t ext4 -o ro,noatime $DEST.img $DEST 2>/dev/null
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
while [ $NUM -lt 64 ]; do
|
||||||
|
LOOP=/dev/block/loop$NUM;
|
||||||
|
(mknod $LOOP b 7 $((NUM * MINORX))
|
||||||
|
losetup $LOOP $DEST.img) 2>/dev/null
|
||||||
|
NUM=$((NUM + 1))
|
||||||
|
losetup $LOOP | grep -q $DEST.img && break
|
||||||
|
done
|
||||||
|
mount -t ext4 -o ro,loop,noatime $LOOP $DEST
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
losetup -d $LOOP 2>/dev/null
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*) mount -o bind $APEX $DEST;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
export ANDROID_RUNTIME_ROOT=/apex/com.android.runtime
|
||||||
|
export ANDROID_TZDATA_ROOT=/apex/com.android.tzdata
|
||||||
|
export BOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/android.test.base.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar
|
||||||
|
}
|
||||||
|
|
||||||
|
umount_apex() {
|
||||||
|
[ -d /apex ] || return
|
||||||
|
local DEST LOOP
|
||||||
|
for DEST in $(find /apex -type d -mindepth 1 -maxdepth 1); do
|
||||||
|
if [ -f $DEST.img ]; then
|
||||||
|
LOOP=$(mount | grep $DEST | cut -d" " -f1)
|
||||||
|
fi
|
||||||
|
(umount -l $DEST;
|
||||||
|
losetup -d $LOOP) 2>/dev/null
|
||||||
|
done
|
||||||
|
rm -rf /apex
|
||||||
|
unset ANDROID_RUNTIME_ROOT
|
||||||
|
unset ANDROID_TZDATA_ROOT
|
||||||
|
unset BOOTCLASSPATH
|
||||||
|
}
|
||||||
|
|
||||||
get_flags() {
|
get_flags() {
|
||||||
# override variables
|
# override variables
|
||||||
getvar KEEPVERITY
|
getvar KEEPVERITY
|
||||||
@ -239,7 +298,7 @@ get_flags() {
|
|||||||
find_boot_image() {
|
find_boot_image() {
|
||||||
BOOTIMAGE=
|
BOOTIMAGE=
|
||||||
if $RECOVERYMODE; then
|
if $RECOVERYMODE; then
|
||||||
BOOTIMAGE=`find_block recovery_ramdisk$SLOT recovery`
|
BOOTIMAGE=`find_block recovery_ramdisk$SLOT recovery sos`
|
||||||
elif [ ! -z $SLOT ]; then
|
elif [ ! -z $SLOT ]; then
|
||||||
BOOTIMAGE=`find_block ramdisk$SLOT recovery_ramdisk$SLOT boot$SLOT`
|
BOOTIMAGE=`find_block ramdisk$SLOT recovery_ramdisk$SLOT boot$SLOT`
|
||||||
else
|
else
|
||||||
@ -359,7 +418,12 @@ remove_system_su() {
|
|||||||
/system/bin/app_process_init /system/bin/su /cache/su /system/lib/libsupol.so /system/lib64/libsupol.so \
|
/system/bin/app_process_init /system/bin/su /cache/su /system/lib/libsupol.so /system/lib64/libsupol.so \
|
||||||
/system/su.d /system/etc/install-recovery.sh /system/etc/init.d/99SuperSUDaemon /cache/install-recovery.sh \
|
/system/su.d /system/etc/install-recovery.sh /system/etc/init.d/99SuperSUDaemon /cache/install-recovery.sh \
|
||||||
/system/.supersu /cache/.supersu /data/.supersu \
|
/system/.supersu /cache/.supersu /data/.supersu \
|
||||||
/system/app/Superuser.apk /system/app/SuperSU /cache/Superuser.apk 2>/dev/null
|
/system/app/Superuser.apk /system/app/SuperSU /cache/Superuser.apk
|
||||||
|
elif [ -f /cache/su.img -o -f /data/su.img -o -d /data/adb/su -o -d /data/su ]; then
|
||||||
|
ui_print "- Removing systemless installed root"
|
||||||
|
umount -l /su 2>/dev/null
|
||||||
|
rm -rf /cache/su.img /data/su.img /data/adb/su /data/adb/suhide /data/su /cache/.supersu /data/.supersu \
|
||||||
|
/cache/supersu_install /data/supersu_install
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -492,7 +556,7 @@ NVBASE=/data/adb
|
|||||||
|
|
||||||
# Bootsigner related stuff
|
# Bootsigner related stuff
|
||||||
BOOTSIGNERCLASS=a.a
|
BOOTSIGNERCLASS=a.a
|
||||||
BOOTSIGNER="/system/bin/dalvikvm -Xnodex2oat -Xnoimage-dex2oat -cp \$APK \$BOOTSIGNERCLASS"
|
BOOTSIGNER="/system/bin/dalvikvm -Xnoimage-dex2oat -cp \$APK \$BOOTSIGNERCLASS"
|
||||||
BOOTSIGNED=false
|
BOOTSIGNED=false
|
||||||
|
|
||||||
resolve_vars
|
resolve_vars
|
||||||
|
Loading…
Reference in New Issue
Block a user