Merge branch 'tizen' into tizen_4.0
[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_gen_update_cfg
11 #
12 # Description :
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)
15
16 fn_gen_update_cfg()
17 {
18         in_file=$1
19         out_file=$2
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[${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]}
48
49                 line_num=$(($line_num + 1))
50
51         done < ${in_file}
52
53         PART_NUM=${line_num}
54
55         if [ -f ${out_file} ]; then
56                 sudo rm -fr ${out_file}
57         fi
58
59         for ((update_idx=0;update_idx<PART_NUM;update_idx++))
60         do
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}]}
66
67                 if [ "${f3}" != "EXCLUDED" ]; then
68                         echo -e "$f1\t\t$f2\t\t$f3\t\t$f4\t\t$f5" >> ${out_file}
69                 fi
70         done
71
72         return 0
73 }
74
75 #------------------------------------------------------------------------------
76 # Function :
77 #       fn_set_default_params
78 #
79 # Description :
80 #       set default params used globally in this script
81 #
82
83 fn_set_default_params()
84 {
85         MY_ID=`whoami`
86         MK_PART_DELTA=${COMMON_BINDIR}/mk_part_delta.sh
87         DELTA_CFG_PATH=./cfg/delta.cfg
88         UPDATE_CFG_PATH=./cfg/update.cfg
89         DELTA_UA=./data/delta.ua
90         UPDATE_MANAGER=./data/upgrade-trigger.sh
91
92         LOG_PATH=./data/Delta.log
93         # Getting date and minor version
94         MONDATE=$(date +%m%d)
95         i=1
96         while [ -d "result/${MONDATE}_${i}" ]
97         do
98                 i=$(($i + 1))
99         done
100         MONDATE="${MONDATE}_${i}"
101         echo "MONDATE = ${MONDATE}"
102
103         if [ "z${OLD_TAR_DIR}" = "z" ]; then
104                 export OLD_TAR_DIR="old_tar"
105         fi
106         if [ "z${NEW_TAR_DIR}" = "z" ]; then
107                 export NEW_TAR_DIR="new_tar"
108         fi
109 }
110
111 #------------------------------------------------------------------------------
112 # Function :
113 #       fn_swap_binary_files
114 #
115 # Description :
116 #       change old & new for making backward delta
117 #
118
119 fn_swap_binary_files()
120 {
121         TEMP_TAR_DIR=${OLD_TAR_DIR}
122         export OLD_TAR_DIR=${NEW_TAR_DIR}
123         export NEW_TAR_DIR=${TEMP_TAR_DIR}
124 }
125
126 #------------------------------------------------------------------------------
127 # Function :
128 #       fn_print_update_cfg
129
130 fn_print_update_cfg()
131 {
132         for ((update_idx=0;update_idx<PART_NUM;update_idx++))
133         do
134                         echo "------------------------------"
135                         echo "[PART_NAME]    ${PART_NAME[${update_idx}]}"
136                         echo "[DELTA_BIN]    ${DELTA_BIN[${update_idx}]}"
137                         echo "[UPDATE_TYPE]  ${UPDATE_TYPE[${update_idx}]}"
138                         echo "[BLK_DEV]      ${BLK_DEV[${update_idx}]}"
139                         echo "[BLK_OFFSET]   ${BLK_OFFSET[${update_idx}]}"
140
141         done
142         echo "------------------------------"
143 }
144
145 #------------------------------------------------------------------------------
146 # Function :
147 #       fn_process_extra_delta
148 #
149
150 fn_process_extra_delta()
151 {
152         RAMDISK2_FULL_IMG=0
153         if [ "${part_name}" = "RAMDISK2" ]; then
154                 if [ "${RAMDISK2_FULL_IMG}" = "0" ]; then
155                         #--- delta recovery partition ---
156                         ${MK_PART_DELTA} ${part_name} DELTA_IMG ${part_bin} ${delta_bin}
157                         if [ "$?" = "0" ]; then
158                                 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
159                                 sudo mv ${RESULT_DIR}/${part_bin}/${delta_bin} ${DELTA_DIR}
160                         fi
161                 fi
162                 if [ "${RAMDISK2_FULL_IMG}" = "1" ]; then
163                         #--- full recovery partition ---
164                         ${MK_PART_DELTA} ${part_name} FULL_IMG ${part_bin} ${delta_bin}
165                         if [ "$?" = "0" ]; then
166                                 sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
167                                 sudo mv ${RESULT_DIR}/${part_bin}/${part_bin} ${DELTA_DIR}
168                         fi
169                 fi
170         elif [ "${part_name}" = "RECOVERY" ]; then
171                 #--- recovery kernel ---
172                 sudo echo "1" > ${DELTA_DIR}/${delta_bin}
173         elif [ "${part_name}" = "EXTRA" ]; then
174                 echo "---"
175         fi
176 }
177
178 ###############################################################################
179 #==================
180 # Main Start
181 #==================
182
183 COMMON_BINDIR=${PWD}/../common/bin
184
185 fn_set_default_params
186
187 fn_gen_update_cfg ${DELTA_CFG_PATH} ${UPDATE_CFG_PATH}
188
189 ################### Make delta Forward and Backward #####################
190 if [ "z${FW_BW}" = "z" ]; then
191         #FW_BW="FW_DELTA BW_DELTA"
192         FW_BW="FW_DELTA"
193 fi
194
195 START_TIMESTAMP="$(date +%T)"
196
197 for Make_Delta in $FW_BW
198 do
199         #--- archive result directory ---
200         echo "Make $Make_Delta Delta file"
201         RESULT_DIR=result/$MONDATE/$Make_Delta
202         DELTA_DIR=${RESULT_DIR}/DELTA
203         mkdir -p ${DELTA_DIR}
204
205         if [ "$Make_Delta" = "BW_DELTA" ]; then
206                 fn_swap_binary_files
207         fi
208
209
210         #--- make delta for each partition ---
211         for ((part_num=0;part_num<PART_NUM;part_num++))
212         do
213                 part_name=${PART_NAME[${part_num}]}
214                 update_type=${UPDATE_TYPE[${part_num}]}
215                 part_bin=${PART_BIN[${part_num}]}
216                 delta_bin=${DELTA_BIN[${part_num}]}
217
218                 PART_OUT=${part_name}_OUT
219
220                 if [ "${update_type}" = "EXCLUDED" ]; then
221                         ${MK_PART_DELTA} ${part_name} ${update_type} ${part_bin} ${delta_bin}
222                         continue
223                 elif [ "${update_type}" = "EXTRA" ]; then
224                         fn_process_extra_delta
225                 else
226                         ${MK_PART_DELTA} ${part_name} ${update_type} ${part_bin} ${delta_bin}
227                         if [ "$?" = "0" ]; then
228                                 if [ "${update_type}" = "DELTA_FS" ]; then
229                                         sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
230                                         sudo mv ${RESULT_DIR}/${part_bin} ${DELTA_DIR}
231                                 else
232                                         sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
233                                         sudo mv ${RESULT_DIR}/${part_bin}/${delta_bin} ${DELTA_DIR}
234                                 fi
235                         else
236                                 sudo rm -rf ${RESULT_DIR}/${part_bin}
237                                 echo "Error: Abort Delta Generation"
238                                 exit 1
239                         fi
240                 fi
241                 sudo rm -rf ${RESULT_DIR}/${part_bin}
242         done
243
244         #move update.cfg to delta directory
245         if [ -r ${UPDATE_CFG_PATH} ]; then
246                 sudo cp ${UPDATE_CFG_PATH} ${DELTA_DIR}/update.cfg
247                 sudo rm ${UPDATE_CFG_PATH}
248         fi
249         if [ -r ${LOG_PATH} ]; then
250                 sudo cp ${LOG_PATH} ${RESULT_DIR}/Delta.log
251                 sudo rm ${LOG_PATH}
252         fi
253
254         #--- move delta.ua to delta directory ---
255         if [ -r ${DELTA_UA} ]; then
256                 sudo cp ${DELTA_UA} ${DELTA_DIR}/delta.ua
257                 sudo rm ${DELTA_UA}
258         fi
259
260         #--- move update manager script to delta directory ---
261         if [ -r ${UPDATE_MANAGER} ]; then
262                 sudo cp ${UPDATE_MANAGER} ${DELTA_DIR}/upgrade-trigger.sh
263                 sudo rm ${UPDATE_MANAGER}
264         fi
265
266         #--- archive result directory ---
267         cd result/$MONDATE
268         echo "tar result directory"
269         sudo tar cf ${MONDATE}_${Make_Delta}.tar $Make_Delta
270         cd ../..
271
272         echo "Making delta binary is End!! ($Make_Delta)"
273 done
274
275 if [ -r ${UPDATE_CFG_PATH} ]; then
276         sudo rm ${UPDATE_CFG_PATH}
277 fi
278 cd ${DELTA_DIR}
279 sudo cp ${COMMON_BINDIR}/unpack.sh ./
280 sudo tar --overwrite -cf ../delta.tar *
281 cd -
282
283 END_TIMESTAMP="$(date +%T)"
284
285 echo "OVERALL TIMESTAMP : [START] ${START_TIMESTAMP} ~ [END] ${END_TIMESTAMP}"
286