MK_PART_DELTA=${COMMON_BINDIR}/mk_part_delta.sh
DELTA_CFG_PATH=./cfg/delta.cfg
UPDATE_CFG_PATH=./cfg/update.cfg
+ UPDATE_INFO_FILE=update-info.ini
+ UPDATE_INFO_PATH=./data/${UPDATE_INFO_FILE}
+ SETUP_SCRIPT_PATH=./cfg/setup.sh
DELTA_UA=./data/delta.ua
UPDATE_MANAGER=./data/upgrade-trigger.sh
LOG_PATH=./data/Delta.log
+ BUILD_STRING_FILE=build_string.txt
+ BUILD_STRING_PATH=./data/${BUILD_STRING_FILE}
# Getting date and minor version
MONDATE=$(date +%m%d)
i=1
fi
}
+#------------------------------------------------------------------------------
+# Function :
+# fn_get_tar_file_names
+#
+# Description :
+# find tar file name (without path) that contains given partition binary
+#
+
+fn_get_tar_file_names()
+{
+ BIN_TO_FIND=$1
+
+ cd ${DATA_DIR}/${OLD_TAR_DIR}
+ OLD_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null`
+ cd ${CUR_DIR}
+
+ cd ${DATA_DIR}/${NEW_TAR_DIR}
+ NEW_TAR_LIST=`ls *.tar *.tar.gz *.tgz *.tar.md5 2>/dev/null`
+ cd ${CUR_DIR}
+
+ #--- find which tar contains the binary ---
+ for tar_file in ${OLD_TAR_LIST}
+ do
+ result=`tar -tvf ${DATA_DIR}/${OLD_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"`
+ if [ "$?" = "0" ]; then
+ OLD_TAR_FILE=${tar_file}
+ break
+ fi
+ done
+
+ for tar_file in ${NEW_TAR_LIST}
+ do
+ result=`tar -tvf ${DATA_DIR}/${NEW_TAR_DIR}/${tar_file} | grep " ${BIN_TO_FIND}$"`
+ if [ "$?" = "0" ]; then
+ NEW_TAR_FILE=${tar_file}
+ break
+ fi
+ done
+
+}
+
+#------------------------------------------------------------------------------
+# Function :
+# fn_extract_from_image
+#
+# Description :
+# extract some files from given image
+#
+
+fn_extract_from_image()
+{
+ CUR_DIR=`pwd`
+ DATA_DIR=./data
+ IMAGE=$1
+ TARGET_FILE=$2
+ MNT_PNT=TMP_MNT
+ mkdir -p ${MNT_PNT}
+
+ fn_get_tar_file_names $IMAGE
+ tar xvf ${DATA_DIR}/${NEW_TAR_DIR}/${NEW_TAR_FILE} ${IMAGE}
+ if [ "$?" != "0" ]; then
+ return 1;
+ fi
+
+ sudo mount -o loop ${IMAGE} ${MNT_PNT}
+ if [ "$?" != "0" ]; then
+ return 1;
+ fi
+
+ EXTRACT_FILE="${MNT_PNT}${TARGET_FILE}"
+ if [ -e ${EXTRACT_FILE} ]; then
+ sudo cp ${EXTRACT_FILE} ${DELTA_DIR}
+ else
+ echo "There is no ${TARGET_FILE} in ${IMAGE}"
+ fi
+
+ sudo umount ${MNT_PNT}
+ sudo rm -rf ${MNT_PNT}
+ sudo rm -f ${IMAGE}
+}
+
###############################################################################
#==================
# Main Start
fn_process_extra_delta
else
${MK_PART_DELTA} ${part_name} ${update_type} ${part_bin} ${delta_bin}
- RET=$?
- if [ "$RET" = "0" ] || [ "$RET" = "2" ]; then
+ if [ "$?" = "0" ]; then
if [ "${update_type}" = "DELTA_FS" ]; then
sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
sudo mv ${RESULT_DIR}/${part_bin} ${DELTA_DIR}
sudo mv data/${PART_OUT} ${RESULT_DIR}/${part_bin}
sudo mv ${RESULT_DIR}/${part_bin}/${delta_bin} ${DELTA_DIR}
fi
- if [ "$RET" = "2" ]; then
- echo "Omit ${part_name} from cfg"
- sudo cat ${UPDATE_CFG_PATH} | sed /^${part_name}/d \
- > "${UPDATE_CFG_PATH}_tmp"
- sudo mv "${UPDATE_CFG_PATH}_tmp" ${UPDATE_CFG_PATH}
+ if [ "$?" != "0" ]; then
+ echo "Warning: No differences - remove record for \"${part_name}\" from the final update.cfg"
+ sed -i "/^${part_name}\b/d" "${UPDATE_CFG_PATH}"
fi
else
sudo rm -rf ${RESULT_DIR}/${part_bin}
sudo rm -rf ${RESULT_DIR}/${part_bin}
done
+ if [ ! -s "${UPDATE_CFG_PATH}" ]; then
+ echo "Error: No differences between versions - abort delta generation"
+ exit 2
+ fi
+
#move update.cfg to delta directory
if [ -r ${UPDATE_CFG_PATH} ]; then
sudo cp ${UPDATE_CFG_PATH} ${DELTA_DIR}/update.cfg
sudo rm ${LOG_PATH}
fi
- #--- move delta.ua to delta directory ---
- if [ -r ${DELTA_UA} ]; then
- sudo cp ${DELTA_UA} ${DELTA_DIR}/delta.ua
- sudo rm ${DELTA_UA}
+ if [ -r ${BUILD_STRING_PATH} ]; then
+ sudo cp ${BUILD_STRING_PATH} ${DELTA_DIR}/${BUILD_STRING_FILE}
+ sudo rm ${BUILD_STRING_PATH}
+ fi
+
+ if [ -r ${UPDATE_INFO_PATH} ]; then
+ sudo cp ${UPDATE_INFO_PATH} ${DELTA_DIR}/${UPDATE_INFO_FILE}
+ sudo rm ${UPDATE_INFO_PATH}
fi
- #--- move update manager script to delta directory ---
- if [ -r ${UPDATE_MANAGER} ]; then
- sudo cp ${UPDATE_MANAGER} ${DELTA_DIR}/upgrade-trigger.sh
- sudo rm ${UPDATE_MANAGER}
+ if [ -r ${SETUP_SCRIPT_PATH} ]; then
+ sudo cp ${SETUP_SCRIPT_PATH} ${DELTA_DIR}/setup.sh
fi
+ #--- extract files which would be appended to delta.tar ---
+ echo "Extract binaries for update from images"
+ fn_extract_from_image rootfs.img /usr/bin/upgrade-trigger.sh
+ fn_extract_from_image ramdisk-recovery.img /usr/bin/delta.ua
+
#--- archive result directory ---
cd result/$MONDATE
echo "tar result directory"
fi
cd ${DELTA_DIR}
sudo cp ${COMMON_BINDIR}/unpack.sh ./
-sudo tar --overwrite -cf ../delta.tar *
+
+# Ensure essential files are at beginning of archive (metadata, scripts and binaries to perform upgrade)
+touch *.txt *.cfg *.ini *.sh *.ua
+sudo tar --overwrite -cpf ../delta.tar $(ls -1td *)
+
+SIGN_PKCS_FILE=$1
+SIGN_PKCS_PASSWORD=$2
+if [ "z${SIGN_PKCS_FILE}" != "z" ]; then
+ if [ "z${SIGN_PKCS_PASSWORD}" != "z" ]; then
+ SIGNER_OPTIONAL_ARGUMENT="-p ${SIGN_PKCS_PASSWORD}"
+ fi
+ sudo ${COMMON_BINDIR}/sign_img.sh -k ${SIGN_PKCS_FILE} -i ../delta.tar ${SIGNER_OPTIONAL_ARGUMENT}
+fi
cd -
END_TIMESTAMP="$(date +%T)"