116 lines
4.0 KiB
Bash
Executable File
116 lines
4.0 KiB
Bash
Executable File
#!/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 ""
|