-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Rissu J <rissu.ntk@gmail.com>
- Loading branch information
Showing
9 changed files
with
1,198 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,394 @@ | ||
#!/sbin/sh | ||
# AnyKernel3 Backend (DO NOT CHANGE) | ||
# osm0sis @ xda-developers | ||
# ItzKaguya @ xda-developers | ||
|
||
OUTFD=/proc/self/fd/$2; | ||
ZIPFILE="$3"; | ||
|
||
ps | grep zygote | grep -v grep >/dev/null && BOOTMODE=true || BOOTMODE=false; | ||
$BOOTMODE || ps -A 2>/dev/null | grep zygote | grep -v grep >/dev/null && BOOTMODE=true; | ||
|
||
$BOOTMODE && DIR=/sdcard || DIR=$(dirname "$ZIPFILE"); | ||
|
||
test -d /postinstall/tmp && POSTINSTALL=/postinstall; | ||
test "$AKHOME" || AKHOME=$POSTINSTALL/tmp/anykernel; | ||
test "$ANDROID_ROOT" || ANDROID_ROOT=/system; | ||
|
||
ui_print() { | ||
until [ ! "$1" ]; do | ||
echo "ui_print $1 | ||
ui_print" >> $OUTFD; | ||
shift; | ||
done; | ||
} | ||
ui_printfile() { | ||
while IFS='' read -r line || $BB [[ -n "$line" ]]; do | ||
ui_print "$line"; | ||
done < $1; | ||
} | ||
show_progress() { echo "progress $1 $2" >> $OUTFD; } | ||
file_getprop() { $BB grep "^$2=" "$1" | $BB cut -d= -f2-; } | ||
setup_mountpoint() { | ||
test -L $1 && $BB mv -f $1 ${1}_link; | ||
if [ ! -d $1 ]; then | ||
rm -f $1; | ||
mkdir -p $1; | ||
fi; | ||
} | ||
is_mounted() { $BB mount | $BB grep -q " $1 "; } | ||
mount_apex() { | ||
test -d /system/apex || return 1; | ||
local apex dest loop minorx num; | ||
setup_mountpoint /apex; | ||
test -e /dev/block/loop1 && minorx=$($BB ls -l /dev/block/loop1 | $BB awk '{ print $6 }') || minorx=1; | ||
num=0; | ||
for apex in /system/apex/*; do | ||
dest=/apex/$($BB basename $apex .apex); | ||
test "$dest" == /apex/com.android.runtime.release && dest=/apex/com.android.runtime; | ||
$BB mkdir -p $dest; | ||
case $apex in | ||
*.apex) | ||
$BB unzip -qo $apex apex_payload.img -d /apex; | ||
$BB mv -f /apex/apex_payload.img $dest.img; | ||
$BB 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; | ||
($BB mknod $loop b 7 $((num * minorx)); | ||
$BB losetup $loop $dest.img) 2>/dev/null; | ||
num=$((num + 1)); | ||
$BB losetup $loop | $BB grep -q $dest.img && break; | ||
done; | ||
$BB mount -t ext4 -o ro,loop,noatime $loop $dest; | ||
if [ $? != 0 ]; then | ||
$BB losetup -d $loop 2>/dev/null; | ||
fi; | ||
fi; | ||
;; | ||
*) $BB 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:/system/framework/telephony-ext.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar; | ||
} | ||
umount_apex() { | ||
test -d /apex || return 1; | ||
local dest loop; | ||
for dest in $($BB find /apex -type d -mindepth 1 -maxdepth 1); do | ||
if [ -f $dest.img ]; then | ||
loop=$($BB mount | $BB grep $dest | $BB cut -d" " -f1); | ||
fi; | ||
($BB umount -l $dest; | ||
$BB losetup -d $loop) 2>/dev/null; | ||
done; | ||
$BB rm -rf /apex 2>/dev/null; | ||
unset ANDROID_RUNTIME_ROOT ANDROID_TZDATA_ROOT BOOTCLASSPATH; | ||
} | ||
mount_all() { | ||
if ! is_mounted /data; then | ||
$BB mount /data; | ||
UMOUNT_DATA=1; | ||
fi; | ||
$BB mount -o ro -t auto /vendor 2>/dev/null; | ||
setup_mountpoint $ANDROID_ROOT; | ||
if ! is_mounted $ANDROID_ROOT; then | ||
$BB mount -o ro -t auto $ANDROID_ROOT 2>/dev/null; | ||
fi; | ||
case $ANDROID_ROOT in | ||
/system_root) setup_mountpoint /system;; | ||
/system) | ||
if ! is_mounted /system && ! is_mounted /system_root; then | ||
setup_mountpoint /system_root; | ||
$BB mount -o ro -t auto /system_root; | ||
elif [ -f /system/system/build.prop ]; then | ||
setup_mountpoint /system_root; | ||
$BB mount --move /system /system_root; | ||
fi; | ||
if [ $? != 0 ]; then | ||
$BB umount /system; | ||
$BB umount -l /system 2>/dev/null; | ||
test -e /dev/block/bootdevice/by-name/system || local slot=$(getprop ro.boot.slot_suffix 2>/dev/null); | ||
$BB mount -o ro -t auto /dev/block/bootdevice/by-name/system$slot /system_root; | ||
fi; | ||
;; | ||
esac; | ||
if is_mounted /system_root; then | ||
if [ -f /system_root/build.prop ]; then | ||
$BB mount -o bind /system_root /system; | ||
else | ||
$BB mount -o bind /system_root/system /system; | ||
fi; | ||
fi; | ||
mount_apex; | ||
} | ||
umount_all() { | ||
(umount_apex; | ||
if [ ! -d /postinstall/tmp ]; then | ||
$BB umount /system; | ||
$BB umount -l /system; | ||
if [ -e /system_root ]; then | ||
$BB umount /system_root; | ||
$BB umount -l /system_root; | ||
fi; | ||
fi; | ||
umount /vendor; | ||
umount -l /vendor; | ||
if [ "$UMOUNT_DATA" ]; then | ||
$BB umount /data; | ||
$BB umount -l /data; | ||
fi) 2>/dev/null; | ||
} | ||
setup_env() { | ||
ui_print " " "Initializing environment ..." " "; | ||
$BOOTMODE && return 1; | ||
$BB mount -o bind /dev/urandom /dev/random; | ||
if [ -L /etc ]; then | ||
setup_mountpoint /etc; | ||
$BB cp -af /etc_link/* /etc; | ||
$BB sed -i 's; / ; /system_root ;' /etc/fstab; | ||
fi; | ||
umount_all; | ||
mount_all; | ||
OLD_LD_PATH=$LD_LIBRARY_PATH; | ||
OLD_LD_PRE=$LD_PRELOAD; | ||
OLD_LD_CFG=$LD_CONFIG_FILE; | ||
unset LD_LIBRARY_PATH LD_PRELOAD LD_CONFIG_FILE; | ||
if [ ! "$(getprop 2>/dev/null)" ]; then | ||
getprop() { | ||
local propdir propfile propval; | ||
for propdir in / /system_root /system /vendor /odm /product; do | ||
for propfile in default.prop build.prop; do | ||
test "$propval" && break 2 || propval="$(file_getprop $propdir/$propfile $1 2>/dev/null)"; | ||
done; | ||
done; | ||
test "$propval" && echo "$propval" || echo ""; | ||
} | ||
elif [ ! "$(getprop ro.build.type 2>/dev/null)" ]; then | ||
getprop() { | ||
($(which getprop) | $BB grep "$1" | $BB cut -d[ -f3 | $BB cut -d] -f1) 2>/dev/null; | ||
} | ||
fi; | ||
} | ||
restore_env() { | ||
$BOOTMODE && return 1; | ||
local dir; | ||
unset -f getprop; | ||
test "$OLD_LD_PATH" && export LD_LIBRARY_PATH=$OLD_LD_PATH; | ||
test "$OLD_LD_PRE" && export LD_PRELOAD=$OLD_LD_PRE; | ||
test "$OLD_LD_CFG" && export LD_CONFIG_FILE=$OLD_LD_CFG; | ||
umount_all; | ||
test -L /etc_link && $BB rm -rf /etc/*; | ||
(for dir in /apex /system /system_root /etc; do | ||
if [ -L "${dir}_link" ]; then | ||
rmdir $dir; | ||
$BB mv -f ${dir}_link $dir; | ||
fi; | ||
done; | ||
$BB umount -l /dev/random) 2>/dev/null; | ||
} | ||
debugging() { | ||
case $(basename "$ZIPFILE" .zip) in | ||
*-debugging) | ||
ui_print " " "Creating debugging archive in $DIR..."; | ||
test -f /tmp/recovery.log && local log=/tmp/recovery.log; | ||
$BB tar -czf "$DIR/anykernel3-$(date +%Y-%m-%d_%H%M%S)-debug.tgz" $AKHOME $log; | ||
;; | ||
esac; | ||
} | ||
cleanup() { | ||
cd $(dirname $AKHOME); | ||
rm -rf $AKHOME; | ||
} | ||
abort() { | ||
ui_print "$@"; | ||
debugging; | ||
restore_env; | ||
if [ ! -f anykernel.sh -o "$(file_getprop anykernel.sh do.cleanuponabort 2>/dev/null)" == 1 ]; then | ||
cleanup; | ||
fi; | ||
exit 1; | ||
} | ||
do_devicecheck() { | ||
test "$(file_getprop anykernel.sh do.devicecheck)" == 1 || return 1; | ||
local device devicename match product testname vendordevice vendorproduct; | ||
ui_print " " "- Checking device..."; | ||
device=$(getprop ro.product.device 2>/dev/null); | ||
product=$(getprop ro.build.product 2>/dev/null); | ||
vendordevice=$(getprop ro.product.vendor.device 2>/dev/null); | ||
vendorproduct=$(getprop ro.vendor.product.device 2>/dev/null); | ||
for testname in $(file_getprop anykernel.sh 'device.name.*'); do | ||
for devicename in $device $product $vendordevice $vendorproduct; do | ||
if [ "$devicename" == "$testname" ]; then | ||
ui_print "$testname" " "; | ||
match=1; | ||
break 2; | ||
fi; | ||
done; | ||
done; | ||
if [ ! "$match" ]; then | ||
abort "! Unsupported device. Aborting..."; | ||
fi; | ||
} | ||
int2ver() { | ||
if $BB [ "$1" -eq "$1" ] 2>/dev/null; then | ||
echo "$1.0.0"; | ||
elif [ ! "$(echo "$1" | $BB cut -d. -f3)" ]; then | ||
echo "$1.0"; | ||
else | ||
echo "$1"; | ||
fi; | ||
} | ||
dump_moduleinfo() { | ||
cat <<EOF > $1; | ||
name=ItzKaguya Kernel Installer | ||
version=$($BB awk '{ print $3 }' $AKHOME/vertmp) $($BB grep -oE '#.[0-9]' $AKHOME/vertmp) | ||
versionCode=1 | ||
author=ItzKaguya | ||
description=$KERNEL_STRING | ||
EOF | ||
} | ||
dump_moduleremover() { | ||
cat <<'EOF' > $1; | ||
#!/system/bin/sh | ||
MODDIR=${0%/*}; | ||
if [ "$(cat /proc/version)" != "$(cat $MODDIR/version)" ]; then | ||
rm -rf $MODDIR; | ||
fi; | ||
EOF | ||
} | ||
do_modules() { | ||
test "$(file_getprop anykernel.sh do.modules)" == 1 || return 1; | ||
local block modcon moddir modtarget module slot umask; | ||
if [ "$(file_getprop anykernel.sh do.systemless)" == 1 ]; then | ||
cd $AKHOME/modules; | ||
ui_print " " "Creating kernel helper Magisk module..."; | ||
if [ -d /data/adb/magisk -a -f $AKHOME/split_img/.magisk ]; then | ||
umask=$(umask); | ||
umask 022; | ||
moddir=/data/adb/modules/ak3-helper; | ||
rm -rf $moddir; | ||
mkdir -p system $moddir; | ||
($BB mv -f product system; | ||
$BB mv -f vendor system) 2>/dev/null; | ||
$BB cp -rLf * $moddir; | ||
dump_moduleinfo $moddir/module.prop; | ||
dump_moduleremover $moddir/post-fs-data.sh; | ||
cp -f $AKHOME/vertmp $moddir/version; | ||
umask $umask; | ||
else | ||
ui_print "Magisk installation not found. Skipped!"; | ||
fi; | ||
else | ||
cd $AKHOME/modules; | ||
ui_print " " "Pushing modules..."; | ||
if [ -d /dev/block/mapper ]; then | ||
for block in system vendor; do | ||
for slot in "" _a _b; do | ||
$BB blockdev --setrw /dev/block/mapper/$block$slot 2>/dev/null; | ||
done; | ||
done; | ||
fi; | ||
if [ ! -d /postinstall/tmp ]; then | ||
$BB mount -o rw,remount -t auto /system; | ||
$BB mount -o rw,remount -t auto /vendor 2>/dev/null; | ||
fi; | ||
for module in $(find . -name '*.ko'); do | ||
modtarget=$POSTINSTALL$(echo $module | $BB cut -c2-); | ||
if [ ! -e $modtarget ]; then | ||
case $module in | ||
*/vendor/*) modcon=vendor;; | ||
*) modcon=system;; | ||
esac; | ||
fi; | ||
if is_mounted $modtarget; then | ||
$BB mount -o rw,remount -t auto $modtarget; | ||
fi; | ||
mkdir -p $(dirname $modtarget); | ||
$BB cp -rLf $module $modtarget; | ||
$BB chown 0:0 $modtarget; | ||
$BB chmod 644 $modtarget; | ||
if [ "$modcon" ]; then | ||
chcon "u:object_r:${modcon}_file:s0" $modtarget; | ||
fi; | ||
if is_mounted $modtarget; then | ||
$BB mount -o ro,remount -t auto $modtarget; | ||
fi; | ||
done; | ||
if [ ! -d /postinstall/tmp ]; then | ||
$BB mount -o ro,remount -t auto /system; | ||
$BB mount -o ro,remount -t auto /vendor 2>/dev/null; | ||
fi; | ||
fi; | ||
cd $AKHOME; | ||
} | ||
|
||
show_progress 1.34 4; | ||
ui_print " "; | ||
cleanup; | ||
mkdir -p $AKHOME/bin; | ||
cd $AKHOME; | ||
unzip -o "$ZIPFILE"; | ||
if [ $? != 0 -o ! "$(ls tools)" ]; then | ||
abort "Unzip failed. Aborting..."; | ||
fi; | ||
for ARCH32 in x86 arm; do | ||
if [ -d $AKHOME/tools/$ARCH32 ]; then | ||
BB=$AKHOME/tools/$ARCH32/busybox; | ||
chmod 755 $BB; | ||
$BB >/dev/null 2>&1; | ||
if [ $? == 0 ]; then | ||
$BB mv -f $AKHOME/tools/$ARCH32/* $AKHOME/tools; | ||
break; | ||
fi; | ||
fi; | ||
done; | ||
BB=$AKHOME/tools/busybox; | ||
chmod 755 $BB; | ||
$BB chmod -R 755 tools bin; | ||
$BB --install -s bin; | ||
if [ $? != 0 -o -z "$(ls bin)" ]; then | ||
abort "Busybox setup failed. Aborting..."; | ||
fi; | ||
|
||
if [ -f banner ]; then | ||
ui_printfile banner; | ||
ui_print " " " "; | ||
fi; | ||
|
||
if [ -f version ]; then | ||
ui_print " "; | ||
ui_printfile version; | ||
ui_print " "; | ||
fi; | ||
ui_print "---------------------------------------"; | ||
ui_print "| @ItzKaguya - Kernel source"; | ||
ui_print "| @RissuDesu - Kernel builder"; | ||
ui_print "---------------------------------------"; | ||
KERNEL_STRING="$(file_getprop anykernel.sh kernel.string)"; | ||
ui_print "- To be installed: $KERNEL_STRING"; | ||
setup_env; | ||
|
||
do_devicecheck; | ||
do_versioncheck; | ||
do_levelcheck; | ||
|
||
ui_print " " "- Installing..."; | ||
CORE=$($BB grep -oE 'ak.*core.sh' anykernel.sh); | ||
test -f tools/$CORE || $BB ln -s $AKHOME/tools/ak*-core.sh $AKHOME/tools/$CORE; | ||
PATH="$AKHOME/bin:$PATH" home=$AKHOME $BB ash anykernel.sh $2; | ||
if [ $? != 0 ]; then | ||
abort; | ||
fi; | ||
|
||
do_modules; | ||
|
||
debugging; | ||
restore_env; | ||
|
||
if [ "$(file_getprop anykernel.sh do.cleanup)" == 1 ]; then | ||
cleanup; | ||
fi; | ||
|
||
ui_print " " "- Done!"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#FLASHAFTERUPDATEV2 | ||
# Dummy file; update-binary is a shell script. |
Oops, something went wrong.