#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/runtime-lib.sh" TOKEN="${MYNETSPEEDER_RELAY_TCP_TOKEN:-${1:-}}" LISTEN_HOST="${MYNETSPEEDER_RELAY_TCP_HOST:-0.0.0.0}" LISTEN_PORT="${MYNETSPEEDER_RELAY_TCP_PORT:-9009}" INSTALL_DIR="${MYNETSPEEDER_INSTALL_DIR:-/opt/mynetspeeder}" INSTALL_PARENT="$(dirname "$INSTALL_DIR")" PACKAGE_NAME="$(basename "$INSTALL_DIR")" RUNTIME_USER="${MYNETSPEEDER_RELAY_TCP_USER:-mynetspeeder}" PID_FILE="/var/run/mynetspeeder-relay-tcp.pid" LOG_FILE="/var/log/mynetspeeder-relay-tcp.log" require_root if [[ -z "$TOKEN" ]]; then echo "missing tcp relay token" exit 1 fi if ! [[ "$LISTEN_PORT" =~ ^[0-9]+$ ]]; then echo "listen port must be numeric" exit 1 fi ensure_runtime_user "$RUNTIME_USER" ensure_log_file "$LOG_FILE" "$RUNTIME_USER" stop_pid_file "$PID_FILE" "relay-tcp --listen-host ${LISTEN_HOST} --listen-port ${LISTEN_PORT} --token ${TOKEN}" ARGV_JSON="$(python3 - <<'PY' "$PACKAGE_NAME" "$LISTEN_HOST" "$LISTEN_PORT" "$TOKEN" import json, sys package_name, listen_host, listen_port, token = sys.argv[1:] print(json.dumps([ "python3", "-m", package_name, "relay-tcp", "--listen-host", listen_host, "--listen-port", listen_port, "--token", token, ])) PY )" start_python_service "$RUNTIME_USER" "$INSTALL_PARENT" "$INSTALL_PARENT" "$LOG_FILE" "$PID_FILE" \ "relay-tcp --listen-host ${LISTEN_HOST} --listen-port ${LISTEN_PORT} --token ${TOKEN}" "$ARGV_JSON" >/dev/null if ! wait_for_tcp_listen "$LISTEN_HOST" "$LISTEN_PORT" 15; then tail -n 50 "$LOG_FILE" || true stop_pid_file "$PID_FILE" "relay-tcp --listen-host ${LISTEN_HOST} --listen-port ${LISTEN_PORT} --token ${TOKEN}" exit 1 fi echo "tcp relay started on ${LISTEN_HOST}:${LISTEN_PORT}"