8 #------------------------------------------------------------------------------
13 # read delta configuration file for generating update configuration file to be used during update.
14 # delta config file format : PART_NAME PART_BIN DELTA_BIN UPDATE_TYPE BLK_DEV BLK_OFFSET (deliminator : TAB)
21 if [ ! -r ${in_file} ]; then
22 echo "file ${in_file} cannot be read"
30 if [ "${line:0:1}" = "#" ]; then
36 if [ "${line_len}" = "0" ]; then
42 PART_NAME[${line_num}]=${fields[0]}
43 PART_BIN[${line_num}]=${fields[1]}
44 DELTA_BIN[${line_num}]=${fields[2]}
45 UPDATE_TYPE[${line_num}]=${fields[3]}
46 BLK_DEV[${line_num}]=${fields[4]}
47 BLK_OFFSET[${line_num}]=${fields[5]}
49 line_num=$(($line_num + 1))
55 if [ -f ${out_file} ]; then
56 sudo rm -fr ${out_file}
59 for ((update_idx=0;update_idx<PART_NUM;update_idx++))
61 f1=${PART_NAME[${update_idx}]}
62 f2=${DELTA_BIN[${update_idx}]}
63 f3=${UPDATE_TYPE[${update_idx}]}
64 f4=${BLK_DEV[${update_idx}]}
65 f5=${BLK_OFFSET[${update_idx}]}
67 echo -e "$f1\t\t$f2\t\t$f3\t\t$f4\t\t$f5" >> ${out_file}
73 #------------------------------------------------------------------------------
75 # fn_set_default_params
78 # set default params used globally in this script
81 fn_set_default_params()
84 MK_PART_DELTA=${COMMON_BINDIR}/mk_part_delta.sh
85 DELTA_CFG_PATH=./cfg/delta.cfg
86 UPDATE_CFG_PATH=./cfg/update.cfg
87 PRE_SCRIPT_PATH=./cfg/pre.sh
88 DELTA_UA=./data/delta.ua
89 UPDATE_MANAGER=./data/upgrade-trigger.sh
91 LOG_PATH=./data/Delta.log
92 BUILD_STRING_FILE=build_string.txt
93 BUILD_STRING_PATH=./data/${BUILD_STRING_FILE}
94 # Getting date and minor version
97 while [ -d "result/${MONDATE}_${i}" ]
101 MONDATE="${MONDATE}_${i}"
102 echo "MONDATE = ${MONDATE}"
104 if [ "z${OLD_TAR_DIR}" = "z" ]; then
105 export OLD_TAR_DIR="old_tar"
107 if [ "z${NEW_TAR_DIR}" = "z" ]; then
108 export NEW_TAR_DIR="new_tar"
112 #------------------------------------------------------------------------------
114 # fn_swap_binary_files
117 # change old & new for making backward delta
120 fn_swap_binary_files()
122 TEMP_TAR_DIR=${OLD_TAR_DIR}
123 export OLD_TAR_DIR=${NEW_TAR_DIR}
124 export NEW_TAR_DIR=${TEMP_TAR_DIR}
127 #------------------------------------------------------------------------------
129 # fn_print_update_cfg
131 fn_print_update_cfg()
133 for ((update_idx=0;update_idx<PART_NUM;update_idx++))
135 echo "------------------------------"
136 echo "[PART_NAME] ${PART_NAME[${update_idx}]}"
137 echo "[DELTA_BIN] ${DELTA_BIN[${update_idx}]}"
138 echo "[UPDATE_TYPE] ${UPDATE_TYPE[${update_idx}]}"
139 echo "[BLK_DEV] ${BLK_DEV[${update_idx}]}"
140 echo "[BLK_OFFSET] ${BLK_OFFSET[${update_idx}]}"
143 echo "------------------------------"
146 #------------------------------------------------------------------------------
148 # fn_process_extra_delta
151 fn_process_extra_delta()
154 if [ "${part_name}" = "RAMDISK2" ]; then
155 if [ "${RAMDISK2_FULL_IMG}" = "0" ]; then
156 #--- delta recovery partition ---
157 ${MK_PART_DELTA} ${part_name} DELTA_IMG ${part_bin} ${delta_bin}
158 if [ "$?" = "0" ]; then
159 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
160 sudo mv ${RESULT_DIR}/${part_bin}/${delta_bin} ${DELTA_DIR}
163 if [ "${RAMDISK2_FULL_IMG}" = "1" ]; then
164 #--- full recovery partition ---
165 ${MK_PART_DELTA} ${part_name} FULL_IMG ${part_bin} ${delta_bin}
166 if [ "$?" = "0" ]; then
167 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
168 sudo mv ${RESULT_DIR}/${part_bin}/${part_bin} ${DELTA_DIR}
171 elif [ "${part_name}" = "RECOVERY" ]; then
172 #--- recovery kernel ---
173 sudo echo "1" > ${DELTA_DIR}/${delta_bin}
174 elif [ "${part_name}" = "EXTRA" ]; then
179 #------------------------------------------------------------------------------
181 # fn_get_tar_file_names
184 # find tar file name (without path) that contains given partition binary
187 fn_get_tar_file_names()
191 cd ${DATA_DIR}/${OLD_TAR_DIR}
192 OLD_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null`
195 cd ${DATA_DIR}/${NEW_TAR_DIR}
196 NEW_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null`
199 #--- find which tar contains the binary ---
200 for tar_file in ${OLD_TAR_LIST}
202 result=`tar -tvf ${DATA_DIR}/${OLD_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"`
203 if [ "$?" = "0" ]; then
204 OLD_TAR_FILE=${tar_file}
209 for tar_file in ${NEW_TAR_LIST}
211 result=`tar -tvf ${DATA_DIR}/${NEW_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"`
212 if [ "$?" = "0" ]; then
213 NEW_TAR_FILE=${tar_file}
220 #------------------------------------------------------------------------------
222 # fn_extract_from_image
225 # extract some files from given image
228 fn_extract_from_image()
237 fn_get_tar_file_names $IMAGE
238 tar xvf ${DATA_DIR}/${NEW_TAR_DIR}/${NEW_TAR_FILE} ${IMAGE}
239 if [ "$?" != "0" ]; then
243 sudo mount -t ext4 -o loop ${IMAGE} ${MNT_PNT}
244 if [ "$?" != "0" ]; then
248 EXTRACT_FILE="${MNT_PNT}${TARGET_FILE}"
249 if [ -e ${EXTRACT_FILE} ]; then
250 sudo cp ${EXTRACT_FILE} ${DELTA_DIR}
252 echo "There is no ${TARGET_FILE} in ${IMAGE}"
255 sudo umount ${MNT_PNT}
256 sudo rm -rf ${MNT_PNT}
260 ###############################################################################
265 COMMON_BINDIR=${PWD}/../common/bin
267 fn_set_default_params
269 fn_gen_update_cfg ${DELTA_CFG_PATH} ${UPDATE_CFG_PATH}
271 ################### Make delta Forward and Backward #####################
272 if [ "z${FW_BW}" = "z" ]; then
273 #FW_BW="FW_DELTA BW_DELTA"
277 START_TIMESTAMP="$(date +%T)"
279 for Make_Delta in $FW_BW
281 #--- archive result directory ---
282 echo "Make $Make_Delta Delta file"
283 RESULT_DIR=result/$MONDATE/$Make_Delta
284 DELTA_DIR=${RESULT_DIR}/DELTA
285 mkdir -p ${DELTA_DIR}
287 if [ "$Make_Delta" = "BW_DELTA" ]; then
292 #--- make delta for each partition ---
293 for ((part_num=0;part_num<PART_NUM;part_num++))
295 part_name=${PART_NAME[${part_num}]}
296 update_type=${UPDATE_TYPE[${part_num}]}
297 part_bin=${PART_BIN[${part_num}]}
298 delta_bin=${DELTA_BIN[${part_num}]}
300 PART_OUT=${part_name}_OUT
302 if [ "${update_type}" = "EXTRA" ]; then
303 fn_process_extra_delta
305 ${MK_PART_DELTA} ${part_name} ${update_type} ${part_bin} ${delta_bin}
306 if [ "$?" = "0" ]; then
307 if [ "${update_type}" = "DELTA_FS" ]; then
308 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
309 sudo mv ${RESULT_DIR}/${part_bin} ${DELTA_DIR}
311 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
312 sudo mv ${RESULT_DIR}/${part_bin}/${delta_bin} ${DELTA_DIR}
315 sudo rm -rf ${RESULT_DIR}/${part_bin}
316 echo "Error: Abort Delta Generation"
320 sudo rm -rf ${RESULT_DIR}/${part_bin}
323 #move update.cfg to delta directory
324 if [ -r ${UPDATE_CFG_PATH} ]; then
325 sudo cp ${UPDATE_CFG_PATH} ${DELTA_DIR}/update.cfg
326 sudo rm ${UPDATE_CFG_PATH}
328 if [ -r ${LOG_PATH} ]; then
329 sudo cp ${LOG_PATH} ${RESULT_DIR}/Delta.log
333 if [ -r ${BUILD_STRING_PATH} ]; then
334 sudo cp ${BUILD_STRING_PATH} ${DELTA_DIR}/${BUILD_STRING_FILE}
335 sudo rm ${BUILD_STRING_PATH}
337 if [ -r ${PRE_SCRIPT_PATH} ]; then
338 sudo cp ${PRE_SCRIPT_PATH} ${DELTA_DIR}/pre.sh
341 #--- extract files which would be appended to delta.tar ---
342 echo "Extract binaries for update from images"
343 fn_extract_from_image rootfs.img /usr/bin/upgrade-trigger.sh
344 fn_extract_from_image ramdisk-recovery.img /usr/bin/delta.ua
346 #--- archive result directory ---
348 echo "tar result directory"
349 sudo tar cf ${MONDATE}_${Make_Delta}.tar $Make_Delta
352 echo "Making delta binary is End!! ($Make_Delta)"
355 if [ -r ${UPDATE_CFG_PATH} ]; then
356 sudo rm ${UPDATE_CFG_PATH}
359 sudo cp ${COMMON_BINDIR}/unpack.sh ./
360 sudo tar --overwrite -cf ../delta.tar *
363 SIGN_PKCS_PASSWORD=$2
364 if [ "z${SIGN_PKCS_FILE}" != "z" ]; then
365 if [ "z${SIGN_PKCS_PASSWORD}" != "z" ]; then
366 SIGNER_OPTIONAL_ARGUMENT="-p ${SIGN_PKCS_PASSWORD}"
368 sudo ${COMMON_BINDIR}/sign_img.sh -k ${SIGN_PKCS_FILE} -i ../delta.tar ${SIGNER_OPTIONAL_ARGUMENT}
372 END_TIMESTAMP="$(date +%T)"
374 echo "OVERALL TIMESTAMP : [START] ${START_TIMESTAMP} ~ [END] ${END_TIMESTAMP}"