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 "Attribute 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}
357 echo "===== Start writing image versions ====="
358 local TMP_MNT_PNT="TMP_MNT_PNT"
359 local BUILD_STRING_FILE="build_string.txt"
360 mkdir -p ${TMP_MNT_PNT}
362 tar xvf ${OLD_TAR_DIR}/${OLD_TAR_FILE} ${PART_IMG_ORG}
363 sudo mount -t ext4 -o loop ${PART_IMG_ORG} ${TMP_MNT_PNT}
364 local OLD_BUILD_STRING=`cat ${TMP_MNT_PNT}/etc/info.ini | grep "Build=" | sed "s/Build=//" | sed "s/;$//"`
365 sudo umount ${TMP_MNT_PNT}
366 rm -rf ${PART_IMG_ORG}
368 tar xvf ${NEW_TAR_DIR}/${NEW_TAR_FILE} ${PART_IMG_ORG}
369 sudo mount -t ext4 -o loop ${PART_IMG_ORG} ${TMP_MNT_PNT}
370 local NEW_BUILD_STRING=`cat ${TMP_MNT_PNT}/etc/info.ini | grep "Build=" | sed "s/Build=//" | sed "s/;$//"`
371 sudo umount ${TMP_MNT_PNT}
372 rm -rf ${PART_IMG_ORG}
374 echo "${BUILD_STRING_FILE} : ${OLD_BUILD_STRING}@${NEW_BUILD_STRING}"
375 echo -n ${OLD_BUILD_STRING}@${NEW_BUILD_STRING} > ${BUILD_STRING_FILE}
377 rm -rf ${TMP_MNT_PNT}
378 echo "===== Finish writing image versions ====="
381 "ramdisk1" | "ramdisk" )
382 EXCLUDE_FILES="lost+found dev proc tmp sys"
383 TGT_MNT_PNT=${FAKE_ROOT}/mnt/initrd
385 "ramdisk2" | "ramdisk-recovery" )
386 EXCLUDE_FILES="lost+found"
387 TGT_MNT_PNT=${FAKE_ROOT}/mnt/initrd-recovery
390 EXCLUDE_FILES="lost+found"
391 TGT_MNT_PNT=${FAKE_ROOT}/opt/usr
394 EXCLUDE_FILES="lost+found"
395 TGT_MNT_PNT=${FAKE_ROOT}/opt
399 TGT_MNT_PNT=${FAKE_ROOT}/boot
402 echo "${PART_NAME} not supported !!!"
407 MNT_PNT_OLD=${BASE_OLD}/${TGT_MNT_PNT}
408 MNT_PNT_NEW=${BASE_NEW}/${TGT_MNT_PNT}
412 if [ "$?" != "0" ]; then
419 #------------------------------------------------------------------------------
426 PART_IMG_NEW=${PART_BIN}
428 #---- untar partition image and rename for old & new ----
429 echo "untar ${NEW_TAR_FILE}"
430 tar xvf ${NEW_TAR_DIR}/${NEW_TAR_FILE} ${PART_IMG_NEW}
431 if [ "$?" != "0" ]; then
435 sudo mv ${PART_IMG_NEW} ${OUTPUT_DIR}/${PART_BIN}
436 sudo chown ${MY_ID}:${MY_ID} ${OUTPUT_DIR}/${PART_BIN}
443 #------------------------------------------------------------------------------
448 # find tar file name (without path) that contains given partition binary
451 fn_get_tar_file_names()
455 cd ${DATA_DIR}/${OLD_TAR_DIR}
456 OLD_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null`
459 cd ${DATA_DIR}/${NEW_TAR_DIR}
460 NEW_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null`
463 #--- find which tar contains the binary ---
464 for tar_file in ${OLD_TAR_LIST}
466 result=`tar -tvf ${DATA_DIR}/${OLD_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"`
467 if [ "$?" = "0" ]; then
468 OLD_TAR_FILE=${tar_file}
473 for tar_file in ${NEW_TAR_LIST}
475 result=`tar -tvf ${DATA_DIR}/${NEW_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"`
476 if [ "$?" = "0" ]; then
477 NEW_TAR_FILE=${tar_file}
484 ###############################################################################
491 #--- assign input params to internal variables ---
493 if [ "${param_num}" != "4" ]; then
494 echo "Invalid param num"
495 echo "[Usage] $0 PART_NAME UPDATE_TYPE PART_BIN DELTA_BIN"
504 #--- set some default variables ---
510 COMMON_BINDIR=${CUR_DIR}/../common/bin
511 UPDATE_CFG_PATH=./cfg/update.cfg
513 #--- check if the current working directory is the parent directory of bin, data, cfg, xml ---
515 if [ ! -d ${TEST_DIR} ]; then
516 echo "Invalid working directory. ${TEST_DIR} does not exist"
521 if [ ! -d ${TEST_DIR} ]; then
522 echo "Invalid working directory. ${TEST_DIR} does not exist"
527 #if [ ! -d ${TEST_DIR} ]; then
528 # echo "Invalid working directory. ${TEST_DIR} does not exist"
532 #--- get old/new tar file which includes $PART_BIN ---
533 if [ "z${OLD_TAR_DIR}" = "z" ]; then
534 OLD_TAR_DIR="old_tar"
536 if [ "z${NEW_TAR_DIR}" = "z" ]; then
537 NEW_TAR_DIR="new_tar"
542 fn_get_tar_file_names ${PART_BIN}
544 if [ "z${OLD_TAR_FILE}" = "z" ]; then
545 if [ ! "${UPDATE_TYPE}" = "FULL_IMG" ] && [ ! "${UPDATE_TYPE}" = "PRE_UA" ]; then
546 echo "[old] tar file does not exist in ${DATA_DIR}/${OLD_TAR_DIR} which contains ${PART_BIN}"
547 #exit 0, cos this is not an error.
552 if [ "z${NEW_TAR_FILE}" = "z" ]; then
553 echo "[new] tar file does not exist in ${DATA_DIR}/${NEW_TAR_DIR} which contains ${PART_BIN}"
557 if [ ! "z${OLD_TAR_FILE}" = "z" ]; then
558 echo "[old] ${OLD_TAR_FILE} contains ${PART_BIN}"
560 echo "[new] ${NEW_TAR_FILE} contains ${PART_BIN}"
563 #--- generate delta binary ---
567 OUTPUT_DIR=${PART_NAME}_OUT
568 if [ ! -d ${OUTPUT_DIR} ]; then
569 if [ -f ${OUTPUT_DIR} ]; then
570 sudo rm -f ${OUTPUT_DIR}
575 if [ "${UPDATE_TYPE}" = "FULL_IMG" ] || [ "${UPDATE_TYPE}" = "PRE_UA" ]; then
577 elif [ "${UPDATE_TYPE}" = "DELTA_IMG" ]; then
579 elif [ "${UPDATE_TYPE}" = "DELTA_FS" ]; then
582 echo "Invalid update type"