8 #------------------------------------------------------------------------------
18 echo "*******************************************************************"
21 #------------------------------------------------------------------------------
26 # $1 - PART_NAME. to descriminate
27 # $2 - base directory to search files for old partition
28 # $3 - base directory to search files for new partition
31 # extract attribute information of files on the given partition
39 V1_ATTR_FILE=${OUTPUT_DIR}/v1_${TARGET}_attr.txt
40 V1_NAME_FILE=${OUTPUT_DIR}/v1_list.txt
41 V2_ATTR_FILE=${OUTPUT_DIR}/v2_${TARGET}_attr.txt
42 V2_NAME_FILE=${OUTPUT_DIR}/v2_list.txtfg
43 V23_NAME_FILE=v23_${TARGET}_attr.txt
44 V13_NAME_FILE=v13_${TARGET}_attr.txt
45 ATTR_CMD=extended_attr.sh
47 echo "Attribute generation for ${TARGET} [START] $(date +%T)"
49 sudo find ./${BASE_DIR_OLD} -type f -printf '"/%P" Regular 14 %04m:%04U:%04G:' -exec ${COMMON_BINDIR}/${ATTR_CMD} {} \; > ${V1_ATTR_FILE}
50 sudo find ./${BASE_DIR_OLD} -type l -printf '"/%P" SymLink 14 %04m:%04U:%04G:' -exec ${COMMON_BINDIR}/${ATTR_CMD} {} \; >> ${V1_ATTR_FILE}
51 sudo find ./${BASE_DIR_OLD} -type d -printf '"/%P" Regular 14 %04m:%04U:%04G:' -exec ${COMMON_BINDIR}/${ATTR_CMD} {} \; >> ${V1_ATTR_FILE}
53 sudo find ./${BASE_DIR_NEW} -type f -printf '"/%P" Regular 14 %04m:%04U:%04G:' -exec ${COMMON_BINDIR}/${ATTR_CMD} {} \; > ${V2_ATTR_FILE}
54 sudo find ./${BASE_DIR_NEW} -type l -printf '"/%P" SymLink 14 %04m:%04U:%04G:' -exec ${COMMON_BINDIR}/${ATTR_CMD} {} \; >> ${V2_ATTR_FILE}
55 sudo find ./${BASE_DIR_NEW} -type d -printf '"/%P" Regular 14 %04m:%04U:%04G:' -exec ${COMMON_BINDIR}/${ATTR_CMD} {} \; >> ${V2_ATTR_FILE}
57 ################ Change user and group permission from '0' to '0000' ############
58 sed -i 's/: 0/:0000/g' ${V1_ATTR_FILE}
59 sed -i 's/: /:000/g' ${V1_ATTR_FILE}
60 sed -i 's/: /:00/g' ${V1_ATTR_FILE}
61 sed -i 's/: /:0/g' ${V1_ATTR_FILE}
63 sed -i 's/: 0/:0000/g' ${V2_ATTR_FILE}
64 sed -i 's/: /:000/g' ${V2_ATTR_FILE}
65 sed -i 's/: /:00/g' ${V2_ATTR_FILE}
66 sed -i 's/: /:0/g' ${V2_ATTR_FILE}
68 ################ Change ":./old" to "/" ############
69 sed -i "s/:.\/${BASE_DIR_OLD}\//:\//" ${V1_ATTR_FILE}
70 sed -i "s/:.\/${BASE_DIR_OLD}/:\//" ${V1_ATTR_FILE}
71 sed -i "s/:.\/${BASE_DIR_NEW}\//:\//" ${V2_ATTR_FILE}
72 sed -i "s/:.\/${BASE_DIR_NEW}/:\//" ${V2_ATTR_FILE}
74 echo "Attribut generation for ${TARGET} [END] $(date +%T)"
77 #------------------------------------------------------------------------------
84 PART_IMG_ORG=${PART_BIN}
85 PART_IMG_OLD=${PART_IMG_ORG}.old
86 PART_IMG_NEW=${PART_IMG_ORG}.new
88 #---- untar partition image and rename for old & new ----
89 if [ ! "z${OLD_TAR_FILE}" = "z" ]; then
90 echo "untar ${OLD_TAR_FILE}"
91 tar xvf ${OLD_TAR_DIR}/${OLD_TAR_FILE} ${PART_IMG_ORG}
92 if [ "$?" != "0" ]; then
95 sudo mv ${PART_IMG_ORG} ${PART_IMG_OLD}
98 echo "untar ${NEW_TAR_FILE}"
99 tar xvf ${NEW_TAR_DIR}/${NEW_TAR_FILE} ${PART_IMG_ORG}
100 if [ "$?" != "0" ]; then
103 sudo mv ${PART_IMG_ORG} ${PART_IMG_NEW}
105 if [ ! "z${OLD_TAR_FILE}" = "z" ]; then
106 #---- check whether the binaries are same ----
107 sudo diff ${PART_IMG_OLD} ${PART_IMG_NEW}
108 if [ "$?" = "0" ]; then
109 echo "[${PART_NAME}] two binaries are same"
110 sudo rm -rf ${PART_IMG_OLD}
111 sudo rm -rf ${PART_IMG_NEW}
114 sudo python ${COMMON_BINDIR}/CreatePatch.py ${UPDATE_TYPE} ${PART_NAME} ${PART_IMG_OLD} ${PART_IMG_NEW} ${OUTPUT_DIR} ${UPDATE_CFG_PATH}
116 sudo rm ${PART_IMG_OLD}
118 if [ $PythonRet != "0" ]; then
119 echo "[${PART_NAME}] Failed to generate DELTA"
124 sudo mv ${PART_IMG_NEW} ${OUTPUT_DIR}/${PART_IMG_ORG}
125 sudo chown ${MY_ID}:${MY_ID} ${OUTPUT_DIR}/${PART_IMG_ORG}
130 #------------------------------------------------------------------------------
132 # fn_mk_delta_img_core
135 # core routine for delta generation
139 fn_mk_delta_img_core()
142 START_TIMESTAMP="generation of ${DELTA} [START] $(date +%T)"
144 #---- untar partition image and rename for old & new ----
145 echo "untar ${OLD_TAR_FILE}"
146 tar xvf ${OLD_TAR_DIR}/${OLD_TAR_FILE} ${PART_IMG_ORG}
147 if [ "$?" != "0" ]; then
150 sudo mv ${PART_IMG_ORG} ${PART_IMG_OLD}
152 echo "untar ${NEW_TAR_FILE}"
153 tar xvf ${NEW_TAR_DIR}/${NEW_TAR_FILE} ${PART_IMG_ORG}
154 if [ "$?" != "0" ]; then
157 sudo mv ${PART_IMG_ORG} ${PART_IMG_NEW}
159 #---- check whether the binaries are same ----
160 sudo diff ${PART_IMG_OLD} ${PART_IMG_NEW}
161 if [ "$?" = "0" ]; then
162 echo "[${PART_NAME}] two binaries are same"
163 sudo rm -rf ${PART_IMG_OLD}
164 sudo rm -rf ${PART_IMG_NEW}
168 #---- make delta file ----
170 sudo python ${COMMON_BINDIR}/CreatePatch.py ${UPDATE_TYPE} ${PART_NAME} ${PART_IMG_OLD} ${PART_IMG_NEW} ${OUTPUT_DIR} ${UPDATE_CFG_PATH}
172 #sudo xdelta delta ${PART_IMG_OLD} ${PART_IMG_NEW} ./${OUTPUT_DIR}/${PART_NAME}".delta"
174 #---- remove files & directories ----
175 echo "remove temp files/directory & move delta/log to result directory"
176 sudo rm -rf ${PART_IMG_OLD}
177 sudo rm -rf ${PART_IMG_NEW}
180 if [ $PythonRet != "0" ]; then
181 echo "[${PART_NAME}] Failed to generate DELTA"
184 END_TIMESTAMP="generation of ${DELTA} [END] $(date +%T)"
185 echo "${START_TIMESTAMP}"
186 echo "${END_TIMESTAMP}"
192 #------------------------------------------------------------------------------
197 # generate delta file for image type partition
202 PART_IMG_ORG=${PART_BIN}
203 PART_IMG_OLD=${PART_IMG_ORG}.old
204 PART_IMG_NEW=${PART_IMG_ORG}.new
207 DEBUG_DELTA=debug_${DELTA}
208 #CFG_XML=${PART_NAME}_IMG.xml
209 mkdir ${OUTPUT_DIR}/i
211 if [ "$?" != "0" ]; then
218 #------------------------------------------------------------------------------
220 # mk_inter_attrib_file
223 # makes a list of attributes for those files which differ between v1 aND V2
224 #manoj:to create intermediate attribute list
225 fn_mk_inter_attrib_file()
227 V1ref_ATTR_FILE=${OUTPUT_DIR}/v1_${TARGET}_attr.txt
228 V2ref_ATTR_FILE=${OUTPUT_DIR}/v2_${TARGET}_attr.txt
231 #------------------------------------------------------------------------------
233 # fn_mk_delta_fs_core
236 # core routine for delta generation
237 # File System Update Type (DELTA_FS)
240 fn_mk_delta_fs_core()
242 START_TIMESTAMP="generation of ${DELTA} [START] $(date +%T)"
245 if [ "${DELTA}" = "boot.img/" ]; then
249 #---- untar partition image and rename for old & new ----
250 echo "untar ${OLD_TAR_FILE}"
251 tar xvf ${OLD_TAR_DIR}/${OLD_TAR_FILE} ${PART_IMG_ORG}
252 if [ "$?" != "0" ]; then
255 sudo mv ${PART_IMG_ORG} ${PART_IMG_OLD}
257 echo "untar ${NEW_TAR_FILE}"
258 tar xvf ${NEW_TAR_DIR}/${NEW_TAR_FILE} ${PART_IMG_ORG}
259 if [ "$?" != "0" ]; then
262 sudo mv ${PART_IMG_ORG} ${PART_IMG_NEW}
264 #---- check whether the binaries are same ----
265 sudo diff ${PART_IMG_OLD} ${PART_IMG_NEW}
266 if [ "$?" = "0" ]; then
267 echo "[${PART_NAME}] two binaries are same"
268 sudo rm -rf ${PART_IMG_OLD}
269 sudo rm -rf ${PART_IMG_NEW}
270 sudo rm -rf ${OUTPUT_DIR}
274 #---- make mount point ----
275 mkdir -p ${MNT_PNT_OLD}
276 mkdir -p ${MNT_PNT_NEW}
278 #---- mount partition image to mount point ----
279 echo "mount ${PART_IMG_OLD} & ${PART_IMG_NEW}"
280 sudo mount -t ${FS} -o loop ${PART_IMG_OLD} ${MNT_PNT_OLD}
281 if [ "$?" != "0" ]; then
284 sudo mount -t ${FS} -o loop ${PART_IMG_NEW} ${MNT_PNT_NEW}
285 if [ "$?" != "0" ]; then
289 #---- remove unnecessary files & directories ----
290 for ff in ${EXCLUDE_FILES}
292 sudo rm -rf ${MNT_PNT_OLD}/${ff}
293 sudo rm -rf ${MNT_PNT_NEW}/${ff}
296 #---- make attribute ----
297 fn_mk_attribute ${PART_NAME} ${BASE_OLD} ${BASE_NEW}
299 #PART_IMG_ORG parameter should match with DELTA name that is part of default config file. Which will be used to update MAX size file that is present in respective partition.
300 sudo python ${COMMON_BINDIR}/CreatePatch.py ${UPDATE_TYPE} ${PART_NAME} ${BASE_OLD} ${BASE_NEW} ${OUTPUT_DIR} ${V1_ATTR_FILE} ${V2_ATTR_FILE} ${UPDATE_CFG_PATH}
303 #---- unmount partition image ----
304 echo "umount ${MNT_PNT_OLD} & ${MNT_PNT_NEW}"
305 sudo umount ${MNT_PNT_OLD}
306 sudo umount ${MNT_PNT_NEW}
308 #---- remove files & directories ----
309 echo "remove temp files/directory & move delta/log to result directory"
310 sudo rm -rf ${PART_IMG_OLD}
311 sudo rm -rf ${PART_IMG_NEW}
312 sudo rm -rf ${BASE_OLD} ${BASE_NEW}
315 #---- extra cleanup ----
316 sudo mv ./file_attr_updated_image.txt ${OUTPUT_DIR}/${PART_NAME}_file_attr_updated_image.txt
318 if [ $PythonRet != "0" ]; then
319 echo "[${PART_NAME}] Failed to generate DELTA"
322 END_TIMESTAMP="generation of ${DELTA} [END] $(date +%T)"
323 echo "${START_TIMESTAMP}"
324 echo "${END_TIMESTAMP}"
329 #------------------------------------------------------------------------------
334 # generate delta file for filesystem type partition
339 PART_IMG_ORG=${PART_BIN}
340 PART_IMG_OLD=${PART_IMG_ORG}.old
341 PART_IMG_NEW=${PART_IMG_ORG}.new
344 DEBUG_DELTA=debug_${DELTA}
345 #CFG_XML=${PART_NAME}_FS.xml
348 BASE_OLD=${PART_NAME}_OLD
349 BASE_NEW=${PART_NAME}_NEW
351 #--- !!! this should be modified according to partition ---
352 case "${PART_NAME}" in
354 EXCLUDE_FILES="lost+found dev proc tmp var sys csa"
355 TGT_MNT_PNT=${FAKE_ROOT}
358 EXCLUDE_FILES="lost+found"
359 TGT_MNT_PNT=${FAKE_ROOT}/opt/system/csc
362 EXCLUDE_FILES="lost+found"
363 TGT_MNT_PNT=${FAKE_ROOT}/lib/modules
366 EXCLUDE_FILES="lost+found dev proc tmp sys"
367 TGT_MNT_PNT=${FAKE_ROOT}/mnt/initrd
370 EXCLUDE_FILES="lost+found"
371 TGT_MNT_PNT=${FAKE_ROOT}/mnt/initrd-recovery
374 EXCLUDE_FILES="lost+found"
375 TGT_MNT_PNT=${FAKE_ROOT}/opt/usr
378 EXCLUDE_FILES="lost+found"
379 TGT_MNT_PNT=${FAKE_ROOT}/opt
383 TGT_MNT_PNT=${FAKE_ROOT}/boot
386 echo "${PART_NAME} not supported !!!"
391 MNT_PNT_OLD=${BASE_OLD}/${TGT_MNT_PNT}
392 MNT_PNT_NEW=${BASE_NEW}/${TGT_MNT_PNT}
396 if [ "$?" != "0" ]; then
403 #------------------------------------------------------------------------------
410 PART_IMG_NEW=${PART_BIN}
412 #---- untar partition image and rename for old & new ----
413 echo "untar ${NEW_TAR_FILE}"
414 tar xvf ${NEW_TAR_DIR}/${NEW_TAR_FILE} ${PART_IMG_NEW}
415 if [ "$?" != "0" ]; then
419 sudo mv ${PART_IMG_NEW} ${OUTPUT_DIR}/${PART_BIN}
420 sudo chown ${MY_ID}:${MY_ID} ${OUTPUT_DIR}/${PART_BIN}
427 #------------------------------------------------------------------------------
432 # find tar file name (without path) that contains given partition binary
435 fn_get_tar_file_names()
439 cd ${DATA_DIR}/${OLD_TAR_DIR}
440 OLD_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null`
443 cd ${DATA_DIR}/${NEW_TAR_DIR}
444 NEW_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null`
447 #--- find which tar contains the binary ---
448 for tar_file in ${OLD_TAR_LIST}
450 result=`tar -tvf ${DATA_DIR}/${OLD_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"`
451 if [ "$?" = "0" ]; then
452 OLD_TAR_FILE=${tar_file}
457 for tar_file in ${NEW_TAR_LIST}
459 result=`tar -tvf ${DATA_DIR}/${NEW_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"`
460 if [ "$?" = "0" ]; then
461 NEW_TAR_FILE=${tar_file}
468 #------------------------------------------------------------------------------
473 # extract some file from given image
476 fn_extract_from_image()
480 MNT_PNT=${PART_NAME}_MNT
483 tar xvf ${DATA_DIR}/${NEW_TAR_DIR}/${NEW_TAR_FILE} ${IMAGE}
484 if [ "$?" != "0" ]; then
488 sudo mount -t ext4 -o loop ${IMAGE} ${MNT_PNT}
489 if [ "$?" != "0" ]; then
493 EXTRACT_FILE="${MNT_PNT}${TARGET_FILE}"
494 if [ -e ${EXTRACT_FILE} ]; then
495 sudo cp ${EXTRACT_FILE} ${DATA_DIR}
497 echo "There is no ${TARGET_FILE} in ${IMAGE}"
500 sudo umount ${MNT_PNT}
501 sudo rm -rf ${MNT_PNT}
506 ###############################################################################
513 #--- assign input params to internal variables ---
515 if [ "${param_num}" != "4" ]; then
516 echo "Invalid param num"
517 echo "[Usage] $0 PART_NAME UPDATE_TYPE PART_BIN DELTA_BIN"
526 #--- set some default variables ---
532 COMMON_BINDIR=${CUR_DIR}/../common/bin
533 UPDATE_CFG_PATH=./cfg/update.cfg
535 #--- check if the current working directory is the parent directory of bin, data, cfg, xml ---
537 if [ ! -d ${TEST_DIR} ]; then
538 echo "Invalid working directory. ${TEST_DIR} does not exist"
543 if [ ! -d ${TEST_DIR} ]; then
544 echo "Invalid working directory. ${TEST_DIR} does not exist"
549 #if [ ! -d ${TEST_DIR} ]; then
550 # echo "Invalid working directory. ${TEST_DIR} does not exist"
554 #--- get old/new tar file which includes $PART_BIN ---
555 if [ "z${OLD_TAR_DIR}" = "z" ]; then
556 OLD_TAR_DIR="old_tar"
558 if [ "z${NEW_TAR_DIR}" = "z" ]; then
559 NEW_TAR_DIR="new_tar"
564 fn_get_tar_file_names ${PART_BIN}
566 if [ "${PART_NAME}" = "RAMDISK2" ]; then
567 fn_extract_from_image ${PART_BIN} /usr/bin/delta.ua
568 elif [ "${PART_NAME}" = "ROOTFS" ]; then
569 fn_extract_from_image ${PART_BIN} /usr/bin/upgrade-trigger.sh
572 if [ "z${OLD_TAR_FILE}" = "z" ]; then
573 if [ ! "${UPDATE_TYPE}" = "FULL_IMG" ] && [ ! "${UPDATE_TYPE}" = "PRE_UA" ]; then
574 echo "[old] tar file does not exist in ${DATA_DIR}/${OLD_TAR_DIR} which contains ${PART_BIN}"
575 #exit 0, cos this is not an error.
580 if [ "z${NEW_TAR_FILE}" = "z" ]; then
581 echo "[new] tar file does not exist in ${DATA_DIR}/${NEW_TAR_DIR} which contains ${PART_BIN}"
585 if [ ! "z${OLD_TAR_FILE}" = "z" ]; then
586 echo "[old] ${OLD_TAR_FILE} contains ${PART_BIN}"
588 echo "[new] ${NEW_TAR_FILE} contains ${PART_BIN}"
591 #--- generate delta binary ---
595 OUTPUT_DIR=${PART_NAME}_OUT
596 if [ ! -d ${OUTPUT_DIR} ]; then
597 if [ -f ${OUTPUT_DIR} ]; then
598 sudo rm -f ${OUTPUT_DIR}
603 if [ "${UPDATE_TYPE}" = "FULL_IMG" ] || [ "${UPDATE_TYPE}" = "PRE_UA" ]; then
605 elif [ "${UPDATE_TYPE}" = "DELTA_IMG" ]; then
607 elif [ "${UPDATE_TYPE}" = "DELTA_FS" ]; then
610 echo "Invalid update type"