- some ROMs have taken it upon themselves to go against AOSP, i.e. where starting with Pie AOSP now versions it as only 9, some ROMs are still making it 9.0 - introduce integer 2 float function that will add a decimal place to all for comparisons - this should support the majority of ROMs, but anything crazy like 9.0.0, or crazier like 09.0.0 should be frowned upon by the community and the ROM devs should be made to get it together and follow AOSP
218 lines
5.8 KiB
Bash
Executable File
218 lines
5.8 KiB
Bash
Executable File
#!/sbin/sh
|
|
# AnyKernel2 Backend (DO NOT CHANGE)
|
|
# osm0sis @ xda-developers
|
|
|
|
OUTFD=/proc/self/fd/$2;
|
|
ZIPFILE="$3";
|
|
DIR=`dirname "$ZIPFILE"`;
|
|
|
|
ui_print() {
|
|
until [ ! "$1" ]; do
|
|
echo -e "ui_print $1\nui_print" > $OUTFD;
|
|
shift;
|
|
done;
|
|
}
|
|
show_progress() { echo "progress $1 $2" > $OUTFD; }
|
|
file_getprop() { $bb grep "^$2=" "$1" | $bb cut -d= -f2-; }
|
|
cleanup() {
|
|
cd /tmp;
|
|
rm -rf /tmp/anykernel;
|
|
}
|
|
debugging() {
|
|
case $(basename "$ZIPFILE" .zip) in
|
|
*-debugging)
|
|
ui_print " ";
|
|
ui_print "Creating debugging archive in zip directory...";
|
|
$bb tar -czvf "$DIR/anykernel2-$(date +%Y-%m-%d_%H%M%S)-debug.tgz" /tmp/*;
|
|
;;
|
|
esac;
|
|
}
|
|
is_mounted() { $bb mount | $bb grep " $1 "; }
|
|
unmount_all() {
|
|
(umount /system;
|
|
if [ -d /system_root -a ! -f /system/build.prop ]; then
|
|
umount /system_root;
|
|
fi;
|
|
umount /system;
|
|
umount /vendor;
|
|
umount /data) 2>/dev/null;
|
|
}
|
|
abort() {
|
|
ui_print "$*";
|
|
debugging;
|
|
if [ ! -f anykernel.sh -o "$(file_getprop anykernel.sh do.cleanuponabort 2>/dev/null)" == 1 ]; then
|
|
cleanup;
|
|
fi;
|
|
unmount_all;
|
|
exit 1;
|
|
}
|
|
|
|
show_progress 1.34 4;
|
|
ui_print " ";
|
|
cleanup;
|
|
mkdir -p /tmp/anykernel/bin;
|
|
cd /tmp/anykernel;
|
|
unzip -o "$ZIPFILE";
|
|
if [ $? != 0 -o -z "$(ls tools)" ]; then
|
|
abort "Unzip failed. Aborting...";
|
|
fi;
|
|
bb=/tmp/anykernel/tools/busybox;
|
|
chmod 755 $bb;
|
|
$bb chmod -R 755 tools bin;
|
|
|
|
if [ -f banner ]; then
|
|
while IFS='' read -r line || $bb [[ -n "$line" ]]; do
|
|
ui_print "$line";
|
|
done < banner;
|
|
ui_print " ";
|
|
ui_print " ";
|
|
fi;
|
|
|
|
ui_print "$(file_getprop anykernel.sh kernel.string)";
|
|
if [ -f version ]; then
|
|
ui_print " ";
|
|
while IFS='' read -r line || $bb [[ -n "$line" ]]; do
|
|
ui_print "$line";
|
|
done < version;
|
|
ui_print " ";
|
|
fi;
|
|
ui_print " ";
|
|
ui_print "AnyKernel2 by osm0sis @ xda-developers";
|
|
ui_print " ";
|
|
ui_print " ";
|
|
|
|
unmount_all;
|
|
if [ ! "$(is_mounted /system)" ]; then
|
|
$bb mount -o ro -t auto /system;
|
|
fi;
|
|
($bb mount -o ro -t auto /vendor;
|
|
$bb mount /data) 2>/dev/null;
|
|
if [ -f /system/system/build.prop ]; then
|
|
umount /system;
|
|
(umount /system;
|
|
mkdir /system_root) 2>/dev/null;
|
|
$bb mount -o ro -t auto /dev/block/bootdevice/by-name/system /system_root;
|
|
$bb mount -o bind /system_root/system /system;
|
|
fi;
|
|
savedpath="$LD_LIBRARY_PATH";
|
|
savedpre="$LD_PRELOAD";
|
|
unset LD_LIBRARY_PATH;
|
|
unset LD_PRELOAD;
|
|
|
|
if [ ! "$(getprop 2>/dev/null)" ]; then
|
|
getprop() {
|
|
local propval="$(file_getprop /default.prop $1 2>/dev/null)";
|
|
test "$propval" || local propval="$(file_getprop /system/build.prop $1 2>/dev/null)";
|
|
test "$propval" && echo "$propval" || echo "";
|
|
}
|
|
elif [ ! "$(getprop ro.product.device 2>/dev/null)" -a ! "$(getprop ro.build.product 2>/dev/null)" ]; then
|
|
getprop() {
|
|
($(which getprop) | $bb grep "$1" | $bb cut -d[ -f3 | $bb cut -d] -f1) 2>/dev/null;
|
|
}
|
|
fi;
|
|
|
|
if [ "$(file_getprop anykernel.sh do.devicecheck)" == 1 ]; then
|
|
ui_print "Checking device...";
|
|
device="$(getprop ro.product.device)";
|
|
product="$(getprop ro.build.product)";
|
|
for testname in $(file_getprop anykernel.sh 'device.name.*'); do
|
|
if [ "$device" == "$testname" -o "$product" == "$testname" ]; then
|
|
ui_print "$testname";
|
|
match=1;
|
|
break;
|
|
fi;
|
|
done;
|
|
ui_print " ";
|
|
if [ ! "$match" ]; then
|
|
abort "Unsupported device. Aborting...";
|
|
fi;
|
|
fi;
|
|
|
|
int2float() { test "$1" -eq "$1" 2>/dev/null && $bb printf '%0.1f\n' "$1" || echo "$1"; }
|
|
supported_ver="$(file_getprop anykernel.sh supported.versions | $bb tr -d '[:space:]')";
|
|
if [ "$supported_ver" ]; then
|
|
ui_print "Checking Android version...";
|
|
android_ver="$(file_getprop /system/build.prop ro.build.version.release)";
|
|
if [ "$(echo $supported_ver | $bb grep -)" ]; then
|
|
lo_ver=$(echo $supported_ver | $bb cut -d- -f1);
|
|
hi_ver=$(echo $supported_ver | $bb cut -d- -f2);
|
|
if [ "$(echo -e "$(int2float $hi_ver)\n$(int2float $lo_ver)\n$(int2float $android_ver)" | $bb sort -g | $bb grep -n "$(int2float $android_ver)" | $bb grep '^2:')" ]; then
|
|
supported=1;
|
|
fi;
|
|
else
|
|
for ver in $(echo $supported_ver | $bb sed 's;,; ;g'); do
|
|
if [ "$(int2float $ver)" == "$(int2float $android_ver)" ]; then
|
|
supported=1;
|
|
break;
|
|
fi;
|
|
done;
|
|
fi;
|
|
if [ "$supported" ]; then
|
|
ui_print "$android_ver";
|
|
ui_print " ";
|
|
else
|
|
ui_print " ";
|
|
abort "Unsupported Android version. Aborting...";
|
|
fi;
|
|
fi;
|
|
|
|
ui_print "Installing...";
|
|
for i in $($bb --list); do
|
|
$bb ln -s $bb bin/$i;
|
|
done;
|
|
if [ $? != 0 -o -z "$(ls bin)" ]; then
|
|
abort "Recovery busybox setup failed. Aborting...";
|
|
fi;
|
|
PATH="/tmp/anykernel/bin:$PATH" $bb ash anykernel.sh $2;
|
|
if [ $? != 0 ]; then
|
|
abort;
|
|
fi;
|
|
|
|
if [ "$(file_getprop anykernel.sh do.modules)" == 1 ]; then
|
|
ui_print " ";
|
|
ui_print "Pushing modules...";
|
|
$bb mount -o rw,remount -t auto /system;
|
|
$bb mount -o rw,remount -t auto /vendor 2>/dev/null;
|
|
cd /tmp/anykernel/modules;
|
|
for module in $(find . -name '*.ko'); do
|
|
modtarget=$(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;
|
|
cd /tmp/anykernel;
|
|
$bb mount -o ro,remount -t auto /system;
|
|
$bb mount -o ro,remount -t auto /vendor 2>/dev/null;
|
|
fi;
|
|
|
|
debugging;
|
|
|
|
if [ "$(file_getprop anykernel.sh do.cleanup)" == 1 ]; then
|
|
cleanup;
|
|
fi;
|
|
|
|
test "$savedpath" && export LD_LIBRARY_PATH="$savedpath";
|
|
test "$savedpre" && export LD_PRELOAD="$savedpre";
|
|
|
|
unmount_all;
|
|
|
|
ui_print " ";
|
|
ui_print " ";
|
|
ui_print "Done!";
|