Home | History | Annotate | Download | only in installd
      1 #!/system/bin/sh
      2 
      3 #
      4 # Copyright (C) 2016 The Android Open Source Project
      5 #
      6 # Licensed under the Apache License, Version 2.0 (the "License");
      7 # you may not use this file except in compliance with the License.
      8 # You may obtain a copy of the License at
      9 #
     10 #      http://www.apache.org/licenses/LICENSE-2.0
     11 #
     12 # Unless required by applicable law or agreed to in writing, software
     13 # distributed under the License is distributed on an "AS IS" BASIS,
     14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15 # See the License for the specific language governing permissions and
     16 # limitations under the License.
     17 #
     18 
     19 # This script will run as a postinstall step to drive otapreopt.
     20 
     21 TARGET_SLOT="$1"
     22 STATUS_FD="$2"
     23 
     24 # Maximum number of packages/steps.
     25 MAXIMUM_PACKAGES=1000
     26 
     27 # First ensure the system is booted. This is to work around issues when cmd would
     28 # infinitely loop trying to get a service manager (which will never come up in that
     29 # mode). b/30797145
     30 BOOT_PROPERTY_NAME="dev.bootcomplete"
     31 
     32 BOOT_COMPLETE=$(getprop $BOOT_PROPERTY_NAME)
     33 if [ "$BOOT_COMPLETE" != "1" ] ; then
     34   echo "Error: boot-complete not detected."
     35   # We must return 0 to not block sideload.
     36   exit 0
     37 fi
     38 
     39 
     40 # Compute target slot suffix.
     41 # TODO: Once bootctl is not restricted, we should query from there. Or get this from
     42 #       update_engine as a parameter.
     43 if [ "$TARGET_SLOT" = "0" ] ; then
     44   TARGET_SLOT_SUFFIX="_a"
     45 elif [ "$TARGET_SLOT" = "1" ] ; then
     46   TARGET_SLOT_SUFFIX="_b"
     47 else
     48   echo "Unknown target slot $TARGET_SLOT"
     49   exit 1
     50 fi
     51 
     52 
     53 PREPARE=$(cmd otadexopt prepare)
     54 # Note: Ignore preparation failures. Step and done will fail and exit this.
     55 #       This is necessary to support suspends - the OTA service will keep
     56 #       the state around for us.
     57 
     58 PROGRESS=$(cmd otadexopt progress)
     59 print -u${STATUS_FD} "global_progress $PROGRESS"
     60 
     61 i=0
     62 while ((i<MAXIMUM_PACKAGES)) ; do
     63   DEXOPT_PARAMS=$(cmd otadexopt next)
     64 
     65   /system/bin/otapreopt_chroot $STATUS_FD $TARGET_SLOT_SUFFIX $DEXOPT_PARAMS >&- 2>&-
     66 
     67   PROGRESS=$(cmd otadexopt progress)
     68   print -u${STATUS_FD} "global_progress $PROGRESS"
     69 
     70   DONE=$(cmd otadexopt done)
     71   if [ "$DONE" = "OTA incomplete." ] ; then
     72     sleep 1
     73     i=$((i+1))
     74     continue
     75   fi
     76   break
     77 done
     78 
     79 DONE=$(cmd otadexopt done)
     80 if [ "$DONE" = "OTA incomplete." ] ; then
     81   echo "Incomplete."
     82 else
     83   echo "Complete or error."
     84 fi
     85 
     86 print -u${STATUS_FD} "global_progress 1.0"
     87 cmd otadexopt cleanup
     88 
     89 exit 0
     90