Improve install script according to modernization guidelines

- Добавлена функция safe_copy с проверками существования файлов
- Улучшены проверки успешности операций копирования
- Добавлены проверки после установки каждого компонента
- Улучшены сообщения об успешной установке с проверкой компонентов
- Добавлены проверки статуса сервиса после установки
- Улучшена обработка ошибок на всех этапах установки
This commit is contained in:
F7cloud 2026-02-20 09:48:36 +00:00
parent ec0a1b89c7
commit d6a1f6432a

View File

@ -37,6 +37,33 @@ error() {
echo -e "${RED}[ERROR]${NC} $1" 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() { show_help() {
echo "Использование: $0 [OPTIONS]" echo "Использование: $0 [OPTIONS]"
@ -176,9 +203,33 @@ info "Установка Firefox ESR..."
if [ -d "dependencies/firefox-esr" ] && [ -f "dependencies/firefox-esr/firefox" ]; then if [ -d "dependencies/firefox-esr" ] && [ -f "dependencies/firefox-esr/firefox" ]; then
info "Использование Firefox ESR из dependencies..." 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 ln -sf /opt/firefox-esr/firefox /usr/local/bin/firefox-esr
chmod +x /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" info "Firefox ESR установлен в /opt/firefox-esr"
else else
warn "Firefox ESR не найден в dependencies/, пытаемся скачать..." warn "Firefox ESR не найден в dependencies/, пытаемся скачать..."
@ -212,13 +263,38 @@ else
if [ -f firefox-esr.tar.bz2 ]; then if [ -f firefox-esr.tar.bz2 ]; then
info "Распаковка Firefox ESR..." 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 mv firefox firefox-esr
rm firefox-esr.tar.bz2 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 ln -sf /opt/firefox-esr/firefox /usr/local/bin/firefox-esr
chmod +x /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" info "Firefox ESR установлен в /opt/firefox-esr"
else else
error "Не удалось скачать Firefox ESR" error "Не удалось скачать Firefox ESR"
@ -232,16 +308,54 @@ fi
info "Установка Geckodriver..." info "Установка Geckodriver..."
if [ -f "dependencies/geckodriver" ]; then 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 chmod +x /usr/local/bin/geckodriver
# Проверяем успешность установки
if [ ! -f "/usr/local/bin/geckodriver" ]; then
error "Geckodriver не найден после установки"
exit 1
fi
info "Geckodriver установлен в /usr/local/bin/geckodriver" info "Geckodriver установлен в /usr/local/bin/geckodriver"
elif [ -f "dependencies/geckodriver.tar.gz" ]; then elif [ -f "dependencies/geckodriver.tar.gz" ]; then
info "Распаковка geckodriver из архива..." info "Распаковка geckodriver из архива..."
cd dependencies 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 chmod +x geckodriver
cp geckodriver /usr/local/bin/geckodriver
if ! safe_copy "geckodriver" "/usr/local/bin/geckodriver"; then
error "Не удалось скопировать Geckodriver"
exit 1
fi
cd .. cd ..
# Проверяем успешность установки
if [ ! -f "/usr/local/bin/geckodriver" ]; then
error "Geckodriver не найден после установки"
exit 1
fi
info "Geckodriver установлен в /usr/local/bin/geckodriver" info "Geckodriver установлен в /usr/local/bin/geckodriver"
else else
warn "Geckodriver не найден в dependencies/, пытаемся скачать..." warn "Geckodriver не найден в dependencies/, пытаемся скачать..."
@ -283,10 +397,31 @@ else
if [ -f geckodriver.tar.gz ]; then if [ -f geckodriver.tar.gz ]; then
info "Распаковка Geckodriver..." 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 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 rm geckodriver.tar.gz
# Проверяем успешность установки
if [ ! -f "/usr/local/bin/geckodriver" ]; then
error "Geckodriver не найден после установки"
exit 1
fi
info "Geckodriver установлен в /usr/local/bin/geckodriver" info "Geckodriver установлен в /usr/local/bin/geckodriver"
else else
error "Не удалось скачать Geckodriver" error "Не удалось скачать Geckodriver"
@ -300,18 +435,48 @@ fi
info "Создание виртуального окружения Python..." info "Создание виртуального окружения Python..."
if [ ! -d "venv" ]; then 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 "Виртуальное окружение создано" info "Виртуальное окружение создано"
else else
warn "Виртуальное окружение уже существует, пропускаем создание..." warn "Виртуальное окружение уже существует, пропускаем создание..."
# Проверяем, что существующее окружение валидно
if [ ! -f "venv/bin/activate" ]; then
error "Существующее виртуальное окружение повреждено"
exit 1
fi
fi fi
# Активация виртуального окружения и установка зависимостей # Активация виртуального окружения и установка зависимостей
info "Установка Python-зависимостей..." info "Установка Python-зависимостей..."
source venv/bin/activate 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-зависимости установлены" info "Python-зависимости установлены"
@ -319,15 +484,38 @@ info "Python-зависимости установлены"
info "Создание пользователя f7cloud-talk-recording..." info "Создание пользователя f7cloud-talk-recording..."
if ! id "f7cloud-talk-recording" &>/dev/null; then 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 создан" info "Пользователь f7cloud-talk-recording создан"
else else
warn "Пользователь f7cloud-talk-recording уже существует" warn "Пользователь f7cloud-talk-recording уже существует"
fi fi
# Создание директорий для пользователя # Создание директорий для пользователя
mkdir -p /var/lib/f7cloud-talk-recording if ! mkdir -p /var/lib/f7cloud-talk-recording; then
chown f7cloud-talk-recording:f7cloud-talk-recording /var/lib/f7cloud-talk-recording 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. Настройка конфигурации # 6. Настройка конфигурации
info "Настройка конфигурации..." info "Настройка конфигурации..."
@ -337,7 +525,22 @@ mkdir -p /etc/f7cloud-talk-recording
CONFIG_FILE="/etc/f7cloud-talk-recording/server.conf" CONFIG_FILE="/etc/f7cloud-talk-recording/server.conf"
if [ ! -f "$CONFIG_FILE" ]; then 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" info "Конфигурационный файл создан в $CONFIG_FILE"
# Настройка параметров конфигурации # Настройка параметров конфигурации
@ -469,6 +672,17 @@ info ""
info "==========================================" info "=========================================="
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 "Настроенные параметры:" info "Настроенные параметры:"
info " HPB URL: $HPB_URL" info " HPB URL: $HPB_URL"
@ -476,6 +690,23 @@ info " Listen: $LISTEN_ADDRESS"
if [ -n "$F7CLOUD_URL" ]; then if [ -n "$F7CLOUD_URL" ]; then
info " F7cloud URL: $F7CLOUD_URL" info " F7cloud URL: $F7CLOUD_URL"
fi 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 ""
info "Следующие шаги:" info "Следующие шаги:"
if [ -z "$F7CLOUD_URL" ] || [ -z "$F7CLOUD_SECRET" ]; then if [ -z "$F7CLOUD_URL" ] || [ -z "$F7CLOUD_SECRET" ]; then