ownturn / init.sh
privateone's picture
Update init.sh
5230fcf verified
#!/usr/bin/env bash
set -euo pipefail
# If DNS_RECORD is set and executable is in PATH, add DNS nameserver entry
# if [ -n "$DNS_RECORD" ]; then
# # Example: add nameserver to /etc/resolv.conf if permission allows
# if echo "nameserver $DNS_RECORD" >> /etc/resolv.conf 2>/dev/null; then
# echo "Added nameserver $DNS_RECORD to /etc/resolv.conf"
# else
# echo "Warning: No permission to modify /etc/resolv.conf. Skipping." >&2
# fi
# fi
# Forward TCP traffic on all ports (1-65535) to 127.0.0.1:8080
# for port in {1..65535}; do
# socat TCP4-LISTEN:$port,fork TCP4:127.0.0.1:8080 &
# done
# # Forward UDP traffic on all ports (1-65535) to 127.0.0.1:8080
# for port in {1..65535}; do
# socat UDP4-RECVFROM:$port,fork UDP4-SENDTO:127.0.0.1:8080 &
# done
# socat TCP-LISTEN:7860,fork TCP:127.0.0.1:8080 | socat TCP-LISTEN:50000,fork TCP:127.0.0.1:8080 | socat TCP-LISTEN:50002,fork TCP:127.0.0.1:8080|socat TCP-LISTEN:50004,fork TCP:127.0.0.1:8080
# Display a message indicating the forwarding is active
echo "## All TCP and UDP ports are being forwarded to 127.0.0.1:8080"
LOG_PREFIX="[playit-entrypoint]"
PLAYIT_ENV_BIN="${PLAYIT_BIN:-}" # allow override via env
CANDIDATE_PATHS=(
"/usr/bin/playit"
"/usr/local/bin/playit"
"/opt/playit/playit"
)
PLAYIT_LOG="/tmp/playit.log"
PLAYIT_URL_REGEX='https://[A-Za-z0-9./:_%-]*playit[^\s]*' # looks for URLs containing "playit"
MAX_WAIT_SECS=30
SLEEP_INTERVAL=1
echo "$LOG_PREFIX starting entrypoint..."
determine_playit_bin() {
if [ -n "$PLAYIT_ENV_BIN" ]; then
if [ -x "$PLAYIT_ENV_BIN" ]; then
echo "$PLAYIT_ENV_BIN"
return 0
else
echo "$LOG_PREFIX PLAYIT_BIN is set but not executable: $PLAYIT_ENV_BIN" >&2
return 1
fi
fi
if command -v playit >/dev/null 2>&1; then
command -v playit
return 0
fi
for p in "${CANDIDATE_PATHS[@]}"; do
if [ -x "$p" ]; then
echo "$p"
return 0
fi
done
return 1
}
# Detect Playit binary
PLAYIT_BIN_PATH=""
if PLAYIT_BIN_PATH="$(determine_playit_bin)"; then
echo "$LOG_PREFIX playit binary found: $PLAYIT_BIN_PATH"
else
echo "$LOG_PREFIX playit binary NOT found. Skipping Playit startup."
exit 1
fi
# Remove old log
rm -f "$PLAYIT_LOG" || true
touch "$PLAYIT_LOG"
chmod 600 "$PLAYIT_LOG" || true
if [ -n "$PLAYIT_SECRET" ]; then
# Start Playit agent (new syntax)
echo "$LOG_PREFIX starting playit agent..."
nohup "$PLAYIT_BIN_PATH" --secret $PLAYIT_SECRET start 2>&1 | sed "s/^/$LOG_PREFIX /" | tee "$PLAYIT_LOG" &
PLAYIT_PID=$!
echo "$LOG_PREFIX Playit agent started with PID=$PLAYIT_PID"
else
echo " Playit agent NOT started"
fi
# Get internal (local) IP
INTERNAL_IP=$(hostname -I | awk '{print $1}')
if [ -z "$INTERNAL_IP" ]; then
echo "❌ Could not determine internal IP"
exit 1
fi
# Get external (public/NAT) IP
EXTERNAL_IP=$(curl -s https://api.ipify.org)
if [ -z "$EXTERNAL_IP" ]; then
echo "❌ Could not determine external IP"
exit 1
fi
echo "✅ Internal IP: $INTERNAL_IP"
echo "✅ External IP: $EXTERNAL_IP"
# Public / realm addresses (SERVER is required)
TURN_PUBLIC_IP="${SERVER:?TURN_PUBLIC_IP must be set (realm)}"
TURN_EXTERNAL_IP="${SERVER_REGION:?EXTERNAL_IP must be set (realm)}"
# TURN user credentials (with defaults, not strictly required)
TURN_USER="${TURN_USER:=myuser}"
TURN_PASS="${TURN_PASS:=mypassword}"
# Admin user credentials (required)
ADMIN_USER="${ADMIN_USER:=admin}"
ADMIN_PASS="${ADMIN_PASS:=password}"
# Ports (with fallbacks)
WEB_ADMIN_PORT="${WEB_ADMIN_PORT:=8080}"
LISTENING_PORT="${LISTENING_PORT:=7860}"
TLS_LISTENING_PORT="${TLS_LISTENING_PORT:=5349}"
CLI_IP="${CLI_IP:-127.0.0.1}"
CLI_PORT="${CLI_PORT:-5766}"
# Optional / additional variables (with defaults)
USERDB_PATH="${USERDB_PATH:=/tmp/turnuserdb.sqlite3}"
# Print configuration
echo "===== Final TURN / Web‑Admin Configuration ====="
echo "TURN_PUBLIC_IP = $TURN_PUBLIC_IP"
echo "EXTERNAL_IP = $TURN_EXTERNAL_IP"
echo "TURN_USER = $TURN_USER"
echo "WEB_ADMIN_PORT = $WEB_ADMIN_PORT"
echo "LISTENING_PORT = $LISTENING_PORT"
echo "TLS_LISTENING_PORT= $TLS_LISTENING_PORT"
echo "CLI_IP = $CLI_IP"
echo "CLI_PORT = $CLI_PORT"
echo "USERDB_PATH = $USERDB_PATH"
echo "================================================="
echo "** All Routing Rules"
netstat -tuln
# (Optional) Create admin user via turnadmin
if command -v turnadmin >/dev/null 2>&1; then
turnadmin -A -u "$ADMIN_USER" -p "$ADMIN_PASS" || true
else
echo "WARN: turnadmin not found; you must manually create admin_user"
fi
# Exec turnserver with web-admin enabled
exec turnserver \
# -c /etc/coturn/turnserver.conf \
# --listening-ip=0.0.0.0 \
# --relay-ip=127.0.0.1 \
--listening-port="$LISTENING_PORT" \
--tls-listening-port="$TLS_LISTENING_PORT" \
--external-ip="${TURN_PUBLIC_IP}" \
--user="${TURN_USER}:${TURN_PASS}" \
# --realm="$TURN_PUBLIC_IP" \
--log-file=stdout \
--simple-log \
--Verbose \
--no-cli &
TURN_PID=$!
# TURN_PUBLIC_IP="${SERVER}"
# TURN_PUBLIC_ADDR="${SERVER_REGION}"
# echo "IP RANGE: $TURN_PUBLIC_ADDR PUBLIC_IP : $TURN_PUBLIC_IP"
# echo "Starting turnserver..."
# exec turnserver \
# # --listening-ip=127.0.0.1 \
# --listening-port=7860 \
# --tls-listening-port=5349 \
# --external-ip="$TURN_PUBLIC_ADDR" \
# --user=myuser:mypassword \
# --realm="$TURN_PUBLIC_IP" \
# --log-file=stdout \
# --simple-log \
# --verbose \
# --no-cli &
# TURN_PID=$!
# Exec main process (turnserver or provided CMD)
# if [ "$#" -gt 0 ]; then
# echo "$LOG_PREFIX executing provided CMD: $*"
# exec "$@"
# else
# echo "$LOG_PREFIX no CMD specified, launching default turnserver..."
# exec turnserver -c /etc/coturn/turnserver.conf --listening-port=7860 \
# --tls-listening-port=5349 --user=myuser:mypassword \
# --log-file=stdout \
# --simple-log \
# --no-cli &
# TURN_PID=$!
# fi