#!/bin/sh AVAHI_SRC=/mnt/ext/opt/avahi0630 DBUS_DAEMON=/usr/sbin/dbus-daemon AVAHI_DAEMON=/usr/sbin/avahi-daemon AVAHI_CONF_DIR=/etc/avahi/services AVAHI_TM_CONF_FILE=${AVAHI_CONF_DIR}/timemachine.service MYCLOUDNAS_CONF="/etc/config/qnapddns.conf" Project_Name=`/sbin/getcfg Project Name -f /var/default` /sbin/test -f ${AVAHI_DAEMON} || exit 0 set_avahi_conf() { /bin/rm -rf ${AVAHI_CONF_DIR}/web.service \ ${AVAHI_CONF_DIR}/samba.service \ ${AVAHI_CONF_DIR}/afp.service \ ${AVAHI_CONF_DIR}/ssh.service \ ${AVAHI_CONF_DIR}/sftp-ssh.service \ ${AVAHI_CONF_DIR}/https.service \ ${AVAHI_CONF_DIR}/upnp.service \ ${AVAHI_CONF_DIR}/itunes.service \ ${AVAHI_CONF_DIR}/printer.service \ ${AVAHI_CONF_DIR}/qmobile.service \ ${AVAHI_CONF_DIR}/qdiscover.service \ ${AVAHI_CONF_DIR}/csco.service \ ${AVAHI_CONF_DIR}/ftp.service >&/dev/null MAC_ADDR=`/sbin/getcfg "MAC" "eth0" -f "/var/MacAddress" | /bin/tr '[a-z]' '[A-Z]'` WEB_PORT=`/sbin/getcfg System "Web Access Port" -d 8080` HTTPS_PORT=`/sbin/getcfg "Stunnel" "Port" -d "443"` HOSTNAME=`/sbin/getcfg System "Server Name"` MYCLOUDNAS_NAME=`/sbin/getcfg "QNAP DDNS Service" "Host Name" -f "${MYCLOUDNAS_CONF}"` MYCLOUDNAS_DN=`/sbin/getcfg "QNAP DDNS Service" "Domain Name Server" -f "${MYCLOUDNAS_CONF}"` FW_VER=`/sbin/getcfg "System" "Version" -d --` FW_BN=`/sbin/getcfg System "Build Number" -d --` SN=`/sbin/get_hwsn` DISPLAY_MODEL=`/sbin/get_display_name` MODEL=`/sbin/getcfg "System" "Model" -d NAS` if [ "x$HOSTNAME" = "x" ]; then /sbin/gen_hostname /bin/sync HOSTNAME=`/sbin/getcfg System "Server Name"` fi if [ `/sbin/getcfg "Bonjour Service" Web -u -d 1` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" "Web Service Name" -d "$HOSTNAME"` /bin/cat > ${AVAHI_CONF_DIR}/web.service <<__EOF__ $BROWSENAME _http._tcp ${WEB_PORT} path=/ __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" SAMBA -u -d 1` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" "SAMBA Service Name" -d "$HOSTNAME(SMB)"` /bin/cat > ${AVAHI_CONF_DIR}/samba.service <<__EOF__ $BROWSENAME _smb._tcp 445 __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" AFP -u -d 0` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" "AFP Service Name" -d "$HOSTNAME(AFP)"` /bin/cat > ${AVAHI_CONF_DIR}/afp.service <<__EOF__ $BROWSENAME _afpovertcp._tcp 548 _device-info._tcp 0 model=Mac __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" SSH -u -d 0` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" "SSH Service Name"` SSH_PORT=`/sbin/getcfg LOGIN "SSH Port"` /bin/cat > ${AVAHI_CONF_DIR}/ssh.service <<__EOF__ $BROWSENAME _ssh._tcp ${SSH_PORT} __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" FTP -u -d 0` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" "FTP Service Name"` FTP_PORT=`/sbin/getcfg FTP Port` /bin/cat > ${AVAHI_CONF_DIR}/ftp.service <<__EOF__ $BROWSENAME _ftp._tcp ${FTP_PORT} model=path=/ __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" HTTPS -u -d 0` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" "HTTPS Service Name"` /bin/cat > ${AVAHI_CONF_DIR}/https.service <<__EOF__ $BROWSENAME _https._tcp ${HTTPS_PORT} model=path=/ __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" UPNP -u -d 0` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" "UPNP Service Name" -d "$HOSTNAME(DLNA)"` UPNP_PORT=`/sbin/getcfg "TwonkyMedia" "Port" -d 9000` /bin/cat > ${AVAHI_CONF_DIR}/upnp.service <<__EOF__ $BROWSENAME _upnp._tcp ${UPNP_PORT} __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" "QMobile" -u -d 1` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" "QMobile Service Name" -d "$HOSTNAME(Apps)"` QMOBILE_PORT=`/sbin/getcfg "QMobile" "Port" -d 3986` /bin/cat > ${AVAHI_CONF_DIR}/qmobile.service <<__EOF__ $BROWSENAME _qmobile._tcp ${QMOBILE_PORT} __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" QNAP -u -d 1` = 1 ]; then BROWSENAME=`/sbin/getcfg "Bonjour Service" QNAP -d "$HOSTNAME"` atype="http"; aport=${WEB_PORT}; if [ `/sbin/getcfg "Stunnel" "Enable" -u -d 1` = 1 -a `/sbin/getcfg "System" "Force SSL" -u -d 0` = 1 ]; then atype="https" aport=${HTTPS_PORT} fi qTXT="accessType=${atype},accessPort=${aport},model=${MODEL},displayModel=${DISPLAY_MODEL},fwVer=${FW_VER},fwBuildNum=${FW_BN}" if [ x != x"$SN" ]; then qTXT="${qTXT},serialNum=${SN}" fi if [ x != x"$MYCLOUDNAS_NAME" -a x != x"$MYCLOUDNAS_DN" ]; then qTXT="${qTXT},myCloudNASName=${MYCLOUDNAS_NAME},myCloudNASDomain=${MYCLOUDNAS_DN}" fi /bin/cat > ${AVAHI_CONF_DIR}/qdiscover.service <<__EOF__ $BROWSENAME _qdiscover._tcp ${WEB_PORT} $qTXT __EOF__ fi if [ `/sbin/getcfg iTune Enable -u -d FALSE` = TRUE ]; then _iTunes_ID=`/sbin/get_hwsn` if [ $? != 0 ]; then _iTunes_ID=`/sbin/uuidgen | /bin/cut -c 1-8` fi if [ "x`/sbin/getcfg iTune "Password Enabled" -u -d 0`" = "x1" ]; then export _Passowrd=true else export _Passowrd=false fi /bin/cat > ${AVAHI_CONF_DIR}/itunes.service <<__EOF__ $HOSTNAME(iTunes) _daap._tcp 3689 txtvers=1 Machine Name=$HOSTNAME(iTunes) Database ID=${_iTunes_ID} iTSh Version=131073 Version=196610 Passowrd=${_Passowrd} __EOF__ fi if [ `/sbin/getcfg "Bonjour Service" CSCO -u -d 0` = 1 ]; then service_name=`/sbin/getcfg "Bonjour Service" "Web Service Name" -d $HOSTNAME`"(csco-sb)" /sbin/setcfg "Bonjour Service" "CSCO Service Name" $service_name model_name=`/sbin/getcfg "System" "Model"` devicedescr=`/bin/echo "$model_name" | /bin/tr -d '[a-z][A-Z]'` [ ${model_name} = "NSS324R" ] && devicedescr="324R" fmVersion=`/sbin/getcfg "System" "Version"` hdVersion=`/sbin/get_hwver` [ ${model_name} = "NSS324R" ] && hdVersion="1.0" vid=`/bin/echo "${hdVersion} 10" | awk '{ printf("%g", $1 * $2);}'` vid=$(($vid - 10 + 1 )) if [ ${vid} -lt 10 ]; then vid="0$vid" fi MACAddress=`/sbin/getcfg "MAC" "eth0" -f "/var/MacAddress" | /bin/tr '[a-z]' '[A-Z]' | /bin/tr -d ':'` serialNo=`/sbin/get_hwsn` hostname=`/bin/hostname` mdf_id="" if [ ${model_name} = "NSS322" ]; then mdf_id="282984440" elif [ ${model_name} = "NSS324" ]; then mdf_id="282984441" elif [ ${model_name} = "NSS326" ]; then mdf_id="282984448" elif [ ${model_name} = "NSS324R" ]; then mdf_id="282984441" fi accesstype="noaccess"; if [ `/sbin/getcfg "Stunnel" "Enable" -u -d 1` = 1 ]; then if [ "x$accesstype" = "xnoaccess" ]; then accesstype="https" else accesstype="$accesstype, https" fi fi if [ `/sbin/getcfg "System" "Force SSL" -u -d 0` = 0 ]; then if [ "x$accesstype" = "xnoaccess" ]; then accesstype="http" else accesstype="$accesstype, http" fi else if [ "x$accesstype" = "xnoaccess" ]; then accesstype="http" fi fi if [ `/sbin/getcfg "LOGIN" "SSH Enable" -u -d TRUE` = TRUE ]; then if [ "x$accesstype" = "xnoaccess" ]; then accesstype="ssh" else accesstype="$accesstype, ssh" fi fi if [ `/sbin/getcfg "LOGIN" "TELNET Enable" -u -d FALSE` = TRUE ]; then if [ "x$accesstype" = "xnoaccess" ]; then accesstype="telnet" else accesstype="$accesstype, telnet" fi fi /bin/cat > ${AVAHI_CONF_DIR}/csco.service <<__EOF__ %h(csco) _csco-sb._tcp ${WEB_PORT} version=1.0 model=${model_name} deviceType=NAS deviceDescr=Cisco NSS ${devicedescr} Smart Storage fmVersion=$fmVersion PIDVID=${model_name} V${vid} MACAddress=${MACAddress} serialNo=${serialNo} hostname=${hostname} MDFID=${mdf_id} accessType=${accesstype} __EOF__ fi for i in 1 2 3 4 5 6 7; do [ $i -eq 1 ] && i="" if [ `/sbin/getcfg "Bonjour Service" "PRINTER$i" -u -d 0` = 1 ]; then local phy_exist=`/sbin/getcfg "Printers" "Phy exist$i"` [ "x$phy_exist" = "x" ] || [ $phy_exist -eq 0 ] && continue local status=`/sbin/getcfg "Printers" "Status$i"` [ $status -eq 4 ] && continue local service_name=`/sbin/getcfg "Bonjour Service" "PRINTER Service Name$i"` local printer_port=`/bin/cat /etc/config/cups/cupsd.conf|/bin/grep "Listen"|/bin/cut -d':' -f 2|/usr/bin/head -n 1` local printer_name=`/sbin/getcfg "Printers" "Name$i"` local manufacture=`/sbin/getcfg "Printers" "Manufacture$i"` local model=`/sbin/getcfg "Printers" "Model$i"` /bin/cat > ${AVAHI_CONF_DIR}/printer.service <<__EOF__ %h(Airprint) _ipp._tcp _universal._sub._ipp._tcp $printer_port txtvers=1 qtotal=1 priority=0 rp=printers/$printer_name ty=$manufacture $model note=$manufacture $model product=(GPL Ghostscript) pdl=application/pdf,application/postscript,application/vnd.cups-raster,application/octet-stream,image/png URF=none __EOF__ fi done } dbus_start() { if [ -L /var/run/dbus ] || [ -d ${AVAHI_SRC}/var/run/dbus ]; then /bin/rm -rf /var/run/dbus /bin/rm -rf ${AVAHI_SRC}/var/run/dbus fi DBUS_PID=`/bin/ps | /bin/grep dbus | /bin/grep -v grep | /bin/awk '{print $1}'` if [ ! -z "$DBUS_PID" ]; then /bin/echo "Dbus is still running ... restart dbus ..." kill -9 $DBUS_PID fi /bin/mkdir -p ${AVAHI_SRC}/var/run/dbus /bin/ln -sf ${AVAHI_SRC}/var/run/dbus /var/run/dbus /bin/echo -n "Starting Dbus ... " ${DBUS_DAEMON} --system /bin/sleep 1 /bin/kill -HUP `/bin/cat /var/run/dbus/pid` /bin/sleep 1 /bin/echo "Dbus Started" } dbus_stop() { DBUS_PID=`/bin/ps | /bin/grep dbus | /bin/grep -v grep | /bin/awk '{print $1}'` if [ -z "$DBUS_PID" ]; then /bin/echo "Dbus is not running ..." else /bin/echo -n "Stopping Dbus ... " /bin/kill -9 $DBUS_PID /bin/sleep 1 /bin/echo "Stopped." fi /bin/rm -rf /var/run/dbus /bin/rm -rf $AVAHI_SRC/var/run/dbus } PUBLIC_SHARE=`/sbin/getcfg SHARE_DEF defPublic -d Public -f /etc/config/def_share.info` #Determine BASE installation location according to smb.conf BASE= publicdir=`/sbin/getcfg $PUBLIC_SHARE path -f /etc/config/smb.conf` if [ ! -z $publicdir ] && [ -d $publicdir ];then publicdirp1=`/bin/echo $publicdir | /bin/cut -d "/" -f 2` publicdirp2=`/bin/echo $publicdir | /bin/cut -d "/" -f 3` publicdirp3=`/bin/echo $publicdir | /bin/cut -d "/" -f 4` if [ ! -z $publicdirp1 ] && [ ! -z $publicdirp2 ] && [ ! -z $publicdirp3 ]; then [ -d "/${publicdirp1}/${publicdirp2}/${PUBLIC_SHARE}" ] && BASE="/${publicdirp1}/${publicdirp2}" fi fi #Determine BASE installation location by checking where the Public folder is. if [ -z $BASE ]; then for datadirtest in /share/HDA_DATA /share/HDB_DATA /share/HDC_DATA /share/HDD_DATA /share/MD0_DATA; do [ -d $datadirtest/$PUBLIC_SHARE ] && BASE="/${publicdirp1}/${publicdirp2}" done fi if [ -z $BASE ] ; then echo "The Public share not found." exit 1 fi case "$1" in start) if [ -f /tmp/avahi0630.lock ]; then /bin/kill -INT `/bin/ps | /bin/grep avahi-daemon | /bin/grep -v grep | /bin/grep running | /bin/awk '{print $1}'` 2>/dev/null 1>/dev/null /bin/rm -rf /tmp/avahi0630.lock fi if [ -f /etc/config/timemachine.conf ]; then cp /etc/config/timemachine.conf /etc/config/timemachine.conf-pre_avahi fi [ -f ${AVAHI_DAEMON} ] || exit 1 #/etc/init.d/bonjour.sh stop /bin/echo "Try to shutting down AVAHI services first" /bin/kill -INT `/bin/ps | /bin/grep avahi-daemon | /bin/grep -v grep | /bin/grep running | /bin/awk '{print $1}'` 2>/dev/null 1>/dev/null /bin/rm -rf /var/run/avahi-daemon /bin/rm -rf ${AVAHI_SRC}/var/run/avahi-daemon mkdir -p ${AVAHI_SRC}/var/run/avahi-daemon ln -sf ${AVAHI_SRC}/var/run/avahi-daemon /var/run/avahi-daemon /etc/init.d/timemachine.sh stop /bin/sleep 3 # create the lock file touch /tmp/avahi0630.lock # starting Dbus dbus_start /sbin/ldconfig #starting AVAHI set_avahi_conf if [ "x"`/sbin/getcfg TimeMachine Enabled -d FALSE` = "xTRUE" ]; then /etc/init.d/timemachine.sh start fi /bin/sleep 2 #${AVAHI_DAEMON} --debug ${AVAHI_DAEMON} -D #/bin/sleep 3 #CURRENT_AVAHI_PID=`/bin/ps | /bin/grep avahi-daemon | /bin/grep -v grep | /bin/grep running | /bin/awk '{print $1}'` #if [ -z "$CURRENT_AVAHI_PID" ] ; then #/bin/echo "Error: Avahi failed to start." #/sbin/write_log "Error: Avahi failed to start." 1 #fi ;; stop) /bin/echo "Stop Avahi" if [ ! -f /tmp/avahi0630.lock ]; then /bin/echo "Avahi hasn't been enabled or started ..." exit 0 fi /bin/echo -n "Shutting down services: " /bin/kill -INT `/bin/ps | /bin/grep avahi-daemon | /bin/grep -v grep | /bin/grep running | /bin/awk '{print $1}'` 2>/dev/null 1>/dev/null /bin/rm -rf /var/run/avahi-daemon/pid /bin/rm -rf /var/run/avahi-daemon/socket /etc/init.d/timemachine.sh stop #Stopping Dbus dbus_stop /bin/sleep 1 /bin/rm -rf /etc/config/timemachine.conf-pre_avahi /bin/rm -rf /tmp/avahi0630.lock ;; restart) $0 stop $0 start ;; reload) CURRENT_AVAHI_PID=`/bin/ps | /bin/grep avahi-daemon | /bin/grep "local]" | /bin/awk '{print $1}'` if [ ! -z "$CURRENT_AVAHI_PID" ]; then if [ -f /var/lock/avahi_set_conf.lock ]; then exit 0; fi touch /var/lock/avahi_set_conf.lock set_avahi_conf /bin/kill -HUP $CURRENT_AVAHI_PID rm /var/lock/avahi_set_conf.lock fi ;; *) /bin/echo "Usage: $0 {start|stop|restart}" exit 1 esac exit 0