#!/system/bin/sh # # /system/bin/custom_init # #### Settings #### # echo "--- Welcome to Android!"; insmod /system/lib/compcache/ramzswap.ko; rzscontrol /dev/block/ramzswap0 -i -d 32768; busybox swapon /dev/block/ramzswap0; echo 528000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq; echo 0 > /proc/sys/vm/page-cluster; # Set "deadline" scheduler fifo batch to 1 for mtdblocks and mmc for i in `ls -1 /sys/block/mtdblock*` /sys/block/mmcblk0 do echo 1 > $i/queue/iosched/fifo_batch done # Automatic ZipAlign by Wes Garner # ZipAlign files in /data that have not been previously ZipAligned (using md5sum) echo "--- ZipAligning Data Apps" if [ ! -d /data/zipalign ]; then mkdir /data/zipalign; fi; for apk in /data/app/*.apk ; do if [ -e /data/zipalign/$(basename $apk).md5 ]; then MDCURR=`md5sum $apk`; MDSAVE=`cat /data/zipalign/$(basename $apk).md5`; if [ ! "$MDCURR" == "$MDSAVE" ]; then echo ZipAligning $(basename $apk); zipalign -f 4 $apk /cache/$(basename $apk); cp -f -p /cache/$(basename $apk) $apk; rm /cache/$(basename $apk); md5sum $apk > /data/zipalign/$(basename $apk).md5; else echo ZipAlign already completed on $apk; fi; else echo ZipAligning $(basename $apk); zipalign -f 4 $apk /cache/$(basename $apk); cp -f -p /cache/$(basename $apk) $apk; rm /cache/$(basename $apk); md5sum $apk > /data/zipalign/$(basename $apk).md5; fi; done; echo "--- ZipAligning Data Apps-Private" for apk in /data/app-private/*.apk ; do if [ -e /data/zipalign/$(basename $apk).md5 ]; then MDCURR=`md5sum $apk`; MDSAVE=`cat /data/zipalign/$(basename $apk).md5`; if [ ! "$MDCURR" == "$MDSAVE" ]; then echo ZipAligning $(basename $apk); zipalign -f 4 $apk /cache/$(basename $apk); cp -f -p /cache/$(basename $apk) $apk; rm /cache/$(basename $apk); md5sum $apk > /data/zipalign/$(basename $apk).md5; else echo ZipAlign already completed on $apk; fi; else echo ZipAligning $(basename $apk); zipalign -f 4 $apk /cache/$(basename $apk); cp -f -p /cache/$(basename $apk) $apk; rm /cache/$(basename $apk); md5sum $apk > /data/zipalign/$(basename $apk).md5; fi; done; # # if magic/mt3g then exit # if [ `busybox cat /proc/cpuinfo | busybox grep -cE '^Hardware.*sapphire'` -eq 1 ]; then if [ -e /sdcard/userinit.sh ]; then echo "--- Executing userinit.sh" busybox chmod +x /sdcard/userinit.sh /system/bin/sh /sdcard/userinit.sh; fi; sync; setprop cm.filesystem.ready 1; exit; fi; # # Enable Apps2SD for g1/dream only if [ -e /dev/block/mmcblk0p2 ]; then echo "--- Checking filesystems"; # fsck the sdcard filesystem first e2fsck -y /dev/block/mmcblk0p2; # set property with exit code in case an error occurs setprop cm.e2fsck.errors $?; # mount and set perms busybox mount -o noatime,nodiratime -t auto /dev/block/mmcblk0p2 /system/sd; if [ "$?" = 0 ]; then busybox chown 1000:1000 /system/sd; busybox chmod 771 /system/sd; # clean up any old symlinks, create data directories for i in dalvik-cache data; do if [ -h /data/$i ]; then rm /data/$i; fi; if [ ! -d /data/$i ]; then mkdir /data/$i; busybox chown 1000:1000 /data/$i; busybox chmod 771 /data/$i; fi; done; # don't allow /data/data on sd because of upgrade issues - move it if possible if [ -d /system/sd/data ]; then busybox cp -a /system/sd/data/* /data/data/; busybox rm -rf /system/sd/data; fi; # move apps and dalvik cache from internal memory to sdcard for i in app app-private dalvik-cache; do if [ ! -d /system/sd/$i ]; then mkdir /system/sd/$i; fi busybox chown 1000:1000 /system/sd/$i; busybox chmod 771 /system/sd/$i if [ -d /data/$i ] && [ ! -h /data/$i ]; then busybox cp -a /data/$i/* /system/sd/$i/; busybox rm -f /data/$i/*; fi; done; # symlink app dirs - they must be on the same filesystem for i in app app-private; do if [ -d /data/$i ] && [ ! -h /data/$i ]; then busybox rm -rf /data/$i; busybox ln -s /system/sd/$i /data/$i; fi; done; # bind mount dalvik-cache so we can still boot without the sdcard busybox mount -o bind /system/sd/dalvik-cache /data/dalvik-cache; busybox chown 1000:1000 /data/dalvik-cache; busybox chmod 771 /data/dalvik-cache; # clean up old whiteouts for i in local misc property system tombstones data; do if [ -h /system/sd/$i ]; then rm -f /system/sd/$i; fi done; # please don't put odex files in the app directory people! # it causes dexopt to crash when switching builds! busybox rm -f /system/sd/app/*.odex setprop cm.a2sd.active 1; echo "+++ Apps-to-SD successfully enabled"; else echo "*** Unable to mount filesystem for a2sd!"; fi fi if [ `getprop cm.a2sd.active` != 1 ]; then # replace symlinks with directories so we can boot without sd for i in app app-private; do if [ -h /data/$i ]; then rm -f /data/$i; mkdir /data/$i; busybox chown 1000:1000 /data/$i; busybox chmod 771 /data/$i; fi; done; setprop cm.a2sd.active 0; fi; if [ -e /sdcard/userinit.sh ]; then echo "--- Executing userinit.sh" busybox chmod +x /sdcard/userinit.sh /system/bin/sh /sdcard/userinit.sh; fi; sync; setprop cm.filesystem.ready 1;