Improve install script according to modernization guidelines
- Добавлена функция safe_copy с проверками существования файлов - Улучшены проверки успешности операций копирования - Добавлены проверки после установки каждого компонента - Улучшены сообщения об успешной установке с проверкой компонентов - Добавлены проверки статуса сервиса после установки - Улучшена обработка ошибок на всех этапах установки
This commit is contained in:
parent
ec0a1b89c7
commit
d6a1f6432a
261
install.sh
261
install.sh
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user