CloneNum3

snapshot_dynamic.sh

Feb 23rd, 2016
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.47 KB | None | 0 0
  1. #!/system/bin/sh
  2.  
  3. ##### md5sum e24d678d9c18c7811e16f4755dfd1e19  /system/sbin/busybox-armv7l
  4.  
  5. which free >/dev/null 2>&1
  6. if [[ $? -ne 0 ]]
  7. then
  8.   echo "Unable to find 'which' and/or 'free' command, install busybox-armv7l
  9. # mount -o rw,remount /system
  10. # mkdir /system/sbin
  11. # download https://busybox.net/downloads/binaries/latest/busybox-armv7l to /system/sbin
  12. # chmod 777 /system/sbin/busybox-armv7l
  13. # /system/sbin/busybox-armv7l --install -s /system/sbin
  14. # rm -f /system/sbin/ps"
  15.   exit 1
  16. fi
  17.  
  18. # Not sure if we need this or if it should be "snapshot" or what
  19. #setprop sys.warp.mode true
  20.  
  21. mount -o ro,remount /
  22.  
  23. # Starting off by stopping zygote and servicemanager, they like to work against us respawning processes.
  24. stop zygote
  25. stop servicemanager
  26. RESTART="zygote servicemanager"
  27.  
  28. COUNT=0
  29.  
  30. while [[ $COUNT -lt 100 ]]
  31. do
  32.   #echo "Closing Services attempt [${COUNT}]"
  33.   process_list=`/system/bin/ps | grep -v "\/sh$" | grep -v "\/sysd$" | grep "\/system" | awk '{print $NF}' | tr '\n' ' ' `
  34.   if [[ "${process_list}" == "" ]]
  35.   then
  36.     echo "All system processes are closed, this is a good thing."
  37.     COUNT=1000
  38.   else
  39.     for process_name in ${process_list}
  40.     do
  41.       #echo "Closing process [${process_name}]"
  42.       service_name=`grep "^service.*${process_name}" /*rc | grep -v goldfish | awk '{print $2}'`
  43.       if [[ "${service_name}" != "" ]]
  44.       then
  45.         echo "Found match for process_name=[${process_name}] service_name=[${service_name}], STOPPING!"
  46.         stop ${service_name}
  47.         RESTART="${RESTART} ${service_name}"
  48.       else
  49.         echo "No match for process_name=[${process_name}], doing killall and hoping it ends"
  50.         killall ${process_name}
  51.       fi
  52.     done
  53.   fi
  54.   COUNT=$(( $COUNT + 1 ))
  55. done
  56.  
  57. #### Tried stopping modules to prevent kernel panics, does not appear to make a difference so leaving them be
  58. # echo "Stopping Modules"
  59. # module_list=`lsmod | awk '{print $1}' | tr '\n' ' '`
  60. #  for module_name in ${module_list}
  61. #  do
  62. #    echo "removing module [${module_name}]"
  63. #    rmmod ${module_name}
  64. #  done
  65.  
  66. #### Some helpful info for Debugging
  67. echo "RESTART LIST = [${RESTART}]"
  68. echo "##################################################"
  69. /system/bin/ps
  70. echo "##################################################"
  71. echo "Done stopping pre-services..."
  72.  
  73. #### sysd stays pegged... so this idea doesn't work.
  74. #echo -n "Waiting for system to calm down."
  75. #grep "^0" /proc/loadavg
  76. #while [ $? -ne 0 ]
  77. #do
  78. #  tail -n1 /proc/loadavg
  79. #  sleep 1
  80. #  sync
  81. #  grep "^0" /proc/loadavg
  82. #done
  83. #echo "Load is acceptable now, Continuing on."
  84.  
  85. # We just stopped a ton of processes, give the system a moment to settle
  86. sleep 5
  87. sync
  88.  
  89. ### Zero out the memory for a small clean snapshot
  90. head -n2 /proc/meminfo
  91. sync && echo 3 > /proc/sys/vm/drop_caches && echo ""
  92. memfree=$(free -m | awk '/^Mem/ {print $4-32}')
  93. echo "memfree=[${memfree}]"
  94. if [ $memfree -gt 0 ]; then
  95.         dd if=/dev/zero of=/dev/null bs=${memfree}M count=1
  96. fi
  97. head -n2 /proc/meminfo
  98.  
  99. sleep 5
  100.  
  101. echo "Stopping sysd, we only have another 15-30 seconds before watchdog reboots us unless we restart sysd in time"
  102. stop sysd
  103. #stop console
  104. sync
  105. sync
  106. sync
  107.  
  108. #<Before the snapshot retaining Intent>
  109. #   am broadcast -a jp.co.lineo.warp.android.ACTION_WARP_SNAPSHOT_START
  110.  
  111. #time busybox killall dhcpcd
  112.  
  113. #### Actually do the snapshot passing on any arguments
  114. /sbin/snapshot $*
  115.  
  116. echo "snapshot RETURN=[$?]"
  117. #### From here down gets run every boot from the snapshot created.
  118. start sysd
  119. #start console
  120. echo "We're back!"
  121.  
  122. #### We didn't stop the modules so we don't need to start them
  123. #echo "re-loading modules"
  124. #for module_name in ${module_list}
  125. #do
  126. #  echo "Loading module [${module_name}]"
  127. #  find /system/lib/modules/ -name ${module_name}.ko -exec insmod {} \;
  128. #done
  129.  
  130. #<Warp Processing immediately after the starting>
  131.  
  132. STAT=/proc/warp/stat
  133. echo "STAT=[${STAT}]"
  134.  
  135. #case $STAT in
  136. # 0)
  137. #<Processing at time of snapshot retention >
  138. #  am broadcast -a jp.co.lineo.warp.android.ACTION_WARP_WAKE_UP --es mode 3
  139. #        ;;
  140. # *)
  141. #<Processing at time of loom starting >
  142. #  am broadcast -a jp.co.lineo.warp.android.ACTION_WARP_WAKE_UP --es mode 4
  143. #        ;;
  144. # esac
  145.  
  146. #/system/bin/logwrapper /system/bin/dhcpcd eth0 &
  147.  
  148. chmod 777 /extdata
  149. chmod 666 /extdata/MIXTRAX/*
  150. chmod -R 777 /extdata/iGO/ /extdata/synctool/
  151. chown system:system /extdata/DataManager /extdata/DataManager/*
  152.  
  153.  
  154. for service in ${RESTART}
  155. do
  156.   echo "Restarting ${service}"
  157.   start ${service}
  158. done
Advertisement
Add Comment
Please, Sign In to add comment