From 62439ddad19c3bbbf60cf4fe2bf5cd610a4d3470 Mon Sep 17 00:00:00 2001 From: hosh1 Date: Thu, 14 Aug 2025 08:57:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 224 +++++++++++------------------------------------------ 1 file changed, 44 insertions(+), 180 deletions(-) diff --git a/install.sh b/install.sh index 4216498..463035d 100644 --- a/install.sh +++ b/install.sh @@ -945,7 +945,7 @@ EOF else log_error "Ошибка: $description" if [[ -s "$error_file" ]]; then - cat "$error_file" | head -10 >&2 + cat "$error_file" | head -5 >&2 fi rm -f "$temp_file" "$error_file" return 1 @@ -964,31 +964,19 @@ EOF fi } - # Функция для современной установки пароля MariaDB - set_password_modern() { - local connection_cmd="$1" + # Функция для проверки подключения + test_connection() { + local user="$1" local password="$2" + local connection_params="" - # Используем только современные команды MariaDB - local sql=" --- Установка пароля современным способом -ALTER USER 'root'@'localhost' IDENTIFIED BY '$password'; -FLUSH PRIVILEGES;" - - if execute_sql_safe "$connection_cmd" "Установка пароля root (современный способ)" "$sql"; then - return 0 + if [[ -n "$password" ]]; then + connection_params="-u $user -p$password" else - # Если не получилось, попробуем SET PASSWORD - local sql_alt=" -SET PASSWORD FOR 'root'@'localhost' = PASSWORD('$password'); -FLUSH PRIVILEGES;" - - if execute_sql_safe "$connection_cmd" "Установка пароля root (альтернативный способ)" "$sql_alt"; then - return 0 - else - return 1 - fi + connection_params="-u $user" fi + + mysql $connection_params -e "SELECT 1;" >/dev/null 2>&1 } # Основная логика - пробуем разные способы подключения @@ -997,25 +985,25 @@ FLUSH PRIVILEGES;" log_info "Попытка подключения к MariaDB..." # 1. Попробуем подключиться как root без пароля - if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then + if test_connection "root" ""; then log_success "Подключение как root без пароля успешно" - # Сначала создаем базу данных if create_database_only "mysql -u root"; then log_success "База данных создана" + DB_CONFIGURED=true - # Пытаемся установить пароль (не критично, если не получится) - if set_password_modern "mysql -u root" "$DB_PASSWORD"; then + # Попробуем установить пароль (не критично если не получится) + log_info "Попытка установки пароля для root..." + local sql="ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; FLUSH PRIVILEGES;" + if echo "$sql" | mysql -u root >/dev/null 2>&1; then log_success "Пароль root установлен" - DB_CONFIGURED=true else - log_info "Пароль не установлен, но база данных создана" - DB_CONFIGURED=true + log_info "Не удалось установить пароль, но база данных создана" fi fi # 2. Попробуем подключиться как root с паролем - elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then + elif test_connection "root" "$DB_PASSWORD"; then log_success "Подключение как root с паролем успешно" if create_database_only "mysql -u root -p$DB_PASSWORD"; then @@ -1024,7 +1012,7 @@ FLUSH PRIVILEGES;" fi # 3. Попробуем подключиться как текущий пользователь - elif mysql -u "$CURRENT_USER" -e "SELECT 1;" >/dev/null 2>&1; then + elif test_connection "$CURRENT_USER" ""; then log_success "Подключение как $CURRENT_USER без пароля успешно" if create_database_only "mysql -u $CURRENT_USER"; then @@ -1032,42 +1020,46 @@ FLUSH PRIVILEGES;" DB_CONFIGURED=true fi - # 4. Попробуем через sudo + # 4. Попробуем подключиться как текущий пользователь с паролем + elif test_connection "$CURRENT_USER" "$DB_PASSWORD"; then + log_success "Подключение как $CURRENT_USER с паролем успешно" + + if create_database_only "mysql -u $CURRENT_USER -p$DB_PASSWORD"; then + log_success "База данных создана пользователем $CURRENT_USER" + DB_CONFIGURED=true + fi + + # 5. Попробуем через sudo elif sudo mysql -e "SELECT 1;" >/dev/null 2>&1; then log_success "Подключение через sudo успешно" if create_database_only "sudo mysql"; then log_success "База данных создана через sudo" + DB_CONFIGURED=true # Попробуем установить пароль через sudo + log_info "Попытка установки пароля через sudo..." local sql="ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; FLUSH PRIVILEGES;" if echo "$sql" | sudo mysql >/dev/null 2>&1; then log_success "Пароль root установлен через sudo" else log_info "Пароль не удалось установить, но база создана" fi - DB_CONFIGURED=true fi - # 5. Последняя попытка - возможно MariaDB запущен в безопасном режиме - elif systemctl stop mariadb && mysqld_safe --skip-grant-tables --skip-networking & - then - sleep 5 - MYSQL_PID=$! + else + log_error "Не удалось подключиться к MariaDB ни одним из способов" + log_info "" + log_info "Попробуйте выполнить настройку вручную:" + log_info "1. Проверьте статус MariaDB: sudo systemctl status mariadb" + log_info "2. Запустите мастер настройки: sudo mysql_secure_installation" + log_info "3. Создайте базу данных вручную:" + log_info " sudo mysql -e \"CREATE DATABASE ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\"" + log_info "4. Или создайте отдельного пользователя:" + log_info " sudo mysql -e \"CREATE USER 'altcor'@'localhost' IDENTIFIED BY 'password';\"" + log_info " sudo mysql -e \"CREATE DATABASE ALTCor; GRANT ALL ON ALTCor.* TO 'altcor'@'localhost';\"" - if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then - log_info "Подключение в безопасном режиме успешно" - - if create_database_only "mysql -u root"; then - log_success "База данных создана в безопасном режиме" - DB_CONFIGURED=true - fi - fi - - # Завершаем безопасный режим - kill $MYSQL_PID 2>/dev/null || true - sleep 2 - systemctl start mariadb + exit 1 fi # Проверяем результат @@ -1085,140 +1077,12 @@ FLUSH PRIVILEGES;" log_info "База создана, но требуется проверка подключения" fi else - log_error "Не удалось настроить базу данных автоматически" - log_info "" - log_info "Попробуйте выполнить настройку вручную:" - log_info "1. Проверьте статус MariaDB: sudo systemctl status mariadb" - log_info "2. Запустите мастер настройки: sudo mysql_secure_installation" - log_info "3. Создайте базу данных вручную:" - log_info " sudo mysql -e \"CREATE DATABASE ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\"" - log_info "4. Или создайте отдельного пользователя:" - log_info " sudo mysql -e \"CREATE USER 'altcor'@'localhost' IDENTIFIED BY 'password';\"" - log_info " sudo mysql -e \"CREATE DATABASE ALTCor; GRANT ALL ON ALTCor.* TO 'altcor'@'localhost';\"" - + log_error "Не удалось настроить базу данных" exit 1 fi log_success "Настройка базы данных завершена" - # Функция для проверки подключения - test_connection() { - local user="$1" - local password="$2" - local connection_params="" - - if [[ -n "$password" ]]; then - connection_params="-u $user -p$password" - else - connection_params="-u $user" - fi - - mysql $connection_params -e "SELECT 1;" >/dev/null 2>&1 - } - - log_info "Выполнение базовой настройки безопасности MariaDB..." - - # Сценарий 1: Подключение как root без пароля - if test_connection "root" ""; then - log_info "Подключение как 'root' без пароля успешно. Настраиваем root-пользователя..." - - SQL_SCRIPT=" -SET sql_mode = ''; -UPDATE mysql.user SET authentication_string = PASSWORD('$DB_PASSWORD') WHERE User = 'root' AND Host = 'localhost'; -UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost'; -DELETE FROM mysql.user WHERE User=''; -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\\_%'; -FLUSH PRIVILEGES; -CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost'; -FLUSH PRIVILEGES;" - - if execute_sql "root" "" "$SQL_SCRIPT"; then - log_success "Первичная настройка MariaDB выполнена успешно" - else - log_error "Не удалось выполнить первичную настройку MariaDB" - exit 1 - fi - - # Сценарий 2: Подключение как root с паролем - elif test_connection "root" "$DB_PASSWORD"; then - log_info "MariaDB уже настроен с текущим паролем для root..." - - SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" - - if execute_sql "root" "$DB_PASSWORD" "$SQL_SCRIPT"; then - log_success "База данных ALTCor создана/проверена" - else - log_error "Не удалось создать базу данных ALTCor" - exit 1 - fi - - # Сценарий 3: Подключение как текущий пользователь без пароля - elif test_connection "$CURRENT_USER" ""; then - log_info "Подключение как '$CURRENT_USER' без пароля успешно." - - # Проверяем права пользователя - if mysql -u "$CURRENT_USER" -e "SELECT User FROM mysql.user WHERE User='root';" >/dev/null 2>&1; then - log_info "Пользователь '$CURRENT_USER' имеет доступ к системным таблицам. Настраиваем root..." - - SQL_SCRIPT=" -SET sql_mode = ''; -UPDATE mysql.user SET authentication_string = PASSWORD('$DB_PASSWORD') WHERE User = 'root' AND Host = 'localhost'; -UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost'; -DELETE FROM mysql.user WHERE User=''; -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\\_%'; -FLUSH PRIVILEGES; -CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost'; -FLUSH PRIVILEGES;" - - if execute_sql "$CURRENT_USER" "" "$SQL_SCRIPT"; then - log_success "Первичная настройка MariaDB выполнена успешно" - else - log_error "Не удалось выполнить первичную настройку MariaDB" - exit 1 - fi - else - log_info "Пользователь '$CURRENT_USER' не имеет прав администратора. Создаем только базу данных..." - - SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" - - if execute_sql "$CURRENT_USER" "" "$SQL_SCRIPT"; then - log_success "База данных ALTCor создана" - else - log_error "Не удалось создать базу данных ALTCor" - exit 1 - fi - fi - - # Сценарий 4: Подключение как текущий пользователь с паролем - elif test_connection "$CURRENT_USER" "$DB_PASSWORD"; then - log_info "MariaDB уже настроен с текущим паролем для пользователя '$CURRENT_USER'..." - - SQL_SCRIPT="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" - - if execute_sql "$CURRENT_USER" "$DB_PASSWORD" "$SQL_SCRIPT"; then - log_success "База данных ALTCor создана/проверена" - else - log_error "Не удалось создать базу данных ALTCor" - exit 1 - fi - - else - log_error "Не удалось подключиться к MariaDB." - log_info "Попробуйте выполнить настройку вручную:" - log_info "1. sudo mysql_secure_installation" - log_info "2. mysql -u root -p" - log_info "3. Проверьте состояние службы: systemctl status mariadb" - exit 1 - fi - - log_success "База данных настроена" - log_step "Проверка конфигурации Apache..." if [ "$DISTRO_FAMILY" = "debian" ]; then if ! apache2ctl configtest 2>/dev/null; then