diff --git a/install.sh b/install.sh index 028c3da..f0f943b 100755 --- a/install.sh +++ b/install.sh @@ -37,6 +37,33 @@ 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]" @@ -176,9 +203,33 @@ info "Установка Firefox ESR..." if [ -d "dependencies/firefox-esr" ] && [ -f "dependencies/firefox-esr/firefox" ]; then info "Использование Firefox ESR из dependencies..." - cp -r dependencies/firefox-esr /opt/firefox-esr + + # Проверяем существование директории перед копированием + 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 ! 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/, пытаемся скачать..." @@ -212,13 +263,38 @@ else if [ -f firefox-esr.tar.bz2 ]; then info "Распаковка Firefox ESR..." - tar -xjf firefox-esr.tar.bz2 + 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 - cp -r firefox-esr /opt/firefox-esr + 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" @@ -232,16 +308,54 @@ fi info "Установка Geckodriver..." if [ -f "dependencies/geckodriver" ]; then - cp dependencies/geckodriver /usr/local/bin/geckodriver + 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 - tar -xzf geckodriver.tar.gz + + if ! tar -xzf geckodriver.tar.gz; then + error "Не удалось распаковать Geckodriver" + exit 1 + fi + + if [ ! -f geckodriver ]; then + error "Файл geckodriver не найден после распаковки" + exit 1 + fi + chmod +x geckodriver - cp geckodriver /usr/local/bin/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/, пытаемся скачать..." @@ -283,10 +397,31 @@ else if [ -f geckodriver.tar.gz ]; then info "Распаковка Geckodriver..." - tar -xzf geckodriver.tar.gz + if ! tar -xzf geckodriver.tar.gz; then + error "Не удалось распаковать Geckodriver" + exit 1 + fi + + if [ ! -f geckodriver ]; then + error "Файл geckodriver не найден после распаковки" + exit 1 + fi + chmod +x geckodriver - cp geckodriver /usr/local/bin/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" @@ -300,18 +435,48 @@ fi info "Создание виртуального окружения Python..." if [ ! -d "venv" ]; then - python3 -m venv venv + 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 -pip install --upgrade pip -pip install -e . + +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-зависимости установлены" @@ -319,15 +484,38 @@ info "Python-зависимости установлены" info "Создание пользователя f7cloud-talk-recording..." if ! id "f7cloud-talk-recording" &>/dev/null; then - useradd -r -s /bin/false -d /var/lib/f7cloud-talk-recording f7cloud-talk-recording + 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 # Создание директорий для пользователя -mkdir -p /var/lib/f7cloud-talk-recording -chown f7cloud-talk-recording:f7cloud-talk-recording /var/lib/f7cloud-talk-recording +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 "Настройка конфигурации..." @@ -337,7 +525,22 @@ mkdir -p /etc/f7cloud-talk-recording CONFIG_FILE="/etc/f7cloud-talk-recording/server.conf" if [ ! -f "$CONFIG_FILE" ]; then - cp server.conf.in "$CONFIG_FILE" + 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" # Настройка параметров конфигурации @@ -469,6 +672,17 @@ 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" @@ -476,6 +690,23 @@ 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