From 01bb3e29fced0a7a2c15af819ef8738893019e55 Mon Sep 17 00:00:00 2001 From: F7cloud Date: Sat, 21 Feb 2026 19:40:19 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D0=B0=20install.?= =?UTF-8?q?sh=20=D0=BD=D0=B0=20f7recording.sh:=20=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D1=91=D0=BD=20install.sh,=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B8=20deploy.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEPLOY.md | 21 +- INSTALL.md | 16 +- INSTALL_EXAMPLE.md | 18 +- PROJECT_STRUCTURE.md | 8 +- README.md | 6 +- dependencies/README.md | 2 +- deploy.sh | 16 +- install.sh | 769 ----------------------------------------- 8 files changed, 34 insertions(+), 822 deletions(-) delete mode 100755 install.sh diff --git a/DEPLOY.md b/DEPLOY.md index f52ccb1..90130cc 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -36,11 +36,8 @@ cd f7cloud-talk-recording #### 2. Запуск установки с параметрами ```bash -sudo ./install.sh \ - --hpb-url https://hpb.example.com \ - --hpb-secret your-hpb-secret-here \ - --f7cloud-url https://f7cloud.example.com \ - --f7cloud-secret your-f7cloud-secret-here +# Подготовьте файл f7cloud-install.env с переменными, затем: +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` #### 3. Запуск сервиса @@ -79,7 +76,7 @@ internalsecret = your-hpb-secret-here ## Автоматическая загрузка зависимостей -Скрипт `install.sh` автоматически загружает зависимости, если они отсутствуют: +Скрипт `f7recording.sh` использует системные пакеты (firefox-esr и др.), если они отсутствуют: - **Firefox ESR** - скачивается с официального сайта Mozilla - **Geckodriver** - скачивается с GitHub releases @@ -91,16 +88,8 @@ internalsecret = your-hpb-secret-here Вы также можете использовать переменные окружения вместо интерактивного ввода: ```bash -export HPB_URL="https://hpb.example.com" -export HPB_SECRET="your-hpb-secret" -export F7CLOUD_URL="https://f7cloud.example.com" -export F7CLOUD_SECRET="your-f7cloud-secret" - -sudo ./install.sh \ - --hpb-url "$HPB_URL" \ - --hpb-secret "$HPB_SECRET" \ - --f7cloud-url "$F7CLOUD_URL" \ - --f7cloud-secret "$F7CLOUD_SECRET" +# Создайте файл f7cloud-install.env с переменными HPB_DOMAIN, HPB_INTERNAL_SECRET, DOMAIN, HPB_BACKEND_SECRET +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` ## Проверка установки diff --git a/INSTALL.md b/INSTALL.md index 3f8710b..40759c6 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -50,7 +50,7 @@ Firefox ESR и Geckodriver уже включены в репозиторий в Используйте скрипт установки с обязательными параметрами для HPB: ```bash -sudo ./install.sh --hpb-url https://hpb.example.com --hpb-secret your-hpb-secret-here +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` **Обязательные параметры:** @@ -65,18 +65,14 @@ sudo ./install.sh --hpb-url https://hpb.example.com --hpb-secret your-hpb-secret **Пример полной установки:** ```bash -sudo ./install.sh \ - --hpb-url https://hpb.example.com \ - --hpb-secret your-hpb-secret-here \ - --f7cloud-url https://f7cloud.example.com \ - --f7cloud-secret your-f7cloud-secret-here \ - --listen 127.0.0.1:8000 +# Подготовьте .env с HPB_DOMAIN, HPB_INTERNAL_SECRET, DOMAIN, HPB_BACKEND_SECRET: +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` **Просмотр справки:** ```bash -sudo ./install.sh --help +# Использование: ./f7recording.sh /path/to/f7cloud-install.env ``` Скрипт выполнит: @@ -141,7 +137,7 @@ sudo chmod 600 /etc/f7cloud-talk-recording/server.conf Отредактируйте `/etc/f7cloud-talk-recording/server.conf` согласно вашим настройкам. -**Примечание:** При использовании скрипта `install.sh` с параметрами `--hpb-url` и `--hpb-secret`, конфигурация будет настроена автоматически. Вам нужно будет только добавить секцию для F7cloud backend, если она не была указана при установке. +**Примечание:** При использовании скрипта `f7recording.sh` с файлом .env конфигурация создаётся автоматически. Вам нужно будет только добавить секцию для F7cloud backend, если она не была указана при установке. ## Конфигурация @@ -251,7 +247,7 @@ f7cloud-talk-recording/ ├── tests/ # Тесты ├── server.conf.in # Шаблон конфигурации ├── pyproject.toml # Конфигурация Python проекта -├── install.sh # Скрипт установки +├── f7recording.sh # Скрипт установки ├── INSTALL.md # Данная инструкция └── README.md # Основная документация ``` diff --git a/INSTALL_EXAMPLE.md b/INSTALL_EXAMPLE.md index 836250b..5b7e2b4 100644 --- a/INSTALL_EXAMPLE.md +++ b/INSTALL_EXAMPLE.md @@ -5,9 +5,7 @@ Минимальная установка с обязательными параметрами для HPB: ```bash -sudo ./install.sh \ - --hpb-url https://hpb.example.com \ - --hpb-secret your-hpb-secret-here +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` ## Полная установка (HPB + F7cloud) @@ -15,26 +13,20 @@ sudo ./install.sh \ Установка с настройкой как HPB, так и F7cloud backend: ```bash -sudo ./install.sh \ - --hpb-url https://hpb.example.com \ - --hpb-secret your-hpb-secret-here \ - --f7cloud-url https://f7cloud.example.com \ - --f7cloud-secret your-f7cloud-secret-here +# В файле .env задайте HPB_DOMAIN, HPB_INTERNAL_SECRET, DOMAIN, HPB_BACKEND_SECRET, затем: +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` ## Установка с кастомным адресом прослушивания ```bash -sudo ./install.sh \ - --hpb-url https://hpb.example.com \ - --hpb-secret your-hpb-secret-here \ - --listen 0.0.0.0:8080 +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` ## Просмотр справки ```bash -sudo ./install.sh --help +# Справка: ./f7recording.sh /path/to/f7cloud-install.env ``` ## Что делает скрипт diff --git a/PROJECT_STRUCTURE.md b/PROJECT_STRUCTURE.md index ee7fe81..ba7494f 100644 --- a/PROJECT_STRUCTURE.md +++ b/PROJECT_STRUCTURE.md @@ -39,7 +39,7 @@ f7cloud-talk-recording/ ├── pyproject.toml # Конфигурация Python проекта │ # Содержит зависимости, метаданные, скрипты │ -├── install.sh # Скрипт автоматической установки +├── f7recording.sh # Скрипт установки (запуск с .env) │ # Устанавливает все зависимости и настраивает систему │ ├── INSTALL.md # Подробная инструкция по установке @@ -137,8 +137,8 @@ Firefox ESR (Extended Support Release) - стабильная версия Firef ### Скрипты -#### install.sh -Автоматический скрипт установки: +#### f7recording.sh +Скрипт установки (принимает путь к .env-файлу): 1. Устанавливает системные зависимости 2. Устанавливает Firefox ESR и Geckodriver 3. Создает виртуальное окружение Python @@ -181,7 +181,7 @@ HTTP Request → Server.py ### Автоматическая установка ```bash -sudo ./install.sh +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` ### Ручная установка diff --git a/README.md b/README.md index a684855..161a675 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ f7cloud-talk-recording/ │ ├── server.conf.in # Шаблон конфигурационного файла ├── pyproject.toml # Конфигурация Python проекта -├── install.sh # Скрипт автоматической установки +├── f7recording.sh # Скрипт установки (запуск с .env-файлом) ├── INSTALL.md # Подробная инструкция по установке └── README.md # Этот файл ``` @@ -56,7 +56,7 @@ curl -fsSL https://git.f7cloud.ru/root/F7_recording/raw/branch/main/deploy.sh | ```bash git clone https://git.f7cloud.ru/root/F7_recording.git cd F7_recording -sudo ./install.sh --hpb-url https://hpb.example.com --hpb-secret your-secret-here +sudo ./f7recording.sh /path/to/f7cloud-install.env ``` ### Конфигурация @@ -148,7 +148,7 @@ HTTP сервер на Flask, который обрабатывает запро Для развертывания на новом сервере: 1. Скопируйте весь репозиторий на сервер -2. Запустите `sudo ./install.sh` +2. Запустите `sudo ./f7recording.sh /path/to/f7cloud-install.env` 3. Настройте `/etc/f7cloud-talk-recording/server.conf` 4. Запустите сервис: `sudo systemctl start f7cloud-talk-recording` diff --git a/dependencies/README.md b/dependencies/README.md index ecb5a41..4544b82 100644 --- a/dependencies/README.md +++ b/dependencies/README.md @@ -47,4 +47,4 @@ cp /usr/local/bin/geckodriver dependencies/ Эти файлы не включены в git репозиторий из-за их большого размера. Они должны быть установлены отдельно на каждом сервере или включены в процесс развертывания. -Скрипт `install.sh` ожидает, что эти зависимости уже находятся в папке `dependencies/` при запуске установки. +Скрипт `f7recording.sh` устанавливает зависимости через системные пакеты (apt-get install firefox-esr и т.д.). diff --git a/deploy.sh b/deploy.sh index c7bd590..0f7d5c0 100755 --- a/deploy.sh +++ b/deploy.sh @@ -178,13 +178,17 @@ cd "$INSTALL_DIR" # Запуск скрипта установки info "Запуск скрипта установки..." -INSTALL_CMD="./install.sh --hpb-url \"$HPB_URL\" --hpb-secret \"$HPB_SECRET\" --listen \"$LISTEN_ADDRESS\"" +# Создаём временный .env для f7recording.sh +ENV_FILE="/tmp/f7cloud-install-$$.env" +cat > "$ENV_FILE" << ENVEOF +HPB_DOMAIN=$(echo "$HPB_URL" | sed 's|https\?://||' | sed 's|/.*||') +HPB_INTERNAL_SECRET=$HPB_SECRET +DOMAIN=$(echo "${F7CLOUD_URL:-$HPB_URL}" | sed 's|https\?://||' | sed 's|/.*||') +HPB_BACKEND_SECRET=${F7CLOUD_SECRET:-$HPB_SECRET} +ENVEOF -if [ -n "$F7CLOUD_URL" ] && [ -n "$F7CLOUD_SECRET" ]; then - INSTALL_CMD="$INSTALL_CMD --f7cloud-url \"$F7CLOUD_URL\" --f7cloud-secret \"$F7CLOUD_SECRET\"" -fi - -eval "$INSTALL_CMD" +./f7recording.sh "$ENV_FILE" +rm -f "$ENV_FILE" info "" info "==========================================" diff --git a/install.sh b/install.sh deleted file mode 100755 index ab4150d..0000000 --- a/install.sh +++ /dev/null @@ -1,769 +0,0 @@ -#!/bin/bash - -# Скрипт установки F7cloud Talk Recording Server -# Этот скрипт устанавливает все необходимые зависимости и настраивает сервер -# -# Использование: -# sudo ./install.sh [OPTIONS] -# -# Опции: -# --hpb-url URL URL сервера HPB (signaling server) -# --hpb-secret SECRET Секрет для подключения к HPB (internalsecret) -# --f7cloud-url URL URL сервера F7cloud (опционально) -# --f7cloud-secret SECRET Секрет для подключения к F7cloud (опционально) -# --listen ADDRESS:PORT Адрес и порт для прослушивания (по умолчанию: 127.0.0.1:8000) -# -# Пример: -# sudo ./install.sh --hpb-url https://hpb.example.com --hpb-secret your-secret-here - -set -e - -# Цвета для вывода -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -# Функция для вывода сообщений -info() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -warn() { - echo -e "${YELLOW}[WARN]${NC} $1" -} - -error() { - echo -e "${RED}[ERROR]${NC} $1" -} - -# Функция для безопасного копирования с проверками -safe_copy() { - local source="$1" - local dest="$2" - - if [ ! -e "$source" ]; then - error "Источник не существует: $source" - return 1 - fi - - # Создаем целевую директорию, если её нет - local target_dir=$(dirname "$dest") - if [ ! -d "$target_dir" ]; then - mkdir -p "$target_dir" - fi - - cp -a "$source" "$dest" - - # Проверяем успешность копирования - if [ ! -e "$dest" ]; then - error "Не удалось скопировать $source в $dest" - return 1 - fi - - return 0 -} - -# Функция для вывода справки -show_help() { - echo "Использование: $0 [OPTIONS]" - echo "" - echo "Опции:" - echo " --hpb-url URL URL сервера HPB (signaling server) - ОБЯЗАТЕЛЬНО" - echo " --hpb-secret SECRET Секрет для подключения к HPB (internalsecret) - ОБЯЗАТЕЛЬНО" - echo " --f7cloud-url URL URL сервера F7cloud (опционально)" - echo " --f7cloud-secret SECRET Секрет для подключения к F7cloud (опционально)" - echo " --listen ADDRESS:PORT Адрес и порт для прослушивания (по умолчанию: 127.0.0.1:8000)" - echo " --help Показать эту справку" - echo "" - echo "Пример:" - echo " sudo $0 --hpb-url https://hpb.example.com --hpb-secret your-secret-here" -} - -# Парсинг аргументов -HPB_URL="" -HPB_SECRET="" -F7CLOUD_URL="" -F7CLOUD_SECRET="" -LISTEN_ADDRESS="127.0.0.1:8000" - -while [[ $# -gt 0 ]]; do - case $1 in - --hpb-url) - HPB_URL="$2" - shift 2 - ;; - --hpb-secret) - HPB_SECRET="$2" - shift 2 - ;; - --f7cloud-url) - F7CLOUD_URL="$2" - shift 2 - ;; - --f7cloud-secret) - F7CLOUD_SECRET="$2" - shift 2 - ;; - --listen) - LISTEN_ADDRESS="$2" - shift 2 - ;; - --help) - show_help - exit 0 - ;; - *) - error "Неизвестный параметр: $1" - show_help - exit 1 - ;; - esac -done - -# Проверяем обязательные параметры (из аргументов или переменных окружения) -if [ -z "$HPB_URL" ]; then - # Пробуем получить из переменной окружения - HPB_URL="${HPB_URL_ENV:-}" -fi - -if [ -z "$HPB_SECRET" ]; then - # Пробуем получить из переменной окружения - HPB_SECRET="${HPB_SECRET_ENV:-}" -fi - -if [ -z "$F7CLOUD_URL" ]; then - # Пробуем получить из переменной окружения - F7CLOUD_URL="${F7CLOUD_URL_ENV:-}" -fi - -if [ -z "$F7CLOUD_SECRET" ]; then - # Пробуем получить из переменной окружения - F7CLOUD_SECRET="${F7CLOUD_SECRET_ENV:-}" -fi - -if [ -z "$LISTEN_ADDRESS" ] || [ "$LISTEN_ADDRESS" = "127.0.0.1:8000" ]; then - # Пробуем получить из переменной окружения, если не задано явно - if [ -n "${LISTEN_ADDRESS_ENV:-}" ]; then - LISTEN_ADDRESS="${LISTEN_ADDRESS_ENV}" - fi -fi - -if [ -z "$HPB_URL" ] || [ -z "$HPB_SECRET" ]; then - error "Ошибка: --hpb-url и --hpb-secret являются обязательными параметрами" - error "" - error "Использование:" - error " $0 --hpb-url URL --hpb-secret SECRET [OPTIONS]" - error "" - error "Или используйте переменные окружения:" - error " export HPB_URL_ENV='https://hpb.example.com'" - error " export HPB_SECRET_ENV='your-secret'" - error " $0" - echo "" - show_help - exit 1 -fi - -# Вывод используемых параметров -info "Используемые параметры:" -info " HPB URL: $HPB_URL" -info " HPB Secret: [скрыт]" -if [ -n "$F7CLOUD_URL" ]; then - info " F7cloud URL: $F7CLOUD_URL" - if [ -n "$F7CLOUD_SECRET" ]; then - info " F7cloud Secret: [скрыт]" - fi -fi -info " Listen: $LISTEN_ADDRESS" -info "" - -# Проверка прав root -if [ "$EUID" -ne 0 ]; then - error "Пожалуйста, запустите скрипт с правами root (sudo)" - exit 1 -fi - -info "Начинаем установку F7cloud Talk Recording Server..." - -# Определение дистрибутива -if [ -f /etc/debian_version ]; then - DISTRO="debian" - PKG_MANAGER="apt-get" -elif [ -f /etc/redhat-release ]; then - DISTRO="redhat" - PKG_MANAGER="yum" -else - error "Неподдерживаемый дистрибутив Linux" - exit 1 -fi - -# Получение директории скрипта -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -cd "$SCRIPT_DIR" - -# 1. Установка системных зависимостей -info "Установка системных зависимостей..." - -if [ "$DISTRO" = "debian" ]; then - $PKG_MANAGER update -y - $PKG_MANAGER install -y \ - python3 \ - python3-pip \ - python3-venv \ - pulseaudio \ - xvfb \ - ffmpeg \ - libpulse0 \ - libpulse-dev \ - libx11-dev \ - libxext-dev \ - libxrender-dev \ - libxtst6 \ - libxi6 \ - libgconf-2-4 \ - libasound2-dev \ - curl \ - wget \ - git \ - bzip2 \ - tar - - if [ $? -ne 0 ]; then - error "Ошибка при установке системных зависимостей" - exit 1 - fi -else - error "Установка для RedHat-based дистрибутивов пока не поддерживается автоматически" - exit 1 -fi - -# 2. Установка Firefox ESR -info "Установка Firefox ESR..." - -if [ -d "dependencies/firefox-esr" ] && [ -f "dependencies/firefox-esr/firefox" ]; then - info "Использование Firefox ESR из dependencies..." - - # Проверяем существование директории перед копированием - if [ ! -d "dependencies/firefox-esr" ]; then - error "Директория dependencies/firefox-esr не найдена" - exit 1 - fi - - if [ ! -f "dependencies/firefox-esr/firefox" ]; then - error "Исполняемый файл Firefox не найден в dependencies/firefox-esr/firefox" - exit 1 - fi - - # Создаем целевую директорию, если её нет - if [ ! -d "/opt/firefox-esr" ]; then - mkdir -p /opt/firefox-esr - fi - - # Копируем с проверкой - if ! safe_copy "dependencies/firefox-esr" "/opt/firefox-esr"; then - error "Не удалось скопировать Firefox ESR" - exit 1 - fi - - ln -sf /opt/firefox-esr/firefox /usr/local/bin/firefox-esr - chmod +x /usr/local/bin/firefox-esr - - # Проверяем успешность установки - if [ ! -f "/usr/local/bin/firefox-esr" ] || [ ! -L "/usr/local/bin/firefox-esr" ]; then - error "Не удалось создать символьную ссылку на Firefox ESR" - exit 1 - fi - - info "Firefox ESR установлен в /opt/firefox-esr" -else - warn "Firefox ESR не найден в dependencies/, пытаемся скачать..." - - # Определяем архитектуру - ARCH=$(uname -m) - if [ "$ARCH" = "x86_64" ]; then - FIREFOX_ARCH="linux64" - elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then - FIREFOX_ARCH="linux-aarch64" - else - error "Неподдерживаемая архитектура: $ARCH" - exit 1 - fi - - info "Скачивание Firefox ESR для $FIREFOX_ARCH..." - mkdir -p dependencies - cd dependencies - - # Скачиваем последнюю версию Firefox ESR - FIREFOX_URL="https://download.mozilla.org/?product=firefox-esr-latest-ssl&os=${FIREFOX_ARCH}&lang=en-US" - - if command -v wget &> /dev/null; then - wget -q --show-progress -O firefox-esr.tar.bz2 "$FIREFOX_URL" - elif command -v curl &> /dev/null; then - curl -L -o firefox-esr.tar.bz2 "$FIREFOX_URL" - else - error "Не найден wget или curl для скачивания Firefox ESR" - exit 1 - fi - - if [ -f firefox-esr.tar.bz2 ]; then - info "Распаковка Firefox ESR..." - if ! tar -xjf firefox-esr.tar.bz2; then - error "Не удалось распаковать Firefox ESR" - exit 1 - fi - - if [ ! -d firefox ]; then - error "Директория firefox не найдена после распаковки" - exit 1 - fi - - mv firefox firefox-esr - rm firefox-esr.tar.bz2 - - if [ ! -f firefox-esr/firefox ]; then - error "Исполняемый файл Firefox не найден после распаковки" - exit 1 - fi - - if ! safe_copy "firefox-esr" "/opt/firefox-esr"; then - error "Не удалось скопировать Firefox ESR в /opt" - exit 1 - fi - - ln -sf /opt/firefox-esr/firefox /usr/local/bin/firefox-esr - chmod +x /usr/local/bin/firefox-esr - - # Проверяем успешность установки - if [ ! -f "/usr/local/bin/firefox-esr" ] || [ ! -L "/usr/local/bin/firefox-esr" ]; then - error "Не удалось создать символьную ссылку на Firefox ESR" - exit 1 - fi - - info "Firefox ESR установлен в /opt/firefox-esr" - else - error "Не удалось скачать Firefox ESR" - exit 1 - fi - - cd .. -fi - -# 3. Установка Geckodriver -info "Установка Geckodriver..." - -if [ -f "dependencies/geckodriver" ]; then - if [ ! -f "dependencies/geckodriver" ]; then - error "Файл dependencies/geckodriver не найден" - exit 1 - fi - - if ! safe_copy "dependencies/geckodriver" "/usr/local/bin/geckodriver"; then - error "Не удалось скопировать Geckodriver" - exit 1 - fi - - chmod +x /usr/local/bin/geckodriver - - # Проверяем успешность установки - if [ ! -f "/usr/local/bin/geckodriver" ]; then - error "Geckodriver не найден после установки" - exit 1 - fi - - info "Geckodriver установлен в /usr/local/bin/geckodriver" -elif [ -f "dependencies/geckodriver.tar.gz" ]; then - info "Распаковка geckodriver из архива..." - cd dependencies - - if ! tar -xzf geckodriver.tar.gz; then - error "Не удалось распаковать Geckodriver" - exit 1 - fi - - if [ ! -f geckodriver ]; then - error "Файл geckodriver не найден после распаковки" - exit 1 - fi - - chmod +x geckodriver - - if ! safe_copy "geckodriver" "/usr/local/bin/geckodriver"; then - error "Не удалось скопировать Geckodriver" - exit 1 - fi - - cd .. - - # Проверяем успешность установки - if [ ! -f "/usr/local/bin/geckodriver" ]; then - error "Geckodriver не найден после установки" - exit 1 - fi - - info "Geckodriver установлен в /usr/local/bin/geckodriver" -else - warn "Geckodriver не найден в dependencies/, пытаемся скачать..." - - # Определяем архитектуру - ARCH=$(uname -m) - if [ "$ARCH" = "x86_64" ]; then - GECKODRIVER_ARCH="linux64" - elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then - GECKODRIVER_ARCH="linux-aarch64" - else - error "Неподдерживаемая архитектура: $ARCH" - exit 1 - fi - - info "Скачивание Geckodriver для $GECKODRIVER_ARCH..." - mkdir -p dependencies - cd dependencies - - # Получаем последнюю версию geckodriver из GitHub releases - GECKODRIVER_VERSION=$(curl -s https://api.github.com/repos/mozilla/geckodriver/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | sed 's/v//') - - if [ -z "$GECKODRIVER_VERSION" ]; then - # Fallback на известную версию - GECKODRIVER_VERSION="0.34.0" - warn "Не удалось определить версию, используем $GECKODRIVER_VERSION" - fi - - GECKODRIVER_URL="https://github.com/mozilla/geckodriver/releases/download/v${GECKODRIVER_VERSION}/geckodriver-v${GECKODRIVER_VERSION}-${GECKODRIVER_ARCH}.tar.gz" - - if command -v wget &> /dev/null; then - wget -q --show-progress -O geckodriver.tar.gz "$GECKODRIVER_URL" - elif command -v curl &> /dev/null; then - curl -L -o geckodriver.tar.gz "$GECKODRIVER_URL" - else - error "Не найден wget или curl для скачивания Geckodriver" - exit 1 - fi - - if [ -f geckodriver.tar.gz ]; then - info "Распаковка Geckodriver..." - if ! tar -xzf geckodriver.tar.gz; then - error "Не удалось распаковать Geckodriver" - exit 1 - fi - - if [ ! -f geckodriver ]; then - error "Файл geckodriver не найден после распаковки" - exit 1 - fi - - chmod +x geckodriver - - if ! safe_copy "geckodriver" "/usr/local/bin/geckodriver"; then - error "Не удалось скопировать Geckodriver в /usr/local/bin" - exit 1 - fi - - rm geckodriver.tar.gz - - # Проверяем успешность установки - if [ ! -f "/usr/local/bin/geckodriver" ]; then - error "Geckodriver не найден после установки" - exit 1 - fi - - info "Geckodriver установлен в /usr/local/bin/geckodriver" - else - error "Не удалось скачать Geckodriver" - exit 1 - fi - - cd .. -fi - -# 4. Создание виртуального окружения Python -info "Создание виртуального окружения Python..." - -if [ ! -d "venv" ]; then - if ! python3 -m venv venv; then - error "Не удалось создать виртуальное окружение Python" - exit 1 - fi - - # Проверяем успешность создания - if [ ! -d "venv" ] || [ ! -f "venv/bin/activate" ]; then - error "Виртуальное окружение создано некорректно" - exit 1 - fi - - info "Виртуальное окружение создано" -else - warn "Виртуальное окружение уже существует, пропускаем создание..." - - # Проверяем, что существующее окружение валидно - if [ ! -f "venv/bin/activate" ]; then - error "Существующее виртуальное окружение повреждено" - exit 1 - fi -fi - -# Активация виртуального окружения и установка зависимостей -info "Установка Python-зависимостей..." - -source venv/bin/activate - -if ! pip install --upgrade pip; then - error "Не удалось обновить pip" - exit 1 -fi - -if ! pip install -e .; then - error "Не удалось установить Python-зависимости" - exit 1 -fi - -# Проверяем успешность установки -if ! python3 -c "import f7cloud.talk.recording" 2>/dev/null; then - error "Модуль f7cloud.talk.recording не найден после установки" - exit 1 -fi - -info "Python-зависимости установлены" - -# 5. Создание пользователя для запуска сервера -info "Создание пользователя f7cloud-talk-recording..." - -if ! id "f7cloud-talk-recording" &>/dev/null; then - if ! useradd -r -s /bin/false -d /var/lib/f7cloud-talk-recording f7cloud-talk-recording; then - error "Не удалось создать пользователя f7cloud-talk-recording" - exit 1 - fi - - # Проверяем успешность создания - if ! id "f7cloud-talk-recording" &>/dev/null; then - error "Пользователь f7cloud-talk-recording не найден после создания" - exit 1 - fi - - info "Пользователь f7cloud-talk-recording создан" -else - warn "Пользователь f7cloud-talk-recording уже существует" -fi - -# Создание директорий для пользователя -if ! mkdir -p /var/lib/f7cloud-talk-recording; then - error "Не удалось создать директорию /var/lib/f7cloud-talk-recording" - exit 1 -fi - -if ! chown f7cloud-talk-recording:f7cloud-talk-recording /var/lib/f7cloud-talk-recording; then - error "Не удалось установить права на /var/lib/f7cloud-talk-recording" - exit 1 -fi - -# Проверяем успешность создания директории -if [ ! -d "/var/lib/f7cloud-talk-recording" ]; then - error "Директория /var/lib/f7cloud-talk-recording не найдена после создания" - exit 1 -fi - -# 6. Настройка конфигурации -info "Настройка конфигурации..." - -mkdir -p /etc/f7cloud-talk-recording - -CONFIG_FILE="/etc/f7cloud-talk-recording/server.conf" - -if [ ! -f "$CONFIG_FILE" ]; then - if [ ! -f "server.conf.in" ]; then - error "Шаблон конфигурации server.conf.in не найден" - exit 1 - fi - - if ! safe_copy "server.conf.in" "$CONFIG_FILE"; then - error "Не удалось создать конфигурационный файл" - exit 1 - fi - - # Проверяем успешность создания - if [ ! -f "$CONFIG_FILE" ]; then - error "Конфигурационный файл не найден после создания" - exit 1 - fi - - info "Конфигурационный файл создан в $CONFIG_FILE" - - # Настройка параметров конфигурации - info "Настройка параметров конфигурации..." - - # Установка адреса прослушивания - sed -i "s|#listen = 127.0.0.1:8000|listen = $LISTEN_ADDRESS|" "$CONFIG_FILE" - - # Настройка HPB (signaling server) - if [ -n "$HPB_URL" ] && [ -n "$HPB_SECRET" ]; then - info "Настройка HPB (signaling server)..." - - # Создаем ID для signaling сервера из URL - HPB_ID=$(echo "$HPB_URL" | sed 's|https\?://||' | sed 's|/.*||' | sed 's|[^a-zA-Z0-9]|-|g' | sed 's|--*|-|g' | sed 's|^-\||' | sed 's|-$||') - if [ -z "$HPB_ID" ]; then - HPB_ID="hpb-signaling" - fi - - # Раскомментируем и настраиваем секцию signaling - sed -i "s|#signalings = signaling-id, another-signaling|signalings = $HPB_ID|" "$CONFIG_FILE" - sed -i "s|#internalsecret = the-shared-secret-for-internal-clients|internalsecret = $HPB_SECRET|" "$CONFIG_FILE" - - # Добавляем секцию для конкретного signaling сервера - if ! grep -q "^\[$HPB_ID\]" "$CONFIG_FILE"; then - # Добавляем новую секцию после секции [signaling] - cat >> "$CONFIG_FILE" << EOF - -[$HPB_ID] -# URL of the signaling server -url = $HPB_URL - -# Shared secret for authenticating as an internal client of signaling servers. -# This must be the same value as configured in the signaling server -# configuration file. -internalsecret = $HPB_SECRET -EOF - else - # Если секция уже существует, обновляем значения - sed -i "/^\[$HPB_ID\]/,/^\[/ { - s|^#url = .*|url = $HPB_URL| - s|^url = .*|url = $HPB_URL| - s|^#internalsecret = .*|internalsecret = $HPB_SECRET| - s|^internalsecret = .*|internalsecret = $HPB_SECRET| - }" "$CONFIG_FILE" - fi - - info "HPB настроен: URL=$HPB_URL, ID=$HPB_ID" - fi - - # Настройка F7cloud backend (опционально) - if [ -n "$F7CLOUD_URL" ] && [ -n "$F7CLOUD_SECRET" ]; then - info "Настройка F7cloud backend..." - - # Создаем ID для backend из URL - BACKEND_ID=$(echo "$F7CLOUD_URL" | sed 's|https\?://||' | sed 's|/.*||' | sed 's|[^a-zA-Z0-9]|-|g' | sed 's|--*|-|g' | sed 's|^-\||' | sed 's|-$||') - if [ -z "$BACKEND_ID" ]; then - BACKEND_ID="f7cloud-backend" - fi - - # Раскомментируем и настраиваем секцию backend - sed -i "s|#backends = backend-id, another-backend|backends = $BACKEND_ID|" "$CONFIG_FILE" - - # Добавляем секцию для конкретного backend - if ! grep -q "^\[$BACKEND_ID\]" "$CONFIG_FILE"; then - # Добавляем новую секцию после секции [backend] - cat >> "$CONFIG_FILE" << EOF - -[$BACKEND_ID] -# URL of the F7cloud instance -url = $F7CLOUD_URL - -# Shared secret for requests from and to the backend servers. This must be the -# same value as configured in the F7cloud admin ui. -secret = $F7CLOUD_SECRET -EOF - else - # Если секция уже существует, обновляем значения - sed -i "/^\[$BACKEND_ID\]/,/^\[/ { - s|^#url = .*|url = $F7CLOUD_URL| - s|^url = .*|url = $F7CLOUD_URL| - s|^#secret = .*|secret = $F7CLOUD_SECRET| - s|^secret = .*|secret = $F7CLOUD_SECRET| - }" "$CONFIG_FILE" - fi - - info "F7cloud backend настроен: URL=$F7CLOUD_URL, ID=$BACKEND_ID" - fi - - # Настройка путей к браузеру и драйверу - sed -i "s|#driverPath =|driverPath = /usr/local/bin/geckodriver|" "$CONFIG_FILE" - sed -i "s|#browserPath =|browserPath = /usr/local/bin/firefox-esr|" "$CONFIG_FILE" - - chown f7cloud-talk-recording:f7cloud-talk-recording "$CONFIG_FILE" - chmod 600 "$CONFIG_FILE" - - info "Конфигурация настроена автоматически" -else - warn "Конфигурационный файл уже существует, пропускаем создание..." - warn "Если нужно обновить конфигурацию, отредактируйте $CONFIG_FILE вручную" -fi - -# 7. Создание systemd service файла -info "Создание systemd service..." - -cat > /etc/systemd/system/f7cloud-talk-recording.service << EOF -[Unit] -Description=F7cloud Talk Recording Server -After=network.target - -[Service] -Type=simple -User=f7cloud-talk-recording -Group=f7cloud-talk-recording -WorkingDirectory=$SCRIPT_DIR -Environment="PATH=$SCRIPT_DIR/venv/bin:/usr/local/bin:/usr/bin:/bin" -ExecStart=$SCRIPT_DIR/venv/bin/f7cloud-talk-recording --config /etc/f7cloud-talk-recording/server.conf -Restart=always -RestartSec=10 - -[Install] -WantedBy=multi-user.target -EOF - -systemctl daemon-reload -info "Systemd service создан" - -# Итоговая информация -info "" -info "==========================================" -info "Установка завершена успешно!" -info "==========================================" -info "" - -# Проверяем установленные компоненты -info "Установленные компоненты:" -[ -f "/usr/local/bin/firefox-esr" ] && info " ✓ Firefox ESR" -[ -f "/usr/local/bin/geckodriver" ] && info " ✓ Geckodriver" -[ -d "venv" ] && [ -f "venv/bin/activate" ] && info " ✓ Виртуальное окружение Python" -[ -d "/var/lib/f7cloud-talk-recording" ] && info " ✓ Директория пользователя" -[ -f "$CONFIG_FILE" ] && info " ✓ Конфигурационный файл" -[ -f "/etc/systemd/system/f7cloud-talk-recording.service" ] && info " ✓ Systemd service" - -info "" -info "Настроенные параметры:" -info " HPB URL: $HPB_URL" -info " Listen: $LISTEN_ADDRESS" -if [ -n "$F7CLOUD_URL" ]; then - info " F7cloud URL: $F7CLOUD_URL" -fi -info "" - -# Проверяем статус сервиса -if systemctl list-unit-files | grep -q "f7cloud-talk-recording.service"; then - if systemctl is-enabled --quiet f7cloud-talk-recording 2>/dev/null; then - info "✓ Сервис f7cloud-talk-recording включен для автозапуска" - else - warn "⚠ Сервис f7cloud-talk-recording не включен для автозапуска" - fi - - if systemctl is-active --quiet f7cloud-talk-recording 2>/dev/null; then - info "✓ Сервис f7cloud-talk-recording запущен" - else - warn "⚠ Сервис f7cloud-talk-recording не запущен" - fi -fi - -info "" -info "Следующие шаги:" -if [ -z "$F7CLOUD_URL" ] || [ -z "$F7CLOUD_SECRET" ]; then - info "1. Настройте F7cloud backend в конфигурации: $CONFIG_FILE" - info " Добавьте секцию [backend-id] с url и secret" -fi -info "2. Проверьте конфигурацию: $CONFIG_FILE" -info "3. Запустите сервис:" -info " sudo systemctl start f7cloud-talk-recording" -info "4. Включите автозапуск:" -info " sudo systemctl enable f7cloud-talk-recording" -info "5. Проверьте статус:" -info " sudo systemctl status f7cloud-talk-recording" -info "" -info "Для получения дополнительной информации см. INSTALL.md" -info ""