"Some older scripts may still use ‘.’ in place of the ‘:’ separator. POSIX 1003.1-2001 does not require support for that, but for backward compatibility GNU chown supports ‘.’ so long as no ambiguity results. New scripts should avoid the use of ‘.’ because it is not portable, and because it has undesirable results if the entire owner‘.’group happens to identify a user whose name contains ‘.’." Source: http://gnu.org/software/coreutils/manual/html_node/chown-invocation.html#chown-invocation.
98 lines
2.7 KiB
Bash
Executable File
98 lines
2.7 KiB
Bash
Executable File
#!/sbin/sh
|
|
# AnyKernel2 Backend
|
|
# osm0sis @ xda-developers
|
|
|
|
OUTFD=/proc/self/fd/$2;
|
|
ZIP="$3";
|
|
DIR=`dirname "$ZIP"`;
|
|
|
|
ui_print() {
|
|
until [ ! "$1" ]; do
|
|
echo -e "ui_print $1\nui_print" > $OUTFD;
|
|
shift;
|
|
done;
|
|
}
|
|
show_progress() { echo "progress $1 $2" > $OUTFD; }
|
|
set_perm_recursive() {
|
|
dirs=$(echo $* | $bb awk '{ print substr($0, index($0,$5)) }');
|
|
for i in $dirs; do
|
|
chown -R $1:$2 $i;
|
|
find "$i" -type d -exec chmod $3 {} +;
|
|
find "$i" -type f -exec chmod $4 {} +;
|
|
done;
|
|
}
|
|
file_getprop() { grep "^$2" "$1" | cut -d= -f2; }
|
|
getprop() { test -e /sbin/getprop && /sbin/getprop $1 || file_getprop /default.prop $1; }
|
|
cleanup() { rm -rf /tmp/anykernel; }
|
|
if [ "$(file_getprop /tmp/anykernel/anykernel.sh do.cleanuponabort)" == 1 ]; then
|
|
abort() { ui_print "$*"; cleanup; umount /system; umount /data; exit 1; }
|
|
else
|
|
abort() { ui_print "$*"; umount /system; umount /data; exit 1; }
|
|
fi;
|
|
|
|
show_progress 1.34 4;
|
|
ui_print " ";
|
|
cleanup;
|
|
mkdir -p /tmp/anykernel/bin;
|
|
cd /tmp/anykernel;
|
|
unzip -o "$ZIP";
|
|
if [ $? != 0 -o -z "$(ls /tmp/anykernel/tools)" ]; then
|
|
abort "Unzip failed. Aborting...";
|
|
fi;
|
|
chmod -R 755 /tmp/anykernel/tools /tmp/anykernel/bin;
|
|
bb=/tmp/anykernel/tools/busybox;
|
|
|
|
ui_print "$(file_getprop /tmp/anykernel/anykernel.sh kernel.string)";
|
|
ui_print " ";
|
|
ui_print "AnyKernel2 by osm0sis @ xda-developers";
|
|
ui_print " ";
|
|
umount /system;
|
|
mount -o ro -t auto /system;
|
|
mount /data;
|
|
test -f /system/system/build.prop && root=/system;
|
|
|
|
if [ "$(file_getprop /tmp/anykernel/anykernel.sh do.devicecheck)" == 1 ]; then
|
|
ui_print "Checking device...";
|
|
for i in 1 2 3 4 5; do
|
|
testname="$(file_getprop /tmp/anykernel/anykernel.sh device.name$i)";
|
|
if [ "$(getprop ro.product.device)" == "$testname" -o "$(getprop ro.build.product)" == "$testname" ]; then
|
|
ui_print "$testname";
|
|
match=1;
|
|
fi;
|
|
done;
|
|
ui_print " ";
|
|
if [ "$match" != 1 ]; then
|
|
abort "Unsupported device. Aborting...";
|
|
fi;
|
|
fi;
|
|
|
|
ui_print "Installing kernel...";
|
|
for i in $($bb --list); do
|
|
$bb ln -s $bb /tmp/anykernel/bin/$i;
|
|
done;
|
|
if [ $? != 0 -o -z "$(ls /tmp/anykernel/bin)" ]; then
|
|
abort "Recovery busybox setup failed. Aborting...";
|
|
fi;
|
|
PATH="/tmp/anykernel/bin:$PATH" $bb ash /tmp/anykernel/anykernel.sh $2;
|
|
if [ $? != "0" ]; then
|
|
abort;
|
|
fi;
|
|
|
|
if [ "$(file_getprop /tmp/anykernel/anykernel.sh do.modules)" == 1 ]; then
|
|
ui_print " ";
|
|
ui_print "Pushing modules...";
|
|
mount -o rw,remount -t auto /system;
|
|
cp -rf /tmp/anykernel/modules/* $root/system/lib/modules/;
|
|
set_perm_recursive 0 0 0755 0644 $root/system/lib/modules;
|
|
mount -o ro,remount -t auto /system;
|
|
fi;
|
|
|
|
if [ "$(file_getprop /tmp/anykernel/anykernel.sh do.cleanup)" == 1 ]; then
|
|
cleanup;
|
|
fi;
|
|
|
|
umount /system;
|
|
umount /data;
|
|
ui_print " ";
|
|
ui_print "Done!";
|