Guest User

Untitled

a guest
May 27th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.76 KB | None | 0 0
  1. #!/bin/sh
  2. #
  3. # Squish a CM otapackage for distribution
  4. # cyanogen
  5. #
  6.  
  7. OUT_TARGET_HOST=`uname -a | grep Darwin`
  8. if [ -z "$OUT_TARGET_HOST" ]
  9. then
  10. OUT_TARGET_HOST=linux-x86
  11. MD5=md5sum
  12. XARGS="xargs --max-args=1 --max-procs `grep 'processor' /proc/cpuinfo|wc -l`"
  13. SED=sed
  14. else
  15. OUT_TARGET_HOST=darwin-x86
  16. MD5=md5
  17. XARGS="xargs -n 1 -P `sysctl hw.ncpu | awk '{print $2}'`"
  18. SED=gsed
  19. fi
  20.  
  21. if [ -z "$OUT" -o ! -d "$OUT" ]; then
  22. echo "ERROR: $0 only works with a full build environment. $OUT should exist."
  23. exit 1
  24. fi
  25.  
  26. if [ "$TARGET_BUILD_TYPE" = "debug" ]; then
  27. OTAPACKAGE=$OUT/${TARGET_PRODUCT}_debug-ota-$TARGET_BUILD_VARIANT.$USER.zip
  28. elif [ "$TARGET_BUILD_VARIANT" = "userdebug" ]; then
  29. OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-eng.$USER.zip
  30. else
  31. OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-$TARGET_BUILD_VARIANT.$USER.zip
  32. fi
  33. if [ ! -f "$OTAPACKAGE" ]; then
  34. echo "$OTAPACKAGE doesn't exist!";
  35. exit 1
  36. fi
  37.  
  38. OPTICHARGER=$ANDROID_BUILD_TOP/vendor/cm/tools/opticharger
  39. QUIET=-q
  40. DELETE_BINS="applypatch applypatch_static check_prereq recovery updater"
  41.  
  42.  
  43. # Some products want a squashfs for xbin for space
  44. case "$TARGET_PRODUCT" in
  45. cyanogen_dream_sapphire) WANT_SQUASHFS=1 ;;
  46. *) WANT_SQUASHFS=0 ;;
  47. esac
  48.  
  49. if [ "$WANT_SQUASHFS" -eq 1 ]; then
  50. fatal=0
  51. MKSQUASHFS_VER_REQ=4
  52. if type mksquashfs >/dev/null 2>&1; then
  53. if mksquashfs -version | grep -q "version $MKSQUASHFS_VER_REQ"; then :; else
  54. echo
  55. echo "ERROR: mksquashfs must be at least version $MKSQUASHFS_VER_REQ for this build."
  56. fatal=1
  57. fi
  58. else
  59. echo
  60. echo "ERROR: $TARGET_PRODUCT requires mksquashfs."
  61. fatal=1
  62. fi
  63.  
  64. if [ "$fatal" -ne 0 ]; then
  65. echo
  66. echo " Unoptimized package is still available at"
  67. echo " $OTAPACKAGE"
  68. exit $fatal
  69. fi
  70. fi
  71.  
  72. REPACK=$OUT/repack.d
  73. printf "Sanitizing environment..."
  74. rm -rf $REPACK
  75. mkdir -p $REPACK
  76. echo
  77.  
  78.  
  79. # Unpack the otapackage and opticharge all apks
  80. mkdir $REPACK/ota
  81. (
  82. cd $REPACK/ota
  83. printf "Unpacking $OTAPACKAGE..."
  84. unzip $QUIET $OTAPACKAGE
  85. echo
  86. cd $REPACK/ota/system/framework
  87. $OPTICHARGER framework-res.apk
  88. cd $REPACK/ota/system/app
  89. find ./ -name \*.apk | $XARGS $OPTICHARGER
  90. )
  91.  
  92.  
  93. if [ "$WANT_SQUASHFS" -eq 1 ]; then
  94. squash_opts="-force-uid 1000 -force-gid 1000 -no-progress -noappend -no-exports -no-recovery"
  95. updater=$REPACK/ota/META-INF/com/google/android/updater-script
  96.  
  97. # Relocate su
  98. cp -a $REPACK/ota/system/xbin $REPACK/_xbin/
  99. rm -f $REPACK/_xbin/su $REPACK/ota/system/bin/su
  100. mv $REPACK/ota/system/xbin/su $REPACK/ota/system/bin/su
  101. chmod -R 555 $REPACK/_xbin/*
  102.  
  103. # Create symlinks for su and busybox (since updater-script can't work on the squashfs filesystem).
  104. # Forgive me for the regex hell here.
  105. ln -s ../bin/su $REPACK/_xbin/su
  106. for link in `sed -n -e's/,//g' -e'/symlink(.*busybox/,/xbin.*);/p' $updater | tr '"' '\n' | sed -n -e'\,/system/xbin/,s,/system/xbin/,,p'`
  107. do
  108. ln -s busybox $REPACK/_xbin/$link
  109. done
  110.  
  111. # Create the squashfs with new and improved symlinkage!
  112. mksquashfs $REPACK/_xbin/* $REPACK/_xbin.sqf $squash_opts
  113. rm -rf $REPACK/ota/system/xbin/*
  114. mv $REPACK/_xbin.sqf $REPACK/ota/system/xbin/xbin.sqf
  115. chmod 444 $REPACK/ota/system/xbin/xbin.sqf
  116.  
  117. # Remove xbin stuff and fix up updater-script
  118. $SED -i -e's,system/xbin/su,system/bin/su,g' -e'/xbin/d' $updater
  119. fi
  120.  
  121.  
  122. # Fix build.prop
  123. $SED -i \
  124. -e '/ro\.kernel\.android\.checkjni/d' \
  125. -e '/ro\.build\.type/s/eng/user/' \
  126. $REPACK/ota/system/build.prop
  127.  
  128.  
  129. # Delete unnecessary binaries
  130. ( cd $REPACK/ota/system/bin; echo $DELETE_BINS | xargs rm -f; )
  131.  
  132. # Delete leftover wireless driver
  133. # rm -rf $REPACK/ota/system/lib/modules/*/kernel/drivers/net
  134.  
  135. # No need for recovery
  136. rm -rf $REPACK/ota/recovery
  137.  
  138. # Strip modules
  139. [ -d $REPACK/ota/system/lib/modules ] && \
  140. find $REPACK/ota/system/lib/modules -name "*.ko" -print0 | xargs -0 arm-eabi-strip --strip-unneeded
  141.  
  142. # Determine what to name the new signed package
  143. if [ -z "$CYANOGEN_NIGHTLY" ]; then
  144. MODVERSION=`sed -n -e'/ro\.cm\.version/s/^.*=//p' $REPACK/ota/system/build.prop`
  145. : ${MODVERSION:=nightly}
  146. OUTFILE=$OUT/update-cm-$MODVERSION-signed.zip
  147. else
  148. OUTFILE=$OUT/update-squished.zip
  149. fi
  150.  
  151. # Pack it up and sign
  152. printf "Zipping package..."
  153. ( cd $REPACK/ota; zip $QUIET -r $REPACK/update.zip . )
  154. echo
  155. printf "Signing package..."
  156. SECURITYDIR=$ANDROID_BUILD_TOP/build/target/product/security
  157. java -Xmx512m \
  158. -jar $ANDROID_BUILD_TOP/out/host/$OUT_TARGET_HOST/framework/signapk.jar \
  159. -w $SECURITYDIR/testkey.x509.pem $SECURITYDIR/testkey.pk8 \
  160. $REPACK/update.zip $OUTFILE
  161. echo
  162. printf "Cleaning up..."
  163. rm -rf $REPACK
  164. echo
  165.  
  166. # Create a md5 checksum image of the repacked package
  167. (
  168. img=`basename $OUTFILE`
  169. cd `dirname $OUTFILE`
  170. $MD5 $img >$img.md5sum
  171. echo
  172. echo "Package complete: $OUTFILE"
  173. cat $img.md5sum
  174. echo
  175. )
  176.  
  177. exit 0
Add Comment
Please, Sign In to add comment