Фикс с БД
This commit is contained in:
181
install.sh
181
install.sh
@@ -296,7 +296,7 @@ DB_PASSWORD=$(generate_password)
|
|||||||
|
|
||||||
if [ "$SKIP_PACKAGE_INSTALL" = false ]; then
|
if [ "$SKIP_PACKAGE_INSTALL" = false ]; then
|
||||||
log_step "Остановка конфликтующих сервисов..."
|
log_step "Остановка конфликтующих сервисов..."
|
||||||
systemctl stop nginx httpd apache2 php*-fpm 2>/dev/null || true
|
systemctl stop nginx httpd apache2 php*-fpm mariadb mysql 2>/dev/null || true
|
||||||
systemctl disable nginx httpd 2>/dev/null || true
|
systemctl disable nginx httpd 2>/dev/null || true
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
@@ -307,9 +307,18 @@ if [ "$SKIP_PACKAGE_INSTALL" = false ]; then
|
|||||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
apt remove -y nginx nginx-common nginx-core >/dev/null 2>&1 || true
|
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
|
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
|
||||||
|
# Полное удаление MariaDB/MySQL для чистой установки
|
||||||
|
apt remove --purge -y 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
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
$PKG_MANAGER remove -y nginx >/dev/null 2>&1 || true
|
$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 php php7* php80* php81* php82* >/dev/null 2>&1 || true
|
||||||
|
# Полное удаление MariaDB/MySQL для чистой установки
|
||||||
|
$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
|
fi
|
||||||
log_success "Старые пакеты удалены"
|
log_success "Старые пакеты удалены"
|
||||||
|
|
||||||
@@ -378,7 +387,23 @@ if [ "$SKIP_PACKAGE_INSTALL" = false ]; then
|
|||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
$PKG_MANAGER install -y mariadb-server >/dev/null 2>&1
|
$PKG_MANAGER install -y mariadb-server >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
log_success "MariaDB установлен"
|
|
||||||
|
# Важно: запускаем MariaDB сразу после установки
|
||||||
|
log_info "Запуск MariaDB..."
|
||||||
|
systemctl start mariadb >/dev/null 2>&1
|
||||||
|
systemctl enable mariadb >/dev/null 2>&1
|
||||||
|
|
||||||
|
# Ждем, пока MariaDB полностью запустится
|
||||||
|
log_info "Ожидание полного запуска MariaDB..."
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Проверяем, что MariaDB действительно запущен
|
||||||
|
if ! systemctl is-active --quiet mariadb; then
|
||||||
|
log_error "MariaDB не смог запуститься"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log_success "MariaDB установлен и запущен"
|
||||||
|
|
||||||
log_step "Установка дополнительных компонентов (Redis, LibreOffice, Java)..."
|
log_step "Установка дополнительных компонентов (Redis, LibreOffice, Java)..."
|
||||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
@@ -692,31 +717,145 @@ chmod 600 "$WEBROOT/db_config.php"
|
|||||||
log_success "Права доступа настроены"
|
log_success "Права доступа настроены"
|
||||||
|
|
||||||
log_step "Настройка базы данных MariaDB..."
|
log_step "Настройка базы данных MariaDB..."
|
||||||
MYSQL_TMP_SCRIPT="/tmp/mysql_setup_$(date +%s).sql"
|
|
||||||
cat > "$MYSQL_TMP_SCRIPT" << MYSQL_SCRIPT
|
|
||||||
|
|
||||||
ALTER USER IF EXISTS 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('$DB_PASSWORD');
|
# Проверяем, что 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 (подключение без пароля доступно)..."
|
||||||
|
|
||||||
|
# Устанавливаем пароль root и очищаем ненужные данные
|
||||||
|
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;
|
CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
-- Даем права на новую базу данных
|
||||||
GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
|
GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
|
||||||
|
|
||||||
|
-- Применяем изменения
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
SHOW DATABASES;
|
|
||||||
MYSQL_SCRIPT
|
MYSQL_SCRIPT
|
||||||
|
|
||||||
if ! mysql -u root < "$MYSQL_TMP_SCRIPT" >/dev/null 2>&1; then
|
if mysql -u root < "$MYSQL_SECURE_SCRIPT" >/dev/null 2>&1; then
|
||||||
log_error "Не удалось выполнить скрипт настройки MariaDB."
|
log_success "Первичная настройка MariaDB выполнена успешно"
|
||||||
rm -f "$MYSQL_TMP_SCRIPT"
|
else
|
||||||
exit 1
|
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..."
|
||||||
|
|
||||||
|
# Останавливаем 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 сброшен"
|
||||||
|
|
||||||
|
# Убиваем mysqld_safe
|
||||||
|
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
|
||||||
|
|
||||||
|
# Запускаем MariaDB нормально
|
||||||
|
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
|
fi
|
||||||
rm -f "$MYSQL_TMP_SCRIPT"
|
|
||||||
log_success "База данных настроена"
|
log_success "База данных настроена"
|
||||||
|
|
||||||
log_step "Проверка конфигурации Apache..."
|
log_step "Проверка конфигурации Apache..."
|
||||||
@@ -771,6 +910,12 @@ if ! php -r "echo phpversion();" >/dev/null 2>&1; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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_success "Все компоненты работают корректно"
|
||||||
|
|
||||||
log_step "Сохранение учетных данных..."
|
log_step "Сохранение учетных данных..."
|
||||||
|
|||||||
Reference in New Issue
Block a user