Files
Maven/start-maven.sh
2026-07-03 00:32:48 +02:00

101 lines
3.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Unified start script for Maven services.
# Usage: ./start-maven.sh [build]
# - Pass "build" as first arg to rebuild everything before starting.
#
# This assumes ROOT=/home/kami/apps/Maven and the local Go toolchain at
# $ROOT/deps/go/go/bin/go.
set -euo pipefail
ROOT="/home/kami/apps/Maven"
# ---------------------------------------------------------------------------
# Environment
# ---------------------------------------------------------------------------
export ROOT
export CGO_CFLAGS="-I$ROOT/deps/include -I$ROOT/deps/whisper.cpp/ggml/include"
export CGO_LDFLAGS="-L$ROOT/deps/lib -Wl,-rpath,$ROOT/deps/lib"
export LD_LIBRARY_PATH="$ROOT/deps/lib"
export PATH="$ROOT/deps/go/go/bin:$PATH"
# ---------------------------------------------------------------------------
# Optional: build
# ---------------------------------------------------------------------------
if [[ "${1:-}" == "build" ]]; then
echo "--- Building all commands ---"
cd "$ROOT"
go build ./cmd/mavend/
go build ./cmd/mavsttd/ # needs CGO (whisper.cpp)
go build ./cmd/mavttsd/ # pure Go
go build ./cmd/mavweb/
go build ./cmd/mavpoll/
echo "--- Build complete ---"
fi
# ---------------------------------------------------------------------------
# Ensure directories exist
# ---------------------------------------------------------------------------
mkdir -p /run/user/1000/maven
mkdir -p /home/kami/.local/share/maven
# ---------------------------------------------------------------------------
# Start services
# ---------------------------------------------------------------------------
echo "--- Starting Maven services ---"
cd "$ROOT"
# 1. Core daemon
./mavend > /tmp/mavend.log 2>&1 &
MAVEND_PID=$!
echo "mavend pid=$MAVEND_PID"
# Wait for mavend to create its socket (it loads models at startup)
for i in $(seq 1 30); do
if [ -S /run/user/1000/maven/mavend.sock ]; then
break
fi
sleep 1
done
# 2. STT worker (needs LD_LIBRARY_PATH for libwhisper.so, libggml-vulkan.so)
export LD_LIBRARY_PATH="$ROOT/deps/lib"
./mavsttd -socket /run/user/1000/maven/stt.sock -model models/stt/ggml-small.bin > /tmp/mavsttd.log 2>&1 &
MAVSTTD_PID=$!
echo "mavsttd pid=$MAVSTTD_PID"
# 3. TTS worker (needs LD_LIBRARY_PATH for Piper's espeak-ng)
export LD_LIBRARY_PATH="$ROOT/deps/piper"
./mavttsd -socket /run/user/1000/maven/tts.sock -piper deps/piper/piper -model models/tts/ru_RU-irina-medium.onnx -espeak_data deps/piper/espeak-ng-data > /tmp/mavttsd.log 2>&1 &
MAVTTSD_PID=$!
echo "mavttsd pid=$MAVTTSD_PID"
# 4. Web bridge (pure Go, no deps)
./mavweb -addr :9201 -voice 127.0.0.1:9100 -core /run/user/1000/maven/mavend.sock > /tmp/mavweb.log 2>&1 &
MAVWEB_PID=$!
echo "mavweb pid=$MAVWEB_PID"
# 5. Env poller
./mavpoll -socket /run/user/1000/maven/mavend.sock -netdata http://127.0.0.1:19999 > /tmp/mavpoll.log 2>&1 &
MAVPOLL_PID=$!
echo "mavpoll pid=$MAVPOLL_PID"
# ---------------------------------------------------------------------------
# Trap SIGINT to forward it to children, then wait for everything
# ---------------------------------------------------------------------------
cleanup() {
echo ""
echo "--- Stopping Maven services ---"
kill $MAVEND_PID 2>/dev/null || true
kill $MAVSTTD_PID 2>/dev/null || true
kill $MAVTTSD_PID 2>/dev/null || true
kill $MAVWEB_PID 2>/dev/null || true
kill $MAVPOLL_PID 2>/dev/null || true
}
trap cleanup INT TERM
echo ""
echo "All services started. Press Ctrl-C to stop."
wait