#!/bin/sh
. /etc/init.d/functions
PATH=/bin:/sbin
# check if the HAL subsystem exist
if [ -x /sbin/hal_app ]; then
    HD_DEVICE="/dev/md13"
else
    HD_DEVICE="/dev/sda4"
fi
EXT_MD_NAME="md13"
FLASH_RFS1="/dev/sdx2"
FLASH_RFS2="/dev/sdx3"
FLASH_TMP="/flashfs_tmp"
MNT_POINT="/mnt/ext"
CONFIG_Dev="/dev/md9"
MNT_HD_ROOT_TMP="/hd_root_tmp"
UPDATEPKG_DIR="${MNT_HD_ROOT_TMP}/update_pkg"
ROOTFS2="$FLASH_TMP/boot/rootfs2.bz"
ROOTFS_EXT="$FLASH_TMP/boot/rootfs_ext.tgz"
FLASH_RFS2_16M="/dev/mtdblock3"
ROOTFS2_16M="$FLASH_TMP/rootfs2.bz"

check_if_hd_ready_arg()
{
	local ret=0
	
	dd if=$1 of=/tmp/mycheck skip=384M bs=1 count=4
	if [ $? = 0 ] && [ `cat /tmp/mycheck` = "QNAP" ]; then
		ret=1
	fi

	rm -f /tmp/mycheck
	return $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
}

extract_rootfs2()
{
	[ -d $FLASH_TMP ] || /bin/mkdir $FLASH_TMP
	/bin/mount $1 $FLASH_TMP -o ro
	if [ $? != 0 ]; then
		/bin/echo "mountall: mount $1 failed." 
		/bin/umount $1 1>/dev/null 2>&1
		return 1
	else
		check_sum "${ROOTFS2}" "${ROOTFS2}.cksum"
		if [ $? = 0 ]; then
			/bin/tar xjf ${ROOTFS2} -C / 2>/dev/null
		else
			/bin/umount $1 1>/dev/null 2>&1
			/bin/sync
			return 1
		fi
	fi
	return 0
}

#
# Mounting extended rootfs
#

check_if_hd_ready_arg $HD_DEVICE
if [ $? = 1 ]; then
	HD_BOOT_CONF=`cat /tmp/BOOT_CONF 2>/dev/null`
	/bin/rm /tmp/BOOT_CONF
fi

grep ${EXT_MD_NAME} /proc/mdstat | grep active 1>>/dev/null 2>>/dev/null
if [ $? = 0 ]; then
	EXT_MD_EXIST=1
else
	EXT_MD_EXIST=0
fi
if [ -f /var/ch_model_update.fla ]; then
	EXT_MD_EXIST=0
fi

Model_Name=`/bin/cat /etc/default_config/Model_Name.conf 2>/dev/null`
HD_Model_Name=`/bin/cat /tmp/Internal_Model 2>/dev/null`
BOOT_CONF=`/bin/cat /etc/default_config/BOOT.conf 2>/dev/null`

/bin/echo "Extract RootFS Ext..."
[ -d $FLASH_TMP ] || /bin/mkdir $FLASH_TMP
if [ "x${BOOT_CONF}" = "xTS-NASX86" ]; then
	extract_rootfs2 "${FLASH_RFS1}"
	[ $? = 0 ] || extract_rootfs2 "${FLASH_RFS2}"
	/bin/sync	
fi

if [ "x${HD_BOOT_CONF}" = "xTS-NASX86" -a "x$HD_Model_Name" = "x$Model_Name" ] || \
	[ "x${HD_BOOT_CONF}" = "xTS-NASPPC" -a "x$HD_Model_Name" = "x$Model_Name" ] || \
	[ "x${HD_BOOT_CONF}" = "xTS-NASARM" -a "x$HD_Model_Name" = "x$Model_Name" ]; then
	[ -d ${MNT_HD_ROOT_TMP} ] || /bin/mkdir ${MNT_HD_ROOT_TMP}
	/bin/mount $CONFIG_Dev $MNT_HD_ROOT_TMP
	if [ $? = 0 ]; then 
		/bin/echo "mountall: mount $CONFIG_Dev successful."
	else
		/bin/echo "mountall: mount $CONFIG_Dev failed." 
	fi
	
	if [ -f ${ROOTFS_EXT} ] && [ "x${BOOT_CONF}" = "xTS-NASX86" ]; then
		/bin/echo "Update Extended ${ROOTFS_EXT}..."
		check_sum "${ROOTFS_EXT}" "${ROOTFS_EXT}.cksum"
		if [ $? = 0 ]; then
				/bin/tar xzf ${ROOTFS_EXT} -O > $HD_DEVICE
				/bin/sync
		fi
	fi
	/bin/umount $FLASH_TMP 1>/dev/null 2>&1
	if [ -f ${MNT_HD_ROOT_TMP}/update/rootfs_ext.tgz ]; then
		check_sum "${MNT_HD_ROOT_TMP}/update/rootfs_ext.tgz" "${MNT_HD_ROOT_TMP}/update/rootfs_ext.tgz.cksum"
		if [ $? = 0 ]; then
			/bin/tar xzf $MNT_HD_ROOT_TMP/update/rootfs_ext.tgz -O > $HD_DEVICE
		fi
	fi
	if [ -f ${MNT_HD_ROOT_TMP}/update/qpkg.tar ]; then
		check_sum "${MNT_HD_ROOT_TMP}/update/qpkg.tar" "${MNT_HD_ROOT_TMP}/update/qpkg.tar.cksum"
		if [ $? = 0 ]; then
			[ -d ${UPDATEPKG_DIR} ] || /bin/mkdir ${UPDATEPKG_DIR}
			[ ! -f ${UPDATEPKG_DIR}/apache_php5.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/apache_php5.tgz
			[ ! -f ${UPDATEPKG_DIR}/mysql5.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/mysql5.tgz
			[ ! -f ${UPDATEPKG_DIR}/pgsql9.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/pgsql9.tgz
			[ ! -f ${UPDATEPKG_DIR}/language.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/language.tgz
			[ ! -f ${UPDATEPKG_DIR}/avahi0630.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/avahi0630.tgz
			[ ! -f ${UPDATEPKG_DIR}/centerim.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/centerim.tgz
			[ ! -f ${UPDATEPKG_DIR}/musicstation.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/musicstation.tgz
			[ ! -f ${UPDATEPKG_DIR}/photostation2.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/photostation2.tgz
			[ ! -f ${UPDATEPKG_DIR}/MSV2.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/MSV2.tgz
			/bin/rm -f ${UPDATEPKG_DIR}/WFM*.tgz 2>/dev/null
			/bin/rm -f ${UPDATEPKG_DIR}/jsLib.tgz 2>/dev/null
			/bin/rm -f ${UPDATEPKG_DIR}/nvr_app.tar.gz 2>/dev/null
			/bin/rm -f ${UPDATEPKG_DIR}/nvr_app2.tar.gz 2>/dev/null
			/bin/tar xf $MNT_HD_ROOT_TMP/update/qpkg.tar -C ${UPDATEPKG_DIR}
			[ ! -f ${UPDATEPKG_DIR}/photostation2.tgz ] || /bin/rm -rf ${UPDATEPKG_DIR}/PhotoStation 2>/dev/null
			[ ! -f ${UPDATEPKG_DIR}/musicstation.tgz ] || /bin/rm -rf ${UPDATEPKG_DIR}/MusicStation 2>/dev/null
			[ ! -f ${MNT_HD_ROOT_TMP}/update/update_qpkg_f ] || /bin/mv ${MNT_HD_ROOT_TMP}/update/update_qpkg_f ${UPDATEPKG_DIR}
		fi
	fi
	/bin/rm -rf $MNT_HD_ROOT_TMP/update/* 1>/dev/null 2>&1
	/bin/sync

if [ ! -f /var/ch_model_update.fla ]; then
	/bin/mount $HD_DEVICE $MNT_POINT
	_mnt_result=$?
	if [ "x${BOOT_CONF}" = "xTS-NASARM" ] || [ "x${BOOT_CONF}" = "xTS-NASPPC" ]; then
		if [ -d ${MNT_POINT}/home ] && [ -d ${MNT_POINT}/usr ]; then
			/bin/rm -rf /home 2>/dev/null
			/bin/rm -rf /usr 2>/dev/null
			if [ -d ${MNT_POINT}/lib/modules/misc ]; then
				/bin/rm -rf /lib/modules/misc 1>/dev/null 2>&1
				/bin/ln -s $MNT_POINT/lib/modules/misc /lib/modules/misc
			fi
			/bin/ln -s $MNT_POINT/home /home
			/bin/ln -s $MNT_POINT/usr /usr
			[ ! -f /sbin/_thttpd_ ] || /bin/rm -rf /sbin/_thttpd_
			/sbin/ldconfig
		else
			ROOTFS2=${ROOTFS2_16M}
			extract_rootfs2 "${FLASH_RFS2_16M}"
			/bin/umount $FLASH_TMP 1>/dev/null 2>&1
		fi
	fi
	if [ ${_mnt_result} = 0 ]; then
		[ -f /tmp/booting ] || /bin/touch /tmp/booting
		[ -d /tmp/install ] || /bin/mkdir /tmp/install
 		/etc/init.d/installtgz.sh radius ${UPDATEPKG_DIR}/radius.tgz &
 		/etc/init.d/installtgz.sh samba ${UPDATEPKG_DIR}/samba.tgz &
		/etc/init.d/installtgz.sh jsLib ${UPDATEPKG_DIR}/jsLib.tgz
		/etc/init.d/installtgz.sh language ${UPDATEPKG_DIR}/language.tgz &
		/etc/init.d/installtgz.sh WFM2 ${UPDATEPKG_DIR}/WFM2.tgz &
		/etc/init.d/installtgz.sh WFM3 ${UPDATEPKG_DIR}/WFM3.tgz &
		/etc/init.d/installtgz.sh ffmpeg ${UPDATEPKG_DIR}/ffmpeg.tgz
		/etc/init.d/installtgz.sh ImageMagick ${UPDATEPKG_DIR}/ImageMagick.tgz
		/etc/init.d/installtgz.sh vaultServices ${UPDATEPKG_DIR}/vaultServices.tgz &
		[ ! -f ${UPDATEPKG_DIR}/libtorrent.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/libtorrent.tgz &
		[ ! -f ${UPDATEPKG_DIR}/DS.tgz ] || /bin/rm -f ${UPDATEPKG_DIR}/DS.tgz &
		/etc/init.d/installtgz.sh DSv3 ${UPDATEPKG_DIR}/DSv3.tgz &
		/etc/init.d/installtgz.sh vpnpptp ${UPDATEPKG_DIR}/vpnpptp.tgz
		/etc/init.d/installtgz.sh vpnopenvpn ${UPDATEPKG_DIR}/vpnopenvpn.tgz
		/etc/init.d/installtgz.sh ldap_server ${UPDATEPKG_DIR}/ldap_server.tgz
		/etc/init.d/installtgz.sh avahi0630 ${UPDATEPKG_DIR}/avahi0630.tgz
		/etc/init.d/installtgz.sh printer ${UPDATEPKG_DIR}/printer.tgz &
		/etc/init.d/installtgz.sh vim ${UPDATEPKG_DIR}/vim.tgz &
		if [ -f ${UPDATEPKG_DIR}/medialibrary.tgz ]; then
			/etc/init.d/installtgz.sh medialibrary ${UPDATEPKG_DIR}/medialibrary.tgz &
		fi
	fi
fi
#	/bin/umount $CONFIG_Dev -> move to sysinit.sh

elif [ $EXT_MD_EXIST = 1 ]; then
#	might be invalid HD case	
	/bin/umount $FLASH_TMP 1>/dev/null 2>&1
	/bin/mount $HD_DEVICE $MNT_POINT
	[ -d /home ] || /bin/ln -sf $MNT_POINT/home /home
	if [ $? = 0 ]; then
        if [ -x /sbin/hal_app ]; then
            /sbin/hal_app --status_led_set enc_id=0,event=0x400,status=1
        else
		    /sbin/set_status_led 1024 1
        fi
	fi
else
	if [ "x${BOOT_CONF}" = "xTS-NASARM" ] || [ "x${BOOT_CONF}" = "xTS-NASPPC" ]; then
		ROOTFS2=${ROOTFS2_16M}
		extract_rootfs2 "${FLASH_RFS2_16M}"
	fi
	/bin/umount $FLASH_TMP 1>/dev/null 2>&1
fi
#/bin/df
/sbin/dmsetup targets 1>/dev/null 2>&1
[ $? = 0 ] && /bin/echo "dev-mapper ready."
for i in a b c d e f g h; do
	#/bin/echo "hdparm -a 8192 /dev/sd$i"
	/sbin/hdparm -a 8192 /dev/sd$i 1>/dev/null 2>&1
done
if [ -x /usr/bin/wget-s ]; then
	/bin/rm -f /bin/wget-s 2>/dev/null
	/bin/cp /usr/bin/wget-s /bin/wget-s
fi
[ -f /sbin/daemon_mgr ] && /sbin/daemon_mgr
/bin/sleep 1
[ -f /sbin/daemon_mgr.nvr ] && /sbin/daemon_mgr.nvr

#send loading systen to LCD
[ "x$COMPRT4LCD" != "xyes" ] && [ -f /sbin/lcd_tool ] && /sbin/lcd_tool -1 "Loading System" -2 "Please Wait..." &
/bin/touch "/var/.system.info"
if [ -f /sbin/dmidecode ]; then
	/sbin/dmidecode -t memory | /bin/grep ECC > /dev/null 2>&1
	[ $? = 0 ] && /sbin/setcfg RAM UseECC TRUE -f "/var/.system.info"
fi
/sbin/daemon_mgr hotswap start "/sbin/hotswap &"
. /etc/init.d/check_nss2
if [ "x$_NSS2_SUPPORT" = "xyes" ]; then
	cp -v /etc/init.d/nvr_svc.sh /etc/init.d/nvrd.sh
fi
