d26d60b1782b22d96376c450dcb6c4f4fec0787b
[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
78                 local ROOTFS_MODEL_CONFIG_PATH=${MNT_PNT}"/etc/config/model-config.xml"
79                 local TIZEN_BUILD_CONFIG_PATH=${MNT_PNT}"/etc/tizen-build.conf"
80                 local UPGRADE_SUPPORT_PATH=${MNT_PNT}"/usr/libexec/"${UPGRADE_SUPPORT}
81                 local UPGRADE_APPLY_PATH=${MNT_PNT}"/usr/bin/"${UPGRADE_APPLY}
82
83                 echo "===== Start writing image versions ====="
84                 local OLD_BUILD_STRING="0.0"
85                 local NEW_BUILD_STRING=`cat ${MNT_PNT}/etc/info.ini | grep "Date=" | sed "s/Date=//" | sed "s/;$//"`
86                 echo "${BUILD_STRING_FILE} : ${OLD_BUILD_STRING}@${NEW_BUILD_STRING}"
87                 echo -n ${OLD_BUILD_STRING}@${NEW_BUILD_STRING} > ${BUILD_STRING_PATH}
88                 echo "===== Finish writing image versions ====="
89
90                 ## exctarct files/binaries
91                 cp "${ROOTFS_MODEL_CONFIG_PATH}" ${DELTA_DIR}/${ROOTFS_EXCTRACTED}
92                 cp "${TIZEN_BUILD_CONFIG_PATH}" ${DELTA_DIR}/${TIZEN_EXCTRACTED}
93                 cp "${UPGRADE_SUPPORT_PATH}"/* ${DELTA_DIR}/
94                 cp "${UPGRADE_APPLY_PATH}" ${DELTA_DIR}/
95         fi
96 }
97
98 fn_read_delta_cfg()
99 {
100         in_file=$1
101
102         echo "Read ${in_file}"
103
104         if [ ! -r ${in_file} ]; then
105                 echo "file ${in_file} cannot be read"
106                 return 1
107         fi
108
109         line_num=0
110         while read line
111         do
112                 # skip comment line
113                 if [ "${line:0:1}" = "#" ]; then
114                         continue
115                 fi
116
117                 # skip empty line
118                 line_len=${#line}
119                 if [ "${line_len}" = "0" ]; then
120                         continue
121                 fi
122
123
124                 fields=(${line})
125                 PART_NAME[${line_num}]=${fields[0]}
126                 PART_BIN[${line_num}]=${fields[1]}
127                 DELTA_BIN[${line_num}]=${fields[2]}
128
129                 line_num=$(($line_num + 1))
130
131         done < ${in_file}
132
133         PART_NUM=${line_num}
134         return 0
135 }
136
137 fn_extract_all_images()
138 {
139         echo "Extracting archives with images:"
140         for tar_file in "${DATA_DIR}/${NEW_TAR_DIR}"/*.{tar,tar.gz}
141         do
142                 echo -e "\t$(basename ${tar_file})"
143                 tar xf "${tar_file}" -C "${DIR_WITH_IMAGES}"
144         done
145 }
146
147 fn_copy_image()
148 {
149         PART_NAME="$1"
150         PART_BIN="$2"
151         DELTA_BIN="$3"
152         CUR_DIR=$(pwd)
153
154         echo -ne "Add an image for ${PART_NAME} (${PART_BIN} -> ${DELTA_BIN})"
155         IMG_SIZE=$(du -b ${DIR_WITH_IMAGES}/${PART_BIN} | awk '{print $1}')
156         SHA1_SUM=$(sha1sum ${DIR_WITH_IMAGES}/${PART_BIN} | awk '{print $1}')
157         echo -e "\t\t${IMG_SIZE}\t[${SHA1_SUM}]"
158
159         sudo mv ${DIR_WITH_IMAGES}/${PART_BIN} ${DELTA_DIR}/${DELTA_BIN}
160         sudo chown ${MY_ID}:${MY_ID} ${DELTA_DIR}/${PART_BIN}
161
162         fn_extract_mounting_wrapper
163
164         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}
165 }
166
167 fn_build_update_info()
168 {
169         sudo python3 "${UPDATE_INFO_PATH}" ${HAL_EXCTRACTED} ${ROOTFS_EXCTRACTED} ${TIZEN_EXCTRACTED} ${UPDATE_INFO_FILE} --full_type
170
171         rm -f ${HAL_EXCTRACTED} ${ROOTFS_EXCTRACTED} ${TIZEN_EXCTRACTED}
172 }
173
174 fn_make_delta_full()
175 {
176         echo "Make full delta file"
177         fn_extract_all_images $DIR_WITH_IMAGES
178
179         for ((part_num=0;part_num<PART_NUM;part_num++))
180         do
181                 part_name=${PART_NAME[${part_num}]}
182                 part_bin=${PART_BIN[${part_num}]}
183                 delta_bin=${DELTA_BIN[${part_num}]}
184
185                 fn_copy_image ${part_name} ${part_bin} ${delta_bin}
186                 if [ "$?" != "0" ]; then
187                         echo "Error: Abort Delta Generation"
188                         exit 1
189                 fi
190         done
191
192         #move update.cfg to delta directory
193         if [ -r ${UPDATE_CFG_PATH} ]; then
194                 sudo cp ${UPDATE_CFG_PATH} ${DELTA_DIR}/update.cfg
195                 sudo rm ${UPDATE_CFG_PATH}
196         fi
197         if [ -r ${LOG_PATH} ]; then
198                 sudo cp ${LOG_PATH} ${RESULT_DIR}/Delta.log
199                 sudo rm ${LOG_PATH}
200         fi
201
202         if [ -r ${BUILD_STRING_PATH} ]; then
203                 sudo cp ${BUILD_STRING_PATH} ${DELTA_DIR}/${BUILD_STRING_FILE}
204                 sudo rm ${BUILD_STRING_PATH}
205         fi
206
207         if [ -r ${SETUP_SCRIPT_PATH} ]; then
208                 sudo cp ${SETUP_SCRIPT_PATH} ${DELTA_DIR}/setup.sh
209         fi
210
211         if [ -r ${DIR_WITH_IMAGES} ]; then
212                 sudo rm -r ${DIR_WITH_IMAGES}
213         fi
214
215         #--- archive result directory ---
216         pushd ${DELTA_DIR}
217         fn_build_update_info
218         if [ ! -r ${UPDATE_INFO_FILE} ]; then
219                 echo "Delta generation failed - no ${UPDATE_INFO_FILE} generated."
220                 return -1
221         fi
222
223         sha1sum * > checksum.SHA1
224         echo "tar result directory"
225         sudo tar cf ../delta.tar *
226         popd
227
228         echo "Making delta binary is End!!"
229 }
230
231 #==================
232 # Main Start
233 #==================
234
235 COMMON_BINDIR=${PWD}/../common/bin
236
237 fn_set_default_params
238
239 fn_read_delta_cfg ${DELTA_CFG_PATH}
240
241 fn_make_delta_full