Create delta.tar with delta.ua in it
[platform/core/system/upgrade-tools.git] / mk_delta / common / bin / mk_delta.sh
1 #!/bin/bash
2
3
4 #==================
5 # funtions
6 #==================
7
8 #------------------------------------------------------------------------------
9 # Function :
10 #       fn_read_delta_cfg
11 #
12 # Description :
13 #       read configuration file for delta generation.
14 #       config file format : PART_NAME PART_BIN UPDATE_TYPE (deliminator : TAB)
15 #
16
17 fn_read_delta_cfg()
18 {
19         in_file=$1
20
21         if [ ! -r ${in_file} ]; then
22                 echo "file ${in_file} cannot be read"
23                 return 1
24         fi
25
26         line_num=0
27         while read line
28         do
29                 # skip comment line
30                 if [ "${line:0:1}" = "#" ]; then
31                         continue
32                 fi
33
34                 # skip empty line
35                 line_len=${#line}
36                 if [ "${line_len}" = "0" ]; then
37                         continue
38                 fi
39
40
41                 fields=(${line})
42                 PART_NAME_delta[${line_num}]=${fields[0]}
43                 PART_BIN_delta[${line_num}]=${fields[1]}
44                 UPDATE_TYPE_delta[${line_num}]=${fields[2]}
45
46                 line_num=$(($line_num + 1))
47
48         done < ${in_file}
49
50         PART_NUM_delta=${line_num}
51
52         return 0
53 }
54
55 #------------------------------------------------------------------------------
56 # Function :
57 #       fn_read_part_cfg
58 #
59 # Description :
60 #       read configuration file for partition information.
61 #       config file format : PART_NAME DELTA_BIN UPDATE_TYPE BLK_DEV BLK_OFFSET (deliminator : TAB)
62 #
63
64 fn_read_part_cfg()
65 {
66         in_file=$1
67
68         if [ ! -r ${in_file} ]; then
69                 echo "file ${in_file} cannot be read"
70                 return 1
71         fi
72
73         line_num=0
74         while read line
75         do
76                 # skip comment line
77                 if [ "${line:0:1}" = "#" ]; then
78                         continue
79                 fi
80
81                 # skip empty line
82                 line_len=${#line}
83                 if [ "${line_len}" = "0" ]; then
84                         continue
85                 fi
86
87
88                 fields=(${line})
89                 PART_NAME_part[${line_num}]=${fields[0]}
90                 DELTA_BIN_part[${line_num}]=${fields[1]}
91                 UPDATE_TYPE_part[${line_num}]=${fields[2]}
92                 BLK_DEV_part[${line_num}]=${fields[3]}
93                 BLK_OFFSET_part[${line_num}]=${fields[4]}
94
95                 line_num=$(($line_num + 1))
96
97         done < ${in_file}
98
99         PART_NUM_part=${line_num}
100
101         return 0
102 }
103
104 #------------------------------------------------------------------------------
105 # Function :
106 #       fn_gen_update_cfg
107 #
108 # Description :
109 #       generate configuration file to be used during update.
110 #
111
112 fn_gen_update_cfg()
113 {
114         out_file=$1
115
116         update_idx=0
117
118         for ((delta_idx=0;delta_idx<PART_NUM_delta;delta_idx++))
119         do
120                 FOUND=0
121                 for ((part_idx=0;part_idx<PART_NUM_part;part_idx++))
122                 do
123                         if [ "${PART_NAME_part[${part_idx}]}" = "${PART_NAME_delta[${delta_idx}]}" ]; then
124                                 FOUND=1
125                                 break
126                         fi
127                 done
128
129                 if [ "${FOUND}" = "1" ]; then
130                         #-- PART_NAME, DELTA_BIN, BLK_DEV, BLK_OFFSET are from part.cfg
131                         PART_NAME[${update_idx}]=${PART_NAME_part[${part_idx}]}
132                         DELTA_BIN[${update_idx}]=${DELTA_BIN_part[${part_idx}]}
133                         BLK_DEV[${update_idx}]=${BLK_DEV_part[${part_idx}]}
134                         BLK_OFFSET[${update_idx}]=${BLK_OFFSET_part[${part_idx}]}
135
136                         #-- PART_BIN, UPDATE_TYPE are from delta.cfg
137                         PART_BIN[${update_idx}]=${PART_BIN_delta[${delta_idx}]}
138                         UPDATE_TYPE[${update_idx}]=${UPDATE_TYPE_delta[${delta_idx}]}
139
140                         update_idx=$(($update_idx + 1))
141                 fi
142
143         done
144
145         PART_NUM=${update_idx}
146
147         if [ -f ${out_file} ]; then
148                 sudo rm -fr ${out_file}
149         fi
150
151         for ((update_idx=0;update_idx<PART_NUM;update_idx++))
152         do
153                 f1=${PART_NAME[${update_idx}]}
154                 f2=${DELTA_BIN[${update_idx}]}
155                 f3=${UPDATE_TYPE[${update_idx}]}
156                 f4=${BLK_DEV[${update_idx}]}
157                 f5=${BLK_OFFSET[${update_idx}]}
158
159                 echo -e "$f1\t\t$f2\t\t$f3\t\t$f4\t\t$f5" >> ${out_file}
160         done
161
162         return 0
163 }
164
165 #------------------------------------------------------------------------------
166 # Function :
167 #       fn_set_default_params
168 #
169 # Description :
170 #       set default params used globally in this script
171 #
172
173 fn_set_default_params()
174 {
175         MY_ID=`whoami`
176         MK_PART_DELTA=${COMMON_BINDIR}/mk_part_delta.sh
177         DELTA_CFG_PATH=./cfg/delta.cfg
178         PART_CFG_PATH=./cfg/default_part.cfg
179         UPDATE_CFG_PATH=./cfg/update.cfg
180         DELTA_UA=./data/delta.ua
181
182         LOG_PATH=./data/Delta.log
183         # Getting date and minor version
184         MONDATE=$(date +%m%d)
185         i=1
186         while [ -d "result/${MONDATE}_${i}" ]
187         do
188                 i=$(($i + 1))
189         done
190         MONDATE="${MONDATE}_${i}"
191         echo "MONDATE = ${MONDATE}"
192
193         if [ "z${OLD_TAR_DIR}" = "z" ]; then
194                 export OLD_TAR_DIR="old_tar"
195         fi
196         if [ "z${NEW_TAR_DIR}" = "z" ]; then
197                 export NEW_TAR_DIR="new_tar"
198         fi
199 }
200
201 #------------------------------------------------------------------------------
202 # Function :
203 #       fn_swap_binary_files
204 #
205 # Description :
206 #       change old & new for making backward delta
207 #
208
209 fn_swap_binary_files()
210 {
211         TEMP_TAR_DIR=${OLD_TAR_DIR}
212         export OLD_TAR_DIR=${NEW_TAR_DIR}
213         export NEW_TAR_DIR=${TEMP_TAR_DIR}
214 }
215
216 #------------------------------------------------------------------------------
217 # Function :
218 #       fn_print_update_cfg
219
220 fn_print_update_cfg()
221 {
222         for ((update_idx=0;update_idx<PART_NUM;update_idx++))
223         do
224                         echo "------------------------------"
225                         echo "[PART_NAME]    ${PART_NAME[${update_idx}]}"
226                         echo "[DELTA_BIN]    ${DELTA_BIN[${update_idx}]}"
227                         echo "[BLK_DEV]      ${BLK_DEV[${update_idx}]}"
228                         echo "[BLK_OFFSET]   ${BLK_OFFSET[${update_idx}]}"
229                         echo "[PART_BIN]     ${PART_BIN[${update_idx}]}"
230                         echo "[UPDATE_TYPE]  ${UPDATE_TYPE[${update_idx}]}"
231
232         done
233         echo "------------------------------"
234 }
235
236 #------------------------------------------------------------------------------
237 # Function :
238 #       fn_process_extra_delta
239 #
240
241 fn_process_extra_delta()
242 {
243         RAMDISK2_FULL_IMG=0
244         if [ "${part_name}" = "RAMDISK2" ]; then
245                 if [ "${RAMDISK2_FULL_IMG}" = "0" ]; then
246                         #--- delta recovery partition ---
247                         ${MK_PART_DELTA} ${part_name} DELTA_IMG ${part_bin} ${delta_bin}
248                         if [ "$?" = "0" ]; then
249                                 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
250                                 sudo mv ${RESULT_DIR}/${part_bin}/${delta_bin} ${DELTA_DIR}
251                         fi
252                 fi
253                 if [ "${RAMDISK2_FULL_IMG}" = "1" ]; then
254                         #--- full recovery partition ---
255                         ${MK_PART_DELTA} ${part_name} FULL_IMG ${part_bin} ${delta_bin}
256                         if [ "$?" = "0" ]; then
257                                 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
258                                 sudo mv ${RESULT_DIR}/${part_bin}/${part_bin} ${DELTA_DIR}
259                         fi
260                 fi
261         elif [ "${part_name}" = "RECOVERY" ]; then
262                 #--- recovery kernel ---
263                 sudo echo "1" > ${DELTA_DIR}/${delta_bin}
264         elif [ "${part_name}" = "EXTRA" ]; then
265                 echo "---"
266         fi
267 }
268
269 ###############################################################################
270 #==================
271 # Main Start
272 #==================
273
274 COMMON_BINDIR=${PWD}/../common/bin
275
276 fn_set_default_params
277
278 fn_read_delta_cfg ${DELTA_CFG_PATH}
279
280 fn_read_part_cfg ${PART_CFG_PATH}
281
282 fn_gen_update_cfg ${UPDATE_CFG_PATH}
283
284 ################### Make delta Forward and Backward #####################
285 if [ "z${FW_BW}" = "z" ]; then
286         #FW_BW="FW_DELTA BW_DELTA"
287         FW_BW="FW_DELTA"
288 fi
289
290 START_TIMESTAMP="$(date +%T)"
291
292 for Make_Delta in $FW_BW
293 do
294         #--- archive result directory ---
295         echo "Make $Make_Delta Delta file"
296         RESULT_DIR=result/$MONDATE/$Make_Delta
297         DELTA_DIR=${RESULT_DIR}/DELTA
298         mkdir -p ${DELTA_DIR}
299
300         if [ "$Make_Delta" = "BW_DELTA" ]; then
301                 fn_swap_binary_files
302         fi
303
304
305         #--- make delta for each partition ---
306         for ((part_num=0;part_num<PART_NUM;part_num++))
307         do
308                 part_name=${PART_NAME[${part_num}]}
309                 update_type=${UPDATE_TYPE[${part_num}]}
310                 part_bin=${PART_BIN[${part_num}]}
311                 delta_bin=${DELTA_BIN[${part_num}]}
312
313                 PART_OUT=${part_name}_OUT
314
315                 if [ "${update_type}" = "EXTRA" ]; then
316                         fn_process_extra_delta
317                 else
318                         ${MK_PART_DELTA} ${part_name} ${update_type} ${part_bin} ${delta_bin}
319                         if [ "$?" = "0" ]; then
320                                 if [ "${update_type}" = "DELTA_FS" ]; then
321                                 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
322                                 sudo mv ${RESULT_DIR}/${part_bin} ${DELTA_DIR}
323                                 else
324                                         sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
325                                 sudo mv ${RESULT_DIR}/${part_bin}/${delta_bin} ${DELTA_DIR}
326                                 fi
327                         else
328                                 sudo rm -rf ${RESULT_DIR}/${part_bin}
329                                 echo "Error: Abort Delta Generation"
330                                 exit 1
331                         fi
332                 fi
333                 sudo rm -rf ${RESULT_DIR}/${part_bin}
334         done
335
336         #move update.cfg to delta directory
337         if [ -r ${UPDATE_CFG_PATH} ]; then
338                 sudo cp ${UPDATE_CFG_PATH} ${DELTA_DIR}/update.cfg
339                 sudo rm ${UPDATE_CFG_PATH}
340         fi
341         if [ -r ${LOG_PATH} ]; then
342                 sudo cp ${LOG_PATH} ${RESULT_DIR}/Delta.log
343                 sudo rm ${LOG_PATH}
344         fi
345
346         #--- move delta.ua to delta directory ---
347         if [ -r ${DELTA_UA} ]; then
348                 sudo cp ${DELTA_UA} ${DELTA_DIR}/delta.ua
349                 sudo rm ${DELTA_UA}
350         fi
351
352         #--- archive result directory ---
353         cd result/$MONDATE
354         echo "tar result directory"
355         sudo tar cf ${MONDATE}_${Make_Delta}.tar $Make_Delta
356         cd ../..
357
358         echo "Making delta binary is End!! ($Make_Delta)"
359 done
360
361 if [ -r ${UPDATE_CFG_PATH} ]; then
362         sudo rm ${UPDATE_CFG_PATH}
363 fi
364 cd ${DELTA_DIR}
365 sudo cp ${COMMON_BINDIR}/unpack.sh ./
366 sudo tar --overwrite -cf ../delta.tar *
367 cd -
368
369 END_TIMESTAMP="$(date +%T)"
370
371 echo "OVERALL TIMESTAMP : [START] ${START_TIMESTAMP} ~ [END] ${END_TIMESTAMP}"
372