diff options
Diffstat (limited to '')
-rw-r--r-- | prebuilt/Android.mk | 197 | ||||
-rw-r--r-- | prebuilt/HTCDumlock.apk | bin | 0 -> 13210 bytes | |||
-rwxr-xr-x | prebuilt/bbinstall.sh | 9 | ||||
-rw-r--r-- | prebuilt/dump_imagesys | bin | 0 -> 5504 bytes | |||
-rwxr-xr-x | prebuilt/fix_permissions.sh | 476 | ||||
-rw-r--r-- | prebuilt/flash_imagesys | bin | 0 -> 5504 bytes | |||
-rw-r--r-- | prebuilt/fs | 46 | ||||
-rw-r--r-- | prebuilt/htcdumlock | bin | 0 -> 9668 bytes | |||
-rw-r--r-- | prebuilt/htcdumlocksys | bin | 0 -> 9716 bytes | |||
-rw-r--r-- | prebuilt/libbmlutils.so | bin | 0 -> 5428 bytes | |||
-rw-r--r-- | prebuilt/libflashutils.so | bin | 0 -> 5360 bytes | |||
-rw-r--r-- | prebuilt/libmmcutils.so | bin | 0 -> 9616 bytes | |||
-rw-r--r-- | prebuilt/libmtdutils.so | bin | 0 -> 13716 bytes | |||
-rw-r--r-- | prebuilt/mke2fs.conf | 17 | ||||
-rwxr-xr-x | prebuilt/parted | bin | 0 -> 346680 bytes | |||
-rwxr-xr-x | prebuilt/relink-binaries.sh | 19 | ||||
-rwxr-xr-x | prebuilt/relink.sh | 27 | ||||
-rw-r--r-- | prebuilt/sdparted | 658 | ||||
-rw-r--r-- | prebuilt/teamwin | 1 |
19 files changed, 1450 insertions, 0 deletions
diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk new file mode 100644 index 000000000..8b0f5cf57 --- /dev/null +++ b/prebuilt/Android.mk @@ -0,0 +1,197 @@ +LOCAL_PATH := $(call my-dir) + +RELINK := $(LOCAL_PATH)/relink.sh + +#dummy file to trigger required modules +include $(CLEAR_VARS) +LOCAL_MODULE := teamwin +LOCAL_MODULE_TAGS := eng +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin + +# Manage list +RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/dump_image +RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/flash_image +RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/erase_image +RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/busybox +RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/pigz +RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/e2fsck +RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/mke2fs +RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/tune2fs +RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/linker +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libc.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcutils.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libdl.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_blkid.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_com_err.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_e2p.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2fs.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_profile.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_uuid.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/liblog.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libm.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libstdc++.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libz.so +#RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libjpeg.so +#RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libmtdutils.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libmmcutils.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libbmlutils.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libflashutils.so +RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libstlport.so +ifeq ($(TW_INCLUDE_BLOBPACK), true) + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/blobpack +endif +ifeq ($(TW_INCLUDE_INJECTTWRP), true) + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/injecttwrp +endif +ifeq ($(TW_INCLUDE_DUMLOCK), true) + RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/htcdumlock +endif +ifeq ($(TW_INCLUDE_CRYPTO), true) + RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrypto.so +endif +ifeq ($(TW_INCLUDE_JB_CRYPTO), true) + RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrypto.so +endif + +TWRP_AUTOGEN := $(intermediates)/teamwin + +GEN := $(intermediates)/teamwin +$(GEN): $(RELINK) +$(GEN): $(RELINK_SOURCE_FILES) $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery + $(RELINK) $(TARGET_RECOVERY_ROOT_OUT)/sbin $(RELINK_SOURCE_FILES) + $(RELINK) $(call intermediates-dir-for,EXECUTABLES,recovery) $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery + +LOCAL_GENERATED_SOURCES := $(GEN) +LOCAL_SRC_FILES := teamwin $(GEN) +include $(BUILD_PREBUILT) + +#bbinstall.sh +include $(CLEAR_VARS) +LOCAL_MODULE := bbinstall.sh +LOCAL_MODULE_TAGS := eng +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin +LOCAL_SRC_FILES := $(LOCAL_MODULE) +include $(BUILD_PREBUILT) + +#fix_permissions +include $(CLEAR_VARS) +LOCAL_MODULE := fix_permissions.sh +LOCAL_MODULE_TAGS := eng +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin +LOCAL_SRC_FILES := $(LOCAL_MODULE) +include $(BUILD_PREBUILT) + +#fs +include $(CLEAR_VARS) +LOCAL_MODULE := fs +LOCAL_MODULE_TAGS := eng +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin +LOCAL_SRC_FILES := $(LOCAL_MODULE) +include $(BUILD_PREBUILT) + +#mke2fs.conf +include $(CLEAR_VARS) +LOCAL_MODULE := mke2fs.conf +LOCAL_MODULE_TAGS := eng +LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES +LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/etc +LOCAL_SRC_FILES := $(LOCAL_MODULE) +include $(BUILD_PREBUILT) + +ifeq ($(BOARD_HAS_NO_REAL_SDCARD),) + #parted + include $(CLEAR_VARS) + LOCAL_MODULE := parted + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #sdparted + include $(CLEAR_VARS) + LOCAL_MODULE := sdparted + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) +endif + +ifeq ($(TW_INCLUDE_DUMLOCK), true) + #htcdumlock for /system for dumlock + include $(CLEAR_VARS) + LOCAL_MODULE := htcdumlocksys + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #flash_image for /system for dumlock + include $(CLEAR_VARS) + LOCAL_MODULE := flash_imagesys + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #dump_image for /system for dumlock + include $(CLEAR_VARS) + LOCAL_MODULE := dump_imagesys + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #libbmlutils for /system for dumlock + include $(CLEAR_VARS) + LOCAL_MODULE := libbmlutils.so + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #libflashutils for /system for dumlock + include $(CLEAR_VARS) + LOCAL_MODULE := libflashutils.so + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #libmmcutils for /system for dumlock + include $(CLEAR_VARS) + LOCAL_MODULE := libmmcutils.so + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #libmtdutils for /system for dumlock + include $(CLEAR_VARS) + LOCAL_MODULE := libmtdutils.so + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) + + #HTCDumlock.apk + include $(CLEAR_VARS) + LOCAL_MODULE := HTCDumlock.apk + LOCAL_MODULE_TAGS := eng + LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES + LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd + LOCAL_SRC_FILES := $(LOCAL_MODULE) + include $(BUILD_PREBUILT) +endif diff --git a/prebuilt/HTCDumlock.apk b/prebuilt/HTCDumlock.apk Binary files differnew file mode 100644 index 000000000..829819731 --- /dev/null +++ b/prebuilt/HTCDumlock.apk diff --git a/prebuilt/bbinstall.sh b/prebuilt/bbinstall.sh new file mode 100755 index 000000000..c59fec2b7 --- /dev/null +++ b/prebuilt/bbinstall.sh @@ -0,0 +1,9 @@ +#!/sbin/sh + +for cmd in $(/sbin/busybox --list); do + /sbin/busybox ln -s /sbin/busybox /sbin/$cmd +done + +ln -sf /sbin/pigz /sbin/gzip +ln -sf /sbin/unpigz /sbin/gunzip +rm /sbin/mkdosfs
\ No newline at end of file diff --git a/prebuilt/dump_imagesys b/prebuilt/dump_imagesys Binary files differnew file mode 100644 index 000000000..e1bdb6293 --- /dev/null +++ b/prebuilt/dump_imagesys diff --git a/prebuilt/fix_permissions.sh b/prebuilt/fix_permissions.sh new file mode 100755 index 000000000..f2c8e2ac4 --- /dev/null +++ b/prebuilt/fix_permissions.sh @@ -0,0 +1,476 @@ +#!/sbin/sh +# +# Warning: if you want to run this script in cm-recovery change the above to #!/sbin/sh +# +# fix_permissions - fixes permissions on Android data directories after upgrade +# shade@chemlab.org +# +# original concept: http://blog.elsdoerfer.name/2009/05/25/android-fix-package-uid-mismatches/ +# implementation by: Cyanogen +# improved by: ankn, smeat, thenefield, farmatito, rikupw, Kastro +# +# v1.1-v1.31r3 - many improvements and concepts from XDA developers. +# v1.34 through v2.00 - A lot of frustration [by Kastro] +# v2.01 - Completely rewrote the script for SPEED, thanks for the input farmatito +# /data/data depth recursion is tweaked; +# fixed single mode; +# functions created for modularity; +# logging can be disabled via CLI for more speed; +# runtime computation added to end (Runtime: mins secs); +# progress (current # of total) added to screen; +# fixed CLI argument parsing, now you can have more than one option!; +# debug cli option; +# verbosity can be disabled via CLI option for less noise;; +# [by Kastro, (XDA: k4str0), twitter;mattcarver] +# v2.02 - ignore com.htc.resources.apk if it exists and minor code cleanups, +# fix help text, implement simulated run (-s) [farmatito] +# v2.03 - fixed chown group ownership output [Kastro] + +VERSION="2.03" + +# Defaults +DEBUG=0 # Debug off by default +LOGGING=0 # Logging on by default +VERBOSE=0 # Verbose on by default + +# Messages +UID_MSG="Changing user ownership for:" +GID_MSG="Changing group ownership for:" +PERM_MSG="Changing permissions for:" + +# Programs needed +ECHO="busybox echo" +GREP="busybox grep" +EGREP="busybox egrep" +CAT="busybox cat" +CHOWN="busybox chown" +CHMOD="busybox chmod" +MOUNT="busybox mount" +UMOUNT="busybox umount" +CUT="busybox cut" +FIND="busybox find" +LS="busybox ls" +TR="busybox tr" +TEE="busybox tee" +TEST="busybox test" +SED="busybox sed" +RM="busybox rm" +WC="busybox wc" +EXPR="busybox expr" +DATE="busybox date" + +# Initialise vars +CODEPATH="" +UID="" +GID="" +PACKAGE="" +REMOVE=0 +NOSYSTEM=0 +ONLY_ONE="" +SIMULATE=0 +SYSREMOUNT=0 +SYSMOUNT=0 +DATAMOUNT=0 +SYSSDMOUNT=0 +FP_STARTTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" ) +FP_STARTEPOCH=$( $DATE +%s ) + +fp_usage() +{ + $ECHO "Usage $0 [OPTIONS] [APK_PATH]" + $ECHO " -d turn on debug" + $ECHO " -f fix only package APK_PATH" + $ECHO " -l disable logging for this run (faster)" + $ECHO " -r remove stale data directories" + $ECHO " of uninstalled packages while fixing permissions" + $ECHO " -s simulate only" + $ECHO " -u check only non-system directories" + $ECHO " -v disable verbosity for this run (less output)" + $ECHO " -V print version" + $ECHO " -h this help" +} + +fp_parseargs() +{ + # Parse options + while $TEST $# -ne 0; do + case "$1" in + -d) + DEBUG=1 + ;; + -f) + if $TEST $# -lt 2; then + $ECHO "$0: missing argument for option $1" + exit 1 + else + if $TEST $( $ECHO $2 | $CUT -c1 ) != "-"; then + ONLY_ONE=$2 + shift; + else + $ECHO "$0: missing argument for option $1" + exit 1 + fi + fi + ;; + -r) + REMOVE=1 + ;; + -s) + SIMULATE=1 + ;; + -l) + if $TEST $LOGGING -eq 0; then + LOGGING=1 + else + LOGGING=0 + fi + ;; + -v) + if $TEST $VERBOSE -eq 0; then + VERBOSE=1 + else + VERBOSE=0 + fi + ;; + -u) + NOSYSTEM=1 + ;; + -V) + $ECHO "$0 $VERSION" + exit 0 + ;; + -h) + fp_usage + exit 0 + ;; + -*) + $ECHO "$0: unknown option $1" + $ECHO + fp_usage + exit 1 + ;; + esac + shift; + done +} + +fp_print() +{ + MSG=$@ + if $TEST $LOGGING -eq 1; then + $ECHO $MSG | $TEE -a $LOG_FILE + else + $ECHO $MSG + fi +} + +fp_start() +{ + if $TEST $SIMULATE -eq 0 ; then + if $TEST $( $GREP -c " /system " "/proc/mounts" ) -ne 0; then + DEVICE=$( $GREP " /system " "/proc/mounts" | $CUT -d ' ' -f1 ) + if $TEST $DEBUG -eq 1; then + fp_print "/system mounted on $DEVICE" + fi + if $TEST $( $GREP " /system " "/proc/mounts" | $GREP -c " ro " ) -ne 0; then + $MOUNT -o remount,rw $DEVICE /system + SYSREMOUNT=1 + fi + else + $MOUNT /system > /dev/null 2>&1 + SYSMOUNT=1 + fi + + if $TEST $( $GREP -c " /data " "/proc/mounts" ) -eq 0; then + $MOUNT /data > /dev/null 2>&1 + DATAMOUNT=1 + fi + + if $TEST -e /dev/block/mmcblk0p2 && $TEST $( $GREP -c " /sd-ext " "/proc/mounts" ) -eq 0; then + $MOUNT /sd-ext > /dev/null 2>&1 + SYSSDMOUNT=1 + fi + fi + if $TEST $( $MOUNT | $GREP -c /sdcard ) -eq 0; then + LOG_FILE="/data/fix_permissions.log" + else + LOG_FILE="/sdcard/fix_permissions.log" + fi + if $TEST ! -e "$LOG_FILE"; then + > $LOG_FILE + fi + + fp_print "$0 $VERSION started at $FP_STARTTIME" +} + +fp_chown_uid() +{ + FP_OLDUID=$1 + FP_UID=$2 + FP_FILE=$3 + + #if user ownership doesn't equal then change them + if $TEST "$FP_OLDUID" != "$FP_UID"; then + if $TEST $VERBOSE -ne 0; then + fp_print "$UID_MSG $FP_FILE from '$FP_OLDUID' to '$FP_UID'" + fi + if $TEST $SIMULATE -eq 0; then + $CHOWN $FP_UID "$FP_FILE" + fi + fi +} + +fp_chown_gid() +{ + FP_OLDGID=$1 + FP_GID=$2 + FP_FILE=$3 + + #if group ownership doesn't equal then change them + if $TEST "$FP_OLDGID" != "$FP_GID"; then + if $TEST $VERBOSE -ne 0; then + fp_print "$GID_MSG $FP_FILE from '$FP_OLDGID' to '$FP_GID'" + fi + if $TEST $SIMULATE -eq 0; then + $CHOWN :$FP_GID "$FP_FILE" + fi + fi +} + +fp_chmod() +{ + FP_OLDPER=$1 + FP_OLDPER=$( $ECHO $FP_OLDPER | cut -c2-10 ) + FP_PERSTR=$2 + FP_PERNUM=$3 + FP_FILE=$4 + + #if the permissions are not equal + if $TEST "$FP_OLDPER" != "$FP_PERSTR"; then + if $TEST $VERBOSE -ne 0; then + fp_print "$PERM_MSG $FP_FILE from '$FP_OLDPER' to '$FP_PERSTR' ($FP_PERNUM)" + fi + #change the permissions + if $TEST $SIMULATE -eq 0; then + $CHMOD $FP_PERNUM "$FP_FILE" + fi + fi +} + +fp_all() +{ + FP_NUMS=$( $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $WC -l ) + I=0 + $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | while read all_line; do + I=$( $EXPR $I + 1 ) + fp_package "$all_line" $I $FP_NUMS + done +} + +fp_single() +{ + FP_SFOUND=$( $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $GREP -i $ONLY_ONE | wc -l ) + if $TEST $FP_SFOUND -gt 1; then + fp_print "Cannot perform single operation on $FP_SFOUND matched package(s)." + elif $TEST $FP_SFOUND = "" -o $FP_SFOUND -eq 0; then + fp_print "Could not find the package you specified in the packages.xml file." + else + FP_SPKG=$( $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $GREP -i $ONLY_ONE ) + fp_package "${FP_SPKG}" 1 1 + fi +} + +fp_package() +{ + pkgline=$1 + curnum=$2 + endnum=$3 + CODEPATH=$( $ECHO $pkgline | $SED 's%.* codePath="\(.*\)".*%\1%' | $CUT -d '"' -f1 ) + PACKAGE=$( $ECHO $pkgline | $SED 's%.* name="\(.*\)".*%\1%' | $CUT -d '"' -f1 ) + UID=$( $ECHO $pkgline | $SED 's%.*serId="\(.*\)".*%\1%' | $CUT -d '"' -f1 ) + GID=$UID + APPDIR=$( $ECHO $CODEPATH | $SED 's%^\(.*\)/.*%\1%' ) + APK=$( $ECHO $CODEPATH | $SED 's%^.*/\(.*\..*\)$%\1%' ) + + #debug + if $TEST $DEBUG -eq 1; then + fp_print "CODEPATH: $CODEPATH APPDIR: $APPDIR APK:$APK UID/GID:$UID:$GID" + fi + + #check for existence of apk + if $TEST -e $CODEPATH; then + fp_print "Processing ($curnum of $endnum): $PACKAGE..." + + #lets get existing permissions of CODEPATH + OLD_UGD=$( $LS -ln "$CODEPATH" ) + OLD_PER=$( $ECHO $OLD_UGD | $CUT -d ' ' -f1 ) + OLD_UID=$( $ECHO $OLD_UGD | $CUT -d ' ' -f3 ) + OLD_GID=$( $ECHO $OLD_UGD | $CUT -d ' ' -f4 ) + + #apk source dirs + if $TEST "$APPDIR" = "/system/app"; then + #skip system apps if set + if $TEST "$NOSYSTEM" = "1"; then + fp_print "***SKIPPING SYSTEM APP ($PACKAGE)!" + return + fi + fp_chown_uid $OLD_UID 0 "$CODEPATH" + fp_chown_gid $OLD_GID 0 "$CODEPATH" + fp_chmod $OLD_PER "rw-r--r--" 644 "$CODEPATH" + elif $TEST "$APPDIR" = "/data/app"; then + fp_chown_uid $OLD_UID 1000 "$CODEPATH" + fp_chown_gid $OLD_GID 1000 "$CODEPATH" + fp_chmod $OLD_PER "rw-r--r--" 644 "$CODEPATH" + elif $TEST "$APPDIR" = "/data/app-private"; then + fp_chown_uid $OLD_UID 1000 "$CODEPATH" + fp_chown_gid $OLD_GID $GID "$CODEPATH" + fp_chmod $OLD_PER "rw-r-----" 640 "$CODEPATH" + fi + else + fp_print "$CODEPATH does not exist ($curnum of $endnum). Reinstall..." + if $TEST $REMOVE -eq 1; then + if $TEST -d /data/data/$PACKAGE ; then + fp_print "Removing stale dir /data/data/$PACKAGE" + if $TEST $SIMULATE -eq 0 ; then + $RM -R /data/data/$PACKAGE + fi + fi + fi + fi + + #the data/data for the package + if $TEST -d "/data/data/$PACKAGE"; then + #find all directories in /data/data/$PACKAGE + $FIND /data/data/$PACKAGE -type d -exec $LS -ldn {} \; | while read dataline; do + #get existing permissions of that directory + OLD_PER=$( $ECHO $dataline | $CUT -d ' ' -f1 ) + OLD_UID=$( $ECHO $dataline | $CUT -d ' ' -f3 ) + OLD_GID=$( $ECHO $dataline | $CUT -d ' ' -f4 ) + FILEDIR=$( $ECHO $dataline | $CUT -d ' ' -f9 ) + FOURDIR=$( $ECHO $FILEDIR | $CUT -d '/' -f5 ) + + #set defaults for iteration + ISLIB=0 + REVPERM=755 + REVPSTR="rwxr-xr-x" + REVUID=$UID + REVGID=$GID + + if $TEST "$FOURDIR" = ""; then + #package directory, perms:755 owner:$UID:$GID + fp_chmod $OLD_PER "rwxr-xr-x" 755 "$FILEDIR" + elif $TEST "$FOURDIR" = "lib"; then + #lib directory, perms:755 owner:1000:1000 + #lib files, perms:755 owner:1000:1000 + ISLIB=1 + REVPERM=755 + REVPSTR="rwxr-xr-x" + REVUID=1000 + REVGID=1000 + fp_chmod $OLD_PER "rwxr-xr-x" 755 "$FILEDIR" + elif $TEST "$FOURDIR" = "shared_prefs"; then + #shared_prefs directories, perms:771 owner:$UID:$GID + #shared_prefs files, perms:660 owner:$UID:$GID + REVPERM=660 + REVPSTR="rw-rw----" + fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR" + elif $TEST "$FOURDIR" = "databases"; then + #databases directories, perms:771 owner:$UID:$GID + #databases files, perms:660 owner:$UID:$GID + REVPERM=660 + REVPSTR="rw-rw----" + fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR" + elif $TEST "$FOURDIR" = "cache"; then + #cache directories, perms:771 owner:$UID:$GID + #cache files, perms:600 owner:$UID:GID + REVPERM=600 + REVPSTR="rw-------" + fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR" + else + #other directories, perms:771 owner:$UID:$GID + REVPERM=771 + REVPSTR="rwxrwx--x" + fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR" + fi + + #change ownership of directories matched + if $TEST "$ISLIB" = "1"; then + fp_chown_uid $OLD_UID 1000 "$FILEDIR" + fp_chown_gid $OLD_GID 1000 "$FILEDIR" + else + fp_chown_uid $OLD_UID $UID "$FILEDIR" + fp_chown_gid $OLD_GID $GID "$FILEDIR" + fi + + #if any files exist in directory with improper permissions reset them + $FIND $FILEDIR -type f -maxdepth 1 ! -perm $REVPERM -exec $LS -ln {} \; | while read subline; do + OLD_PER=$( $ECHO $subline | $CUT -d ' ' -f1 ) + SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 ) + fp_chmod $OLD_PER $REVPSTR $REVPERM "$SUBFILE" + done + + #if any files exist in directory with improper user reset them + $FIND $FILEDIR -type f -maxdepth 1 ! -user $REVUID -exec $LS -ln {} \; | while read subline; do + OLD_UID=$( $ECHO $subline | $CUT -d ' ' -f3 ) + SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 ) + fp_chown_uid $OLD_UID $REVUID "$SUBFILE" + done + + #if any files exist in directory with improper group reset them + $FIND $FILEDIR -type f -maxdepth 1 ! -group $REVGID -exec $LS -ln {} \; | while read subline; do + OLD_GID=$( $ECHO $subline | $CUT -d ' ' -f4 ) + SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 ) + fp_chown_gid $OLD_GID $REVGID "$SUBFILE" + done + done + fi +} + +date_diff() +{ + if $TEST $# -ne 2; then + FP_DDM="E" + FP_DDS="E" + return + fi + FP_DDD=$( $EXPR $2 - $1 ) + FP_DDM=$( $EXPR $FP_DDD / 60 ) + FP_DDS=$( $EXPR $FP_DDD % 60 ) +} + +fp_end() +{ + if $TEST $SYSREMOUNT -eq 1; then + $MOUNT -o remount,ro $DEVICE /system > /dev/null 2>&1 + fi + + if $TEST $SYSSDMOUNT -eq 1; then + $UMOUNT /sd-ext > /dev/null 2>&1 + fi + + if $TEST $SYSMOUNT -eq 1; then + $UMOUNT /system > /dev/null 2>&1 + fi + + if $TEST $DATAMOUNT -eq 1; then + $UMOUNT /data > /dev/null 2>&1 + fi + + FP_ENDTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" ) + FP_ENDEPOCH=$( $DATE +%s ) + + date_diff $FP_STARTEPOCH $FP_ENDEPOCH + + fp_print "$0 $VERSION ended at $FP_ENDTIME (Runtime:${FP_DDM}m${FP_DDS}s)" +} + +#MAIN SCRIPT + +fp_parseargs $@ +fp_start +if $TEST "$ONLY_ONE" != "" -a "$ONLY_ONE" != "0" ; then + fp_single "$ONLY_ONE" +else + fp_all +fi +fp_end diff --git a/prebuilt/flash_imagesys b/prebuilt/flash_imagesys Binary files differnew file mode 100644 index 000000000..a08d91d85 --- /dev/null +++ b/prebuilt/flash_imagesys diff --git a/prebuilt/fs b/prebuilt/fs new file mode 100644 index 000000000..3092efe2a --- /dev/null +++ b/prebuilt/fs @@ -0,0 +1,46 @@ +#!/sbin/sh + +um +if [ $? != "0" ]; then + echo "Unable to unmount!" + exit 1 +fi + + +case $1 in + repair) + if [ -e /dev/block/mmcblk0p2 ]; then + + e2fsck -yf /dev/block/mmcblk0p2 + else + echo "No ext partition found!" + exit 1 + fi + exit 0 + ;; + ext3) + if [ -e /dev/block/mmcblk0p2 ]; then + + e2fsck -yf /dev/block/mmcblk0p2 + tune2fs -c0 -i0 -j /dev/block/mmcblk0p2 + else + echo "No ext partition found!" + exit 1 + fi + exit 0 + ;; + ext4) + if [ -e /dev/block/mmcblk0p2 ]; then + + tune2fs -O extents,uninit_bg,dir_index /dev/block/mmcblk0p2 + e2fsck -fpDC0 /dev/block/mmcblk0p2 + else + echo "No ext partition found!" + exit 1 + fi + exit 0 + ;; + --) + exit 0 + ;; +esac diff --git a/prebuilt/htcdumlock b/prebuilt/htcdumlock Binary files differnew file mode 100644 index 000000000..18068e515 --- /dev/null +++ b/prebuilt/htcdumlock diff --git a/prebuilt/htcdumlocksys b/prebuilt/htcdumlocksys Binary files differnew file mode 100644 index 000000000..c63725ed6 --- /dev/null +++ b/prebuilt/htcdumlocksys diff --git a/prebuilt/libbmlutils.so b/prebuilt/libbmlutils.so Binary files differnew file mode 100644 index 000000000..48a3e3bb8 --- /dev/null +++ b/prebuilt/libbmlutils.so diff --git a/prebuilt/libflashutils.so b/prebuilt/libflashutils.so Binary files differnew file mode 100644 index 000000000..91fcde0b5 --- /dev/null +++ b/prebuilt/libflashutils.so diff --git a/prebuilt/libmmcutils.so b/prebuilt/libmmcutils.so Binary files differnew file mode 100644 index 000000000..5124876d1 --- /dev/null +++ b/prebuilt/libmmcutils.so diff --git a/prebuilt/libmtdutils.so b/prebuilt/libmtdutils.so Binary files differnew file mode 100644 index 000000000..1cbc61e61 --- /dev/null +++ b/prebuilt/libmtdutils.so diff --git a/prebuilt/mke2fs.conf b/prebuilt/mke2fs.conf new file mode 100644 index 000000000..e231d7c83 --- /dev/null +++ b/prebuilt/mke2fs.conf @@ -0,0 +1,17 @@ +[defaults] + base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr + blocksize = 4096 + inode_size = 256 + inode_ratio = 16384 + +[fs_types] + ext2 = { + + } + ext3 = { + features = has_journal + } + ext4 = { + features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize + inode_size = 256 + } diff --git a/prebuilt/parted b/prebuilt/parted Binary files differnew file mode 100755 index 000000000..bb3d432a2 --- /dev/null +++ b/prebuilt/parted diff --git a/prebuilt/relink-binaries.sh b/prebuilt/relink-binaries.sh new file mode 100755 index 000000000..2dd894317 --- /dev/null +++ b/prebuilt/relink-binaries.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +process_file() +{ + src=$1 + dst=$1-1 #/$(basename $2) + cp -f -p $src $dst + + sed "s|/system/bin/linker\x0|/sbin/linker\x0\x0\x0\x0\x0\x0\x0|g" $dst | sed "s|/system/bin/sh\x0|/sbin/sh\x0\x0\x0\x0\x0\x0\x0|g" > $dst-mod + #sed "s|/sbin/linker\x0|/system/bin/linker\x0\x0\x0\x0\x0\x0\x0|g" $dst | sed "s|/sbin/sh\x0|/system/bin/sh\x0\x0\x0\x0\x0\x0\x0|g" > $dst-mod + rm $dst +} + + +dest=$1 +for ARG in $* +do + process_file $dest $ARG +done diff --git a/prebuilt/relink.sh b/prebuilt/relink.sh new file mode 100755 index 000000000..4e9445aeb --- /dev/null +++ b/prebuilt/relink.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +process_file() +{ + dst=$1/$(basename $2) + src=$2 + if [ $dst == $src ]; then + cp -f -p $src $src.tmp + src=$2.tmp + else + cp -f -p $src $dst + fi + + sed "s|/system/bin/linker\x0|/sbin/linker\x0\x0\x0\x0\x0\x0\x0|g" $src | sed "s|/system/bin/sh\x0|/sbin/sh\x0\x0\x0\x0\x0\x0\x0|g" > $dst + + if [ $1 == $(dirname $2) ]; then + rm -f $src + fi +} + + +dest=$1 +shift 1 +for ARG in $* +do + process_file $dest $ARG +done diff --git a/prebuilt/sdparted b/prebuilt/sdparted new file mode 100644 index 000000000..730d5dc34 --- /dev/null +++ b/prebuilt/sdparted @@ -0,0 +1,658 @@ +#!/sbin/sh + +# do logging, if not excluded with -x +LOGFILE="/data/sdparted.log" +[ "$1" != "-x" ] && echo "$0" "$@" >> "$LOGFILE" && "$0" -x "$@" 2>&1 | tee -a "$LOGFILE" && exit +shift + +ShowError() { echo ; echo " err: $1" ; echo ; exit 1 ; } + +ShowMessage() { echo ; echo " msg: $1" ; } + +ShowHelp() { + +cat <<DONEHELP + +$SCRIPTNAME v$SCRIPTREV created by $MYNAME + +if you use this script in your work, please give some credit. thanks. + +requirements: cm-recovery-v1.4 + +usage: $SCRIPTNAME [options] + + +options: + + --fatsize|-fs SIZE[MG] set the size of the fat32 partition to <SIZE>. + default=total sdcard size - (ext + swap) + + --extsize|-es SIZE[MG] set the size of the ext partition to <SIZE>. + default=$EXTSIZE + + --swapsize|-ss SIZE[MG] set the size of the swap partition to <SIZE>. + if set to 0, no swap partition will be created. + default=$SWAPSIZE + + --extfs|-efs TYPE set the filesystem of ext partition to <TYPE>. + valid types=ext2, ext3, ext4 + default=$EXTFS + + + --upgradefs|-ufs TYPE upgrades existing ext partition to <TYPE>. + this operation will NOT wipe your sdcard and + cannot be used with any partition creation options. + valid types=ext3, ext4 + + --downgradefs|-dfs TYPE downgrades existing ext partition to <TYPE>. + this operation will NOT wipe your sdcard and + cannot be used with any partition creation options. + valid types=ext2 + + + --interactive|-i interactive mode + + --help|-h display this help + + --printonly|-po display sdcard information + + --silent|-s do not prompt user, not even initial warning. + + +examples: + $SCRIPTNAME creates swap=$SWAPSIZE ext2=$EXTSIZE fat32=remaining free space + $SCRIPTNAME -efs ext4 creates swap=$SWAPSIZE ext4=$EXTSIZE fat32=remaining free space + $SCRIPTNAME -fs 1.5G -efs ext3 creates swap=$SWAPSIZE ext3=$EXTSIZE fat32=1536 + $SCRIPTNAME -es 256M -ss 0 creates no swap ext2=256 fat32=remaining free space + $SCRIPTNAME -ufs ext4 upgrades ext partition to ext4 + +DONEHELP + +} + +UserAbort() { + + WHILEEXIT= + + while [ -z "$WHILEEXIT" ] + do + echo -n "do you want to continue? (Y/n) " + read response + echo + [ "$response" = "Y" ] || [ "$response" = "n" ] || [ "$response" = "N" ] && WHILEEXIT="$response" + done + + echo "$response" > /dev/null 2>&1 >>"$LOGFILE" + + [ "$response" != "Y" ] + +} + +UnmountAll () { + + # unmount all partitions so we can work with $SDPATH + # i'm assuming no more than 3 partitions + # maybe make a little more elegant later + echo -n "unmounting all partitions..." + umount "$FATPATH" > /dev/null 2>&1 >>"$LOGFILE" + umount "$EXTPATH" > /dev/null 2>&1 >>"$LOGFILE" + umount "$SWAPPATH" > /dev/null 2>&1 >>"$LOGFILE" + echo "done" + echo + +} + + +CheckReqs() { + + echo -n "checking script requirements..." + # check for valid sdcard + [ -e $SDPATH ] || ShowError "$SDPATH does not exist!" + + # look for necessary programs + [ -e $CMPARTED ] || ShowError "$CMPARTED does not exist!" + [ -e $CMTUNE2FS ] || ShowError "$CMTUNE2FS does not exist!" + [ -e $CME2FSCK ] || ShowError "$CME2FSCK does not exist!" + + # verify cm-v1.4 + PARTEDREV=`"$CMPARTED" "$SDPATH" version | grep Parted | cut -d" " -f3` + [ "$PARTEDREV" == "1.8.8.1.179-aef3" ] || ShowError "you are not using parted v1.8.8.1.179-aef3!" + echo "done" + echo + +} + +CheckTableType() { + + TABLETYPE=`"$CMPARTED" "$SDPATH" print | grep Table: | cut -d" " -f3` + + [ "$TABLETYPE" == "loop" -o "$TABLETYPE" == "msdos" ] && TTISOK=1 || TTISOK=0 + [ "$TABLETYPE" == "loop" ] && TTISLOOP=1 || TTISLOOP=0 + [ "$TABLETYPE" == "msdos" ] && TTISMSDOS=1 || TTISMOSDOS=0 + +} + +ValidateExtArg() { + + FUNC_RET="nonzero" + + # validating argument + [ "$1" != "ext2" ] && [ "$1" != "ext3" ] && [ "$1" != "ext4" ] && FUNC_RET= + + [ -z "$FUNC_RET" ] && [ -z "$IMODE" ] && ShowError "$1 is not a valid filesystem." + [ -z "$FUNC_RET" ] && [ -n "$IMODE" ] && ShowMessage "$1 is not a valid filesystem." + + # return valid argument + [ -n "$FUNC_RET" ] && FUNC_RET="$1" + +} + +ValidateSizeArg() { + + # check for zero-length arg to protect expr length + [ -z "$1" ] && ShowError "zero-length argument passed to size-validator" + + SIZEMB= + ARGLEN=`expr length $1` + SIZELEN=$(($ARGLEN-1)) + SIZEARG=`expr substr $1 1 $SIZELEN` + SIZEUNIT=`expr substr $1 $ARGLEN 1` + + # check if SIZEARG is an integer + if [ $SIZEARG -eq $SIZEARG 2> /dev/null ] ; then + # look for G + [ "$SIZEUNIT" == "G" ] && SIZEMB=$(($SIZEARG * 1024)) + # look for M + [ "$SIZEUNIT" == "M" ] && SIZEMB=$SIZEARG + # no units on arg AND prevents using bogus size units + [ -z "$SIZEMB" ] && [ $SIZEUNIT -eq $SIZEUNIT 2> /dev/null ] && SIZEMB=$1 + # check if SIZEARG is a floating point number, GB only + elif [ `expr index "$SIZEARG" .` != 0 ] && [ "$SIZEUNIT" == "G" ] ; then + INT=`echo "$SIZEARG" | cut -d"." -f1` + FRAC=`echo "$SIZEARG" | cut -d"." -f2` + SIGDIGITS=`expr length $FRAC` + + [ -z "$INT" ] && INT=0 + INTMB=$(($INT * 1024)) + FRACMB=$((($FRAC * 1024) / (10**$SIGDIGITS))) + SIZEMB=$(($INTMB + $FRACMB)) + # it's not a valid size + else + [ -z "$IMODE" ] && ShowError "$1 is not a valid size" + fi + + [ -z "$SIZEMB" ] && [ -n "$IMODE" ] && ShowMessage "$1 is not a valid size" + + # return valid argument in MB + FUNC_RET=$SIZEMB + +} + +CalculatePartitions() { + + # get size of sdcard in MB & do some math + SDSIZEMB=`"$CMPARTED" "$SDPATH" unit MB print | grep $SDPATH | cut -d" " -f3` + SDSIZE=${SDSIZEMB%MB} + [ -n "$FATSIZE" ] || FATSIZE=$(($SDSIZE - $EXTSIZE - $SWAPSIZE)) + EXTEND=$(($FATSIZE + $EXTSIZE)) + SWAPEND=$(($EXTEND + $SWAPSIZE)) + + # check for fatsize of 0 + [ $FATSIZE -le 0 ] && ShowError "must have a fat32 partition greater than 0MB" + + # check for zero-length sdsize... + # indicative of parted not reporting length + # correctly b/c of error on sdcard + [ -z "$SDSIZE" ] && ShowError "zero-length argument passed to partition-calculator" + + # make sure we're not being asked to do the impossible + [ $(($FATSIZE + $EXTSIZE + $SWAPSIZE)) -gt $SDSIZE ] && [ -z "$IMODE" ] && ShowError "sum of requested partitions is greater than sdcard size" + +} + + +UpgradeDowngradeOnly() { + + if [ -n "$UEXTFSONLY" ] ; then + echo + [ -n "$CREATEPART" ] && ShowError "cannot use upgrade option when creating partitions, use -efs instead" + [ -n "$DEXTFSONLY" ] && ShowError "cannot upgrade AND downgrade, it just doesn't make sense" + echo "you have chosen to upgrade $EXTPATH to $UEXTFSONLY." + echo "this action will NOT delete any data from sdcard." + echo + [ -z "$SILENTRUN" ] && UserAbort && ShowError "script canceled by user" + echo + UpgradeExt "$UEXTFSONLY" + ShowCardInfo + elif [ -n "$DEXTFSONLY" ] ; then + echo + [ -n "$CREATEPART" ] && ShowError "cannot use downgrade option when creating partitions." + [ -n "$UEXTFSONLY" ] && ShowError "cannot downgrade AND upgrade, it just doesn't make sense." + echo "you have chosen to downgrade $EXTPATH to $DEXTFSONLY." + echo "this action will NOT delete any data from sdcard." + echo + [ -z "$SILENTRUN" ] && UserAbort && ShowError "script canceled by user" + echo + DowngradeExt "$DEXTFSONLY" + ShowCardInfo + fi + +} + +PrepareSdCard() { + + echo + if [ $TTISOK -eq 0 ] ; then + echo "partition 1 may not be aligned to cylinder boundaries." + echo "to continue, this must be corrected." + elif [ $TTISLOOP -gt 0 ] ; then + echo "your sdcard's partition table type is $TABLETYPE." + echo "to continue, partition table must be set to 'msdos'." + elif [ $TTISMSDOS -gt 0 ] ; then + # just a reminder..in a later version, + # i may implement resizing of partitions, + # so this will be unnecessary. but until then... + echo "to continue, all existing partitions must be removed." + else + # this is not good, and should never happen + # if it does, there is a serious problem + ShowError "sdcard failed table type check." + fi + + echo + echo "this action will remove all data from your sdcard." + echo + [ -z "$SILENTRUN" ] && UserAbort && ShowError "script canceled by user" + + [ $TTISOK -eq 0 ] && echo -n "correcting cylinder boundaries..." + [ $TTISLOOP -gt 0 ] && echo -n "setting partition table to msdos..." + [ $TTISMSDOS -gt 0 ] && echo -n "removing all partitions..." + + "$CMPARTED" -s "$SDPATH" mklabel msdos 2>&1 >>"$LOGFILE" + echo "done" + echo + +} + +ShowActions() { + + echo + echo "total size of sdcard=$SDSIZEMB" + echo + echo "the following actions will be performed:" + echo " -create $FATSIZE""MB fat32 partition" + [ $EXTSIZE -gt 0 ] && echo " -create $EXTSIZE""MB ext2 partition" + [ $SWAPSIZE -gt 0 ] && echo " -create $SWAPSIZE""MB swap partition" + [ "$EXTFS" != "ext2" ] && echo " -ext2 partition will be upgraded to $EXTFS" + echo + [ -z "$SILENTRUN" ] && UserAbort && ShowError "script canceled by user" + echo + +} + +ShowCardInfo() { + + echo "sddevice located in /sdcard/sddev.log" + echo $SDPATH > /sdcard/sddev.log + + CheckTableType + + echo + echo "retrieving current sdcard information..." + + if [ $TTISOK -gt 0 ] ; then + echo + parted "$SDPATH" print + echo + echo "script log is located @ /data/sdparted.log" + exit 0 + else + echo + echo "partition 1 may not be aligned to cylinder boundaries." + ShowError "cannot complete print operation." + fi + echo + +} + + +PartitionSdCard() { + + echo "performing selected actions..." + echo + + if [ $FATSIZE -gt 0 ] ; then + echo -n "creating fat32 partition..." + "$CMPARTED" -s "$SDPATH" mkpartfs primary fat32 0 "$FATSIZE"MB 2>&1 >>"$LOGFILE" + echo "done" + fi + + if [ $EXTSIZE -gt 0 ] ; then + echo -n "creating ext2 partition..." + "$CMPARTED" -s "$SDPATH" mkpartfs primary ext2 "$FATSIZE"MB "$EXTEND"MB 2>&1 >>"$LOGFILE" + "$CMTUNE2FS" -L sd-ext "$EXTPATH" 2>&1 >>"$LOGFILE" + echo "done" + fi + + if [ $SWAPSIZE -gt 0 ] ; then + echo -n "creating swap partition..." + "$CMPARTED" -s "$SDPATH" mkpartfs primary linux-swap "$EXTEND"MB "$SWAPEND"MB 2>&1 >>"$LOGFILE" + echo "done" + fi + echo + +} + +UpgradeExt() { + + # check for no upgrade + [ "$1" == "ext2" ] && return + # check for ext partition + [ ! -e "$EXTPATH" ] && ShowError "$EXTPATH does not exist" + + # have to use -m switch for this check b/c parted incorrectly + # reports all ext partitions as ext2 when running print <number> + CHECKEXTFS=`"$CMPARTED" -m "$SDPATH" print | grep ext | cut -d":" -f5` + [ "$CHECKEXTFS" == "$1" ] && ShowError "$EXTPATH is already $1" + + # grabbed the code bits for ext3 from upgrade_fs(credit:cyanogen) + # check for ext2...must upgrade to ext3 first b4 ext4 + if [ "$1" == "ext3" -o "$1" == "ext4" ] ; then + echo -n "adding journaling to $EXTPATH..." + umount /system/sd > /dev/null 2>&1 >>"$LOGFILE" + "$CME2FSCK" -p "$EXTPATH" 2>&1 >>"$LOGFILE" + "$CMTUNE2FS" -c0 -i0 -j "$EXTPATH" 2>&1 >>"$LOGFILE" + echo "done" + fi + + # and got convert to ext4 from xda-forum(credit:Denkai) + if [ "$1" == "ext4" ] ; then + echo -n "converting $EXTPATH to ext4 filesystem..." + umount /system/sd > /dev/null 2>&1 >>"$LOGFILE" + "$CMTUNE2FS" -O extents,uninit_bg,dir_index "$EXTPATH" 2>&1 >>"$LOGFILE" + "$CME2FSCK" -fpDC0 "$EXTPATH" 2>&1 >>"$LOGFILE" + echo "done" + fi + echo + +} + +DowngradeExt() { + + # check for ext partition + [ ! -e "$EXTPATH" ] && ShowError "$EXTPATH does not exist" + + # have to use print for this check b/c parted incorrectly + # reports all ext partitions as ext2 when running print <number> + CHECKEXTFS=`"$CMPARTED" -m "$SDPATH" print | grep ext | cut -d":" -f5` + [ "$CHECKEXTFS" == "$1" ] && ShowError "$EXTPATH is already $1" + + if [ "$CHECKEXTFS" == "ext4" -o "$1" == "ext3" ] ; then + # interweb says downgrading from ext4 is not possible + # without a backup/restore procedure. + # if i figure it out, i'll implement it. + ShowError "downgrading from ext4 is not currently supported" + fi + + if [ "$1" == "ext2" ] ; then + echo -n "removing journaling from $EXTPATH..." + umount /system/sd > /dev/null 2>&1 >>"$LOGFILE" + "$CMTUNE2FS" -O ^has_journal "$EXTPATH" 2>&1 >>"$LOGFILE" + "$CME2FSCK" -fp "$EXTPATH" 2>&1 >>"$LOGFILE" + echo "done" + fi + echo + +} + + +Interactive() { + +cat <<DONEINSTRUCT + +sdparted interactive mode + +rules: +1. no answer means you accept default value +2. enter '0' for no partition + +DONEINSTRUCT + + UserAbort && ShowError "script canceled by user" + + CalculatePartitions + + GetSwapSize + + FATSIZE= + + CalculatePartitions + + GetExtSize + + GetExtType + + FATSIZE= + + CalculatePartitions + + GetFatSize + +} + +GetSwapSize() { + + SWAPTEST= + + while [ -z "$SWAPTEST" ] + do + echo + echo -n "swap partition size [default=$SWAPSIZE]: " + read SWAPRESP + + [ -z "$SWAPRESP" ] && SWAPRESP="$SWAPSIZE" + echo "$SWAPRESP" > /dev/null 2>&1 >>"$LOGFILE" + + ValidateSizeArg "$SWAPRESP" + SWAPTEST="$FUNC_RET" + [ -n "$SWAPTEST" ] && [ $SWAPTEST -gt $SDSIZE ] && ShowMessage "$SWAPRESP > available space($(($SDSIZE))M)." && SWAPTEST= + done + + SWAPSIZE=$SWAPTEST + +} + +GetExtSize() { + + EXTTEST= + + while [ -z "$EXTTEST" ] + do + echo + echo -n "ext partition size [default=$EXTSIZE]: " + read EXTRESP + + [ -z "$EXTRESP" ] && EXTRESP="$EXTSIZE" + echo "$EXTRESP" > /dev/null 2>&1 >>"$LOGFILE" + + ValidateSizeArg "$EXTRESP" + EXTTEST="$FUNC_RET" + + [ -n "$EXTTEST" ] && [ $EXTTEST -gt $(($SDSIZE - $SWAPSIZE)) ] && ShowMessage "$EXTRESP > available space($(($SDSIZE - $SWAPSIZE))M)." && EXTTEST= + done + + EXTSIZE=$EXTTEST + +} + +GetExtType() { + + FSTEST= + + while [ -z "$FSTEST" ] + do + echo + echo -n "ext partition type [default=$EXTFS]: " + read FSRESP + + [ -z "$FSRESP" ] && FSRESP="$EXTFS" + echo "$FSRESP" > /dev/null 2>&1 >>"$LOGFILE" + + ValidateExtArg "$FSRESP" + FSTEST="$FUNC_RET" + done + + EXTFS="$FSTEST" + +} + +GetFatSize() { + + FATTEST= + + while [ -z "$FATTEST" ] + do + echo + echo -n "fat partition size [default=$FATSIZE]: " + read FATRESP + + [ -z "$FATRESP" ] && FATRESP="$FATSIZE" + echo "$FATRESP" > /dev/null 2>&1 >>"$LOGFILE" + + ValidateSizeArg "$FATRESP" + FATTEST="$FUNC_RET" + + [ -n "$FATTEST" ] && [ $FATTEST -gt $FATSIZE ] && ShowMessage "$FATRESP > available space($(($SDSIZE - $SWAPSIZE - $EXTSIZE))M)." && FATTEST= + [ -n "$FATTEST" ] && [ $FATTEST -le 0 ] && ShowMessage "must have a fat32 partition greater than 0MB" && FATTEST= + done + + FATSIZE=$FATTEST + +} + + +SCRIPTNAME="sdparted" +SCRIPTREV="0.6" +MYNAME="51dusty" + +IMODE= +SILENTRUN= +CREATEPART= +FUNC_RET= + +UEXTFSONLY= +DEXTFSONLY= + +TTISOK= +TTISLOOP= +TTISMSDOS= + +SDSIZE= +SDSIZEMB= +SDINFO=$(cat /etc/fstab | grep /sdcard | awk '{print $1}') +if [ -L "$SDINFO" ] +then + SDPATH=$(ls -l $SDINFO | awk '{print $11}') +else + SDPATH=$SDINFO +fi +# we may now have an SDPATH, let's make sure its on mmcblkX or mmcblkXp1 +CHECK_SDPATH1=$(echo $SDPATH | grep mmcblk.$) +CHECK_SDPATH2=$(echo $SDPATH | grep mmcblk.p1$) +if [ -z "$CHECK_SDPATH1" ] +then + if [ -z "$CHECK_SDPATH2" ] + then + echo fail1 + unset SDPATH + else + LEN=${#SDPATH} + BLKLEN=$(expr $LEN - 2) + SDPATH=${SDPATH:0:$BLKLEN} + fi +fi + + +FATSIZE= +FATTYPE="fat32" +FATPATH=$SDPATH"p1" + +EXTSIZE=512 +EXTFS="ext2" +EXTPATH=$SDPATH"p2" +EXTEND= + +SWAPSIZE=32 +SWAPTYPE="linux-swap" +SWAPPATH=$SDPATH"p3" +SWAPEND= + +CMPARTED="/sbin/parted" +CMTUNE2FS="/sbin/tune2fs" +CME2FSCK="/sbin/e2fsck" + +# give the output some breathing room +echo "$SCRIPTREV" >> "$LOGFILE" +echo + +# check for arguments +while [ $# -gt 0 ] ; do + case "$1" in + + -h|--help) ShowHelp ; exit 0 ;; + + -fs|--fatsize) shift ; ValidateSizeArg "$1" ; FATSIZE="$FUNC_RET" ; CREATEPART="$1" ;; + -es|--extsize) shift ; ValidateSizeArg "$1" ; EXTSIZE="$FUNC_RET" ; CREATEPART="$1" ;; + -ss|--swapsize) shift ; ValidateSizeArg "$1" ; SWAPSIZE="$FUNC_RET" ; CREATEPART="$1" ;; + -efs|--extfs) shift ; ValidateExtArg "$1" ; EXTFS="$FUNC_RET" ; CREATEPART="$1" ;; + + -ufs|--upgradefs) shift ; ValidateExtArg "$1" ; UEXTFSONLY="$FUNC_RET" ;; + -dfs|--downgradefs) shift ; ValidateExtArg "$1" ; DEXTFSONLY="$FUNC_RET" ;; + + -i|--interactive) IMODE="$1" ;; + + -s|--silent) SILENTRUN="$1" ;; + + -po|--printonly) ShowCardInfo ;; + + *) ShowHelp ; ShowError "unknown argument '$1'" ;; + + esac + shift +done + +# can't do silent when in interactive mode +[ -n "$IMODE" ] && SILENTRUN= + +# make sure sdcard exists and all needed files are here +CheckReqs + +# unmount all +UnmountAll + +# upgrade only? downgrade only? +UpgradeDowngradeOnly + +# check table +CheckTableType + +# prep card +PrepareSdCard + +# check for interactive mode +[ -n "$IMODE" ] && Interactive + +# do some math +CalculatePartitions + +# last chance to cancel +ShowActions + +# partition card +PartitionSdCard + +# upgrade fs if necessary +UpgradeExt "$EXTFS" + +# say goodbye and show print output +ShowCardInfo diff --git a/prebuilt/teamwin b/prebuilt/teamwin new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/prebuilt/teamwin @@ -0,0 +1 @@ + |