diff --git a/install.sh b/install.sh index 8805b6f..2fe6eb5 100644 --- a/install.sh +++ b/install.sh @@ -4,21 +4,16 @@ clear set -e UNINSTALL=false -FORCE_REINSTALL=false -while getopts ":uf" opt; do +while getopts ":u" opt; do case $opt in u) UNINSTALL=true ;; - f) - FORCE_REINSTALL=true - ;; \?) echo -e "${RED}[Ошибка]${NC} Неизвестный параметр: -$OPTARG" >&2 - echo "Использование: $0 [-u] [-f]" + echo "Использование: $0 [-u]" echo " -u Полное удаление" - echo " -f Принудительная переустановка" exit 1 ;; esac @@ -162,49 +157,27 @@ check_existing_installation() { echo "" if [ "$need_reinstall" = false ] && [ "$apache_status" -eq 0 ] && [ "$php_status" -eq 0 ] && [ "$mariadb_status" -eq 0 ]; then - log_success "Все компоненты уже установлены и работают корректно" - echo "" - - if [ "$FORCE_REINSTALL" = false ]; then - echo "Система уже настроена и работает." - echo "" - read -p "Выполнить полную переустановку? [y/n]: " choice - - case $choice in - [Yy]|[Yy][Ee][Ss]) - log_info "Начинаем полную переустановку..." - return 0 - ;; - [Nn]|[Nn][Oo]) - log_info "Переустановка отменена." - - IP_ADDR=$(hostname -I | awk '{print $1}') - if [ -f "/root/.db_password" ]; then - EXISTING_PASSWORD=$(grep "DB_PASSWORD=" /root/.db_password | cut -d'=' -f2) - else - EXISTING_PASSWORD="(не найден в /root/.db_password)" - fi - - echo "" - echo "🌐 Доступ к сайту:" - echo " • http://localhost/" - echo " • http://$IP_ADDR/" - echo "" - echo "🗄️ Доступ к БД:" - echo " • Логин: root" - echo " • Пароль: $EXISTING_PASSWORD" - echo "" - exit 0 - ;; - *) - log_info "Неверный ввод. Переустановка отменена." - exit 0 - ;; - esac + log_success "Все компоненты уже установлены и работают корректно" + echo "" + echo "Altcor уже установлен. Установка остановлена." + echo "" + + IP_ADDR=$(hostname -I | awk '{print $1}') + if [ -f "/root/.db_password" ]; then + EXISTING_PASSWORD=$(grep "DB_PASSWORD=" /root/.db_password | cut -d'=' -f2) else - log_info "Форсируем переустановку всех компонентов..." - return 0 + EXISTING_PASSWORD="(не найден в /root/.db_password)" fi + + echo "🌐 Доступ к сайту:" + echo " • http://localhost/" + echo " • http://$IP_ADDR/" + echo "" + echo "🗄️ Доступ к БД:" + echo " • Логин: root" + echo " • Пароль: $EXISTING_PASSWORD" + echo "" + exit 0 else log_info "Обнаружены отсутствующие или неработающие компоненты. Продолжаем установку..." return 0 @@ -275,166 +248,155 @@ if [ "$UNINSTALL" = true ]; then fi check_existing_installation -INSTALL_TYPE=$? - -if [ "$INSTALL_TYPE" -eq 1 ]; then - SKIP_PACKAGE_INSTALL=true -else - SKIP_PACKAGE_INSTALL=false -fi DB_PASSWORD=$(generate_password) -if [ "$SKIP_PACKAGE_INSTALL" = false ]; then - log_step "Остановка конфликтующих сервисов..." - systemctl stop nginx httpd apache2 php*-fpm mariadb mysql 2>/dev/null || true - systemctl disable nginx httpd 2>/dev/null || true +log_step "Остановка конфликтующих сервисов..." +systemctl stop nginx httpd apache2 php*-fpm mariadb mysql 2>/dev/null || true +systemctl disable nginx httpd 2>/dev/null || true - log_info "Ожидание полной остановки служб..." - sleep 3 +log_info "Ожидание полной остановки служб..." +sleep 3 - echo "" - echo "Начинаем установку Altcor..." - echo "" +echo "" +echo "Начинаем установку Altcor..." +echo "" - log_step "Удаление старых версий пакетов..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - apt remove -y nginx nginx-common nginx-core >/dev/null 2>&1 || true - apt remove -y php7.* php8.0* php8.1* php8.2* libapache2-mod-php7.* libapache2-mod-php8.0* libapache2-mod-php8.1* libapache2-mod-php8.2* >/dev/null 2>&1 || true - env DEBIAN_FRONTEND=noninteractive apt remove --purge -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" mariadb* mysql* /dev/null 2>&1 || true - apt autoremove -y >/dev/null 2>&1 || true - rm -rf /var/lib/mysql* /etc/mysql* /var/log/mysql* 2>/dev/null || true - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER remove -y nginx >/dev/null 2>&1 || true - $PKG_MANAGER remove -y php php7* php80* php81* php82* >/dev/null 2>&1 || true - $PKG_MANAGER remove -y mariadb* mysql* >/dev/null 2>&1 || true - rm -rf /var/lib/mysql* /etc/my.cnf* /var/log/mysql* 2>/dev/null || true - fi - log_success "Старые пакеты удалены" +log_step "Удаление старых версий пакетов..." +if [ "$DISTRO_FAMILY" = "debian" ]; then + apt remove -y nginx nginx-common nginx-core >/dev/null 2>&1 || true + apt remove -y php7.* php8.0* php8.1* php8.2* libapache2-mod-php7.* libapache2-mod-php8.0* libapache2-mod-php8.1* libapache2-mod-php8.2* >/dev/null 2>&1 || true + env DEBIAN_FRONTEND=noninteractive apt remove --purge -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" mariadb* mysql* /dev/null 2>&1 || true + apt autoremove -y >/dev/null 2>&1 || true + rm -rf /var/lib/mysql* /etc/mysql* /var/log/mysql* 2>/dev/null || true +elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER remove -y nginx >/dev/null 2>&1 || true + $PKG_MANAGER remove -y php php7* php80* php81* php82* >/dev/null 2>&1 || true + $PKG_MANAGER remove -y mariadb* mysql* >/dev/null 2>&1 || true + rm -rf /var/lib/mysql* /etc/my.cnf* /var/log/mysql* 2>/dev/null || true +fi +log_success "Старые пакеты удалены" - log_step "Обновление списка пакетов..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - apt update -y >/dev/null 2>&1 - apt install -y software-properties-common lsb-release ca-certificates curl wget gnupg2 apt-transport-https unzip >/dev/null 2>&1 - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER update -y >/dev/null 2>&1 - $PKG_MANAGER install -y epel-release >/dev/null 2>&1 || true - $PKG_MANAGER install -y curl wget gnupg2 unzip >/dev/null 2>&1 - fi - log_success "Система обновлена, базовые пакеты установлены" +log_step "Обновление списка пакетов..." +if [ "$DISTRO_FAMILY" = "debian" ]; then + apt update -y >/dev/null 2>&1 + apt install -y software-properties-common lsb-release ca-certificates curl wget gnupg2 apt-transport-https unzip >/dev/null 2>&1 +elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER update -y >/dev/null 2>&1 + $PKG_MANAGER install -y epel-release >/dev/null 2>&1 || true + $PKG_MANAGER install -y curl wget gnupg2 unzip >/dev/null 2>&1 +fi +log_success "Система обновлена, базовые пакеты установлены" - log_step "Добавление репозиториев для PHP 8.3..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - if ! apt-cache show php8.3 &>/dev/null; then - log_info "Добавление PPA ondrej/php..." - if ! add-apt-repository ppa:ondrej/php -y >/dev/null 2>&1; then - log_error "Не удалось добавить PPA ondrej/php." - exit 1 - fi - - apt update -y >/dev/null 2>&1 - - if ! apt-cache show php8.3 &>/dev/null; then - log_error "PHP 8.3 все еще недоступен после добавления PPA." - exit 1 - fi - log_success "PPA добавлен успешно" - else - log_success "PHP 8.3 уже доступен в репозиториях" - fi - - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - log_info "Добавление репозитория Remi..." - if [ "$DISTRO" = "fedora" ]; then - $PKG_MANAGER install -y https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm >/dev/null 2>&1 || true - else - $PKG_MANAGER install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm >/dev/null 2>&1 || true - fi - - if command -v dnf >/dev/null 2>&1; then - dnf module reset php -y >/dev/null 2>&1 || true - dnf module enable php:remi-8.3 -y >/dev/null 2>&1 || true - fi - - if ! $PKG_MANAGER list available php83* php8.3* >/dev/null 2>&1; then - log_error "PHP 8.3 недоступен в репозиториях." +log_step "Добавление репозиториев для PHP 8.3..." +if [ "$DISTRO_FAMILY" = "debian" ]; then + if ! apt-cache show php8.3 &>/dev/null; then + log_info "Добавление PPA ondrej/php..." + if ! add-apt-repository ppa:ondrej/php -y >/dev/null 2>&1; then + log_error "Не удалось добавить PPA ondrej/php." exit 1 fi - log_success "Репозиторий Remi добавлен успешно" + + apt update -y >/dev/null 2>&1 + + if ! apt-cache show php8.3 &>/dev/null; then + log_error "PHP 8.3 все еще недоступен после добавления PPA." + exit 1 + fi + log_success "PPA добавлен успешно" + else + log_success "PHP 8.3 уже доступен в репозиториях" fi + +elif [ "$DISTRO_FAMILY" = "rhel" ]; then + log_info "Добавление репозитория Remi..." + if [ "$DISTRO" = "fedora" ]; then + $PKG_MANAGER install -y https://rpms.remirepo.net/fedora/remi-release-$(rpm -E %fedora).rpm >/dev/null 2>&1 || true + else + $PKG_MANAGER install -y https://rpms.remirepo.net/enterprise/remi-release-$(rpm -E %rhel).rpm >/dev/null 2>&1 || true + fi + + if command -v dnf >/dev/null 2>&1; then + dnf module reset php -y >/dev/null 2>&1 || true + dnf module enable php:remi-8.3 -y >/dev/null 2>&1 || true + fi + + if ! $PKG_MANAGER list available php83* php8.3* >/dev/null 2>&1; then + log_error "PHP 8.3 недоступен в репозиториях." + exit 1 + fi + log_success "Репозиторий Remi добавлен успешно" +fi - log_step "Установка Apache..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - apt install -y apache2 >/dev/null 2>&1 - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER install -y httpd >/dev/null 2>&1 - fi - log_success "Apache установлен" +log_step "Установка Apache..." +if [ "$DISTRO_FAMILY" = "debian" ]; then + apt install -y apache2 >/dev/null 2>&1 +elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER install -y httpd >/dev/null 2>&1 +fi +log_success "Apache установлен" - log_step "Установка MariaDB..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - apt install -y mariadb-server >/dev/null 2>&1 - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER install -y mariadb-server >/dev/null 2>&1 - fi +log_step "Установка MariaDB..." +if [ "$DISTRO_FAMILY" = "debian" ]; then + apt install -y mariadb-server >/dev/null 2>&1 +elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER install -y mariadb-server >/dev/null 2>&1 +fi + +log_info "Запуск MariaDB..." +systemctl start mariadb >/dev/null 2>&1 +systemctl enable mariadb >/dev/null 2>&1 + +log_info "Ожидание полного запуска MariaDB..." +sleep 5 + +if ! systemctl is-active --quiet mariadb; then + log_error "MariaDB не смог запуститься" + exit 1 +fi + +log_success "MariaDB установлен и запущен" + +log_step "Установка дополнительных компонентов (Redis, LibreOffice, Java)..." +if [ "$DISTRO_FAMILY" = "debian" ]; then + apt install -y redis-server libreoffice default-jre >/dev/null 2>&1 +elif [ "$DISTRO_FAMILY" = "rhel" ]; then + $PKG_MANAGER install -y redis libreoffice java-11-openjdk >/dev/null 2>&1 +fi +log_success "Дополнительные компоненты установлены" + +log_step "Установка PHP 8.3 и расширений..." +if [ "$DISTRO_FAMILY" = "debian" ]; then + PHP_PACKAGES="php8.3 php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd \ + php8.3-mbstring php8.3-xml php8.3-zip php8.3-opcache php8.3-intl \ + php8.3-bcmath libapache2-mod-php8.3" - log_info "Запуск MariaDB..." - systemctl start mariadb >/dev/null 2>&1 - systemctl enable mariadb >/dev/null 2>&1 - - log_info "Ожидание полного запуска MariaDB..." - sleep 5 - - if ! systemctl is-active --quiet mariadb; then - log_error "MariaDB не смог запуститься" + if ! apt install -y $PHP_PACKAGES >/dev/null 2>&1; then + log_error "Не удалось установить PHP 8.3 и/или его расширения." exit 1 fi - log_success "MariaDB установлен и запущен" - - log_step "Установка дополнительных компонентов (Redis, LibreOffice, Java)..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - apt install -y redis-server libreoffice default-jre >/dev/null 2>&1 - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - $PKG_MANAGER install -y redis libreoffice java-11-openjdk >/dev/null 2>&1 +elif [ "$DISTRO_FAMILY" = "rhel" ]; then + if [ "$DISTRO" = "fedora" ]; then + PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \ + php-mbstring php-xml php-zip php-opcache php-intl \ + php-bcmath" + else + PHP_PACKAGES="php83 php83-php php83-php-cli php83-php-common php83-php-mysqlnd php83-php-curl php83-php-gd \ + php83-php-mbstring php83-php-xml php83-php-zip php83-php-opcache php83-php-intl \ + php83-php-bcmath" fi - log_success "Дополнительные компоненты установлены" - - log_step "Установка PHP 8.3 и расширений..." - if [ "$DISTRO_FAMILY" = "debian" ]; then - PHP_PACKAGES="php8.3 php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd \ - php8.3-mbstring php8.3-xml php8.3-zip php8.3-opcache php8.3-intl \ - php8.3-bcmath libapache2-mod-php8.3" - - if ! apt install -y $PHP_PACKAGES >/dev/null 2>&1; then - log_error "Не удалось установить PHP 8.3 и/или его расширения." - exit 1 - fi - - elif [ "$DISTRO_FAMILY" = "rhel" ]; then - if [ "$DISTRO" = "fedora" ]; then - PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \ - php-mbstring php-xml php-zip php-opcache php-intl \ - php-bcmath" - else - PHP_PACKAGES="php83 php83-php php83-php-cli php83-php-common php83-php-mysqlnd php83-php-curl php83-php-gd \ - php83-php-mbstring php83-php-xml php83-php-zip php83-php-opcache php83-php-intl \ - php83-php-bcmath" - fi - - if ! $PKG_MANAGER install -y $PHP_PACKAGES >/dev/null 2>&1; then - log_error "Не удалось установить PHP 8.3 и/или его расширения." - exit 1 - fi - - if command -v php83 >/dev/null 2>&1 && [ ! -f /usr/bin/php ]; then - ln -sf /usr/bin/php83 /usr/bin/php >/dev/null 2>&1 || true - fi + + if ! $PKG_MANAGER install -y $PHP_PACKAGES >/dev/null 2>&1; then + log_error "Не удалось установить PHP 8.3 и/или его расширения." + exit 1 + fi + + if command -v php83 >/dev/null 2>&1 && [ ! -f /usr/bin/php ]; then + ln -sf /usr/bin/php83 /usr/bin/php >/dev/null 2>&1 || true fi - log_success "PHP 8.3 и расширения установлены" -else - log_info "Пропускаем установку пакетов (используем существующие)" fi +log_success "PHP 8.3 и расширения установлены" log_step "Настройка Apache и модулей..." if [ "$DISTRO_FAMILY" = "debian" ]; then @@ -698,6 +660,10 @@ if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config echo "Не удалось загрузить конфигурацию БД"; echo ""; } + +echo ""; +echo ""; +echo ""; EOF } @@ -991,6 +957,5 @@ echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/" echo "" echo " Дополнительная информация:" echo " • Учетные данные БД: $DB_CREDENTIALS_FILE" -echo " • Для переустановки: ./install.sh -f" echo " • Для удаления: ./install.sh -u" echo "" \ No newline at end of file