File: //var/packages/ProxyServer/scripts/start-stop-status
#!/bin/sh
# customized items of package
PACKAGE_NAME=$SYNOPKG_PKGNAME
DSM_VERSION_NUMBER=$SYNOPKG_DSM_VERSION_BUILD
DSM_VERSION_MAJOR=$SYNOPKG_DSM_VERSION_MAJOR
PKG_STATUS=$SYNOPKG_PKG_STATUS
PRIVATE_LOCATION="/var/packages/ProxyServer/target"
PROXY_TOOL_PATH="${PRIVATE_LOCATION}/tools"
SQUID_PID=$PRIVATE_LOCATION"/squid/var/run/squid.pid"
# general routines
PACKAGE_ENABLED="/var/packages/${PACKAGE_NAME}/enabled"
BinDir="/var/packages/ProxyServer/target/bin"
cache_directory_ready()
{
local CACHE_DIR="$1"
local CACHE_VOLUME="`/usr/bin/readlink -f ${CACHE_DIR} | /usr/bin/cut -d '/' -f2`"
[ -z "${CACHE_DIR}" ] || [ -z "${CACHE_VOLUME}" ] && return 1
[ -e "${CACHE_DIR}" ] && [ ! -d "${CACHE_DIR}" ] && return 1
# check cache directory is on volume
[ "`/usr/bin/awk '{print $2}' /proc/mounts | /usr/bin/grep "^/${CACHE_VOLUME}$" | /usr/bin/wc -l`" = "0" ] && return 1
[ -d "${CACHE_DIR}" ] && return 0
/bin/mkdir -p "${CACHE_DIR}" \
&& /bin/chown -R "nobody:nobody" "${CACHE_DIR}" \
&& /bin/chmod -R 755 "${CACHE_DIR}"
# check any fail
[ "$?" != "0" ] && return 1
return 0
}
check_cache_directory()
{
local CACHE_CONF="${PRIVATE_LOCATION}/squid/etc/cache_setting_syno.conf"
local SYNO_CONF="${PRIVATE_LOCATION}/squid/etc/squid.syno"
local JSON_CONF="${PRIVATE_LOCATION}/squid/etc/setting_syno.json"
local DEFAULT_VOLUME="`/usr/bin/readlink -f ${PRIVATE_LOCATION} | /usr/bin/cut -d '/' -f2`"
# check current setting
[ ! -f "${CACHE_CONF}" ] && return 1
local CACHE_DIR="`/usr/bin/awk 'match($0, /cache_dir ufs (.*?) [0-9]* [0-9]* [0-9]*/, m) {print m[1]}' "${CACHE_CONF}"`"
cache_directory_ready "${CACHE_DIR}"
[ "$?" = "0" ] && return 0
# recover to default volume
local CACHE_DIR="/${DEFAULT_VOLUME}/@squid"
cache_directory_ready "${CACHE_DIR}"
if [ "$?" = "0" ]; then
# overwrite setting
/usr/bin/sed -i "s/cache_dir ufs .* \([0-9]* [0-9]* [0-9]*\)/cache_dir ufs ${CACHE_DIR//\//\\/} \1/g" "${CACHE_CONF}"
/usr/bin/sed -i "s/\"cache_dir_path\".*:.*\".*\"/\"cache_dir_path\" : \"${CACHE_DIR//\//\\/}\"/g" "${JSON_CONF}"
echo "cachedir_path=${CACHE_DIR}" > "${SYNO_CONF}"
return 0
fi
return 1
}
start_package()
{
if synowireless --get-bridge-list | grep nat | grep true > /dev/null; then
if synowireless --get-bridge-list | grep status | grep enable > /dev/null; then
${PROXY_TOOL_PATH}/synoproxy_restore_transparent.sh
fi
else
${PROXY_TOOL_PATH}/synoproxy_remove_transparent.sh
fi
if [ 1 -eq `grep wpad_enable ${PRIVATE_LOCATION}/squid/etc/setting_syno.json | grep true -c` ]; then
WPAD_IFNAME=`cat ${PRIVATE_LOCATION}/squid/etc/setting_syno.json | grep wpad_interface | cut -d":" -f2 | tr -d ' ",'`
WPAD_IP_ADDR=`ip addr | grep $WPAD_IFNAME | grep inet | awk -F" " '{print $2}' | cut -d"/" -f1`
${PROXY_TOOL_PATH}/synoproxywpad.sh --install $WPAD_IP_ADDR
fi
#kill squid if pid exist
if [ -f ${SQUID_PID} ]; then
killall squid
fi
chown -R nobody:nobody ${PRIVATE_LOCATION}/squid/var/logs
# check before squid -z
check_cache_directory
[ "$?" != "0" ] && exit 1
${BinDir}/squid -z
# waiting refresh swap directories
local CACHE_REBUILD_RETRY="30"
while [ "0" -lt "`/usr/bin/ps -ef | /usr/bin/grep -v grep | /usr/bin/grep "squid.*-z" | /usr/bin/wc -l`" ]; do
if [ "0" -gt "$CACHE_REBUILD_RETRY" ]; then
# Rebuild cache timeout, continue...
break
fi
sleep 1
CACHE_REBUILD_RETRY="$(($CACHE_REBUILD_RETRY - 1))"
done
/sbin/initctl start pkg-ProxyServer
if [ 0 -ne $? ]; then
/bin/echo "Proxy Server start failed" > ${SYNOPKG_TEMP_LOGFILE}
fi
}
stop_package()
{
/sbin/initctl stop pkg-ProxyServer
local COUNT=10
while [ "0" -lt "`/usr/bin/ps -ef | /usr/bin/grep -v grep | /usr/bin/grep -c squid`" ]; do
if [ "0" -gt "$COUNT" ]; then
break
fi
sleep 1
COUNT=$(($COUNT-1))
done
#remove transparent settings
${PROXY_TOOL_PATH}/synoproxy_remove_transparent.sh
#remove wpad
if [ 1 -eq `grep wpad_enable /var/packages/ProxyServer/target/squid/etc/setting_syno.json | grep true -c` ]; then
${PROXY_TOOL_PATH}/synoproxywpad.sh --uninstall
fi
}
case $1 in
start)
start_package
exit 0
;;
stop)
stop_package
exit 0
;;
status)
COUNT_SQUID=`ps -aux | grep -c squid`
if [ -f ${SQUID_PID} ] || [ 1 -lt ${COUNT_SQUID} ]; then
exit 0
else
exit 1
fi
;;
killall)
;;
log)
exit 0
;;
esac