#!/bin/sh #. /etc/init.d/check_nss2 ROOT_PART="/mnt/HDA_ROOT" BOOT_CONF=`/bin/cat /etc/default_config/BOOT.conf 2>/dev/null` # 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" elif [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then BOOT_DEV="/dev/mtdblock" EXT_ROOT="/dev/sda4" else BOOT_DEV="/dev/sdx" EXT_ROOT="/dev/sda4" fi if [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then DEV_NAS_CONFIG=${BOOT_DEV}5 else DEV_NAS_CONFIG=${BOOT_DEV}6 fi TMP_CONFIG="/tmp/nasconfig_tmp" DEFAULT_CFG_FILE="/etc/config/uLinux.conf" NASCONFIG_FS="/opt/nasconfig_fs.img.tgz" SWAP_DEVICE=/dev/md`/sbin/getcfg Storage "Disk Drive Number"` restore_flag1=0 FLASH_UBOOT="/dev/mtdblock0" FLASH_KERNEL="/dev/mtdblock1" DEV_NAS_CONFIG_SIZE_MIN=32 NSS_ENABLED=`/sbin/getcfg "NVR" "NSS Enabled" -d "no"` _init_spool() { local volume=`/sbin/getcfg Public path -f /etc/smb.conf | cut -d '/' -f 3` local spool_dir="/share/$volume/.spool" /bin/mount | /bin/grep $volume if [ $? != 0 ]; then spool_dir="/mnt/HDA_ROOT/.cups" fi [ -d $spool_dir ] || /bin/mkdir "$spool_dir" && /bin/chmod 777 $spool_dir /bin/rm -f "/var/spool" /bin/ln -s "$spool_dir" "/var/spool" # init cups spool if [ -f /usr/sbin/cupsd ]; then [ -d "$spool_dir/cups" ] && /bin/rm -fr "$spool_dir/cups" fi } check_sum() { 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 [ ! -f $1 ] || [ ! -f $2 ]; then [ ! -f $1 ] && echo "$1 not found." [ ! -f $2 ] && echo "$2 not found." return 1 fi if [ $file_crc = $cksum_crc ] && [ $file_size = $cksum_size ]; then return 0 fi return 1 } update_flash_config(){ [ -f ${ROOT_PART}/.config/Model_Name.conf ] || return 1 echo "Update config files" [ -d $TMP_CONFIG ] || /bin/mkdir $TMP_CONFIG /bin/mount $DEV_NAS_CONFIG -t ext2 $TMP_CONFIG if [ $? = 0 ]; then DEV_NAS_CONFIG_FREE_SIZE=`/bin/df -k | /bin/grep "$DEV_NAS_CONFIG" | /bin/awk '{print $4}'` if [ ${DEV_NAS_CONFIG_FREE_SIZE} -le ${DEV_NAS_CONFIG_SIZE_MIN} ]; then /bin/umount $DEV_NAS_CONFIG /bin/echo "The available space in flash rom is not enough." return 1 fi /bin/grep "\[END_FLAG\]" $DEFAULT_CFG_FILE 1>>/dev/null 2>>/dev/null if [ $? = 0 ]; then DEFAULT_CFG_FILE_SIZE=`/usr/bin/du -k $DEFAULT_CFG_FILE | /bin/awk '{print $1}'` [ ${DEV_NAS_CONFIG_FREE_SIZE} -gt ${DEFAULT_CFG_FILE_SIZE} ] && /bin/cp $DEFAULT_CFG_FILE $TMP_CONFIG fi if [ ! -f ${TMP_CONFIG}/system.map.key ]; then /sbin/uuidgen > ${TMP_CONFIG}/system.map.key /bin/cp ${TMP_CONFIG}/system.map.key /etc/config/system.map.key fi smbconf_cksum_val=0 flash_smbconf_cksum_val=1 if [ -f /etc/config/smb.conf ]; then DEV_NAS_CONFIG_FREE_SIZE=`/bin/df -k | /bin/grep "$DEV_NAS_CONFIG" | /bin/awk '{print $4}'` SMBCONF_SIZE=`/usr/bin/du -k /etc/config/smb.conf | /bin/awk '{print $1}'` if [ -z $DEV_NAS_CONFIG_FREE_SIZE ] || [ -z $SMBCONF_SIZE ] || [ $SMBCONF_SIZE -le 0 ] || [ ${DEV_NAS_CONFIG_FREE_SIZE} -le ${SMBCONF_SIZE} ]; then /bin/umount $DEV_NAS_CONFIG /bin/echo "The available space in flash rom is not enough." return 1 fi smbconf_cksum_val=`/sbin/cksum /etc/config/smb.conf | /bin/cut -d ' ' -f 1` [ -f ${TMP_CONFIG}/smb.conf ] && flash_smbconf_cksum_val=`/sbin/cksum ${TMP_CONFIG}/smb.conf | /bin/cut -d ' ' -f 1` if [ $smbconf_cksum_val != $flash_smbconf_cksum_val ]; then /bin/cp /etc/config/smb.conf ${TMP_CONFIG}/smb.conf flash_smbconf_cksum_val=`/sbin/cksum ${TMP_CONFIG}/smb.conf | /bin/cut -d ' ' -f 1` /bin/echo $flash_smbconf_cksum_val > ${TMP_CONFIG}/smb.conf.cksum /bin/echo $flash_smbconf_cksum_val > /etc/config/smb.conf.cksum /bin/echo "Configuration files in the flash rom is updated." fi fi system_map_uuid=`/bin/cat ${TMP_CONFIG}/system.map.key` system_map_uuid_hd=`/bin/cat /etc/config/system.map.key` if [ "x$system_map_uuid" != x ] && [ "x$system_map_uuid" != "x$system_map_uuid_hd" ]; then DEV_NAS_CONFIG_FREE_SIZE=`/bin/df -k | /bin/grep "$DEV_NAS_CONFIG" | /bin/awk '{print $4}'` [ ${DEV_NAS_CONFIG_FREE_SIZE} -gt ${DEV_NAS_CONFIG_SIZE_MIN} ] && /bin/cp ${TMP_CONFIG}/system.map.key /etc/config/system.map.key fi /bin/sync /bin/umount $DEV_NAS_CONFIG fi } check_config(){ echo "Check config files...start" [ -d $TMP_CONFIG ] || /bin/mkdir $TMP_CONFIG /bin/mount -t ext2 $DEV_NAS_CONFIG $TMP_CONFIG if [ $? = 0 ]; then # /bin/grep "\[END_FLAG\]" $DEFAULT_CFG_FILE 1>>/dev/null 2>>/dev/null # if [ $? != 0 ]; then # echo "Restore uLinux.conf..." # restore_flag1=1 # /bin/grep "\[END_FLAG\]" $TMP_CONFIG/uLinux.conf 1>>/dev/null 2>>/dev/null # if [ $? = 0 ];then # /bin/cp $TMP_CONFIG/uLinux.conf $DEFAULT_CFG_FILE # else # /bin/cp $DEGAULT_CFG_DIR/uLinux.conf $DEFAULT_CFG_FILE # fi # fi if [ -f ${ROOT_PART}/.config/Model_Name.conf ]; then smbconf_cksum_val=0 flash_smbconf_cksum_val=1 flash_smbconf_cksum_ver=2 system_map_uuid=`/bin/cat ${TMP_CONFIG}/system.map.key` system_map_uuid_hd=`/bin/cat /etc/config/system.map.key` SMBCONF_SIZE=`/usr/bin/du -k /etc/config/smb.conf | /bin/awk '{print $1}'` ROOT_PART_FREE_SIZE=`/bin/df -k | /bin/grep "$ROOT_PART" | /bin/awk '{print $4}'` if [ -z $SMBCONF_SIZE ] || [ -z $ROOT_PART_FREE_SIZE ] || [ $SMBCONF_SIZE -le 0 ] || [ $ROOT_PART_FREE_SIZE -le $SMBCONF_SIZE ]; then /bin/umount $DEV_NAS_CONFIG /bin/echo "Configuration file recovery failed." return 1 fi if [ "x$system_map_uuid" != x ] && [ "x$system_map_uuid" = "x$system_map_uuid_hd" ]; then if [ -f /etc/config/smb.conf ] && [ -f /etc/config/smb.conf.cksum ]; then smbconf_cksum_val=`/sbin/cksum /etc/config/smb.conf | /bin/cut -d ' ' -f 1` smbconf_cksum_ver=`/bin/cat ${TMP_CONFIG}/smb.conf.cksum` if [ -n $smbconf_cksum_ver ] && [ $smbconf_cksum_ver = $smbconf_cksum_val ]; then /bin/umount $DEV_NAS_CONFIG /bin/echo "No need to do recovery." return 0 fi fi if [ -f ${TMP_CONFIG}/smb.conf ] && [ -f ${TMP_CONFIG}/smb.conf.cksum ]; then flash_smbconf_cksum_val=`/sbin/cksum ${TMP_CONFIG}/smb.conf | /bin/cut -d ' ' -f 1` [ -f /etc/config/smb.conf ] && smbconf_cksum_val=`/sbin/cksum /etc/config/smb.conf | /bin/cut -d ' ' -f 1` flash_smbconf_cksum_ver=`/bin/cat ${TMP_CONFIG}/smb.conf.cksum` if [ $smbconf_cksum_val != $flash_smbconf_cksum_val ] && [ $flash_smbconf_cksum_ver = $flash_smbconf_cksum_val ]; then #/bin/cp ${TMP_CONFIG}/smb.conf /etc/config/smb.conf #/bin/cp ${TMP_CONFIG}/smb.conf.cksum /etc/config/smb.conf.cksum restore_flag1=1 fi fi fi if [ ! -f ${TMP_CONFIG}/smb.conf ] && [ ! -f ${TMP_CONFIG}/smb.conf.cksum ] && [ -f /etc/config/smb.conf ]; then DEV_NAS_CONFIG_FREE_SIZE=`/bin/df -k | /bin/grep "$DEV_NAS_CONFIG" | /bin/awk '{print $4}'` freesize_need=$(($SMBCONF_SIZE+$DEV_NAS_CONFIG_SIZE_MIN)) if [ ! -z $DEV_NAS_CONFIG_FREE_SIZE ] && [ $DEV_NAS_CONFIG_FREE_SIZE -gt $freesize_need ]; then smbconf_cksum_val=`/sbin/cksum /etc/config/smb.conf | /bin/cut -d ' ' -f 1` /bin/cp /etc/config/smb.conf ${TMP_CONFIG}/smb.conf /bin/echo $smbconf_cksum_val > ${TMP_CONFIG}/smb.conf.cksum if [ -f ${TMP_CONFIG}/system.map.key ]; then /bin/cp ${TMP_CONFIG}/system.map.key /etc/config/system.map.key else /sbin/uuidgen > ${TMP_CONFIG}/system.map.key /bin/cp ${TMP_CONFIG}/system.map.key /etc/config/system.map.key fi fi fi if [ ! -f /etc/config/smb.conf.cksum ]; then smbconf_cksum_val=`/sbin/cksum /etc/config/smb.conf | /bin/cut -d ' ' -f 1` /bin/echo $smbconf_cksum_val > /etc/config/smb.conf.cksum fi fi #end of Model_Name.conf /bin/sync /bin/umount $DEV_NAS_CONFIG echo "Check config files...end" else echo "Mount $DEV_NAS_CONFIG failed...try to recover it..." [ -f ${NASCONFIG_FS} ] && echo "${NASCONFIG_FS} is found." [ -f ${NASCONFIG_FS} ] && /bin/tar xzf ${NASCONFIG_FS} -O > $DEV_NAS_CONFIG fi #Restore config logs if [ $restore_flag1 = 1 ]; then echo #/sbin/write_log "System configuration file(s) recovered." 2 fi } stop_all_dev(){ MD_DEVICES="md0 md1 md2 md3 md4 md5" HD_DEVICES="sda3 sdb3 sdc3 sdd3 sde3 sdf3 sdg3 sdh3 sdi3 sdj3 sdk3 sdkl3 sdz3" /sbin/qwatchdogd -d if [ -f /tmp/ups_stop_service ]; then /bin/ps | grep "/etc/rcK.d/" | grep -v grep >/dev/null [ $? != 0 ] || /usr/sbin/killall5 else /usr/sbin/killall5 fi /sbin/qwatchdogd & echo "umount and stop encrypt devices." for i in $MD_DEVICES do if [ `/sbin/getcfg Storage "Encrypt_${i}" -d "FALSE"` = "TRUE" ]; then /bin/umount /dev/mapper/${i} 1>>/dev/null 2>>/dev/null if [ "$?" = "0" ] && [ -f /sbin/cryptsetup ]; then /sbin/cryptsetup luksClose ${i} 1>>/dev/null 2>>/dev/null [ "$?" = "0" ] && /sbin/mdadm -S /dev/${i} fi else /bin/cat /proc/mounts | /bin/grep ${i} | /bin/grep "ro," if [ $? = 0 ]; then readonly_flag=1 else readonly_flag=0 fi /bin/umount /dev/${i} 1>>/dev/null 2>>/dev/null if [ "$?" = "0" ]; then /bin/sleep 1 if [ $readonly_flag = 0 ]; then /sbin/mdadm -S /dev/${i} [ "$?" = "0" ] || echo "Cannot stop raid device /dev/${i}." else echo "/dev/${i} is set read-only." fi fi fi done for i in $HD_DEVICES do if [ `/sbin/getcfg Storage "Encrypt_${i}" -d "FALSE"` = "TRUE" ]; then /bin/umount /dev/mapper/${i} 1>>/dev/null 2>>/dev/null if [ "$?" = "0" ] && [ -f /sbin/cryptsetup ]; then /sbin/cryptsetup luksClose ${i} 1>>/dev/null 2>>/dev/null fi else /bin/umount /dev/${i} 1>>/dev/null 2>>/dev/null fi done } PUBLIC_SHARE=Public # Use around 5TB (5000000M) USE_THRESHOLD=5000000 # Free around 5G (5000M) AVAIL_THRESHOLD=5000 preload_group_block_bitmap() { /bin/echo "group block bitmap usage checking..." public_dir=$(/sbin/getcfg $PUBLIC_SHARE path -f /etc/config/smb.conf) if [ ! -z $public_dir ] && [ -d $public_dir ]; then public_mnt_path=$(/usr/bin/dirname $public_dir) /bin/echo "find default mount path $public_mnt_path" if [ ! -z $public_mnt_path ] && [ -d $public_mnt_path ]; then use_size="$(/bin/df -m | /bin/awk -v mnt_path=$public_mnt_path '{if ($6 == mnt_path) print $3}')" avail_size="$(/bin/df -m | /bin/awk -v mnt_path=$public_mnt_path '{if ($6 == mnt_path) print $4}')" if [ X != X$use_size ] && [ X != X$avail_size ]; then if [ $use_size -gt $USE_THRESHOLD ] && [ $avail_size -gt $AVAIL_THRESHOLD ]; then /bin/echo "$USE_THRESHOLD/$AVAIL_THRESHOLD exceeds threshold, try to preload them." /bin/dd if=/dev/zero of=$public_mnt_path/.group_bitmap_preload bs=1M count=1024 /bin/rm -f $public_mnt_path/.group_bitmap_preload fi fi fi fi } case "$1" in start) echo "Starting Disk initialized:" [ -f /sbin/lcd_tool ] && /sbin/lcd_tool -1 "Mount Volume" -2 "Please Wait..." check_config /bin/rm /etc/config/usb_share_mapping -f /bin/touch /etc/config/usb_share_mapping /bin/touch /etc/default_config/usb_share_mapping /bin/touch /var/lock/add_ext_dev /bin/rm /etc/config/esata_share_mapping -f /bin/touch /etc/config/esata_share_mapping /bin/touch /etc/default_config/esata_share_mapping /bin/touch /etc/config/usb_share_setting /bin/touch /etc/default_config/usb_share_setting # Clear QRAID1 status to avoid system shutdown abnormal. /sbin/setcfg QRAID1 "device name" "" if [ -f /sbin/storage_boot_init ]; then /sbin/storage_boot_init 2 fi # preload FS group block bitmap preload_group_block_bitmap /bin/touch /tmp/init.1 # Check external disks. if [ -f /sbin/storage_boot_init ]; then /sbin/storage_boot_init 6 & fi [ -f /sbin/hotswap ] && /sbin/daemon_mgr hotswap stop "/sbin/hotswap &" /bin/sleep 1 [ -f /sbin/hotswap ] && /sbin/daemon_mgr hotswap start "/sbin/hotswap &" & /bin/touch /var/ledvalue /bin/touch /tmp/check.status /bin/touch /tmp/format.status #---u-boot & uImage_bak update--- if [ "x${BOOT_CONF}" = "xTS-NASARM" ]; then if [ -f $ROOT_PART/update_pkg/uImage_bak ]; then echo "Update Kernel..." check_sum "$ROOT_PART/update_pkg/uImage_bak" "$ROOT_PART/update_pkg/uImage_bak.cksum" if [ $? = 0 ]; then /bin/dd if=$ROOT_PART/update_pkg/uImage_bak of=${FLASH_KERNEL} echo "Kernel is updated." else echo "Kernel update error." fi /bin/rm -f $ROOT_PART/update_pkg/uImage_bak* fi #Reboot after u-boot is updated. if [ -f $ROOT_PART/update_pkg/u-boot.bin ]; then echo "Update U-boot..." check_sum "$ROOT_PART/update_pkg/u-boot.bin" "$ROOT_PART/update_pkg/u-boot.bin.cksum" if [ $? = 0 ]; then /bin/dd if=$ROOT_PART/update_pkg/u-boot.bin of=${FLASH_UBOOT} echo "u-boot is updated." else echo "u-boot update error." fi /bin/rm -f $ROOT_PART/update_pkg/u-boot.bin* echo "Reboot..." /sbin/reboot fi fi [ -f /sbin/qsmartd ] && ( /sbin/daemon_mgr qsmartd start "/sbin/qsmartd -d" & ) && sleep 1 # for TS119 TS219 TS419 if [ -f /etc/config/quick_update.flag ]; then /sbin/setcfg "Misc" "Configured" "TRUE" rm -f /etc/config/quick_update.flag fi if [ "x${NSS_ENABLED}" = "xyes" ]; then cp -v /etc/init.d/nvr_svc.sh /etc/init.d/nvrd.sh else touch /home/httpd/cgi-bin/data/lang_tools.js if [ ! -e /home/httpd/cgi-bin/surv/lang ]; then mkdir -p /home/httpd/cgi-bin/surv/lang fi touch /home/httpd/cgi-bin/surv/lang/lang_tools.js fi _init_spool standby_enable=`/sbin/getcfg Misc "Disk StandBy Timeout Enable" -d FALSE` [ "x${standby_enable}" = "xFALSE" ] && /sbin/hdsuspend -a -t 0 /sbin/gen_next_alarm #Write BOOT to crontab for RR postpone. /sbin/gen_next_alarm 2 -c ;; stop) [ -f /tmp/donotrecover ] || update_flash_config echo "Unmount ISO shares" /etc/init.d/iso_mount.sh stop /sbin/daemon_mgr klogd.sh stop "/etc/init.d/klogd.sh stop" & /etc/init.d/klogd.sh stop if [ -f /sbin/storage_boot_init ]; then /sbin/storage_boot_init 7 fi [ -f /sbin/hotswap ] && /sbin/daemon_mgr hotswap stop "/sbin/hotswap -d" & /sbin/daemon_mgr bcclient stop "/sbin/bcclient" /sbin/daemon_mgr rsync stop "/sbin/rsync --daemon" & [ -f /sbin/hd_util ] && /sbin/daemon_mgr hd_util stop "/sbin/hd_util -d" & [ -f /sbin/qsmartd ] && /bin/kill -HUP `/bin/pidof qsmartd` [ -f /sbin/qsmartd ] && /sbin/daemon_mgr qsmartd stop "/sbin/qsmartd -d" & [ -f /sbin/qsmart ] && /sbin/qsmart -c -d 1 1>/dev/null 2>/dev/null [ -f /sbin/qsmart ] && /sbin/qsmart -c -d 2 1>/dev/null 2>/dev/null [ -f /sbin/qsmart ] && /sbin/qsmart -c -d 3 1>/dev/null 2>/dev/null [ -f /sbin/qsmart ] && /sbin/qsmart -c -d 4 1>/dev/null 2>/dev/null #set power recovery mode to power off if mode is last state # check if the HAL subsystem exist if [ -x /sbin/hal_app ]; then /sbin/hal_event --se_shutdown else Internal_Model=`/sbin/getcfg System "Internal Model"` if [ "x$Internal_Model" != "xTS-879" ] && [ "x$Internal_Model" != "xTS-1079" ] && [ "x$Internal_Model" != "xTS-1279" ] && [ "x$Internal_Model" != "xTS-1679" ] ;then Power_Recovery_Mode=`/sbin/getcfg Misc Power_Recovery_Mode -d 0`; case "$Power_Recovery_Mode" in 0) #LAST STATE /sbin/pic_raw 68 echo "last state mode" ;; esac fi fi /bin/kill -9 `/bin/pidof daemon_mgr` /bin/kill -9 `/bin/pidof utelnetd` /bin/kill -9 `/bin/pidof proftpd` /bin/kill -9 `/bin/pidof rsyncd` /bin/kill -9 `/bin/pidof cupsd` if [ -f /tmp/ups_stop_service ]; then /sbin/daemon_mgr lcdmond stop /sbin/lcdmond 1>>/dev/null 2>>/dev/null /bin/sleep 1 [ -f /sbin/lcd_tool ] && /sbin/lcd_tool -f 1>>/dev/null 2>>/dev/null fi # check if the HAL subsystem exist if [ -x /sbin/hal_app ]; then /sbin/hal_event --clear_ipc /sbin/storage_util --data_umount else stop_all_dev fi [ -f /sbin/umount_all_extdev ] && /sbin/umount_all_extdev /bin/umount /dev/md9 if [ "$?" = "0" ]; then /bin/sleep 1 /sbin/mdadm -S /dev/md9 [ "$?" = "0" ] || echo "Cannot stop raid device /dev/md9." fi /sbin/swapoff ${SWAP_DEVICE} [ "$?" = "0" ] && /sbin/mdadm -S ${SWAP_DEVICE} /bin/sleep 3 /bin/umount $EXT_ROOT [ "$?" = "0" ] || /bin/echo "init_disk.sh: Umount $EXT_ROOT failed." /sbin/mdadm -S $EXT_ROOT [ "$?" = "0" ] || /bin/echo "Cannot stop raid device $EXT_ROOT." #Turn off HDD LED # check if the HAL subsystem exist if [ ! -x /sbin/hal_app ]; then for i in 0 1 2 3 4 5; do [ ! -f /sys/class/scsi_host/host$i/em_message ] || /bin/echo 0x0 > /sys/class/scsi_host/host$i/em_message && sync done else # reboot all SAS enclosure if enclosure fw has been upgrade if [ -f /etc/enclosure_upgrade.info ]; then /sbin/hal_app --se_reboot enc_id=-1 fi fi ;; restart) echo "Restarting Disk services:" $0 stop $0 start echo "done." ;; update_flash_config) #update_flash_config echo ;; check_config) check_config ;; init_spool) _init_spool ;; *) echo "Usage: init_disk {start|stop|restart}" exit 1 esac