1
Files
qnap-rc-scripts/nvr_svc.sh
2016-09-04 22:20:40 +03:00

502 lines
14 KiB
Bash
Executable File

#!/bin/sh
. /etc/init.d/functions
FindDefVol
_ret=$?
if [ $_ret != 0 ]; then
echo "Default volume not found."
exit 1
fi
#echo "${DEF_VOLMP}"
INSTALL_FLAG_FILE=/tmp/check_install.flag
if [ -f $INSTALL_FLAG_FILE ] ; then
INSTALLING=`/bin/cat $INSTALL_FLAG_FILE`
[ x"$INSTALLING" != x"1" ] || exit 0
fi
NSS_ENABLED=`/sbin/getcfg NVR Enable -d FALSE`
NVR_CLASS=`/sbin/getcfg System "NVR Class" -d NSS -f /etc/default_config/uLinux.conf`
NVR_ROOTFS=
export NVR_ROOTFS
RecordingsShare=`/sbin/getcfg SHARE_DEF defRecordings -d Qrecordings -f /etc/config/def_share.info`
WGET=/usr/bin/wget-s
[ -x ${WGET} ] || WGET=/usr/bin/wget
if [ "$NVR_CLASS" == "NVR" ]; then
NVR_DATA_ROOT=/data
else
NVR_DATA_ROOT=/share/$RecordingsShare
fi
# used only for NAS
MNT_POINT="/mnt/ext"
NVR_SOURCE="${MNT_POINT}/opt/source/nvr_app2.tar.gz"
NVR_DIR="/"
ROOT_PART="/mnt/HDA_ROOT"
UPDATEPKG_DIR="${ROOT_PART}/update_pkg"
if [ -f "${NVR_SOURCE}" ] && [ x`/sbin/getcfg "NVR" "NSS Enabled" -d no` = xno ]; then
/sbin/setcfg NVR "NSS Enabled" yes
fi
check_nvr_bin()
{
if [ ! -f /usr/bin/nvrd ] || [ ! -f /usr/bin/evtLogd ] || [ ! -f /usr/bin/evtd ]; then
echo "Surveillance Station not available."
return 1
fi
return 0
}
install_nvr_svc()
{
if [ "$NVR_CLASS" == "NVR" ]; then
return
fi
if [ ! -f /usr/bin/nvrd ]; then
_nvr_create_link=0
if [ -f ${UPDATEPKG_DIR}/nvr_app2.tar.gz ]; then
_nvr_target=${DEF_VOLMP}/.nvr
cd /
/bin/tar zxf ${UPDATEPKG_DIR}/nvr_app2.tar.gz --exclude *.cab --exclude msb --exclude ajax_obj_v2 --exclude libtranscoder.so.0.0
[ -d ${_nvr_target} ] || /bin/mkdir -p ${_nvr_target}
/bin/tar zxvf ${UPDATEPKG_DIR}/nvr_app2.tar.gz -C ${_nvr_target} --wildcards *.cab usr/msb home/httpd/ajax_obj_v2 usr/lib/libtranscoder.so.0.0
_nvr_create_link=1
elif [ -f ${NVR_SOURCE} ]; then
_nvr_target=/mnt/ext/opt/nvr
cd /
/bin/tar zxf ${NVR_SOURCE} --exclude *.cab --exclude msb --exclude ajax_obj_v2 --exclude libtranscoder.so.0.0
[ -d /mnt/ext/opt/nvr ] || /bin/mkdir -p ${_nvr_target}
/bin/tar zxvf ${NVR_SOURCE} -C /mnt/ext/opt/nvr --wildcards *.cab usr/msb home/httpd/ajax_obj_v2 usr/lib/libtranscoder.so.0.0
_nvr_create_link=1
else
echo "Surveillance Station not available."
/sbin/setcfg NVR Enable FALSE
exit 1
fi
if [ "x${_nvr_create_link}" = "x1" ]; then
/bin/rm -f /home/httpd/cgi-bin/NNVRVMon.cab 2>/dev/null
/bin/rm -f /home/httpd/cgi-bin/X86VMon.cab 2>/dev/null
/bin/rm -f /home/httpd/cgi-bin/Playback.cab 2>/dev/null
/bin/rm -f /home/httpd/cgi-bin/QNAP*.cab 2>/dev/null
/bin/ln -sf ${_nvr_target}/home/httpd/cgi-bin/X86VMon.cab /home/httpd/cgi-bin/X86VMon.cab
/bin/ln -sf ${_nvr_target}/home/httpd/cgi-bin/Playback.cab /home/httpd/cgi-bin/Playback.cab
/bin/ln -sf ${_nvr_target}/home/httpd/cgi-bin/QNAPG726.cab /home/httpd/cgi-bin/QNAPG726.cab
/bin/ln -sf ${_nvr_target}/home/httpd/cgi-bin/QNAPQ264.cab /home/httpd/cgi-bin/QNAPQ264.cab
/bin/ln -sf ${_nvr_target}/home/httpd/cgi-bin/QNAPQIVG.cab /home/httpd/cgi-bin/QNAPQIVG.cab
/bin/ln -sf ${_nvr_target}/home/httpd/cgi-bin/QNAPQMP4.cab /home/httpd/cgi-bin/QNAPQMP4.cab
/bin/ln -sf ${_nvr_target}/home/httpd/cgi-bin/QNAPQVivoTek.cab /home/httpd/cgi-bin/QNAPQVivoTek.cab
/bin/rm -rf /usr/msb 2>/dev/null
/bin/ln -sf ${_nvr_target}/usr/msb /usr/msb
/bin/rm -f /home/httpd/ajax_obj_v2 2>/dev/null
/bin/ln -sf ${_nvr_target}/home/httpd/ajax_obj_v2 /home/httpd/ajax_obj_v2
/bin/rm -f /usr/lib/libtranscoder.so.0.0 2>/dev/null
/bin/ln -sf ${_nvr_target}/usr/lib/libtranscoder.so.0.0 /usr/lib/libtranscoder.so.0.0
fi
[ ! -f /home/httpd/ajax_obj/js/qnapui.js_bak ] || /bin/cp /home/httpd/ajax_obj/js/qnapui.js_bak /home/httpd/ajax_obj/js/qnapui.js
[ ! -f /home/httpd/cgi-bin/html/login.html_bak ] || /bin/cp /home/httpd/cgi-bin/html/login.html_bak /home/httpd/cgi-bin/html/login.html
[ ! -f /home/httpd/cgi-bin/html/login_2.html_bak ] || /bin/cp /home/httpd/cgi-bin/html/login_2.html_bak /home/httpd/cgi-bin/html/login_2.html
fi
if [ -f /home/httpd/ajax_obj/js/qnapui.js ] && [ -f /home/httpd/cgi-bin/html/login.html ]; then
[ -f /home/httpd/ajax_obj/js/qnapui.js_bak ] || /bin/cp /home/httpd/ajax_obj/js/qnapui.js /home/httpd/ajax_obj/js/qnapui.js_bak
[ -f /home/httpd/cgi-bin/html/login.html_bak ] || /bin/cp /home/httpd/cgi-bin/html/login.html /home/httpd/cgi-bin/html/login.html_bak
[ -f /home/httpd/cgi-bin/html/login_2.html_bak ] || /bin/cp /home/httpd/cgi-bin/html/login_2.html /home/httpd/cgi-bin/html/login_2.html_bak
/bin/sed -i 's/\/cgi-bin\/camera_view.cgi/\/nssindex.html/g' /home/httpd/ajax_obj/js/qnapui.js 2>/dev/null
/bin/sed -i 's/\/cgi-bin\/camera_view.cgi/\/nssindex.html/g' /home/httpd/cgi-bin/html/login.html 2>/dev/null
/bin/sed -i 's/\/cgi-bin\/camera_view.cgi/\/nssindex.html/g' /home/httpd/cgi-bin/html/login_2.html 2>/dev/null
fi
check_nvr_bin
if [ $? != 0 ]; then
/sbin/setcfg NVR Enable FALSE
exit 1
fi
}
create_nvr_cfg_files()
{
if [ ! -e /etc/config/nvrd.xml ]; then
/bin/cp -a /etc/default_config/nvrd.xml /etc/config/
fi
if [ ! -e /etc/config/nvrstat.xml ]; then
/bin/cp -a /etc/default_config/nvrstat.xml /etc/config/
fi
if [ ! -e /var/.nvr_quota_info ]; then
/bin/mkdir /var/.nvr_quota_info
fi
if [ ! -f /etc/config/cact.xml ]; then
cp /etc/default_config/cact.xml /etc/config/cact.xml
fi
if [ ! -f /etc/config/nvrd2.xml ]; then
cp /etc/default_config/nvrd2.xml /etc/config/nvrd2.xml
fi
if [ ! -f /etc/config/emapinfo.xml ]; then
cp /etc/default_config/emapinfo.xml /etc/config/
if [ ! -e /etc/config/emap ]; then
mkdir /etc/config/emap
cp /etc/default_config/emap/emap.jpg /etc/config/emap/
fi
fi
evt_xml_file_list="evt act evt_act_list nvr_evt preset_tab sms_provider email_last_change cms_evt";
for f in $evt_xml_file_list; do
if [ ! -e /etc/config/$f.xml ]; then
/bin/cp /etc/default_config/$f.xml /etc/config/
if [ "$f" == "evt" ]; then
qcmd ms_evt
fi
if [ "$f" == "cms_evt" ]; then
qcmd cms_evt
fi
else
if [ "$f" == "evt" ]; then
qcmd ms_evt_upd
fi
if [ "$f" == "cms_evt" ]; then
qcmd cms_evt_upd
fi
fi
done
if [ ! -e /etc/config/evt_sch0.xml ]; then
cp /etc/default_config/evt_sch*.xml /etc/config/ ;
fi
if [ -e /etc/default_config/sys_sch.xml ]; then
cp /etc/default_config/sys_sch.xml /etc/
fi
if [ -f /usr/nvr/model.xml ]; then
max_ch=`/sbin/getcfg NVR NSS_MAX_CH_NUM -d 16 -f /etc/default_config/uLinux.conf`
/bin/grep "<max_channel_num>$max_ch</max_channel_num>" /usr/nvr/model.xml 1>/dev/null 2>/dev/null
[ $? = 0 ] || /bin/sed -i 's/^.*<max_channel_num>.*/'"<max_channel_num>$max_ch<\/max_channel_num>"'/g' /usr/nvr/model.xml
fi
}
create_nvr_links()
{
touch /home/httpd/cgi-bin/getstream.cgi
chmod +x /home/httpd/cgi-bin/getstream.cgi
touch /home/httpd/cgi-bin/ptz.cgi
chmod +x /home/httpd/cgi-bin/ptz.cgi
touch /home/httpd/cgi-bin/http_stream_start.cgi
touch /home/httpd/cgi-bin/http_stream_stop.cgi
chmod +x /home/httpd/cgi-bin/http_stream_start.cgi
chmod +x /home/httpd/cgi-bin/http_stream_stop.cgi
#Hugo add. correct link path for Marvell
[ -e /usr/bin/nvrvideo_backup2usb.sh ] || ln -s /etc/init.d/nvrvideo_backup2usb.sh /usr/bin/nvrvideo_backup2usb.sh 2>/dev/null
if [ ! -e /usr/bin/msfinder0 ]; then
ln -s /usr/bin/msfinder /usr/bin/msfinder0
fi
if [ ! -e /usr/bin/msfinder1 ]; then
ln -s /usr/bin/msfinder /usr/bin/msfinder1
fi
if [ ! -e /play ]; then
mkdir /play
fi
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
do
if [ ! -e /play/ch$i ]; then
mkdir /play/ch$i
fi
if [ ! -e /play/ch$i/record_nvr ]; then
mkdir /play/ch$i/record_nvr
fi
if [ ! -e /play/ch$i/record_nvr/channel$i ]; then
ln -s $NVR_DATA_ROOT/record_nvr/channel$i /play/ch$i/record_nvr/channel$i
fi
if [ ! -e /play/ch$i/.record_nvr_unk ]; then
mkdir /play/ch$i/.record_nvr_unk
fi
if [ ! -e /play/ch$i/.record_nvr_unk/channel$i ]; then
ln -s $NVR_DATA_ROOT/.record_nvr_unk/channel$i /play/ch$i/.record_nvr_unk/channel$i
fi
if [ ! -e /play/ch$i/record_nvr_alarm ]; then
mkdir /play/ch$i/record_nvr_alarm
fi
if [ ! -e /play/ch$i/record_nvr_alarm/channel$i ]; then
ln -s $NVR_DATA_ROOT/record_nvr_alarm/channel$i /play/ch$i/record_nvr_alarm/channel$i
fi
done
if [ -e /home/httpd/cgi-bin/record ]; then
/bin/rm /home/httpd/cgi-bin/record
fi
/bin/ln -s $NVR_DATA_ROOT /home/httpd/cgi-bin/record
if [ -e /home/httpd/record ]; then
/bin/rm /home/httpd/record
fi
# remove unused data folders
/bin/ln -s $NVR_DATA_ROOT /home/httpd/record
if [ -e $NVR_DATA_ROOT/record_nvr_tmp ]; then
/bin/rm -rf $NVR_DATA_ROOT/record_nvr_tmp
fi
if [ -e $NVR_DATA_ROOT/record_nvr_unk ]; then
/bin/rm -rf $NVR_DATA_ROOT/record_nvr_unk
fi
if [ -e $NVR_DATA_ROOT/record_nvr_pre ]; then
/bin/rm -rf $NVR_DATA_ROOT/record_nvr_pre
fi
}
remove_nvr_links()
{
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
do
rm /play/ch$i/record_nvr/channel$i
rm /play/ch$i/record_nvr_alarm/channel$i
rm /play/ch$i/.record_nvr_unk/channel$i
done
}
ROOT_PART="/mnt/HDA_ROOT"
HIDDEN_LOG_DIR="${ROOT_PART}/.logs"
HIDDEN_CONF_FILE=/mnt/HDA_ROOT/.conf
TS_LOG_DIR=/etc/logs
create_nvr_log_database()
{
if [ -f $HIDDEN_CONF_FILE ] && [ -d $HIDDEN_LOG_DIR ]; then
if [ -e $TS_LOG_DIR ] && [ ! -f $TS_LOG_DIR/nvrlog.log ]; then
/sbin/nvr_log_tool -v -c
/sbin/nvr_log_tool -v -b 10000
fi
else
echo log hidden config directory not exist, initial 10K surv log file... [OK]
if [ -e $TS_LOG_DIR ] && [ ! -f $TS_LOG_DIR/nvrlog.log ]; then
/sbin/nvr_log_tool -v -c
/sbin/nvr_log_tool -v -b 50
fi
fi
}
init_nvr_svc()
{
if [ `/sbin/getcfg NVR Enable -u -d FALSE` != TRUE ]; then
return 0;
fi
if [ -e /var/.nvr_init_ok ]; then
check_nvr_bin
[ $? != 0 ] || return 0
/bin/rm -f /var/.nvr_init_ok 2>/dev/null
fi
/bin/touch /var/.nvr_init_ok
install_nvr_svc
create_nvr_cfg_files
create_nvr_links
create_nvr_log_database
/usr/bin/qcmd XMLCR
/usr/bin/sysadm init
/usr/bin/sysadm start
/usr/bin/qcmd nvrd_xml
#update cron table for NVR here...
# start http streaming here
count=30;
while [ $count -gt 0 ]; do
${WGET} -4 -N http://127.0.0.1:`/sbin/getcfg System "Web Access Port" -d 8080`/cgi-bin/http_stream_start.cgi >& /dev/null
if [ -e /home/httpd/cgi-bin/getstream.cgi ]; then
count=0
else
/bin/sleep 1
count=$(($count-1));
fi
done
return 1
}
start_nvrd()
{
check_nvr_bin
[ $? = 0 ] || exit 1
# dont't do reentry control here!, do it in nvrd
/sbin/daemon_mgr.nvr evtLogd start "/usr/bin/evtLogd"
if [ -e $NVR_DATA_ROOT/.mxpg_raw ]; then /bin/rm -rf $NVR_DATA_ROOT/.mxpg_raw/*; fi
if [ ! -e $NVR_DATA_ROOT/.mxpg_raw ]; then /bin/mkdir $NVR_DATA_ROOT/.mxpg_raw; fi
echo -n "Starting nvrd services:"
/bin/touch /var/.nvrd_alive
/sbin/daemon_mgr.nvr nvrd start "/usr/bin/nvrd 2>/dev/null"
echo -n " nvrd"
echo -n "Starting evtd services:"
/sbin/daemon_mgr.nvr evtd start "/usr/bin/evtd 2>/dev/null"
echo -n " evtd"
if [ -f /usr/bin/snapshotd ]; then
echo -n "Starting snapshotd services:"
/sbin/daemon_mgr.nvr snapshotd start "/usr/bin/snapshotd 2>/dev/null"
echo -n " snapshotd"
fi
/usr/bin/qcmd adv_user_check
echo "."
}
stop_nvrd()
{
if [ -f /usr/bin/snapshotd ]; then
echo -n "Shutting down snapshotd services:"
/sbin/daemon_mgr.nvr snapshotd stop /usr/bin/snapshotd
echo -n " snapshotd"
fi
echo -n "Shutting down evtd services:"
/sbin/daemon_mgr.nvr evtd stop /usr/bin/evtd
echo -n " evtd"
echo -n "Shutting down nvrd services:"
/sbin/daemon_mgr.nvr nvrd stop /usr/bin/nvrd
echo -n " nvrd"
/sbin/daemon_mgr.nvr evtLogd stop /usr/bin/evtLogd
echo "."
}
_start_nvr_svc()
{
if [ ! -e /var/.nvr_init_ok ]; then
return 0
fi
# remove cache
qcmd rmcache > /dev/null 2> /dev/null
start_nvrd
/etc/init.d/qplayd.sh start
/etc/init.d/cacd.sh start
# start HTTP Live Streaming here...
# start NVR-RR here...
if [ "$NVR_CLASS" == "NVR" ]; then
# Check last time RR is finished
if [ `/sbin/getcfg "ScheduleStatus" "Enable" -d False -f /etc/config/rsync_schedule.conf` = "True" ]; then
if [ `/sbin/getcfg "ScheduleStatus" "isRRFinish" -d True -f /etc/config/rsync_schedule.conf` = "False" ]; then
echo "start dataBackup that last time not finish"
/usr/bin/dataBackup &
fi
fi
fi
return 1
}
start_nvr_svc()
{
if [ ! -e /var/.nvr_init_ok ]; then
return 0
fi
APP_RUNTIME_CONF="/var/.application.conf"
NSS_Hide=`/sbin/getcfg DISABLE survielance -d 0 -f $APP_RUNTIME_CONF`
if [ "x$NSS_Hide" = "x1" ] && [ x"$NSS_ENABLED" = x"TRUE" ]; then
/sbin/setcfg NVR Enable FALSE
NSS_ENABLED="FALSE"
fi
if [ "$NVR_CLASS" != "NSS" ] || [ "$NSS_ENABLED" != "TRUE" ]; then
return 0
fi
_start_nvr_svc
}
_stop_nvr_svc()
{
if [ ! -e /var/.nvr_init_ok ]; then
return 0
fi
# stop HTTP Live Streaming here...
/etc/init.d/cacd.sh stop
/etc/init.d/qplayd.sh stop
stop_nvrd
return 1
}
stop_nvr_svc()
{
if [ "$NVR_CLASS" != "NSS" ] || [ "$NSS_ENABLED" != "TRUE" ]; then
return 0
fi
_stop_nvr_svc
}
nvr_svc_started()
{
if [ ! -e /var/.nvr_start_ok ]; then
echo 0
else
echo 1
fi
}
uninit_nvr_svc()
{
if [ ! -e /var/.nvr_init_ok ]; then
return 0
fi
/bin/rm /var/.nvr_init_ok
remove_nvr_links
file_list="/usr/bin/msfinder0 /usr/bin/msfinder1 /home/httpd/cgi-bin/ptz.cgi /home/httpd/cgi-bin/getstream.cgi";
for f in $file_list; do
if [ ! -e $f ]; then
/bin/rm $f
fi
done
/usr/bin/sysadm stop
/usr/bin/sysadm uninit
/usr/bin/qcmd XMLRM
# stop http streaming here
count=30;
while [ $count -gt 0 ]; do
${WGET} -4 -N http://127.0.0.1:`/sbin/getcfg System "Web Access Port" -d 8080`/cgi-bin/http_stream_stop.cgi >& /dev/null
if [ -e /home/httpd/cgi-bin/getstream.cgi ]; then
/bin/sleep 1
count=$(($count-1));
else
count=0
fi
done
return 1
}
# _init, _uninit, _start, _stop used by NVR
# start, stop used by NSS
case "$1" in
start)
init_nvr_svc
start_nvr_svc
;;
stop)
stop_nvr_svc
uninit_nvr_svc
;;
restart)
$0 stop
$0 start
;;
started)
nvr_svc_started
;;
_init)
init_nvr_svc
;;
_unint)
uninit_nvr_svc
;;
_start)
_start_nvr_svc
;;
_stop)
_stop_nvr_svc
;;
_restart)
$0 _stop
$0 _start
;;
*)
echo "Usage: /etc/init.d/nvr_svc {start|stop|restart}"
exit 1
esac
exit 0