#!/bin/bash
NOW=`date '+%Y-%m-%d %H:%M'`
echo “Start at ${NOW}”
UPDATE_HOST=10.0.4.48 LIMIT_SPEED=900k
if [ $# -ge 1 ]; then
echo "Use update host $1" UPDATE_HOST=$1
else
echo "Use default update host ${UPDATE_HOST}"
fi
if [ $# -ge 2 ]; then
LIMIT_SPEED=$2 echo "Use download speed ${LIMIT_SPEED}"
else
echo "Use default download speed ${LIMIT_SPEED}"
fi
if [ ! -d /root ]; then
echo "/root directory not exist! Exit" exit 1
fi
if [ ! -f /proc/itc_sn/sn ]; then
echo "/proc/itc_sn/sn file not exist! Exit" exit 1
fi
if [ ! -f /boot/uboot/uEnv.txt ]; then
echo "/boot/uboot/uEnv.txt file not exist! Exit" exit 1
fi
which wget if [ ! $? -eq 0 ]; then
echo "wget tool not installed. Exit" exit 1
fi
which md5sum if [ ! $? -eq 0 ]; then
echo "md5sum tool not installed. Exit" exit 1
fi
which awk if [ ! $? -eq 0 ]; then
echo "awk tool not installed. Exit" exit 1
fi
SN=`cat /proc/itc_sn/sn` echo “Serial NO. ${SN}”
echo “Start download firmware.md5 file.” # tell server I have started. wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}&status=1 &> /dev/null sleep 1 wget -O /root/firmware.md5 ${UPDATE_HOST}/static/firmwares/firmware.md5 –limit-rate=${LIMIT_SPEED} ret=$? if [ ! $ret -eq 0 ]; then
echo "firmware.md5 file downlaod failed! ${ret}" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=401\&reason=firmware.md5_download_failed &> /dev/null exit 1
fi
echo “Start download package 1 -> vardir …” wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}&status=2 &> /dev/null sleep 1 wget -O /root/vardir.tar.xz ${UPDATE_HOST}/static/firmwares/vardir.tar.xz –limit-rate=${LIMIT_SPEED} ret=$? if [ ! $ret -eq 0 ]; then
echo "Package vardir.tar.xz download failed! ${ret}" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=402\&reason=vardir.tar.xz_download_failed &> /dev/null exit 1
fi
echo “Start download package 2 -> rootfs.tar.xz …” wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}&status=3 &> /dev/null sleep 1 wget -O /root/rootfs.tar.xz ${UPDATE_HOST}/static/firmwares/rootfs.tar.xz –limit-rate=${LIMIT_SPEED} ret=$? if [ ! $ret -eq 0 ]; then
echo "Package rootfs.tar.xz download failed! ${ret}" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=403\&reason=rootfs.tar.xz_download_failed &> /dev/null exit 1
fi
echo “Start download uImage …” wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}&status=4 &> /dev/null sleep 1 wget -O /root/uImage ${UPDATE_HOST}/static/firmwares/uImage –limit-rate=${LIMIT_SPEED} ret=$? if [ ! $ret -eq 0 ]; then
echo "Package uImage download failed! ${ret}" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=404\&reason=uImage_download_failed &> /dev/null exit 1
fi
echo “Finished download. Start validate firmware.”
if [ ! -f /root/firmware.md5 ]; then
echo "/root/firmware.md5 not exist. Exit" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=401\&reason=firmware.md5_not_exist &> /dev/null exit 1
fi
if [ ! -f /root/vardir.tar.xz ]; then
echo "/root/vardir.tar.xz not exist. Exit" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=402\&reason=vardir.tar.xz_not_exist &> /dev/null exit 1
fi
if [ ! -f /root/rootfs.tar.xz ]; then
echo "/root/rootfs.tar.xz not exist. Exit" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=403\&reason=rootfs.tar.xz_not_exist &> /dev/null exit 1
fi
if [ ! -f /root/uImage ]; then
echo "/root/uImage not exist. Exit" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=404\&reason=uImage_not_exist &> /dev/null exit 1
fi
cd /root
Vardir_md5=`md5sum vardir.tar.xz | awk -F' ' '{print $1}'` Vardir_md5_download=`grep vardir firmware.md5 | awk -F' ' '{print $1}'`
if test “${Vardir_md5}” != “${Vardir_md5_download}” ; then
echo "vardir.tar.xz's md5 isn't matched" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=422\&reason=vardir.tar.xz_md5_not_matched &> /dev/null exit 2
fi
Root_md5=`md5sum rootfs.tar.xz | awk -F' ' '{print $1}'` Root_md5_download=`grep rootfs firmware.md5 | awk -F' ' '{print $1}'`
if test “${Root_md5}” != “${Root_md5_download}” ; then
echo "rootfs.tar.xz's md5 isn't matched" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=423\&reason=rootfs.tar.xz_md5_not_matched &> /dev/null exit 2
fi
UImage_md5=`md5sum uImage | awk -F' ' '{print $1}'` UImage_md5_download=`grep uImage firmware.md5 | awk -F' ' '{print $1}'`
if test “${UImage_md5}” != “${UImage_md5_download}” ; then
echo "uImage's md5 isn't matched" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=424\&reason=uImage_md5_not_matched &> /dev/null exit 2
fi
wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}&status=13 &> /dev/null
echo “Validation passed. Start setup …” sleep 1
echo “Updating kernel …” sleep 1 cp -rf /root/uImage /boot/uboot/uImage ret=$? if [ ! $ret -eq 0 ]; then
echo "Updating uImage failed: #{ret}" wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}\&status=443\&reason=uImage_copy_failed &> /dev/null exit 1
fi echo “kernel updated success”
cat - <<'EOF' > /boot/uboot/update_rootfs.sh #!/bin/bash
set -xe
DIR=`pwd` MMC_DEV=/dev/mmcblk0 ROOTFS_PART=${MMC_DEV}p2 ROOTDIR_PART=${MMC_DEV}p5 VARDIR_PART=${MMC_DEV}p6
ROOTFS_PATH=/rootfs ROOTDIR_PATH=/rootdir VARDIR_PATH=/vardir
#ROOTFS_URL=“192.168.8.80/rootfs-release.tar.xz” #ROOTDIR_URL= #VARDIR_URL=
mount_parts(){
## make dir if missing mkdir -p ${ROOTFS_PATH} mkdir -p ${ROOTDIR_PATH} #not updating this at the moment. mkdir -p ${VARDIR_PATH} ## mount to correct dir mount ${ROOTFS_PART} ${ROOTFS_PATH} mount ${ROOTDIR_PART} ${ROOTDIR_PATH} mount ${VARDIR_PART} ${VARDIR_PATH}
}
update_parts(){
##get parts if [ -f ${ROOTDIR_PATH}/rootfs.tar.xz ]; then echo "Already dl'ed." else echo "No update packages, skipping." # wget -O ${ROOTDIR_PATH}/rootfs.tar.xz ${ROOTFS_URL} # wget -O ${ROOTDIR_PATH}/rootdir.tar.xz ${ROOTDIR_URL} # wget -O ${ROOTDIR_PATH}/vardir.tar.xz ${VARDIR_URL} fi #flash parts cd ${ROOTFS_PATH} cp ${ROOTFS_PATH}/etc/network/interfaces /root/interfaces rm -rf * xzcat ${ROOTDIR_PATH}/rootfs.tar.xz | tar xv #cd ${ROOTDIR_PATH} #rm -rf * #xzcat ${ROOTDIR_PATH}/rootdir.tar.xz | tar xv cd ${VARDIR_PATH} cp ${VARDIR_PATH}/lib/luna/luna_client.sqlite3 /root/ || true rm -rf * xzcat ${ROOTDIR_PATH}/vardir.tar.xz | tar xv mv /root/luna_client.sqlite3 ${VARDIR_PATH}/lib/luna/ || true # make sure to copy authorized_keys mkdir -p ${ROOTDIR_PATH}/.ssh || true cp -f ${ROOTFS_PATH}/root/.ssh/authorized_keys ${ROOTDIR_PATH}/.ssh/ || true mv /root/interfaces ${ROOTFS_PATH}/etc/network/interfaces || true
}
cleaning(){
rm -rf ${ROOTDIR_PATH}/rootfs.tar.xz || true rm -rf ${ROOTDIR_PATH}/rootdir.tar.xz || true rm -rf ${ROOTDIR_PATH}/vardir.tar.xz || true
}
verify(){
sed -i "s/mmcblk0p3/mmcblk0p2/g" ${BOOTFS_PATH}/uEnv.txt
}
umount_parts(){
cd ${DIR} umount ${ROOTFS_PART} || true umount ${ROOTDIR_PART} || true umount ${VARDIR_PART} || true
}
do the job umount_parts mount_parts update_parts verify cleaning umount_parts EOF
chmod 770 /boot/uboot/update_rootfs.sh
sed -i “s/mmcblk0p2/mmcblk0p3/g” /boot/uboot/uEnv.txt echo “Finished. Restarting device.”
wget -qO- ${UPDATE_HOST}/v3/update/report_progress?sn=${SN}&status=20 &> /dev/null reboot