#!/bin/sh ############################################################################### # Copyright (C) 2020 Simon Adlem, G7RZU # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ############################################################################### cd /opt/freedmr HDSTACK_COUNT="${HDSTACK:-}" HDSTACK_BRIDGE="${HDSTACK_BRIDGE:-0}" HDSTACK_OUTPUT_DIR="${HDSTACK_OUTPUT_DIR:-/dev/shm/freedmr-hdstack}" HDSTACK_BRIDGE_CONFIG="${HDSTACK_BRIDGE_CONFIG:-/opt/freedmr/freedmr-bridge.cfg}" HDSTACK_BRIDGE_RULES="${HDSTACK_BRIDGE_RULES:-/opt/freedmr/rules.py}" if [ -z "$HDSTACK_COUNT" ] then CPU_COUNT=$(getconf _NPROCESSORS_ONLN 2>/dev/null) case "$CPU_COUNT" in ''|*[!0-9]*) CPU_COUNT=2 ;; esac HDSTACK_COUNT=$((CPU_COUNT - 1)) if [ "$HDSTACK_COUNT" -lt 1 ] then HDSTACK_COUNT=1 elif [ "$HDSTACK_COUNT" -gt 5 ] then HDSTACK_COUNT=5 fi fi HDSTACK_BASEID="${HDSTACK_BASEID:-}" if [ -z "$HDSTACK_BASEID" ] then HDSTACK_BASEID=$(awk -F: ' /^\[GLOBAL\]/ { in_global = 1; next } /^\[/ { in_global = 0 } in_global && $1 ~ /^[[:space:]]*SERVER_ID[[:space:]]*$/ { gsub(/[[:space:]]/, "", $2) print $2 exit } ' /opt/freedmr/freedmr.cfg) fi if [ "$BRIDGE_SERVER" == 1 ] then echo 'Starting in Bridge mode...' exec python /opt/freedmr/bridge.py -c freedmr.cfg -r rules.py elif [ "$HDSTACK_COUNT" = 1 ] then echo 'Starting in FreeDMR mode...' exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf #python /opt/freedmr/hotspot_proxy_v2.py & #python /opt/freedmr/playback.py -c loro.cfg & #exec python /opt/freedmr/bridge_master.py -c freedmr.cfg elif [ "$HDSTACK_COUNT" -ge 2 ] 2>/dev/null && [ "$HDSTACK_COUNT" -le 5 ] 2>/dev/null then if [ -z "$HDSTACK_BASEID" ] then echo 'HDSTACK_BASEID is required when HDSTACK is 2..5' >&2 exit 2 fi echo "Starting HDStack with $HDSTACK_COUNT workers (base server ID $HDSTACK_BASEID, bridge $HDSTACK_BRIDGE)..." python /opt/freedmr/hdstack_runtime.py \ --main-config /opt/freedmr/freedmr.cfg \ --bridge-config "$HDSTACK_BRIDGE_CONFIG" \ --bridge-rules "$HDSTACK_BRIDGE_RULES" \ --output-dir "$HDSTACK_OUTPUT_DIR" \ --instances "$HDSTACK_COUNT" \ --base-id "$HDSTACK_BASEID" \ --loro-config /opt/freedmr/loro.cfg \ --bridge-enabled "$HDSTACK_BRIDGE" status=$? if [ "$status" -ne 0 ] then exit "$status" fi exec /usr/bin/supervisord -c "$HDSTACK_OUTPUT_DIR/supervisord.conf" else echo 'HDSTACK must be omitted or set to an integer from 1 to 5' >&2 exit 2 fi