#!/usr/bin/env bash # MediaManager Scripts action="$1" source /opt/idssys/defaults/colors.inc source /opt/idssys/defaults/default.inc source /opt/idssys/settings/mediamanager.conf source /opt/idssys/mediamanager/defaults.inc if [ "${action}" != "check" ] && [ "${action}" != "update" ]; then echo "" echo -e "${idsCL[LightGreen]} MediaManager ${idsCL[Default]} ${idsCL[DarkGray]}(ver-${VERS})${idsCL[Default]}" DIVIDER . lightGreen fi logfile=/opt/idssys/mediamanager/logfile touch $logfile IFS=, SERVICES_CHECK=(${SERVICESCHECK}) unset IFS MMSTART(){ if [ "${1}" = "start" ]; then mmsv='Starting' echo echo -en "${idsCL[LightCyan]}Starting the VPN Tunnel ... ${idsCL[Default]}" "${VPN_START[@]}" sleep 3s else mmsv='Verifying' fi checked=false cc=0 until [ "${checked}" = "" ]; do OUT=$(ip link | grep "$VPN_INTERFACE") #OUT=`ip a show $VPN_INTERFACE up` >/dev/null 2>&1 if [ ${#OUT} -ne 0 ]; then checked="" elif [ "${1}" = "check" ] && [ ${cc} -eq 0 ]; then touch /opt/mm.vpn.fail echo "$(date) - VPN Failure on 1st check" >> $logfile MMSTOP sleep 1m "${VPN_START[@]}" rm -f /opt/mm.stop exit 1 fi if [ "${checked}" == "false" ] && [ ${cc} -eq 10 ]; then if [ -f /opt/mm.vpn.fail ]; then echo "$(date) - VPN Failure #2" >> $logfile touch /opt/mm.vpn.fail2 rm -f /opt/mm.vpn.fail MMSTOP sleep 5m "${VPN_START[@]}" rm -f /opt/mm.stop exit 1 elif [ -f /opt/mm.vpn.fail2 ]; then echo "$(date) - VPN Failure #3 - Shutting down Media Management systems" >> $logfile MMSTOP exit 1 else echo "$(date) - VPN Failure #1" >> $logfile touch /opt/mm.vpn.fail MMSTOP sleep 1m "${VPN_START[@]}" rm -f /opt/mm.stop exit 1 fi fi ((cc=${cc}+1)) sleep 1s done OUT=$(ip link | grep "$VPN_INTERFACE") #OUT=`ip a show $VPN_INTERFACE up` >/dev/null 2>&1 if [ ${#OUT} -ne 0 ]; then if [ "$(ip route show | grep 0.0.0.0 | cut -d' ' -f 3)" != "$(ip route show | grep default | cut -d' ' -f 3)" ]; then /bin/ip route del default via 10.10.0.1 /bin/ip route add default via $(ip route show | grep 0.0.0.0 | cut -d' ' -f 3) fi echo -e "${idsCL[Green]} done${idsCL[Default]}" echo -en "${idsCL[LightCyan]}Verifing default network routes... ${idsCL[Default]}" checked=false cc=0 until [ "${checked}" = "" ]; do zerogw=$(ip route show | grep 0.0.0.0 | cut -d' ' -f 3) defaultgw=$(ip route show | grep default | cut -d' ' -f 3) if [ "${zerogw}" = "${defaultgw}" ]; then checked="" fi if [ "${checked}" == "false" ] && [ ${cc} -eq 10 ]; then echo -e "${idsCL[Red]}Could not confirm default routes, shutting down!${idsCL[Default]}" echo "$(date) - Could not confirm default routes, shutting down" >> $logfile MMSTOP exit 1 fi ((cc=${cc}+1)) sleep 1s done echo -e "${idsCL[Green]} done${idsCL[Default]}" echo -en "${idsCL[LightCyan]}Verifing traffic is routing through VPN... ${idsCL[Default]}" scip=$(dig +short sc1.scity.us @ns1.scity.us) mmip=$(dig +short myip.opendns.com @resolver1.opendns.com) if [ "${scip}" != "${mmip}" ]; then echo -e "${idsCL[Green]} done${idsCL[Default]}" else echo -e "${idsCL[Red]}Traffic is not routing through VPN!${idsCL[Default]}" echo "$(date) - Traffic is not routing through VPN, shutting down" >> $logfile MMSTOP exit 1 fi echo echo -en "${idsCL[LightCyan]}${mmsv} Services... ${idsCL[Default]}" for srvc in "${SERVICES_CHECK[@]}"; do /bin/systemctl start ${srvc} done echo -e "${idsCL[Green]} done${idsCL[Default]}" echo if [ "${1}" == "start" ]; then echo -e "${idsCL[LightCyan]}It may take a couple of minutes before all systems fully start${idsCL[Default]}" echo fi if [ "${1}" == "start" ] || [ -f /opt/mm.vpn.fail* ]; then echo "$(date) - Media Management systems started" >> $logfile fi rm -f /opt/mm.stop rm -f /opt/mm.vpn.fail* echo echo -e "${idsCL[Green]}All services have been started${idsCL[Default]}" else echo -e "${idsCL[Red]} failed${idsCL[Default]}" echo echo -e "${idsCL[Red]}Could not start the VPN, fix your shit...${idsCL[Default]}" echo "$(date) - Could not start the VPN, fix your shit..." >> $logfile fi echo } MMSTOP(){ if [ -f /opt/mm.stop ]; then echo -e "${idsCL[Yellow]}The system is already stopped, will verify anyway...${idsCL[Default]}" else echo -e "${idsCL[Green]}Stopping System...${idsCL[Default]}" echo fi echo touch /opt/mm.stop echo -en "${idsCL[LightCyan]}Stopping Services... ${idsCL[Default]}" for srvc in "${SERVICES_CHECK[@]}"; do /bin/systemctl stop ${srvc} & done checked=false until [ "${checked}" = "" ]; do if ! lsof -Pi :5000 -sTCP:LISTEN -t >/dev/null; then #ombi if ! lsof -Pi :5555 -sTCP:LISTEN -t >/dev/null; then #radarr if ! lsof -Pi :5556 -sTCP:LISTEN -t >/dev/null; then #radarr3d if ! lsof -Pi :5656 -sTCP:LISTEN -t >/dev/null; then #sonarr if ! lsof -Pi :5858 -sTCP:LISTEN -t >/dev/null; then #qbittorrent if ! lsof -Pi :8181 -sTCP:LISTEN -t >/dev/null; then #tautulli if ! lsof -Pi :8686 -sTCP:LISTEN -t >/dev/null; then #lidarr if ! lsof -Pi :9117 -sTCP:LISTEN -t >/dev/null; then #jackett checked="" fi #/jackett fi #/lidarr fi #/tautulli fi #/qbittorrent fi #/sonarr fi #/radarr3d fi #/radarr fi #/ombi done echo -e "${idsCL[Green]} done${idsCL[Default]}" echo echo -en "${idsCL[LightCyan]}Stopping VPN Tunnel... ${idsCL[Default]}" "${VPN_STOP[@]}" checked=false until [ "${checked}" = "" ]; do OUT=$(ip link | grep "$VPN_INTERFACE") #OUT=`ip a show $VPN_INTERFACE up` >/dev/null 2>&1 if [ ${#OUT} = 0 ]; then checked="" fi done echo "$(date) - Media Management systems stopped" >> $logfile /bin/ip route add default via 10.10.0.1 echo -e "${idsCL[Green]} done${idsCL[Default]}" echo echo -e "${idsCL[Red]}All services have been stopped${idsCL[Default]}" echo } MMSTATUS(){ # if [[ ${MMSRV} == *"10.10.1.24"* ]]; then # statusArray=("nordvpn") # else # statusArray=("openvpn") # fi #statusArray=(nordvpn openvpn) statusArray=(openvpn) statusArray+=(${SERVICES_CHECK[@]}) echo for srvc in "${statusArray[@]}"; do c=0; cw=36 spc='' spc1=$((${cw}-${#NM_SERVICES[${srvc}]})) until [ $c = ${spc1} ]; do spc="${spc} "; c=`expr $c + 1`; done echo -en " ${NM_SERVICES[${srvc}]}$spc: " # if [[ ${MMSRV} == *"10.10.1.24"* ]] && [ "${srvc}" = "nordvpn" ]; then if [ "${srvc}" = "nordvpn" ]; then if [[ "$(nordvpn status)" == *"Status: Disconnected"* ]]; then echo -e "${idsCL[Red]}Not Running${idsCL[Default]}" else echo -e "${idsCL[Green]}Running${idsCL[Default]}" DIVIDER . lightBlue nordvpn status DIVIDER . lightBlue echo "" fi else if [ "$(systemctl is-active ${srvc})" != "active" ]; then echo -e "${idsCL[Red]}Not Running${idsCL[Default]}" else echo -e "${idsCL[Green]}Running${idsCL[Default]}" if [[ ${srvc} == *"vpn"* ]]; then zerogw=$(netstat -r | grep '0.0.0.0' | head -1 | awk '{ print $2}') defaultgw=$(netstat -r | grep 'default' | head -1 | awk '{ print $2}') echo -e " |- 0.0.0.0 gateway --> (${zerogw})" echo -en " |- DEFAULT gateway --> (${defaultgw}) : " if [ "${zerogw}" = "${defaultgw}" ]; then echo -e "${idsCL[Green]}Matches 0.0.0.0 route${idsCL[Default]}" else echo -e "${idsCL[Red]}Does not match 0.0.0.0 route${idsCL[Default]}" fi echo -en " |- Verify traffic route to VPN -> : " scip=$(dig +short sc1.scity.us @ns1.scity.us) mmip=$(dig +short myip.opendns.com @resolver1.opendns.com) if [ "${scip}" != "${mmip}" ]; then echo -e "${idsCL[Green]}Good${idsCL[Default]}" else echo -e "${idsCL[Red]}Not Good${idsCL[Default]}" fi echo fi fi fi done echo echo } if [ ! -f /opt/mm.update.stop ]; then case $action in start | check) if [ -f /opt/mm.stop ] && [ "${action}" = "check" ]; then echo -e "${idsCL[Yellow]}The system is currently stopped ${idsCL[LightCyan]}(You must run \"mm start\" to start services again)${idsCL[Default]}" echo exit 1 fi touch /opt/mm.stop MMSTART ${action};; stop) MMSTOP;; restart) if [ -f /opt/mm.stop ]; then echo -e "${idsCL[Yellow]}The system is currently stopped ${idsCL[LightCyan]}(You must run \"mm start\" to start services again)${idsCL[Default]}" echo exit 1 fi MMSTOP sleep 10s MMSTART start;; status) if [ -f /opt/mm.stop ]; then echo -e "${idsCL[Yellow]}The system is currently stopped ${idsCL[LightCyan]}(You must run \"mm start\" to start services again)${idsCL[Default]}" echo fi MMSTATUS;; update);; *) echo -e "Usage: ${idsCL[LightCyan]}mm${idsCL[Default]} {" echo -e " ${idsCL[Yellow]}start${idsCL[Default]} --> Start services" echo -e " ${idsCL[Yellow]}stop${idsCL[Default]} --> Stop services" echo -e " ${idsCL[Yellow]}restart${idsCL[Default]} --> Restart services" echo -e " ${idsCL[Yellow]}check${idsCL[Default]} --> Check for VPN and start services if needed" echo -e " ${idsCL[Yellow]}status${idsCL[Default]} --> Check service status" echo -e "}" echo "" echo "" exit 0;; esac else echo -e "${idsCL[Yellow]}Part of the system is currently updating, please try again shortly.\nUpdates usually only take 1-3mins.${idsCL[Default]}" echo fi exit 0