Files
satellite/install_systemd_services.sh
T
2026-05-19 19:40:42 +03:00

116 lines
4.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 ""