149 lines
3.4 KiB
Bash
149 lines
3.4 KiB
Bash
#!/bin/bash
|
|
|
|
# Installation script for iptables redirect
|
|
|
|
RED_COLOR='\033[0;31m'
|
|
GREEN_COLOR='\033[0;32m'
|
|
GREEN_YELLOW='\033[1;33m'
|
|
NO_COLOR='\033[0m'
|
|
|
|
ST_PORT=80
|
|
|
|
LINK=""
|
|
|
|
P_HA=true
|
|
P_ST=true
|
|
|
|
declare -a HA_PATHS=(
|
|
"$PWD"
|
|
"$PWD/config"
|
|
"/config"
|
|
"/homeassistant"
|
|
"$HOME/.homeassistant"
|
|
"/usr/share/hassio/homeassistant"
|
|
)
|
|
|
|
function info() { echo -e $2 "${GREEN_COLOR}$1${NO_COLOR}"; }
|
|
function warn() { echo -e $2 "${GREEN_YELLOW}$1${NO_COLOR}"; }
|
|
function error() {
|
|
echo -e "${RED_COLOR}$1${NO_COLOR}"
|
|
if [ "$2" != "false" ]; then exit 1; fi
|
|
}
|
|
|
|
function check() {
|
|
echo -n "Checking dependencies: '$1' ... "
|
|
if [ -z "$(command -v "$1")" ]; then
|
|
error "not installed" $2
|
|
false
|
|
else
|
|
info "OK."
|
|
true
|
|
fi
|
|
}
|
|
|
|
function validate_ip() {
|
|
|
|
if [[ "$1" =~ ^(([1-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))\.){3}([1-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))$ ]]; then
|
|
true
|
|
else
|
|
false
|
|
fi
|
|
}
|
|
|
|
function validate_num() {
|
|
if [[ "$1" =~ ^[0-9]+$ ]]; then true; else false; fi
|
|
}
|
|
|
|
function validate_dest() {
|
|
echo "Validating host '$1' ... "
|
|
if ping -c 4; then
|
|
info "OK"
|
|
true
|
|
else
|
|
error "cannot reach" false
|
|
false
|
|
fi
|
|
}
|
|
|
|
function cont() {
|
|
|
|
while true; do
|
|
warn "$1"
|
|
warn "Do you want to continue? [y/N]: " -n
|
|
read -n 1 YN
|
|
YN=${YN:-N}
|
|
case $YN in
|
|
[Yy]) return 0 ;;
|
|
[Nn]) error "\nExiting." ;;
|
|
*) error "\nInvalid response.\n" false ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
echo
|
|
echo "**************************************************************"
|
|
echo "* *"
|
|
echo -e "* ${GREEN_YELLOW}Installation for iptables_redirect.sh ${NO_COLOR} *"
|
|
echo "* *"
|
|
echo "**************************************************************"
|
|
echo
|
|
|
|
check "wget"
|
|
check "sed"
|
|
check "ping" false && { PING=true; } || { PING=false; }
|
|
|
|
echo -n "Trying to find Home Assitant ... "
|
|
for PATH in "${HA_PATHS[@]}"; do
|
|
if [ -n "$HA_PATH" ]; then
|
|
break
|
|
fi
|
|
|
|
if [ -f "$PATH/.HA_VERSION" ]; then
|
|
HA_PATH="$PATH"
|
|
fi
|
|
done
|
|
|
|
#[ -z $HA_PATH ] && { error "Home Assistant not found!"; }
|
|
info "found at $HA_PATH"
|
|
|
|
while true; do
|
|
read -r -p "Your station's IP: " ST_IP
|
|
if validate_ip $ST_IP; then break; fi
|
|
warn "Provide valid IP address."
|
|
done
|
|
|
|
while true; do
|
|
read -r -p "Home Assistant's IP: " HA_IP
|
|
if validate_ip $HA_IP; then break; fi
|
|
warn "Provide valid IP address."
|
|
done
|
|
|
|
while true; do
|
|
read -r -p "Home Assistant's port [8123]: " HA_PORT
|
|
HA_PORT=${HA_PORT:-8123}
|
|
if validate_num $HA_PORT && ((HA_PORT >= 1 && HA_PORT <= 65535)); then
|
|
break
|
|
fi
|
|
warn "Provide valid port number."
|
|
done
|
|
|
|
if $PING; then
|
|
validate_dest $HA_IP || { cont "Home Assistant host is unreachable."; P_HA=false; }
|
|
validate_dest $ST_IP || { cont "Station is unreachable."; P_ST=false; }
|
|
fi
|
|
|
|
info "\nYour configuration:"
|
|
info " Home Assistant at: $HA_PATH"
|
|
info " Home Assistant server at: $HA_IP:$HA_PORT" -n
|
|
if $PING; then
|
|
if $P_HA; then info " (ping OK)"; else error " (unreachable)" false; fi
|
|
else
|
|
error " (not tested)" false
|
|
fi
|
|
info " Station at: ${ST_IP}:$ST_PORT" -n
|
|
if $PING; then
|
|
if $P_ST; then info " (ping OK)"; else error " (unreachable)" false; fi
|
|
else
|
|
error " (not tested)" false
|
|
fi
|