";
-echo "
Диагностика конфигурации БД:";
-
-if (file_exists(__DIR__ . '/db_config.php')) {
- echo "✓ Файл db_config.php существует
";
- echo "✓ Размер файла: " . filesize(__DIR__ . '/db_config.php') . " байт
";
- echo "✓ Права доступа: " . substr(sprintf('%o', fileperms(__DIR__ . '/db_config.php')), -4) . "
";
-
- if (is_readable(__DIR__ . '/db_config.php')) {
- echo "✓ Файл читаемый
";
-
- try {
- require_once __DIR__ . '/db_config.php';
- echo "✓ Файл успешно подключен
";
- echo "✓ DB_HOST: " . (defined('DB_HOST') ? DB_HOST : 'НЕ ОПРЕДЕЛЕН') . "
";
- echo "✓ DB_USER: " . (defined('DB_USER') ? DB_USER : 'НЕ ОПРЕДЕЛЕН') . "
";
- echo "✓ DB_NAME: " . (defined('DB_NAME') ? DB_NAME : 'НЕ ОПРЕДЕЛЕН') . "
";
- } catch (Exception $e) {
- echo "✗ Ошибка подключения файла: " . htmlspecialchars($e->getMessage()) . "
";
+?>
+
+
+
+
+
+
Altcor - Сервер готов
+
+
+
+
+
🚀 Altcor - Сервер готов к работе
+
+
+ ✅ Система успешно установлена
+ PHP = phpversion() ?> работает корректно
+ Время сервера: = date('Y-m-d H:i:s T') ?>
+
+
+
+
+
🔧 Системная информация
+
Document Root: = $_SERVER['DOCUMENT_ROOT'] ?>
+
Server Software: = $_SERVER['SERVER_SOFTWARE'] ?? 'N/A' ?>
+
PHP Version: = phpversion() ?>
+
+
+
+
💾 База данных
+ ✅ Подключение успешно";
+ echo "
База: " . DB_NAME . "
";
+ echo "
Хост: " . DB_HOST . "
";
+ } catch (PDOException $e) {
+ echo "
❌ Ошибка подключения
";
+ echo "
" . htmlspecialchars($e->getMessage()) . "
";
+ }
+ ?>
+
+
+
+
+ 🎉 Установка завершена!
+ Система готова для развертывания вашего приложения Altcor.
+
+
+
+
EOF
- }
-
- log_step "Загрузка файлов приложения..."
- find "$WEBROOT" -type f ! -name "db_config.php" -delete 2>/dev/null || true
-
- if curl -f -L --max-time 30 -o "$WEBROOT/index.php" "$DOWNLOAD_URL" 2>/dev/null; then
- if ! head -n 1 "$WEBROOT/index.php" | grep -q "/dev/null; then
- create_fallback_index
- log_warning "Скачанный файл не является PHP-скриптом, создана резервная страница"
- else
- log_success "Файлы приложения загружены"
- fi
- else
- create_fallback_index
- log_warning "Не удалось загрузить файл с $DOWNLOAD_URL, создана резервная страница"
- fi
-
- log_step "Настройка прав доступа к файлам..."
- chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/index.php"
- chmod 644 "$WEBROOT/db_config.php"
- chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php"
+}
+# Создание .htaccess файла
+create_htaccess_file() {
+ log_info "Создание .htaccess файла..."
+
cat > "$WEBROOT/.htaccess" << 'EOF'
+# Altcor .htaccess Configuration
-
+# Безопасность
+
Require all denied
-
+
Require all denied
+# Сжатие
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json application/xml
+# Кэширование
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
@@ -1118,342 +1234,323 @@ EOF
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 month"
+ ExpiresByType image/webp "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
+ ExpiresByType font/woff "access plus 1 month"
+ ExpiresByType font/woff2 "access plus 1 month"
+# Заголовки безопасности
Header always set X-Content-Type-Options nosniff
- Header always set X-Frame-Options DENY
+ Header always set X-Frame-Options SAMEORIGIN
Header always set X-XSS-Protection "1; mode=block"
+ Header always set Referrer-Policy "strict-origin-when-cross-origin"
+# URL Rewriting
RewriteEngine On
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME} !-d
# RewriteRule ^(.*)$ index.php [QSA,L]
EOF
+}
- chown -R $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT"
- chmod -R 755 "$WEBROOT"
- chmod 644 "$WEBROOT/.htaccess" 2>/dev/null || true
- chmod 600 "$WEBROOT/db_config.php"
- log_success "Права доступа настроены"
-
- log_step "Настройка базы данных MariaDB..."
-
- if ! systemctl is-active --quiet mariadb; then
- log_error "MariaDB не запущен. Попытка запуска..."
- systemctl start mariadb
- sleep 3
-
- if ! systemctl is-active --quiet mariadb; then
- log_error "Не удалось запустить MariaDB"
- exit 1
- fi
- fi
-
- log_info "Выполнение базовой настройки безопасности MariaDB..."
-
- if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then
- log_info "Первичная настройка MariaDB (подключение без пароля доступно)..."
-
- MYSQL_SECURE_SCRIPT="/tmp/mysql_secure_$(date +%s).sql"
- cat > "$MYSQL_SECURE_SCRIPT" << MYSQL_SCRIPT
--- Устанавливаем пароль для root
-ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD';
-
--- Удаляем анонимных пользователей
-DELETE FROM mysql.user WHERE User='';
-
--- Удаляем root-доступ с удаленных хостов
-DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
-
--- Удаляем тестовую базу данных
-DROP DATABASE IF EXISTS test;
-DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
-
--- Создаем нашу базу данных
-CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
--- Даем права на новую базу данных
-GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
-
--- Применяем изменения
-FLUSH PRIVILEGES;
-MYSQL_SCRIPT
-
- if mysql -u root < "$MYSQL_SECURE_SCRIPT" >/dev/null 2>&1; then
- log_success "Первичная настройка MariaDB выполнена успешно"
- else
- log_error "Не удалось выполнить первичную настройку MariaDB"
- rm -f "$MYSQL_SECURE_SCRIPT"
- exit 1
- fi
- rm -f "$MYSQL_SECURE_SCRIPT"
-
- elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then
- log_info "MariaDB уже настроен с текущим паролем..."
-
- MYSQL_UPDATE_SCRIPT="/tmp/mysql_update_$(date +%s).sql"
- cat > "$MYSQL_UPDATE_SCRIPT" << MYSQL_SCRIPT
-CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
-FLUSH PRIVILEGES;
-MYSQL_SCRIPT
-
- if mysql -u root -p"$DB_PASSWORD" < "$MYSQL_UPDATE_SCRIPT" >/dev/null 2>&1; then
- log_success "База данных ALTCor создана/обновлена"
- else
- log_error "Не удалось обновить базу данных"
- rm -f "$MYSQL_UPDATE_SCRIPT"
- exit 1
- fi
- rm -f "$MYSQL_UPDATE_SCRIPT"
-
- else
- log_error "Не удалось подключиться к MariaDB ни с пустым паролем, ни с текущим паролем"
- log_info "Попытка сброса пароля root в MariaDB..."
-
- systemctl stop mariadb
-
- mysqld_safe --skip-grant-tables --skip-networking &
- MYSQLD_SAFE_PID=$!
-
- sleep 5
-
- MYSQL_RESET_SCRIPT="/tmp/mysql_reset_$(date +%s).sql"
- cat > "$MYSQL_RESET_SCRIPT" << MYSQL_SCRIPT
-USE mysql;
-UPDATE user SET password=PASSWORD('$DB_PASSWORD') WHERE User='root';
-UPDATE user SET plugin='mysql_native_password' WHERE User='root';
-FLUSH PRIVILEGES;
-MYSQL_SCRIPT
-
- if mysql -u root < "$MYSQL_RESET_SCRIPT" >/dev/null 2>&1; then
- log_info "Пароль root сброшен"
-
- kill $MYSQLD_SAFE_PID 2>/dev/null || true
- sleep 2
- killall mysqld_safe 2>/dev/null || true
- killall mysqld 2>/dev/null || true
- sleep 3
-
- systemctl start mariadb
- sleep 3
-
- if systemctl is-active --quiet mariadb && mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then
- MYSQL_FINAL_SCRIPT="/tmp/mysql_final_$(date +%s).sql"
- cat > "$MYSQL_FINAL_SCRIPT" << MYSQL_SCRIPT
-CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
-FLUSH PRIVILEGES;
-MYSQL_SCRIPT
-
- if mysql -u root -p"$DB_PASSWORD" < "$MYSQL_FINAL_SCRIPT" >/dev/null 2>&1; then
- log_success "MariaDB настроен после сброса пароля"
- else
- log_error "Не удалось создать базу данных после сброса пароля"
- exit 1
- fi
- rm -f "$MYSQL_FINAL_SCRIPT"
- else
- log_error "MariaDB не запустился после сброса пароля"
- exit 1
- fi
- else
- log_error "Не удалось сбросить пароль root в MariaDB"
- kill $MYSQLD_SAFE_PID 2>/dev/null || true
- exit 1
- fi
- rm -f "$MYSQL_RESET_SCRIPT"
- fi
-
- log_success "База данных настроена"
-
- log_step "Проверка конфигурации Apache..."
- if [ "$DISTRO_FAMILY" = "debian" ]; then
- if ! apache2ctl configtest >/dev/null 2>&1; then
- log_error "Конфигурация Apache содержит ошибки."
- apache2ctl configtest # Показываем ошибки для диагностики
- exit 1
- fi
-
- WEBSERVER_SERVICE="apache2"
+# Настройка прав доступа к файлам
+setup_file_permissions() {
+ log_info "Настройка прав доступа к файлам..."
- elif [ "$DISTRO_FAMILY" = "rhel" ]; then
- # Для Rocky Linux/RHEL сначала проверим синтаксис конфигурации
- if ! httpd -t >/dev/null 2>&1; then
- log_error "Конфигурация Apache (httpd) содержит ошибки:"
- echo ""
- httpd -t # Показываем детали ошибок
- echo ""
- log_info "Попытка исправления..."
-
- # Проверяем наличие основных модулей
- if ! httpd -M 2>/dev/null | grep -q "rewrite_module"; then
- echo "LoadModule rewrite_module modules/mod_rewrite.so" >> /etc/httpd/conf.d/altcor.conf
- fi
-
- # Повторная проверка
- if ! httpd -t >/dev/null 2>&1; then
- log_error "Не удалось исправить конфигурацию Apache:"
- httpd -t
- exit 1
- else
- log_success "Конфигурация исправлена"
- fi
- fi
-
- WEBSERVER_SERVICE="httpd"
- fi
- log_success "Конфигурация Apache проверена"
+ # Установка владельца и группы
+ chown -R "$WEBSERVER_USER:$WEBSERVER_USER" "$WEBROOT"
+
+ # Установка прав доступа
+ find "$WEBROOT" -type d -exec chmod 755 {} \;
+ find "$WEBROOT" -type f -exec chmod 644 {} \;
+
+ # Специальные права для конфигурации БД
+ chmod 600 "$WEBROOT/db_config.php"
+
+ log_success "Права доступа настроены"
+}
+# Запуск и включение сервисов
+start_services() {
log_step "Запуск и включение сервисов..."
+
+ local services_to_restart=""
+ local services_to_enable=""
+
+ # Определяем сервисы для перезапуска
if [ "$DISTRO_FAMILY" = "debian" ]; then
- systemctl restart apache2 >/dev/null 2>&1
- systemctl enable apache2 >/dev/null 2>&1
- elif [ "$DISTRO_FAMILY" = "rhel" ]; then
- # Сначала запускаем PHP-FPM, потом Apache
- if [ -n "$PHP_FPM_SERVICE" ]; then
- systemctl restart $PHP_FPM_SERVICE >/dev/null 2>&1
- systemctl enable $PHP_FPM_SERVICE >/dev/null 2>&1
- fi
- systemctl restart httpd >/dev/null 2>&1
- systemctl enable httpd >/dev/null 2>&1
+ services_to_restart="apache2 mariadb"
+ services_to_enable="apache2 mariadb"
+ else
+ services_to_restart="$PHP_FPM_SERVICE httpd mariadb"
+ services_to_enable="$PHP_FPM_SERVICE httpd mariadb"
fi
+
+ # Добавляем Redis
+ if systemctl list-unit-files | grep -q "redis-server.service"; then
+ services_to_restart="$services_to_restart redis-server"
+ services_to_enable="$services_to_enable redis-server"
+ elif systemctl list-unit-files | grep -q "redis.service"; then
+ services_to_restart="$services_to_restart redis"
+ services_to_enable="$services_to_enable redis"
+ fi
+
+ # Перезапуск сервисов
+ for service in $services_to_restart; do
+ if safe_execute "Перезапуск $service" systemctl restart "$service"; then
+ log_success "$service перезапущен"
+ else
+ log_error "Не удалось перезапустить $service"
+ fi
+ done
+
+ # Включение в автозагрузку
+ for service in $services_to_enable; do
+ safe_execute "Включение $service в автозагрузку" systemctl enable "$service" || true
+ done
+
+ log_success "Все сервисы настроены"
+}
- systemctl restart mariadb >/dev/null 2>&1
- systemctl restart redis-server >/dev/null 2>&1 || systemctl restart redis >/dev/null 2>&1 || true
-
- systemctl enable mariadb >/dev/null 2>&1
- systemctl enable redis-server >/dev/null 2>&1 || systemctl enable redis >/dev/null 2>&1 || true
-
- log_success "Все сервисы запущены и добавлены в автозагрузку"
-
- # В секции финальной проверки добавьте проверку PHP-FPM:
+# Финальная проверка работоспособности
+final_verification() {
log_step "Финальная проверка работоспособности..."
- if ! systemctl is-active --quiet $WEBSERVER_SERVICE; then
- log_error "Веб-сервер не запущен"
- exit 1
+
+ local errors=0
+
+ # Проверка веб-сервера
+ if ! systemctl is-active --quiet "$WEBSERVER_SERVICE"; then
+ log_error "Веб-сервер ($WEBSERVER_SERVICE) не запущен"
+ ((errors++))
+ else
+ log_success "Веб-сервер работает"
fi
-
+
+ # Проверка PHP-FPM (для RHEL семейства)
if [ "$DISTRO_FAMILY" = "rhel" ] && [ -n "$PHP_FPM_SERVICE" ]; then
- if ! systemctl is-active --quiet $PHP_FPM_SERVICE; then
- log_error "PHP-FPM не запущен"
- exit 1
+ if ! systemctl is-active --quiet "$PHP_FPM_SERVICE"; then
+ log_error "PHP-FPM ($PHP_FPM_SERVICE) не запущен"
+ ((errors++))
+ else
+ log_success "PHP-FPM работает"
fi
fi
-
+
+ # Проверка MariaDB
if ! systemctl is-active --quiet mariadb; then
log_error "MariaDB не запущен"
- exit 1
- fi
-
- if ! php -r "echo phpversion();" >/dev/null 2>&1; then
- log_error "PHP не работает корректно"
- exit 1
- fi
-
- if ! mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 1;" >/dev/null 2>&1; then
- log_error "Не удается подключиться к базе данных ALTCor"
- exit 1
- fi
-
- log_success "Все компоненты работают корректно"
-
- log_step "Сохранение учетных данных..."
- DB_CREDENTIALS_FILE="/root/.db_password"
- cat > "$DB_CREDENTIALS_FILE" << EOF
-
-DB_HOST=localhost
-DB_USER=root
-DB_PASSWORD=$DB_PASSWORD
-DB_NAME=ALTCor
-EOF
-
- chmod 600 "$DB_CREDENTIALS_FILE"
- log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE"
-
- IP_ADDR=$(hostname -I | awk '{print $1}')
-
- echo ""
- if [ "$REINSTALL" = true ]; then
- log_success "Переустановка Altcor успешно завершена."
+ ((errors++))
else
- log_success "Установка Altcor успешно завершена."
+ log_success "MariaDB работает"
fi
+
+ # Проверка PHP
+ if ! php -r "echo 'PHP OK';" >/dev/null 2>&1; then
+ log_error "PHP не работает корректно"
+ ((errors++))
+ else
+ log_success "PHP работает корректно"
+ fi
+
+ # Проверка подключения к базе данных
+ if [ -f "$WEBROOT/db_config.php" ]; then
+ if php -r "
+ require '$WEBROOT/db_config.php';
+ try {
+ \$pdo = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=' . DB_CHARSET, DB_USER, DB_PASS);
+ echo 'DB OK';
+ } catch (Exception \$e) {
+ exit(1);
+ }
+ " >/dev/null 2>&1; then
+ log_success "Подключение к базе данных работает"
+ else
+ log_error "Не удается подключиться к базе данных"
+ ((errors++))
+ fi
+ else
+ log_error "Файл конфигурации БД не найден"
+ ((errors++))
+ fi
+
+ if [ $errors -eq 0 ]; then
+ log_success "Все компоненты работают корректно"
+ return 0
+ else
+ log_error "Обнаружено $errors ошибок в работе системы"
+ return 1
+ fi
+}
+
+# Отображение итоговой информации
+show_final_info() {
+ local db_password="$1"
+ local ip_addr=$(hostname -I | awk '{print $1}' 2>/dev/null || echo "N/A")
+
echo ""
- echo " Доступ к сайту:"
+ echo "=============================================================="
+ if [ "$REINSTALL" = true ]; then
+ log_success "Переустановка Altcor успешно завершена!"
+ else
+ log_success "Установка Altcor успешно завершена!"
+ fi
+ echo "=============================================================="
+ echo ""
+ echo -e "${CYAN}🌐 Доступ к сайту:${NC}"
echo " • http://localhost/"
- echo " • http://$IP_ADDR/"
+ echo " • http://$ip_addr/"
echo ""
- echo " Доступ к БД:"
+ echo -e "${CYAN}💾 Доступ к БД:${NC}"
echo " • Хост: localhost"
echo " • Логин: root"
- echo " • Пароль: $DB_PASSWORD"
+ echo " • Пароль: $db_password"
echo " • База данных: ALTCor"
echo ""
- echo " Расположение файлов:"
+ echo -e "${CYAN}📁 Расположение файлов:${NC}"
echo " • Веб-корень: $WEBROOT"
echo " • Конфигурация БД: $WEBROOT/db_config.php"
echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/"
+ echo " • Лог установки: $LOG_FILE"
echo ""
- echo " Дополнительная информация:"
- echo " • Учетные данные БД: $DB_CREDENTIALS_FILE"
- echo " • Для удаления: ./install.sh -u"
- echo " • Для переустановки: ./install.sh -r"
+ echo -e "${CYAN}ℹ️ Дополнительная информация:${NC}"
+ echo " • Учетные данные БД: /root/.db_password"
+ echo " • Для удаления: $0 -u"
+ echo " • Для переустановки: $0 -r"
+ echo ""
+ echo -e "${GREEN}Система готова к работе!${NC}"
+ echo "=============================================================="
echo ""
}
-if [[ $EUID -ne 0 ]]; then
- log_error "Запустите этот скрипт вместе с sudo."
- exit 1
-fi
-
-if [ -f /etc/os-release ]; then
- . /etc/os-release
- DISTRO="$ID"
- FAMILY="$ID_LIKE"
-else
- log_error "Не удалось определить дистрибутив."
- exit 1
-fi
-
-if echo "$DISTRO $FAMILY" | grep -qi "debian\|ubuntu"; then
- PKG_MANAGER="apt"
- DISTRO_FAMILY="debian"
-elif echo "$DISTRO $FAMILY" | grep -qi "rhel\|centos\|fedora"; then
- PKG_MANAGER="dnf"
- DISTRO_FAMILY="rhel"
- if ! command -v dnf >/dev/null 2>&1; then
- PKG_MANAGER="yum"
+# Основная функция установки
+proceed_with_installation() {
+ echo ""
+ echo "🚀 Начинаем установку Altcor..."
+ echo ""
+
+ # Обновление системы и установка базовых пакетов
+ update_system
+
+ # Настройка репозиториев PHP 8.3
+ setup_php_repositories
+
+ # Установка основных компонентов
+ install_components
+
+ # Настройка Apache и PHP
+ configure_apache_php
+
+ # Настройка базы данных
+ local db_password
+ db_password=$(configure_database)
+
+ # Настройка веб-приложения
+ setup_web_application
+
+ # Запуск сервисов
+ start_services
+
+ # Финальная проверка
+ if final_verification; then
+ show_final_info "$db_password"
+ else
+ log_error "Установка завершена с ошибками. Проверьте лог: $LOG_FILE"
+ exit 1
fi
-else
- log_error "Ваш дистрибутив '$DISTRO' не поддерживается. Поддерживаются: Debian/Ubuntu, CentOS/RHEL/Fedora."
- exit 1
-fi
+}
-if [ "$UNINSTALL" = true ]; then
- full_uninstall
-elif [ "$REINSTALL" = true ]; then
- echo ""
- log_step "Начинаем переустановку Altcor..."
- echo ""
+# Интерактивный выбор действий при обнаружении существующей установки
+handle_existing_installation() {
+ local need_reinstall=$1
- full_uninstall
-
- proceed_with_installation
-else
- check_result=0
- check_existing_installation || check_result=$?
-
- if [ $check_result -eq 1 ]; then
+ if [ $need_reinstall -eq 0 ]; then
if [ "$REINSTALL" = true ]; then
- full_uninstall
+ log_warning "Обнаружена существующая установка. Начинаем переустановку..."
+ return 1 # Требуется переустановка
+ else
+ log_success "Все компоненты уже установлены и работают корректно"
+ echo ""
+ echo -e "${YELLOW}Altcor уже полностью установлен и функционирует.${NC}"
+ echo ""
+ read -p "Хотите переустановить систему? [y/n]: " -n 1 -r
+ echo ""
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
+ log_info "Начинаем переустановку по запросу пользователя..."
+ REINSTALL=true
+ return 1 # Требуется переустановка
+ else
+ echo ""
+ log_info "Переустановка отменена. Система остается без изменений."
+ echo ""
+ echo "Для принудительной переустановки используйте: $0 -r"
+ echo ""
+ exit 0
+ fi
fi
+ else
+ log_warning "Обнаружены проблемы с установленными компонентами."
+ echo ""
+ read -p "Хотите переустановить всю систему? [y/n]: " -n 1 -r
+ echo ""
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
+ log_info "Начинаем полную переустановку..."
+ REINSTALL=true
+ return 1 # Требуется переустановка
+ else
+ log_info "Продолжаем обычную установку/обновление компонентов..."
+ return 0 # Продолжить обычную установку
+ fi
+ fi
+}
+
+# Главная функция
+main() {
+ # Инициализация
+ log_to_file "=== Начало установки Altcor $(date) ==="
+
+ # Проверка прав администратора
+ check_root
+
+ # Определение дистрибутива
+ detect_distro
+
+ # Обработка различных режимов работы
+ if [ "$UNINSTALL" = true ]; then
+ full_uninstall
+ elif [ "$REINSTALL" = true ]; then
+ echo ""
+ log_step "Начинаем переустановку Altcor..."
+ echo ""
+ full_uninstall
proceed_with_installation
- elif [ $check_result -eq 0 ]; then
- proceed_with_installation
-fi
\ No newline at end of file
+ else
+ # Проверка существующей установки
+ local check_result=0
+ check_existing_installation || check_result=$?
+
+ local action_result=0
+ handle_existing_installation $check_result || action_result=$?
+
+ if [ $action_result -eq 1 ]; then
+ if [ "$REINSTALL" = true ]; then
+ full_uninstall
+ fi
+ proceed_with_installation
+ elif [ $action_result -eq 0 ]; then
+ proceed_with_installation
+ fi
+ fi
+
+ log_to_file "=== Завершение установки Altcor $(date) ==="
+}
+
+# Обработка сигналов для корректного завершения
+trap 'log_error "Установка прервана пользователем"; exit 130' INT TERM
+
+# Запуск основной функции
+main "$@"
\ No newline at end of file