#!/bin/sh # check if the HAL subsystem exist if [ -x /sbin/hal_app ]; then BOOT_DEV=$(/sbin/hal_app --get_boot_pd port_id=0) else BOOT_DEV="/dev/sdx" fi FLASH_RFS1=${BOOT_DEV}2 FLASH_RFS2=${BOOT_DEV}3 FLASH_TMP="/flashfs_tmp" FLASH_TMP1="/flashfs_tmp1" BOOT_CONF=`/bin/cat /etc/default_config/BOOT.conf 2>/dev/null` CMS_ENABLE=`/sbin/getcfg CMS Enable -d FALSE -f /etc/config/uLinux.conf` 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 } check_flash_files() { local ckflag=0 check_sum "${1}/boot/bzImage" "${1}/boot/bzImage.cksum" [ $? = 0 ] || ckflag=1 check_sum "${1}/boot/initrd.boot" "${1}/boot/initrd.boot.cksum" [ $? = 0 ] || ckflag=1 check_sum "${1}/boot/rootfs2.bz" "${1}/boot/rootfs2.bz.cksum" [ $? = 0 ] || ckflag=1 check_sum "${1}/boot/rootfs_ext.tgz" "${1}/boot/rootfs_ext.tgz.cksum" [ $? = 0 ] || ckflag=1 if [ $ckflag = 1 ]; then [ x"${1}" = x"${FLASH_TMP}" ] && /sbin/write_log "The first boot area on the flash is corrupted." 1 [ x"${1}" = x"${FLASH_TMP1}" ] && /sbin/write_log "The second boot area on the flash is corrupted." 1 return 1 fi return 0 } check_flash() { [ -d $FLASH_TMP ] || /bin/mkdir $FLASH_TMP /bin/mount ${FLASH_RFS1} $FLASH_TMP -o ro if [ $? != 0 ]; then /sbin/write_log "Flash read error." 1 else check_flash_files $FLASH_TMP fi /bin/umount $FLASH_TMP /bin/sync /bin/mount ${FLASH_RFS2} $FLASH_TMP -o ro if [ $? != 0 ]; then /sbin/write_log "Flash read error." 1 else check_flash_files $FLASH_TMP fi /bin/umount $FLASH_TMP /bin/sync return 0 } check_restore_flash() { local status1=0 local status2=0 /bin/echo "Check/Restore Flash..." [ -d $FLASH_TMP ] || /bin/mkdir $FLASH_TMP [ -d $FLASH_TMP1 ] || /bin/mkdir $FLASH_TMP1 /bin/mount ${FLASH_RFS1} $FLASH_TMP -o ro if [ $? != 0 ]; then /bin/umount ${FLASH_RFS1} 1>>/dev/null 2>>/dev/null /sbin/write_log "The first boot area on the flash is corrupted." 1 status1=1 else check_flash_files $FLASH_TMP [ $? = 0 ] || status1=1 fi /bin/umount $FLASH_RFS1 /bin/mount ${FLASH_RFS2} $FLASH_TMP1 -o ro if [ $? != 0 ]; then /bin/umount ${FLASH_RFS2} 1>>/dev/null 2>>/dev/null /sbin/write_log "The second boot area on the flash is corrupted." 1 status2=1 else check_flash_files $FLASH_TMP1 [ $? = 0 ] || status2=1 fi /bin/umount $FLASH_RFS2 if [ $status1 = 0 ] && [ $status2 = 1 ]; then /bin/mount ${FLASH_RFS1} ${FLASH_TMP} -o ro /sbin/mke2fs -m0 -F -b 1024 -I 128 ${FLASH_RFS2} /bin/sync sleep 1 /bin/mount ${FLASH_RFS2} ${FLASH_TMP1} if [ $? = 0 ]; then /bin/cp -a ${FLASH_TMP}/. ${FLASH_TMP1} [ $? = 0 ] && /sbin/write_log "The second boot area on the flash has been recovered." 2 fi /bin/umount ${FLASH_RFS2} /bin/umount ${FLASH_RFS1} elif [ $status1 = 1 ] && [ $status2 = 0 ]; then /bin/mount ${FLASH_RFS2} ${FLASH_TMP1} -o ro /sbin/mke2fs -m0 -F -b 1024 -I 128 ${FLASH_RFS1} /bin/sync sleep 1 /bin/mount ${FLASH_RFS1} ${FLASH_TMP} if [ $? = 0 ]; then /bin/cp -a ${FLASH_TMP1}/. ${FLASH_TMP} [ $? = 0 ] && /sbin/write_log "The first boot area on the flash has been recovered." 2 fi /bin/umount ${FLASH_RFS1} /bin/umount ${FLASH_RFS2} fi [ ! -d $FLASH_TMP1 ] || /bin/rmdir $FLASH_TMP1 return 0 } check_ver_build() { # check if version is the same between flash/disk FLASH_BUILD_NUM=`/sbin/getcfg System "Build Number" -d 0000 -f /etc/default_config/uLinux.conf` FLASH_VERSION=`/sbin/getcfg System "Version" -d 1.0.0 -f /etc/default_config/uLinux.conf` DISK_BUILD_NUM=`/sbin/getcfg System "Build Number" -d 0000 -f /etc/config/uLinux.conf` DISK_VERSION=`/sbin/getcfg System "Version" -d 1.0.0 -f /etc/config/uLinux.conf` if [ $FLASH_BUILD_NUM != $DISK_BUILD_NUM ]; then /sbin/write_log "The firmware versions of the system built-in flash ($FLASH_VERSION Build $FLASH_BUILD_NUM) and the hard drive ($DISK_VERSION Build $DISK_BUILD_NUM) are not consistent. It is recommended to update the firmware again for higher system stability." 2 fi } write_dhcp_tftp_logs() { # check if version is the same between flash/disk RET_UPDATECONFIG=`/sbin/getcfg "" "ret_updateconfig" -d "2" -f "/tmp/dhcp_tftp.log"` RET_TFTPSRVADDR=`/sbin/getcfg "" "ret_tftpsrvaddr" -d "2" -f "/tmp/dhcp_tftp.log"` RET_TFTPSRVNAME=`/sbin/getcfg "" "ret_tftpsrvname" -d "2" -f "/tmp/dhcp_tftp.log"` RET_TFTPBROADCAST=`/sbin/getcfg "" "ret_tftpbroadcast" -d "2" -f "/tmp/dhcp_tftp.log"` RET_BACKUPDRV=`/sbin/getcfg "" "ret_backupdrv" -d "2" -f "/tmp/dhcp_tftp.log"` if [ $RET_TFTPSRVNAME = 0 ] || [ $RET_TFTPSRVADDR = 0 ] || [ $RET_TFTPBROADCAST = 0 ] || [ $RET_BACKUPDRV = 0 ]; then /sbin/write_log "Download system configuration from TFTP server succeeded." 4 else /sbin/write_log "Download system configuration from TFTP server failed." 2 fi if [ $RET_UPDATECONFIG = 0 ]; then /sbin/write_log "Update system configuration succeeded." 4 else /sbin/write_log "Update system configuration failed." 2 fi } case "$1" in start) STARTED=`/sbin/getcfg Misc "System Started" -u -d FALSE` if [ $STARTED = TRUE ]; then echo "Last system shutdown process is incomplete." /sbin/log_tool -t 1 -a "The system was not shut down properly last time." /sbin/daemon_mgr /sbin/daemon_mgr.nvr /bin/touch /tmp/send_alert_mail else /sbin/setcfg Misc "System Started" TRUE fi /sbin/log_tool -t 0 -a "System started." RESULT=$? if [ "x${BOOT_CONF}" = "xTS-NASPPC" ]; then retry=0; while [ $RESULT -ne 0 -a $retry -le 10 ]; do retry=`expr $retry + 1` sleep 5 /sbin/log_tool -t 0 -a "System started." RESULT=$? done fi check_ver_build [ "x${BOOT_CONF}" = "xTS-NASX86" ] && check_restore_flash [ -f /tmp/dhcp_tftp.log ] && write_dhcp_tftp_logs if [ -x /sbin/hal_event ]; then /sbin/hal_event --retrieve_booting_event else /sbin/kerrd fi ;; stop) /sbin/setcfg Misc "System Started" FALSE /sbin/log_tool -t 0 -a "System was shut down on `/bin/date`." #wokes set rtc alarm /sbin/gen_next_alarm 2 cat /proc/acpi/alarm > /etc/config/rtc_last_save cat /proc/driver/rtc >> /etc/config/rtc_last_save ##### [ -f /sbin/picd ] && /sbin/daemon_mgr picd stop "/sbin/picd 1>/dev/null 2>/dev/null &" [ -f /sbin/gpiod ] && /sbin/daemon_mgr gpiod stop "/sbin/gpiod &" [ -f /sbin/hwmond ] && /sbin/daemon_mgr hwmond stop "/sbin/hwmond &" [ -f /sbin/acpid ] && /sbin/daemon_mgr acpid stop "/sbin/acpid" [ -f /sbin/gen_bandwidth ] && /sbin/daemon_mgr gen_bandwidth stop "/sbin/gen_bandwidth &" /etc/init.d/wireless.sh stop /bin/kill -INT `pidof qLogEngined` /sbin/daemon_mgr qLogEngined stop /sbin/qLogEngined [ "x${CMS_ENABLE}" != xTRUE ] && /bin/kill -INT `pidof qsyslogd` [ "x${CMS_ENABLE}" != xTRUE ] && /sbin/daemon_mgr qsyslogd stop /sbin/qsyslogd /bin/kill -INT `pidof qShield` /sbin/daemon_mgr qShield stop /sbin/qShield Internal_Model=`/sbin/getcfg System "Internal Model"` if [ "x$Internal_Model" = "xTS-119" ] || [ "x$Internal_Model" = "xTS-219" ] || [ "x$Internal_Model" = "xTS-419" ]; then if [ -x /sbin/hal_app ]; then if [ `/sbin/getcfg "Misc" "Wake On Lan" -u -d TRUE` = TRUE ]; then /usr/sbin/ethtool -s eth0 wol d /usr/sbin/ethtool -s eth0 wol g fi else CPU_MODEL="" [ ! -f /proc/tsinfo/cpu_model ] || CPU_MODEL=`/bin/cat /proc/tsinfo/cpu_model | cut -d ' ' -f 1 2>/dev/null` if [ "x${CPU_MODEL}" = "x88F6282" ]; then if [ `/sbin/getcfg "Misc" "Wake On Lan" -u -d TRUE` = TRUE ]; then /usr/sbin/ethtool -s eth0 wol d /usr/sbin/ethtool -s eth0 wol g fi fi fi fi ;; restart) $0 stop $0 start ;; *) echo "Usage: /etc/init.d/shutdown_check.sh {start|stop|restart}" exit 1 esac