Add missing file to full type delta
[platform/core/system/upgrade-tools.git] / mk_delta / common / bin / mk_delta_full.sh
1 #!/bin/bash
2
3 set -u
4 shopt -s nullglob
5
6 fn_set_default_params()
7 {
8         MY_ID=$(whoami)
9         DATA_DIR=./data
10         CFG_DIR=./cfg
11         DELTA_CFG_PATH=${CFG_DIR}/delta.cfg
12         UPDATE_CFG_PATH=${DATA_DIR}/update.cfg
13         UPDATE_INFO_FILE=update-info.ini
14         UPDATE_INFO_ORIG_PATH=${CFG_DIR}/${UPDATE_INFO_FILE}
15         UPDATE_INFO_PATH=${DATA_DIR}/${UPDATE_INFO_FILE}
16         SETUP_SCRIPT_PATH=${CFG_DIR}/setup.sh
17
18         COMMON_BIN_DIR=$(realpath ../common/bin)
19         UPDATE_INFO_PATH=${COMMON_BIN_DIR}/update-info-builder.py
20
21         LOG_PATH=${DATA_DIR}/Delta.log
22         BUILD_STRING_FILE=build_string.txt
23         BUILD_STRING_PATH=${DATA_DIR}/${BUILD_STRING_FILE}
24         # Getting date and minor version
25         MONDATE=$(date +%m%d)
26         i=1
27         while [ -d "result/${MONDATE}_${i}" ]
28         do
29                 i=$(($i + 1))
30         done
31         MONDATE="${MONDATE}_${i}"
32         echo "MONDATE = ${MONDATE}"
33
34         NEW_TAR_DIR="new_tar"
35         RESULT_DIR=result/$MONDATE/FW_DELTA
36         DELTA_DIR=${RESULT_DIR}/DELTA
37         mkdir -p ${DELTA_DIR}
38
39         DIR_WITH_IMAGES=${DATA_DIR}/images
40         mkdir -p ${DIR_WITH_IMAGES}
41
42         ROOTFS_EXCTRACTED="rootfs-model-config.xml"
43         TIZEN_EXCTRACTED="tizen-build.conf"
44         HAL_EXCTRACTED="hal-model-conf.xml"
45         UPDATE_INFO_FILE="update-info.ini"
46 }
47
48 fn_extract_mounting_wrapper()
49 {
50         if [ "$PART_NAME" != "rootfs" ] && [ "$PART_NAME" != "hal" ]; then
51                 return
52         fi
53         local MNT_PNT="MNT_PNT"
54         mkdir -p ${MNT_PNT}
55         sudo mount -o loop,ro "${DELTA_DIR}/${PART_BIN}" ${MNT_PNT}
56
57         fn_extract_needed_files ${MNT_PNT}
58
59         sudo umount ${MNT_PNT}
60         rm -rf ${MNT_PNT}
61 }
62
63 fn_extract_needed_files()
64 {
65         local MNT_PNT=$1
66
67         if [ "$PART_NAME" == "hal" ]; then
68                 local HAL_TARG_NAME="hal-model-conf.xml"
69                 local HAL_MODEL_CONFIG_PATH=${MNT_PNT}"/etc/config/model-config.xml"
70
71                 # exctarct files/binaries
72                 cp "${HAL_MODEL_CONFIG_PATH}" ${DELTA_DIR}/${HAL_EXCTRACTED}
73
74         elif [ "$PART_NAME" == "rootfs" ]; then
75                 local UPGRADE_SUPPORT="upgrade-support"
76                 local UPGRADE_APPLY="upgrade-apply"
77                 local UPGRADE_APPLY_DELTAFS="upgrade-apply-deltafs"
78
79                 local ROOTFS_MODEL_CONFIG_PATH=${MNT_PNT}"/etc/config/model-config.xml"
80                 local TIZEN_BUILD_CONFIG_PATH=${MNT_PNT}"/etc/tizen-build.conf"
81                 local UPGRADE_SUPPORT_PATH=${MNT_PNT}"/usr/libexec/"${UPGRADE_SUPPORT}
82                 local UPGRADE_APPLY_PATH=${MNT_PNT}"/usr/bin/"${UPGRADE_APPLY}
83                 local UPGRADE_APPLY_DELTAFS_PATH=${MNT_PNT}"/usr/bin/"${UPGRADE_APPLY_DELTAFS}
84
85                 echo "===== Start writing image versions ====="
86                 local OLD_BUILD_STRING="0.0"
87                 local NEW_BUILD_STRING=`cat ${MNT_PNT}/etc/info.ini | grep "Date=" | sed "s/Date=//" | sed "s/;$//"`
88                 echo "${BUILD_STRING_FILE} : ${OLD_BUILD_STRING}@${NEW_BUILD_STRING}"
89                 echo -n ${OLD_BUILD_STRING}@${NEW_BUILD_STRING} > ${BUILD_STRING_PATH}
90                 echo "===== Finish writing image versions ====="
91
92                 ## exctarct files/binaries
93                 cp "${ROOTFS_MODEL_CONFIG_PATH}" ${DELTA_DIR}/${ROOTFS_EXCTRACTED}
94                 cp "${TIZEN_BUILD_CONFIG_PATH}" ${DELTA_DIR}/${TIZEN_EXCTRACTED}
95                 cp "${UPGRADE_SUPPORT_PATH}"/* ${DELTA_DIR}/
96                 cp "${UPGRADE_APPLY_PATH}" ${DELTA_DIR}/
97                 cp "${UPGRADE_APPLY_DELTAFS_PATH}" ${DELTA_DIR}/
98         fi
99 }
100
101 fn_read_delta_cfg()
102 {
103         in_file=$1
104
105         echo "Read ${in_file}"
106
107         if [ ! -r ${in_file} ]; then
108                 echo "file ${in_file} cannot be read"
109                 return 1
110         fi
111
112         line_num=0
113         while read line
114         do
115                 # skip comment line
116                 if [ "${line:0:1}" = "#" ]; then
117                         continue
118                 fi
119
120                 # skip empty line
121                 line_len=${#line}
122                 if [ "${line_len}" = "0" ]; then
123                         continue
124                 fi
125
126
127                 fields=(${line})
128                 PART_NAME[${line_num}]=${fields[0]}
129                 PART_BIN[${line_num}]=${fields[1]}
130                 DELTA_BIN[${line_num}]=${fields[2]}
131
132                 line_num=$(($line_num + 1))
133
134         done < ${in_file}
135
136         PART_NUM=${line_num}
137         return 0
138 }
139
140 fn_extract_all_images()
141 {
142         echo "Extracting archives with images:"
143         for tar_file in "${DATA_DIR}/${NEW_TAR_DIR}"/*.{tar,tar.gz}
144         do
145                 echo -e "\t$(basename ${tar_file})"
146                 tar xf "${tar_file}" -C "${DIR_WITH_IMAGES}"
147         done
148 }
149
150 fn_copy_image()
151 {
152         PART_NAME="$1"
153         PART_BIN="$2"
154         DELTA_BIN="$3"
155         CUR_DIR=$(pwd)
156
157         echo -ne "Add an image for ${PART_NAME} (${PART_BIN} -> ${DELTA_BIN})"
158         IMG_SIZE=$(du -b ${DIR_WITH_IMAGES}/${PART_BIN} | awk '{print $1}')
159         SHA1_SUM=$(sha1sum ${DIR_WITH_IMAGES}/${PART_BIN} | awk '{print $1}')
160         echo -e "\t\t${IMG_SIZE}\t[${SHA1_SUM}]"
161
162         sudo mv ${DIR_WITH_IMAGES}/${PART_BIN} ${DELTA_DIR}/${DELTA_BIN}
163         sudo chown ${MY_ID}:${MY_ID} ${DELTA_DIR}/${PART_BIN}
164
165         fn_extract_mounting_wrapper
166
167         echo -e "${PART_NAME}\t${DELTA_BIN}\tFULL_IMAGE:BEFORE_BOOT_FOTA\t/dev/null\t0\t0\t${IMG_SIZE}\t0\t${SHA1_SUM}" >> ${UPDATE_CFG_PATH}
168 }
169
170 fn_build_update_info()
171 {
172         sudo python3 "${UPDATE_INFO_PATH}" ${HAL_EXCTRACTED} ${ROOTFS_EXCTRACTED} ${TIZEN_EXCTRACTED} ${UPDATE_INFO_FILE} --full_type
173
174         rm -f ${HAL_EXCTRACTED} ${ROOTFS_EXCTRACTED} ${TIZEN_EXCTRACTED}
175 }
176
177 fn_make_delta_full()
178 {
179         echo "Make full delta file"
180         fn_extract_all_images $DIR_WITH_IMAGES
181
182         for ((part_num=0;part_num<PART_NUM;part_num++))
183         do
184                 part_name=${PART_NAME[${part_num}]}
185                 part_bin=${PART_BIN[${part_num}]}
186                 delta_bin=${DELTA_BIN[${part_num}]}
187
188                 fn_copy_image ${part_name} ${part_bin} ${delta_bin}
189                 if [ "$?" != "0" ]; then
190                         echo "Error: Abort Delta Generation"
191                         exit 1
192                 fi
193         done
194
195         #move update.cfg to delta directory
196         if [ -r ${UPDATE_CFG_PATH} ]; then
197                 sudo cp ${UPDATE_CFG_PATH} ${DELTA_DIR}/update.cfg
198                 sudo rm ${UPDATE_CFG_PATH}
199         fi
200         if [ -r ${LOG_PATH} ]; then
201                 sudo cp ${LOG_PATH} ${RESULT_DIR}/Delta.log
202                 sudo rm ${LOG_PATH}
203         fi
204
205         if [ -r ${BUILD_STRING_PATH} ]; then
206                 sudo cp ${BUILD_STRING_PATH} ${DELTA_DIR}/${BUILD_STRING_FILE}
207                 sudo rm ${BUILD_STRING_PATH}
208         fi
209
210         if [ -r ${SETUP_SCRIPT_PATH} ]; then
211                 sudo cp ${SETUP_SCRIPT_PATH} ${DELTA_DIR}/setup.sh
212         fi
213
214         if [ -r ${DIR_WITH_IMAGES} ]; then
215                 sudo rm -r ${DIR_WITH_IMAGES}
216         fi
217
218         #--- archive result directory ---
219         pushd ${DELTA_DIR}
220         fn_build_update_info
221         if [ ! -r ${UPDATE_INFO_FILE} ]; then
222                 echo "Delta generation failed - no ${UPDATE_INFO_FILE} generated."
223                 return -1
224         fi
225
226         sha1sum * > checksum.SHA1
227         echo "tar result directory"
228         sudo tar cf ../delta.tar *
229         popd
230
231         echo "Making delta binary is End!!"
232 }
233
234 #==================
235 # Main Start
236 #==================
237
238 COMMON_BINDIR=${PWD}/../common/bin
239
240 fn_set_default_params
241
242 fn_read_delta_cfg ${DELTA_CFG_PATH}
243
244 fn_make_delta_full