#!/bin/bash # # Установка systemd сервисов для Wyoming Satellite # Автоматически определяет пути и подставляет их в service файлы # set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SERVICE_DIR="${SCRIPT_DIR}/services" SYSTEMD_DIR="/etc/systemd/system" echo "🔧 Установка systemd сервисов для Wyoming Satellite" echo "==================================================" # Определяем текущего пользователя CURRENT_USER="${SUDO_USER:-$(whoami)}" HOME_DIR=$(getent passwd "$CURRENT_USER" | cut -d: -f6) echo "👤 Пользователь: $CURRENT_USER" echo "🏠 Домашняя директория: $HOME_DIR" # Ищем виртуальное окружение VENV_PATH="" for candidate in \ "${HOME_DIR}/projects/.venv_satellite" \ "${HOME_DIR}/.venv_satellite" \ "${SCRIPT_DIR}/.venv" \ "${SCRIPT_DIR}/.venv_satellite" do if [ -f "${candidate}/bin/python3" ]; then VENV_PATH="${candidate}" break fi done if [ -z "$VENV_PATH" ]; then echo "❌ Виртуальное окружение не найдено!" echo " Создайте его: python3 -m venv /path/to/venv" exit 1 fi echo "✅ VENV: $VENV_PATH" # Устанавливаем глобальный wrapper для Python WRAPPER_SRC="${SCRIPT_DIR}/scripts/satellite-python" WRAPPER_DST="/usr/local/bin/satellite-python" if [ -f "$WRAPPER_SRC" ]; then # Обновляем путь к venv в wrapper'е sed -i "s|VENV_PATH=.*|VENV_PATH=\"${VENV_PATH}\"|" "$WRAPPER_SRC" 2>/dev/null || true sudo cp "$WRAPPER_SRC" "$WRAPPER_DST" sudo chmod +x "$WRAPPER_DST" echo "✅ Wrapper установлен: $WRAPPER_DST" else echo "⚠️ Wrapper не найден, используем полные пути" fi # Создаём временную директорию для обработанных сервисов TEMP_DIR=$(mktemp -d) trap "rm -rf ${TEMP_DIR}" EXIT # Обрабатываем каждый service файл for service_file in "${SERVICE_DIR}"/*.service; do [ -f "$service_file" ] || continue filename=$(basename "$service_file") echo "📄 Обработка: $filename" # Заменяем плейсхолдеры на актуальные пути sed -e "s|__SAT_BASE_DIR__|${SCRIPT_DIR}|g" \ -e "s|__SAT_VENV__|${VENV_PATH}|g" \ -e "s|__CURRENT_USER__|${CURRENT_USER}|g" \ -e "s|__HOME_DIR__|${HOME_DIR}|g" \ "$service_file" > "${TEMP_DIR}/${filename}" # Копируем в systemd sudo cp "${TEMP_DIR}/${filename}" "${SYSTEMD_DIR}/" echo " ✅ Установлен в ${SYSTEMD_DIR}/${filename}" done # Перезагружаем systemd echo "" echo "🔄 Перезагрузка systemd..." sudo systemctl daemon-reload echo "" echo "✅ Установка завершена!" echo "" echo "📋 Доступные сервисы:" echo " - wyoming-event.service (LED управление)" echo " - wyoming-satelite-vosk.service (спутник)" echo " - wyoming-wakeword-vosk.service (wake word)" echo "" echo "🚀 Команды управления:" echo " # LED сервис" echo " sudo systemctl enable wyoming-event.service" echo " sudo systemctl start wyoming-event.service" echo " sudo systemctl status wyoming-event.service" echo "" echo " # Wyoming Satellite" echo " sudo systemctl enable wyoming-satelite-vosk.service" echo " sudo systemctl start wyoming-satelite-vosk.service" echo " sudo systemctl status wyoming-satelite-vosk.service" echo "" echo " # Wake Word сервис" echo " sudo systemctl enable wyoming-wakeword-vosk.service" echo " sudo systemctl start wyoming-wakeword-vosk.service" echo " sudo systemctl status wyoming-wakeword-vosk.service" echo "" echo "📊 Просмотр логов:" echo " journalctl -u wyoming-event.service -f" echo " journalctl -u wyoming-satelite-vosk.service -f" echo " journalctl -u wyoming-wakeword-vosk.service -f" echo ""