3 # System RW Update Script
5 STATUS_FILE="/opt/data/update/RW.STATUS"
6 COLOR_ERROR='\033[01;31m'
7 COLOR_DEBUG='\033[01;34m'
8 COLOR_NOTIFY='\033[01;33m'
9 COLOR_RESET='\033[00;00m'
10 PATH=/bin:/usr/bin:/sbin:/usr/sbin
13 UPDATE_SCRIPT_DIR=@UPGRADE_PKGSCRIPTS_DIR@
14 UPDATE_DATA_DIR=/opt/data/update
15 SDB_RULE=${UPDATE_DATA_DIR}/99-sdb-switch.rules
16 HAL_SET_UPGRADE_STATUS=/usr/bin/device_board_set_upgrade_status
20 RW_MACRO=@UPGRADE_SCRIPTS_DIR@/rw-update-macro.inc
21 RW_UPDATE_FLAG=/opt/.do_rw_update
23 SCRIPT_NAME=$(basename $0)
28 echo -e "${COLOR_DEBUG}${LOG_TEXT}${COLOR_RESET}"
34 echo -e "${COLOR_ERROR}${LOG_TEXT}${COLOR_RESET}"
40 echo -e "${COLOR_NOTIFY}${LOG_TEXT}${COLOR_RESET}"
45 LOG="[$SCRIPT_NAME]$1"
47 if [ "$2" != "" ]; then
53 PROGRESS_DIR=/tmp/upgrade
56 mkdir -p ${PROGRESS_DIR}
57 echo "$1" > ${PROGRESS_DIR}/total
58 echo "0" > ${PROGRESS_DIR}/progress
59 chsmack -a _ ${PROGRESS_DIR}
60 chsmack -a _ ${PROGRESS_DIR}/total
61 chsmack -a _ ${PROGRESS_DIR}/progress
63 # if GUI is available, run the GUI
64 if [ -e "/usr/bin/rw-update-ani" ]; then
65 export XDG_RUNTIME_DIR=/run
66 export TBM_DISPLAY_SERVER=1
67 /usr/bin/rw-update-ani --wait &
73 echo "$1" > ${PROGRESS_DIR}/progress
82 if [[ ${#ver_a[@]} > ${#ver_b[@]} ]]; then
87 for ((i=0; i < n; i++)); do
88 if [[ $i -ge ${#ver_a[@]} ]]; then
91 if [[ $i -ge ${#ver_b[@]} ]]; then
95 for ((i=0; i < ${#ver_a[@]}; i++)); do
96 if (( ver_a[i] > ver_b[i] )); then
98 elif (( ver_a[i] < ver_b[i] )); then
108 rm -rf "/opt/isu/$PKG_NAME"
111 REMOVE_UNNECESSARY_ISU_PKGS()
113 local OS_RELEASE_NAME
114 local UPGRADE_CFG_PATH=/etc/isu/upgrade.cfg
115 OS__tz_build_release_name=$(grep TZ_BUILD_RELEASE_NAME /etc/tizen-build.conf | awk -F '"' '{print $2}')
116 OS__tz_build_arch=$(grep TZ_BUILD_ARCH /etc/tizen-build.conf | awk -F '=' '{print $2}')
117 OS__model_name=$(sed -n -e '/.*model_name.*/s!.*<key[^>]*>\(.*\)</key>!\1!gp' /etc/config/model-config.xml)
118 OS__manufacturer=$(sed -n -e '/.*manufacturer.*/s!.*<key[^>]*>\(.*\)</key>!\1!gp' /etc/config/model-config.xml)
119 OS__device_type=$(sed -n -e '/.*device_type.*/s!.*<key[^>]*>\(.*\)</key>!\1!gp' /etc/config/model-config.xml)
121 local platform_major_version_fields="tz_build_release_name tz_build_arch model_name device_type"
122 if [ -f "${UPGRADE_CFG_PATH}" ]; then
123 fields_from_file=$(grep -e ^platform_major_version_fields "${UPGRADE_CFG_PATH}" | cut -f2 -d= | sed -e 's/,/ /g')
124 if [ -n "${fields_from_file}" ]; then
125 platform_major_version_fields="$fields_from_file"
129 for ISUCFG in $(find /etc/isu/ -type f -name isu.cfg); do
130 PKG_NAME=$(basename "$(dirname "$ISUCFG")")
131 if [ ! -d "/opt/isu/$PKG_NAME" ]; then
134 CUR_IMG_VERSION=$(grep -e "^version" "/etc/isu/$PKG_NAME/isu.cfg" | awk -F "=" '{ gsub(/[ ]+/, ""); print $2}')
135 INSTALLED_VERSION=$(grep -e "^version" "/opt/isu/$PKG_NAME/isu.cfg" | awk -F "=" '{ gsub(/[ ]+/, ""); print $2}')
136 ISU__tz_build_release_name=$(grep -e "^tz_build_release_name" "/opt/isu/$PKG_NAME/isu.cfg" | awk -F "=" '{ gsub(/[ ]+/, ""); print $2}')
137 ISU__tz_build_arch=$(grep -e "^tz_build_arch" "/opt/isu/$PKG_NAME/isu.cfg" | awk -F "=" '{ gsub(/[ ]+/, ""); print $2}')
138 ISU__model_name=$(grep -e "^model_name" "/opt/isu/$PKG_NAME/isu.cfg" | awk -F "=" '{ gsub(/[ ]+/, ""); print $2}')
139 ISU__manufacturer=$(grep -e "^manufacturer" "/opt/isu/$PKG_NAME/isu.cfg" | awk -F "=" '{ gsub(/[ ]+/, ""); print $2}')
140 ISU__device_type=$(grep -e "^device_type" "/opt/isu/$PKG_NAME/isu.cfg" | awk -F "=" '{ gsub(/[ ]+/, ""); print $2}')
143 for field in $platform_major_version_fields; do
145 isu_value=ISU__$field
146 if [ "${!os_value}" != "${!isu_value}" ]; then
147 # One of the values defined in /opt/isu/upgrade.cfg is different.
148 # In that case we remove the ISU package because it may
149 # not be compatible with this version of the system.
150 NOTIFY "${field} value is different for OS and ISU - removing incompatible ${PKG_NAME} ISU package"
151 REMOVE_ISU_PKG "$PKG_NAME"
157 VERSION_COMPARE "$CUR_IMG_VERSION" "$INSTALLED_VERSION"
159 if [[ $? != 2 ]]; then
160 # Package from the current image is newer than the one installed
161 # so we can remove the installed one
162 REMOVE_ISU_PKG "$PKG_NAME"
167 # This result file will be used for Platform Update Control API to get update result.
168 UPDATE_RESULT_FILE=${UPDATE_DATA_DIR}/result
169 UPI_RW_UPDATE_ERROR_NONE=00
170 UPI_RW_UPDATE_ERROR_PREFIX=FA
171 UPI_RW_UPDATE_ERROR_FAIL=${UPI_RW_UPDATE_ERROR_PREFIX}1A
174 echo "$1" > ${UPDATE_RESULT_FILE}
179 ${HAL_SET_UPGRADE_STATUS} "$1"
180 if [ $? -eq 0 ]; then
181 CRITICAL_LOG "set_upgrade_status success: ${1}"
183 CRITICAL_LOG "set_upgrade_status failed: ${1}"
187 if [[ $(</proc/cmdline) =~ partition_ab= ]] && [ ! -f ${RW_UPDATE_FLAG} ]
189 NOTIFY "${RW_UPDATE_FLAG} file does not exist. Cancel RW Upgrade."
190 SET_UPGRADE_STATUS -1
194 NOTIFY "----------------------------------------------------------------------"
195 NOTIFY "Remove deprecated ISU Packages"
197 REMOVE_UNNECESSARY_ISU_PKGS
199 NOTIFY "----------------------------------------------------------------------"
200 NOTIFY "System RW update: rw update started"
203 UPDATE_PROGRESS_ERR=0
209 ERROR "FAIL: Upgrade macro does not exist"
213 if [ ! -d ${UPDATE_SCRIPT_DIR} ]
215 ERROR "FAIL: Upgrade directory does not exist"
219 # Execute update scripts
220 if [ ${UPDATE_PREPARE_ERR} = "1" ]
222 ERROR "FAIL: Update preparation was failed"
223 SET_UPDATE_RESULT ${UPI_RW_UPDATE_ERROR_FAIL}
224 SET_UPGRADE_STATUS -1
227 DEBUG "Version OLD: ${OLD_VER}, NEW: ${NEW_VER}"
229 TOTAL_TASKS=`ls -l ${UPDATE_SCRIPT_DIR} | grep -c '^-'`
230 PROGRESS_INIT ${TOTAL_TASKS}
232 UPDATE_SCRIPTS=`/bin/ls ${UPDATE_SCRIPT_DIR}`
233 NOTIFY "TOTAL TASKS: ${TOTAL_TASKS}"
234 for UPSCRIPT in ${UPDATE_SCRIPTS}; do
235 NOTIFY "CURRENT TASK: ${CURRENT_TASK} ${UPSCRIPT}"
236 ${SHELL} ${UPDATE_SCRIPT_DIR}/${UPSCRIPT}
237 if [ $? -ne 0 ]; then
238 ERROR "[FAIL] ${UPSCRIPT}"
239 UPDATE_PROGRESS_ERR=1
241 DEBUG "[DONE] ${UPSCRIPT}"
243 PROGRESS ${CURRENT_TASK}
244 SET_UPGRADE_STATUS $((HAL_PROGRESS_MIN + ((HAL_PROGRESS_MAX - HAL_PROGRESS_MIN)*CURRENT_TASK)/TOTAL_TASKS ))
245 CURRENT_TASK=$(( ${CURRENT_TASK} + 1 ))
250 if [ ${UPDATE_PROGRESS_ERR} = "1" ]
252 NOTIFY "SUCCESS: Upgrade finished, but some scripts are failed"
253 SET_UPDATE_RESULT ${UPI_RW_UPDATE_ERROR_FAIL}
255 NOTIFY "SUCCESS: Upgrade successfully finished"
256 SET_UPDATE_RESULT ${UPI_RW_UPDATE_ERROR_NONE}
260 if [ -e ${SDB_RULE} ]; then
267 NOTIFY "----------------------------------------------------------------------"
269 if [[ ! $(</proc/cmdline) =~ partition_ab= ]]
274 #Reboot by update-finalize.service