update-binary 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #!/sbin/sh
  2. OUTFD="/proc/self/fd/$2"
  3. ZIP=$3
  4. exec_util() {
  5. LD_LIBRARY_PATH=$LD_PATH $UTILS $1
  6. }
  7. set_con() {
  8. exec_util "chcon -h u:object_r:"$1":s0 $2"
  9. exec_util "chcon u:object_r:"$1":s0 $2"
  10. }
  11. set_perm() {
  12. exec_util "chmod $1 $2"
  13. }
  14. set_owner() {
  15. exec_util "chown $1:$2 $3"
  16. }
  17. ui_print() {
  18. echo "ui_print $1" > "$OUTFD";
  19. echo "ui_print" > "$OUTFD";
  20. }
  21. ui_print "**********************"
  22. ui_print "MindTheGapps installer"
  23. ui_print "**********************"
  24. SYSTEMASROOT=`getprop ro.build.system_root_image`
  25. ui_print "Mounting system partition"
  26. # Ensure system is unmounted so mounting succeeds
  27. umount /system || true
  28. if [ "$SYSTEMASROOT" == "true" ]; then
  29. CURRENTSLOT=`getprop ro.boot.slot_suffix`
  30. if [ ! -z "$CURRENTSLOT" ]; then
  31. if [ "$CURRENTSLOT" == "_a" ]; then
  32. TARGETSYSTEM=/dev/block/bootdevice/by-name/system_a
  33. else
  34. TARGETSYSTEM=/dev/block/bootdevice/by-name/system_b
  35. fi
  36. else
  37. TARGETSYSTEM=/dev/block/bootdevice/by-name/system
  38. fi
  39. mkdir -p /system_root
  40. if mount -o rw $TARGETSYSTEM /system_root && mount -o bind /system_root/system /system; then
  41. ui_print "/system mounted"
  42. else
  43. ui_print "Could not mount /system! Aborting"
  44. exit 1
  45. fi
  46. else
  47. if mount /system; then
  48. ui_print "/system mounted"
  49. else
  50. ui_print "Could not mount /system! Aborting"
  51. exit 1
  52. fi
  53. fi
  54. if [ -f /system/bin/toybox ]; then
  55. UTILS=/system/bin/toybox
  56. LD_PATH=/system/lib
  57. else
  58. ui_print "Could not find /system/bin/toybox! Aborting"
  59. exit 1
  60. fi
  61. DIRS="addon.d app priv-app framework etc lib"
  62. if [ -d /system/lib64 ]; then
  63. DIRS="$DIRS lib64"
  64. LD_PATH=/system/lib64
  65. fi
  66. LOWMEM=1572864
  67. MEM=`grep MemTotal /proc/meminfo | awk '{ print $2 }'`
  68. STORAGE=`exec_util "df /system" | grep -v Filesystem | awk '{ print $4 }'`
  69. STORAGE_BUFFER=10240
  70. ui_print "Extracting files"
  71. cd /tmp
  72. unzip -o "$ZIP"
  73. exec_util "rm -rf META-INF"
  74. cd system
  75. NEEDED_STORAGE=`expr $(exec_util "du -s ." | awk '{ print $1 }') + $STORAGE_BUFFER`
  76. if [ "$MEM" -lt "$LOWMEM" ] || [ "$STORAGE" -lt "$NEEDED_STORAGE" ]; then
  77. ui_print "Low resource device detected, removing large extras"
  78. exec_util "rm -rf app/MarkupGoogle"
  79. exec_util "rm -rf priv-app/AndroidMigratePrebuilt"
  80. exec_util "rm -rf priv-app/SetupWizard"
  81. exec_util "rm -rf priv-app/Velvet"
  82. NEEDED_STORAGE=`expr $(exec_util "du -s ." | awk '{ print $1 }') + $STORAGE_BUFFER`
  83. if [ "$STORAGE" -lt "$NEEDED_STORAGE" ]; then
  84. ui_print "Not enough space for GApps! Aborting"
  85. cd ..
  86. exec_util "rm -rf system"
  87. exit 1
  88. fi
  89. fi
  90. ui_print "Generating addon.d file"
  91. cat addon.d/addond_head > addon.d/30-gapps.sh
  92. for f in `exec_util "find . -type f"`; do
  93. line=$(echo "$f" | sed 's/\.\///')
  94. echo "$line" >> addon.d/30-gapps.sh
  95. done
  96. cat addon.d/addond_tail >> addon.d/30-gapps.sh
  97. rm addon.d/addond_head addon.d/addond_tail
  98. ui_print "Preparing files for copying"
  99. for dirs in $DIRS; do
  100. set_perm 0755 $dir
  101. for d in `exec_util "find ./$dir -type d"`; do
  102. set_perm 0755 $d
  103. set_owner root root $d
  104. done
  105. for f in `exec_util "find ./$dir -type f"`; do
  106. type=$(echo "$f" | sed 's/.*\.//')
  107. if [ "$type" == "sh" ] || [ "$type" == "$f" ]; then
  108. set_perm 0755 $f
  109. else
  110. set_perm 0644 $f
  111. fi
  112. set_owner root root $f
  113. set_con system_file $f
  114. done
  115. done
  116. ui_print "Copying files"
  117. exec_util "cp --preserve=a -r ./* /system/"
  118. if [ -e priv-app/SetupWizard ] ; then
  119. exec_util "rm -rf /system/priv-app/Provision"
  120. fi
  121. ui_print "Cleaning up files"
  122. cd ../
  123. exec_util "rm -rf system"
  124. ui_print "Unmounting system partition"
  125. if umount -l /system; then
  126. if [ "$SYSTEMASROOT" == "true" ]; then
  127. umount -l /system_root
  128. fi
  129. fi
  130. ui_print "Done!"
  131. exit 0