651 lines
19 KiB
Bash
Executable File
651 lines
19 KiB
Bash
Executable File
#!/bin/sh
|
|
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
|
|
|
|
PIC_RAW="/sbin/pic_raw"
|
|
TMP_UPDATE_FLAG="/tmp/update_flag"
|
|
UPDATE_PROCESS="/tmp/update_process"
|
|
UPDATE_FW_PROCESS="/tmp/update_fw_process"
|
|
UPDATE_FOLDER="/mnt/update"
|
|
BLOCK_SIZE=512
|
|
# check if the HAL subsystem exist
|
|
if [ -x /sbin/hal_app ]; then
|
|
BOOT_DEV=$(/sbin/hal_app --get_boot_pd port_id=0)
|
|
EXT_ROOT="/dev/md13"
|
|
else
|
|
BOOT_DEV="/dev/sdx"
|
|
EXT_ROOT="/dev/sda4"
|
|
fi
|
|
PURE_BOOT_DEV=$(/bin/echo $BOOT_DEV | /bin/cut -f3 -d/)
|
|
FLASH_BOOT=${BOOT_DEV}1
|
|
FLASH_RFS1=${BOOT_DEV}2
|
|
FLASH_RFS2=${BOOT_DEV}3
|
|
FLASH_BOOT_MP="/root/FLASH_BOOT"
|
|
FLASH_RFS1_MP="/root/FLASH_RFS1"
|
|
FLASH_RFS2_MP="/root/FLASH_RFS2"
|
|
FLASH_RFS1_SIZE=52560
|
|
#FLASH_SIZE_ARM=mtd1+mtd2+mtd3
|
|
FLASH_SIZE_ARM=14336
|
|
FLASH_SIZE_PPC=14336
|
|
FLASH_RFS1_SIZE_X59=230188
|
|
FLASH_RFS1_BLOCK_X59=484608
|
|
FLASH_RFS1_SIZE_X59H=110000
|
|
FLASH_RFS1_BLOCK_X59H=235008
|
|
FLASH_RFS_ERR=0
|
|
DEFAULT_CFG_FILE="/etc/config/uLinux.conf"
|
|
IMG_FILE_LIST="bzImage initrd.boot rootfs2.bz rootfs_ext.tgz"
|
|
MNT_ROOTFS2_TMP="/rootfs2_tmp"
|
|
FLASH_KERNEL="/dev/mtdblock1"
|
|
FLASH_ROOTFS_BASIC="/dev/mtdblock2"
|
|
FLASH_ROOTFS2="/dev/mtdblock3"
|
|
FLASH_FDT="/dev/mtdblock6"
|
|
IMG_FILE_LIST_ARM="uImage initrd.boot rootfs2.img"
|
|
IMG_FILE_LIST_PPC="uImage initrd.uboot rootfs2.bz canyonlands_qnap.dts"
|
|
BOOT_CONF=`/bin/cat /etc/default_config/BOOT.conf 2>/dev/null`
|
|
FLASH_RFS1_BLOCK=`/bin/cat /sys/block/${PURE_BOOT_DEV}/${PURE_BOOT_DEV}2/size 2>/dev/null`
|
|
Project_Name=`/sbin/getcfg Project Name -d null -f /var/default`
|
|
TMP_CONFIG="/tmp/nasconfig_tmp"
|
|
MIN_FSIZE=200 #minimum config file size required
|
|
|
|
do_beep()
|
|
{
|
|
|
|
if [ x`/sbin/getcfg Misc "Buzzer Quiet Enable"` != "xTRUE" ]; then
|
|
# check if the HAL subsystem exist
|
|
if [ -x /sbin/hal_app ]; then
|
|
/sbin/hal_app --se_buzzer enc_id=0,mode=1
|
|
sleep 1
|
|
/sbin/hal_app --se_buzzer enc_id=0,mode=1
|
|
sleep 1
|
|
/sbin/hal_app --se_buzzer enc_id=0,mode=1
|
|
else
|
|
${PIC_RAW} 81; sleep 1; ${PIC_RAW} 81; sleep 1; ${PIC_RAW} 81
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
check_tune_config_partition()
|
|
{
|
|
echo check_tune_config_partition $1 $2 >> /tmp/check.log
|
|
NAS_CONFIG_BAK=/tmp/nas_config.tgz
|
|
NAS_CONFIG_IMG=/tmp/nas_config.img
|
|
TMP_MP=/tmp/nasconfig_mp
|
|
NAS_CONFIG=$1
|
|
NAS_CONFIG_SIZE=$2
|
|
[ -d $TMP_MP ] || /bin/mkdir $TMP_MP
|
|
/bin/mount $NAS_CONFIG $TMP_MP -o ro
|
|
CFG_SIZE=`/bin/df -k | /bin/grep "$NAS_CONFIG" | /bin/awk '{print $2}'`
|
|
echo Current NAS config formatted size is $CFG_SIZE >> /tmp/check.log
|
|
if [ $CFG_SIZE -ge $NAS_CONFIG_SIZE ]; then
|
|
#Backup /tmp/mp6
|
|
cd $TMP_MP
|
|
/bin/tar czf $NAS_CONFIG_BAK *
|
|
RET=$?
|
|
cd /
|
|
/bin/umount $TMP_MP
|
|
echo Backup config_partition return $RET >> /tmp/check.log
|
|
if [ $RET = 0 ]; then
|
|
if [ -f /opt/nasconfig_fs.img.tgz ]; then
|
|
echo Use /opt/nasconfig_fs.img.tgz >> /tmp/check.log
|
|
/bin/tar xzf /opt/nasconfig_fs.img.tgz -O > $NAS_CONFIG
|
|
RET=$?
|
|
else
|
|
echo Create a image with size $NAS_CONFIG_SIZE >> /tmp/check.log
|
|
/bin/dd if=/dev/zero of=$NAS_CONFIG_IMG bs=1k count=$NAS_CONFIG_SIZE
|
|
RET=$?
|
|
if [ $RET = 0 ]; then
|
|
echo Fine tune config partition >> /tmp/check.log
|
|
/sbin/mke2fs -F -v -m0 -b 1024 -I 128 $NAS_CONFIG_IMG
|
|
/bin/dd if=$NAS_CONFIG_IMG of=$NAS_CONFIG bs=1k count=$NAS_CONFIG_SIZE
|
|
fi
|
|
/bin/rm $NAS_CONFIG_IMG
|
|
fi
|
|
echo Dump config_partition image return $RET >> /tmp/check.log
|
|
if [ $RET = 0 ]; then
|
|
/bin/mount $NAS_CONFIG $TMP_MP
|
|
/bin/tar xzf $NAS_CONFIG_BAK -C $TMP_MP
|
|
/bin/umount $TMP_MP
|
|
fi
|
|
fi
|
|
/bin/rm $NAS_CONFIG_BAK
|
|
fi
|
|
/bin/umount $TMP_MP
|
|
/sbin/tune2fs -i 0 -c 0 ${NAS_CONFIG}
|
|
/bin/sync
|
|
}
|
|
|
|
remove_update()
|
|
{
|
|
for i in $IMG_FILE_LIST
|
|
do
|
|
if [ -f "$UPDATE_FOLDER/$i" ]; then
|
|
/bin/rm -f ${UPDATE_FOLDER}/${i}* 2>/dev/null
|
|
fi
|
|
done
|
|
/bin/rm -f ${path_name}* 2>>/dev/null
|
|
if [ $1 = 1 ]; then
|
|
/bin/rm -rf ${UPDATE_FOLDER}/*
|
|
fi
|
|
[ -d "/mnt/HDA_ROOT/update_pkg" ] && /bin/rm -f /mnt/HDA_ROOT/update_pkg/*.qfix 2>>/dev/null
|
|
[ ! -d "/mnt/HDA_ROOT/update_pkg/.qfix" ] || /bin/rm -rf /mnt/HDA_ROOT/update_pkg/.qfix 2>>/dev/null
|
|
[ ! -f /etc/config/qfix.conf ] || /bin/rm -f /etc/config/qfix.conf 2>>/dev/null
|
|
/bin/grep "/dev/ram2" /proc/mounts | /bin/grep "${UPDATE_FOLDER} " 2>/dev/null 1>/dev/null
|
|
if [ $? = 0 ]; then
|
|
/bin/umount /dev/ram2 2>/dev/null
|
|
readlink ${UPDATE_FOLDER} 1>/dev/null 2>/dev/null
|
|
[ $? != 0 ] || /bin/rm -rf ${UPDATE_FOLDER}
|
|
fi
|
|
}
|
|
|
|
get_new_ver()
|
|
{
|
|
local filename=$path_name
|
|
set -- `ls -l "$path_name"`
|
|
local pos=`expr $5 - 48`
|
|
/bin/dd if=$filename of=${UPDATE_FOLDER}/newver skip=$pos bs=1 count=16
|
|
[ $? = 0 ] && cat ${UPDATE_FOLDER}/newver || echo ""
|
|
}
|
|
|
|
do_exit()
|
|
{
|
|
local ret=0
|
|
local old_ver=`/sbin/getcfg System Version`
|
|
local new_ver=`/bin/cat ${UPDATE_FOLDER}/newver`
|
|
|
|
case $1 in
|
|
0)#normal exit
|
|
ret=0
|
|
[ ! -z $new_ver ] \
|
|
&& /sbin/write_log "[Firmware Upgrade] System updated successfully from $old_ver to $new_ver." 4 \
|
|
|| /sbin/write_log "[Firmware Upgrade] System updated successfully." 4
|
|
;;
|
|
2)#size check failed
|
|
echo -2 > ${UPDATE_PROCESS}
|
|
echo -2 > ${UPDATE_FW_PROCESS}
|
|
ret=1
|
|
[ ! -z $new_ver ] \
|
|
&& /sbin/write_log "[Firmware Upgrade] System update failed from $old_ver to $new_ver due to update image size error." 1 \
|
|
|| /sbin/write_log "[Firmware Upgrade] System update failed." 1
|
|
;;
|
|
3)#CRC check failed
|
|
echo -3 > ${UPDATE_PROCESS}
|
|
echo -3 > ${UPDATE_FW_PROCESS}
|
|
ret=1
|
|
[ ! -z $new_ver ] \
|
|
&& /sbin/write_log "[Firmware Upgrade] System update failed from $old_ver to $new_ver." 1 \
|
|
|| /sbin/write_log "[Firmware Upgrade] System update failed." 1
|
|
;;
|
|
4)#Flash failed
|
|
echo -4 > ${UPDATE_PROCESS}
|
|
echo -4 > ${UPDATE_FW_PROCESS}
|
|
ret=1
|
|
[ ! -z $new_ver ] \
|
|
&& /sbin/write_log "[Firmware Upgrade] System update failed from $old_ver to $new_ver due to flash read/write error." 1 \
|
|
|| /sbin/write_log "[Firmware Upgrade] System update failed due to flash read/write error." 1
|
|
;;
|
|
7)
|
|
echo -7 > ${UPDATE_PROCESS}
|
|
echo -7 > ${UPDATE_FW_PROCESS}
|
|
ret=1
|
|
/sbin/write_log "[Firmware Upgrade] System update failed. The system is being shut down. Please try again after the system started." 1
|
|
;;
|
|
*)
|
|
echo -5 > ${UPDATE_PROCESS}
|
|
echo -5 > ${UPDATE_FW_PROCESS}
|
|
ret=1
|
|
[ ! -z $new_ver ] \
|
|
&& /sbin/write_log "[Firmware Upgrade] System update failed from $old_ver to $new_ver." 1 \
|
|
|| /sbin/write_log "[Firmware Upgrade] System update failed." 1
|
|
;;
|
|
esac
|
|
|
|
if [ $ret = 0 ]; then
|
|
remove_update 2
|
|
else
|
|
remove_update 1
|
|
fi
|
|
/bin/mv /usr/local/sbin/blkid_ /usr/local/sbin/blkid 2>/dev/null
|
|
/sbin/setcfg -e System "QPKG CENTER XML"
|
|
exit $ret
|
|
}
|
|
|
|
check_sum()
|
|
{
|
|
if [ ! -f $1 ] || [ ! -f $2 ];then
|
|
echo "${1} or ${2} not found."
|
|
return 1
|
|
fi
|
|
local file_cksum=`/sbin/cksum $1`
|
|
local file_crc=`echo $file_cksum | cut -d ' ' -f 1`
|
|
local file_size=`echo $file_cksum | cut -d ' ' -f 2`
|
|
|
|
local cksum_cksum=`cat $2`
|
|
local cksum_crc=`echo $cksum_cksum | cut -d ' ' -f 1`
|
|
local cksum_size=`echo $cksum_cksum | cut -d ' ' -f 2`
|
|
|
|
if [ $file_crc = $cksum_crc ] && [ $file_size = $cksum_size ]; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
size_check()
|
|
{
|
|
local sizetotal=0
|
|
local sizekb=0
|
|
for i in $IMG_FILE_LIST
|
|
do
|
|
if [ -f "$UPDATE_FOLDER/$i" ]; then
|
|
sizekb=`/usr/bin/du -k "$UPDATE_FOLDER/$i" | /bin/cut -f 1 -d '/'`
|
|
sizetotal=`/usr/bin/expr $sizetotal + $sizekb`
|
|
fi
|
|
done
|
|
[ $sizetotal -le $FLASH_RFS1_SIZE ] || do_exit 2
|
|
return 0
|
|
}
|
|
|
|
size_check_arm()
|
|
{
|
|
local mtd1_size=2097152
|
|
local mtd2_size=9437184
|
|
local mtd3_size=3145728
|
|
|
|
for i in $IMG_FILE_LIST
|
|
do
|
|
if [ -f "$UPDATE_FOLDER/$i" ] && [ -f "$UPDATE_FOLDER/${i}.cksum" ]; then
|
|
if [ ${i} = uImage ]; then
|
|
mtdsize=$mtd1_size
|
|
elif [ ${i} = initrd.boot ]; then
|
|
mtdsize=$mtd2_size
|
|
elif [ ${i} = rootfs2.img ]; then
|
|
mtdsize=$mtd3_size
|
|
else
|
|
break
|
|
fi
|
|
/bin/echo -n "Check $i size ... "
|
|
tmpsize=`/bin/cat "$UPDATE_FOLDER/${i}.cksum" | /bin/cut -d ' ' -f 2`
|
|
if [ -z "$tmpsize" ] || [ $tmpsize -gt $mtdsize ]; then
|
|
/bin/echo Error
|
|
do_exit 2
|
|
fi
|
|
/bin/echo Pass
|
|
fi
|
|
done
|
|
return 0
|
|
}
|
|
|
|
CRC_check()
|
|
{
|
|
for i in $IMG_FILE_LIST rootfs_ext.tgz qpatch.tgz
|
|
do
|
|
if [ -f "$UPDATE_FOLDER/$i" ]; then
|
|
check_sum "$UPDATE_FOLDER/$i" "$UPDATE_FOLDER/$i.cksum"
|
|
[ $? = 0 ] || do_exit 3
|
|
fi
|
|
done
|
|
return 0
|
|
}
|
|
|
|
DOM_CRC_check()
|
|
{
|
|
for i in $IMG_FILE_LIST
|
|
do
|
|
/bin/echo -n "Checking ${i} ... "
|
|
check_sum "${1}/boot/$i" "$UPDATE_FOLDER/$i.cksum"
|
|
if [ $? != 0 ]; then
|
|
/bin/umount "${1}" 1>>/dev/null 2>>/dev/null
|
|
/bin/echo "Failed."
|
|
do_exit 4
|
|
fi
|
|
/bin/echo "ok"
|
|
done
|
|
return 0
|
|
}
|
|
|
|
set_status_flag()
|
|
{
|
|
/bin/mount | /bin/grep $EXT_ROOT 1>>/dev/null 2>>/dev/null
|
|
if [ $? = 0 ]; then
|
|
echo $1 > $TMP_UPDATE_FLAG
|
|
# 402653200 = 384M + 16 bytes = 384 * 1024 * 1024 + 16
|
|
/bin/dd if=$TMP_UPDATE_FLAG of=$EXT_ROOT seek=402653200 bs=1 count=1
|
|
/bin/rm -f $TMP_UPDATE_FLAG
|
|
fi
|
|
}
|
|
refresh_flash_config_file()
|
|
{
|
|
[ -d $TMP_CONFIG ] || /bin/mkdir $TMP_CONFIG
|
|
|
|
if [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then
|
|
/bin/mount /dev/mtdblock5 $TMP_CONFIG
|
|
elif [ "x${BOOT_CONF}" = "xTS-NASPPC" ]; then
|
|
/bin/mount /dev/mtdblock5 $TMP_CONFIG
|
|
else
|
|
/bin/mount ${BOOT_DEV}6 $TMP_CONFIG
|
|
fi
|
|
[ ! -f ${TMP_CONFIG}/system.map.key ] || rm -f ${TMP_CONFIG}/system.map.key
|
|
[ ! -f ${TMP_CONFIG}/smb.conf ] || rm -f ${TMP_CONFIG}/smb.conf
|
|
[ ! -f ${TMP_CONFIG}/smb.conf.cksum ] || rm -f ${TMP_CONFIG}/smb.conf.cksum
|
|
/bin/umount $TMP_CONFIG
|
|
/bin/touch /tmp/donotrecover
|
|
}
|
|
|
|
img_update()
|
|
{
|
|
/bin/grep ram2 /proc/mounts 2>/dev/null 1>/dev/null
|
|
if [ $? = 0 ]; then
|
|
BLOCK_SIZE=2
|
|
fi
|
|
[ -d ${FLASH_BOOT_MP} ] || /bin/mkdir ${FLASH_BOOT_MP}
|
|
[ -d ${FLASH_RFS1_MP} ] || /bin/mkdir ${FLASH_RFS1_MP}
|
|
[ -d ${FLASH_RFS2_MP} ] || /bin/mkdir ${FLASH_RFS2_MP}
|
|
echo "Update RFS1..."
|
|
echo 1 > ${UPDATE_PROCESS}
|
|
echo 1 > ${UPDATE_FW_PROCESS}
|
|
/bin/mount | /bin/grep "${FLASH_RFS1}"
|
|
[ $? != 0 ] || /bin/umount ${FLASH_RFS1}
|
|
/sbin/mke2fs -m0 -F -b 1024 -I 128 ${FLASH_RFS1}
|
|
/bin/sync
|
|
sleep 1
|
|
/bin/mount ${FLASH_RFS1} ${FLASH_RFS1_MP}
|
|
if [ $? = 0 ]; then
|
|
[ -d ${FLASH_RFS1_MP}/boot ] || /bin/mkdir ${FLASH_RFS1_MP}/boot
|
|
[ -f ${UPDATE_FOLDER}/bzImage ] && /bin/cp ${UPDATE_FOLDER}/bzImage* ${FLASH_RFS1_MP}/boot
|
|
[ -f ${UPDATE_FOLDER}/initrd.boot ] && /bin/cp ${UPDATE_FOLDER}/initrd.boot* ${FLASH_RFS1_MP}/boot
|
|
[ -f ${UPDATE_FOLDER}/rootfs2.bz ] && /bin/cp ${UPDATE_FOLDER}/rootfs2.bz* ${FLASH_RFS1_MP}/boot
|
|
[ -f ${UPDATE_FOLDER}/rootfs_ext.tgz ] && /bin/cp ${UPDATE_FOLDER}/rootfs_ext.tgz* ${FLASH_RFS1_MP}/boot
|
|
if [ $FLASH_RFS1_SIZE = $FLASH_RFS1_SIZE_X59 -o $FLASH_RFS1_SIZE = $FLASH_RFS1_SIZE_X59H ] && [ -f ${UPDATE_FOLDER}/qpkg.tar ]; then
|
|
check_sum "$UPDATE_FOLDER/qpkg.tar" "$UPDATE_FOLDER/qpkg.tar.cksum"
|
|
[ $? = 0 ] && /bin/cp ${UPDATE_FOLDER}/qpkg.tar* ${FLASH_RFS1_MP}/boot
|
|
touch ${UPDATE_FOLDER}/update_qpkg_f
|
|
fi
|
|
else
|
|
/sbin/write_log "A read/write error occurred on the first boot partition of the flash disk during system update." 1
|
|
FLASH_RFS_ERR=1
|
|
fi
|
|
/bin/sync
|
|
[ ${FLASH_RFS_ERR} = 0 ] && DOM_CRC_check "${FLASH_RFS1_MP}"
|
|
/bin/umount ${FLASH_RFS1} 1>>/dev/null 2>>/dev/null
|
|
[ ${FLASH_RFS_ERR} = 0 ] || do_exit 4
|
|
/bin/sleep 2
|
|
echo "Update RFS2..."
|
|
echo 2 > ${UPDATE_PROCESS}
|
|
echo 2 > ${UPDATE_FW_PROCESS}
|
|
/bin/mount | /bin/grep "${FLASH_RFS2}"
|
|
[ $? != 0 ] || /bin/umount ${FLASH_RFS2}
|
|
[ ${FLASH_RFS_ERR} = 0 ] && /sbin/mke2fs -m0 -F -b 1024 -I 128 ${FLASH_RFS2}
|
|
/bin/sync
|
|
sleep 1
|
|
/bin/mount ${FLASH_RFS2} ${FLASH_RFS2_MP}
|
|
if [ $? = 0 ] && [ ${FLASH_RFS_ERR} = 0 ]; then
|
|
[ -d ${FLASH_RFS2_MP}/boot ] || /bin/mkdir ${FLASH_RFS2_MP}/boot
|
|
[ -f ${UPDATE_FOLDER}/bzImage ] && /bin/cp ${UPDATE_FOLDER}/bzImage* ${FLASH_RFS2_MP}/boot
|
|
[ -f ${UPDATE_FOLDER}/initrd.boot ] && /bin/cp ${UPDATE_FOLDER}/initrd.boot* ${FLASH_RFS2_MP}/boot
|
|
[ -f ${UPDATE_FOLDER}/rootfs2.bz ] && /bin/cp ${UPDATE_FOLDER}/rootfs2.bz* ${FLASH_RFS2_MP}/boot
|
|
[ -f ${UPDATE_FOLDER}/rootfs_ext.tgz ] && /bin/cp ${UPDATE_FOLDER}/rootfs_ext.tgz* ${FLASH_RFS2_MP}/boot
|
|
if [ $FLASH_RFS1_SIZE = $FLASH_RFS1_SIZE_X59 -o $FLASH_RFS1_SIZE = $FLASH_RFS1_SIZE_X59H ] && [ -f ${UPDATE_FOLDER}/qpkg.tar ]; then
|
|
check_sum "$UPDATE_FOLDER/qpkg.tar" "$UPDATE_FOLDER/qpkg.tar.cksum"
|
|
[ $? = 0 ] && /bin/cp ${UPDATE_FOLDER}/qpkg.tar* ${FLASH_RFS2_MP}/boot
|
|
touch ${UPDATE_FOLDER}/update_qpkg_f
|
|
fi
|
|
else
|
|
/sbin/write_log "A read/write error occurred on the second boot partition of the flash disk during system update." 1
|
|
[ ${FLASH_RFS_ERR} = 0 ] || FLASH_RFS_ERR=2
|
|
fi
|
|
/bin/sync
|
|
/bin/umount ${FLASH_RFS2}
|
|
|
|
# /usr/bin/readlink /usr 1>>/dev/null 2>>/dev/null
|
|
# if [ $? = 0 ]; then
|
|
# [ -f ${UPDATE_FOLDER}/qpatch.tgz ] && /bin/tar -xzf ${UPDATE_FOLDER}/qpatch.tgz -C /
|
|
# fi
|
|
/bin/sleep 3
|
|
[ ${FLASH_RFS_ERR} = 0 ] || do_exit 4
|
|
set_status_flag 1
|
|
refresh_flash_config_file
|
|
echo "Update Finished."
|
|
echo 3 > ${UPDATE_FW_PROCESS}
|
|
/bin/touch /etc/config/update_fw_ok
|
|
|
|
return 0
|
|
}
|
|
|
|
# $1: Kernel Image
|
|
# $2: Basic RootFS
|
|
# $3: Basic RootFS2
|
|
# $4: ARM: Ignore, PPC: FDT blob
|
|
img_update_16M()
|
|
{
|
|
/bin/grep ram2 /proc/mounts 2>/dev/null 1>/dev/null
|
|
if [ $? = 0 ]; then
|
|
BLOCK_SIZE=2
|
|
fi
|
|
|
|
/bin/echo 1 > ${UPDATE_PROCESS}
|
|
/bin/echo 1 > ${UPDATE_FW_PROCESS}
|
|
if [ -x /sbin/badblocks ]; then
|
|
/bin/echo "Check Flash ROM"
|
|
/sbin/badblocks ${FLASH_KERNEL} 1>/dev/null 2>/dev/null
|
|
[ $? = 0 ] || do_exit 4
|
|
/sbin/badblocks ${FLASH_ROOTFS_BASIC} 1>/dev/null 2>/dev/null
|
|
[ $? = 0 ] || do_exit 4
|
|
/sbin/badblocks ${FLASH_ROOTFS2} 1>/dev/null 2>/dev/null
|
|
[ $? = 0 ] || do_exit 4
|
|
fi
|
|
/bin/echo "Update Kernel ..."
|
|
/bin/dd if=${UPDATE_FOLDER}/${1} of=${FLASH_KERNEL} bs=${BLOCK_SIZE} 2>/dev/null
|
|
if [ $? != 0 ]; then
|
|
#try again
|
|
/bin/dd if=${UPDATE_FOLDER}/${1} of=${FLASH_KERNEL} bs=${BLOCK_SIZE}
|
|
[ $? = 0 ] || do_exit 4
|
|
fi
|
|
|
|
/bin/echo "Update Basic RootFS ..."
|
|
/bin/echo 2 > ${UPDATE_PROCESS}
|
|
/bin/echo 2 > ${UPDATE_FW_PROCESS}
|
|
/bin/dd if=${UPDATE_FOLDER}/${2} of=${FLASH_ROOTFS_BASIC} bs=${BLOCK_SIZE} 2>/dev/null
|
|
if [ $? != 0 ]; then
|
|
/bin/dd if=${UPDATE_FOLDER}/${2} of=${FLASH_ROOTFS_BASIC} bs=${BLOCK_SIZE}
|
|
[ $? = 0 ] || do_exit 4
|
|
fi
|
|
|
|
/bin/echo "Update Basic RootFS2 ..."
|
|
/bin/dd if=${UPDATE_FOLDER}/${3} of=${FLASH_ROOTFS2} bs=${BLOCK_SIZE} 2>/dev/null
|
|
if [ $? != 0 ]; then
|
|
/bin/dd if=${UPDATE_FOLDER}/${3} of=${FLASH_ROOTFS2} bs=${BLOCK_SIZE}
|
|
[ $? = 0 ] || do_exit 4
|
|
fi
|
|
|
|
if [ x${4} != x ]; then
|
|
/bin/echo "Update Kernel Device Tree Blob ..."
|
|
/bin/cp ${UPDATE_FOLDER}/${4} ${FLASH_FDT}
|
|
fi
|
|
|
|
set_status_flag 1
|
|
refresh_flash_config_file
|
|
echo "Update Finished."
|
|
echo 3 > ${UPDATE_FW_PROCESS}
|
|
/bin/touch /etc/config/update_fw_ok
|
|
|
|
return 0
|
|
}
|
|
|
|
config_add_endflag()
|
|
{
|
|
ISCSI_CONFIG=/etc/config/iscsi_trgt.conf
|
|
|
|
/bin/grep "\[END_FLAG\]" $DEFAULT_CFG_FILE 1>>/dev/null 2>>/dev/null
|
|
if [ $? != 0 ] ; then
|
|
[ `/sbin/getcfg Misc Configured -u -d FALSE` = TRUE ] && /bin/echo "[END_FLAG]" >> $DEFAULT_CFG_FILE
|
|
fi
|
|
#also check/backup configs
|
|
if [ -x /usr/bin/du ] && [ -f $ISCSI_CONFIG ]; then
|
|
conf_size=`/usr/bin/du -b $ISCSI_CONFIG | /bin/awk '{print $1}'`
|
|
if [ ! -z "$conf_size" ] && [ "$conf_size" -ge $MIN_FSIZE ]; then
|
|
[ -f ${ISCSI_CONFIG}.last ] || /bin/cp $ISCSI_CONFIG ${ISCSI_CONFIG}.last
|
|
fi
|
|
fi
|
|
/bin/sync
|
|
return 0
|
|
}
|
|
|
|
change_pm_cmd()
|
|
{
|
|
/bin/touch /sbin/qpm.sh
|
|
/bin/chmod 755 /sbin/qpm.sh
|
|
/bin/ln -sf /sbin/qpm.sh /sbin/poweroff
|
|
/bin/ln -sf /sbin/qpm.sh /sbin/halt
|
|
/bin/ln -sf /sbin/qpm.sh /sbin/reboot
|
|
/bin/ln -sf /bin/busybox /root/reboot
|
|
/bin/ln -sf /bin/busybox /root/poweroff
|
|
/bin/ln -sf /bin/busybox /root/halt
|
|
/bin/echo -e "#!/bin/sh
|
|
/bin/sleep 5
|
|
/bin/ps | /bin/grep \"/etc/init.d/update.sh\" | /bin/grep -v grep 1>>/dev/null 2>>/dev/null
|
|
[ \$? != 0 ] || exit 1
|
|
/root/\`/usr/bin/basename \${0}\`
|
|
exit 0" > /sbin/qpm.sh
|
|
/bin/chmod 755 /sbin/qpm.sh
|
|
}
|
|
|
|
recover_pm_cmd()
|
|
{
|
|
/bin/ln -sf /sbin/busybox /sbin/poweroff
|
|
/bin/ln -sf /sbin/busybox /sbin/halt
|
|
/bin/ln -sf /sbin/busybox /sbin/reboot
|
|
}
|
|
|
|
path_name=$1
|
|
if [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then
|
|
IMG_FILE_LIST=$IMG_FILE_LIST_ARM
|
|
FLASH_RFS1_SIZE=$FLASH_SIZE_ARM
|
|
elif [ "x${BOOT_CONF}" = "xTS-NASPPC" ]; then
|
|
IMG_FILE_LIST=$IMG_FILE_LIST_PPC
|
|
FLASH_RFS1_SIZE=$FLASH_SIZE_PPC
|
|
fi
|
|
now_process=`/bin/cat /tmp/update_process 2>>/dev/null`
|
|
if [ ! -z "$now_process" ] && [ $now_process = 3 ]; then
|
|
/bin/rm -f /tmp/update_process 2>/dev/null
|
|
[ ! -f /tmp/do_reboot ] || /bin/rm -f /tmp/do_reboot
|
|
/bin/echo "/tmp/update_process is removed. Please try again."
|
|
do_exit 7
|
|
fi
|
|
[ -x /usr/bin/basename ] || /bin/ln -sf /bin/busybox /usr/bin/basename
|
|
/bin/ps | /bin/grep "/sbin/reboot" | /bin/grep -v grep 1>>/dev/null 2>>/dev/null
|
|
doing_reboot=$?
|
|
/bin/ps | /bin/grep "/sbin/poweroff" | /bin/grep -v grep 1>>/dev/null 2>>/dev/null
|
|
doing_poweroff=$?
|
|
/bin/ps | /bin/grep "/sbin/halt" | /bin/grep -v grep 1>>/dev/null 2>>/dev/null
|
|
doing_halt=$?
|
|
/bin/ps | /bin/grep "/etc/init.d/rcK" | /bin/grep -v grep 1>>/dev/null 2>>/dev/null
|
|
doing_rcK=$?
|
|
if [ $doing_reboot = 0 ] || [ $doing_poweroff = 0 ] || [ $doing_halt = 0 ] || [ $doing_rcK = 0 ]; then
|
|
/bin/rm -f /tmp/update_process 2>/dev/null
|
|
[ ! -f /tmp/do_reboot ] || /bin/rm -f /tmp/do_reboot
|
|
do_exit 7
|
|
fi
|
|
change_pm_cmd
|
|
|
|
#===== ready to update F/W =====
|
|
USING_HDD=0
|
|
/bin/grep HDA_ROOT /proc/mounts 2>/dev/null 1>/dev/null
|
|
if [ $? = 0 ]; then
|
|
USING_HDD=1
|
|
else
|
|
/bin/grep HDA_ROOT /proc/mounts 2>/dev/null 1>/dev/null
|
|
if [ $? = 0 ]; then
|
|
USING_HDD=1
|
|
fi
|
|
fi
|
|
|
|
if [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then
|
|
/bin/mv /usr/local/sbin/blkid /usr/local/sbin/blkid_ 2>/dev/null
|
|
check_tune_config_partition /dev/mtdblock5 1024
|
|
elif [ "x${BOOT_CONF}" = "xTS-NASPPC" ]; then
|
|
check_tune_config_partition /dev/mtdblock5 1024
|
|
else
|
|
check_tune_config_partition ${BOOT_DEV}6 4096
|
|
fi
|
|
|
|
if [ "x${BOOT_CONF}" = "xTS-NASX86" ] && [ $FLASH_RFS1_BLOCK -ge $FLASH_RFS1_BLOCK_X59 ]; then
|
|
FLASH_RFS1_SIZE=$FLASH_RFS1_SIZE_X59
|
|
elif [ "x${BOOT_CONF}" = "xTS-NASX86" ] && [ $FLASH_RFS1_BLOCK -ge $FLASH_RFS1_BLOCK_X59H ]; then
|
|
FLASH_RFS1_SIZE=$FLASH_RFS1_SIZE_X59H
|
|
fi
|
|
|
|
|
|
if [ -f $UPDATE_FOLDER/update_check ]; then
|
|
$UPDATE_FOLDER/update_check
|
|
if [ $? != 0 ]; then
|
|
[ ! -x /sbin/lock_system_update ] || /sbin/lock_system_update unlock
|
|
do_exit 3
|
|
fi
|
|
fi
|
|
|
|
/sbin/write_log "[Firmware Upgrade] Start to update the firmware." 4
|
|
|
|
if [ -f $UPDATE_FOLDER/update_bios.sh ]; then
|
|
$UPDATE_FOLDER/update_bios.sh $UPDATE_FOLDER/flashrom.img
|
|
fi
|
|
|
|
if [ -f $UPDATE_FOLDER/sas_fw/sas_fw_update.sh ]; then
|
|
$UPDATE_FOLDER/sas_fw/sas_fw_update.sh
|
|
fi
|
|
|
|
if [ "x${BOOT_CONF}" = "xTS-NASX86" ]; then
|
|
if [ $USING_HDD = 1 ]; then
|
|
echo "Update image using HDD ..."
|
|
CRC_check
|
|
size_check
|
|
img_update
|
|
remove_update 2
|
|
else
|
|
echo "Update image using RAM disk ..."
|
|
CRC_check
|
|
size_check
|
|
img_update
|
|
remove_update 1
|
|
fi
|
|
elif [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then
|
|
if [ $USING_HDD = 1 ]; then
|
|
echo "Update image using HDD ..."
|
|
CRC_check
|
|
size_check_arm
|
|
img_update_16M uImage initrd.boot rootfs2.img
|
|
remove_update 2
|
|
else
|
|
echo "Update image using RAM disk ..."
|
|
CRC_check
|
|
size_check_arm
|
|
img_update_16M uImage initrd.boot rootfs2.img
|
|
remove_update 1
|
|
fi
|
|
elif [ "x${BOOT_CONF}" = "xTS-NASPPC" ]; then
|
|
if [ $USING_HDD = 1 ]; then
|
|
echo "Update image using HDD ..."
|
|
CRC_check
|
|
size_check
|
|
img_update_16M uImage initrd.uboot rootfs2.img canyonlands_qnap.dtb
|
|
remove_update 2
|
|
else
|
|
echo "Update image using RAM disk ..."
|
|
CRC_check
|
|
size_check
|
|
img_update_16M uImage initrd.uboot rootfs2.img canyonlands_qnap.dtb
|
|
remove_update 1
|
|
fi
|
|
fi
|
|
/bin/mv /usr/local/sbin/blkid_ /usr/local/sbin/blkid 2>/dev/null
|
|
config_add_endflag
|
|
/sbin/setcfg -e System "QPKG CENTER XML"
|
|
if [ x`/bin/cat ${UPDATE_FW_PROCESS} 2>/dev/null` = x3 ]; then
|
|
/bin/grep do_beep_check_flag /etc/init.d/update.sh 1>/dev/null 2>/dev/null
|
|
[ $? = 0 ] && do_beep
|
|
[ ! -x /sbin/lock_system_update ] || /sbin/lock_system_update unlock
|
|
/bin/echo 3 > ${UPDATE_PROCESS}
|
|
exit 0
|
|
else
|
|
exit 1
|
|
fi
|
|
|