diff --git a/install/utility/hestiacp_replace_remi_to_local.rb b/install/utility/hestiacp_replace_remi_to_local.rb new file mode 100644 index 0000000..695b73d --- /dev/null +++ b/install/utility/hestiacp_replace_remi_to_local.rb @@ -0,0 +1,169 @@ +#!/opt/brepo/ruby33/bin/ruby + +require 'json' + +# Файл конфигурации Hestia +config_file = '/usr/local/hestia/conf/hestia.conf' + +# Проверяем наличие строки LOCAL_PHP и её значение. Если она отсутствует или не равна 'yes', добавляем или заменяем её. +def ensure_local_php_enabled(config_file) + if File.exist?(config_file) + lines = File.readlines(config_file) + found = false + + # Обрабатываем каждую строку + new_lines = lines.map do |line| + if line.strip.start_with?("LOCAL_PHP=") + found = true + "LOCAL_PHP='yes'" + else + line + end + end + + # Если строки LOCAL_PHP не было найдено, добавляем её в конец файла + unless found + new_lines << "LOCAL_PHP='yes'\n" + end + + # Записываем изменения обратно в файл + File.open(config_file, 'w') do |file| + file.puts new_lines + end + else + # Если файла не существует, создаём его и добавляем строку LOCAL_PHP='yes' + File.write(config_file, "LOCAL_PHP='yes'\n") + end +end + +# Вызываем утилиту и разбираем JSON-ответ для получения списка установленных версий PHP +def get_installed_php_versions + output = `v-list-web-templates-backend json` + json_data = JSON.parse(output) + json_data.select { |version| version.start_with?("PHP-") } +end + +# Вызываем утилиту и разбираем JSON-ответ для получения списка пользователей +def get_hestia_users + output = `v-list-users json` + json_data = JSON.parse(output) + json_data.keys # Возвращаем только ключи (имена пользователей) +end + +# Вызываем утилиту и разбираем JSON-ответ для получения списка доменов пользователя +def get_user_domains(user) + output = `v-list-web-domains #{user} json` + json_data = JSON.parse(output) + json_data # Возвращаем весь хэш с доменами +end + +# Функция для получения корректной версии PHP +def get_correct_php_version(system_php_version) + if system_php_version.length < 2 + "8.2" + else + "#{system_php_version[0]}.#{system_php_version[1]}" + end +end + + +# Основная часть программы +begin + system_php_version = `php -r "echo str_replace('.', '', substr(phpversion(), 0, 3));"` + + ensure_local_php_enabled(config_file) + + INSTALLED_PHP_LIST = get_installed_php_versions + puts "Установленные версии PHP: #{INSTALLED_PHP_LIST.join(', ')}" + + # Обрабатываем каждый элемент массива INSTALLED_PHP_LIST + INSTALLED_PHP_LIST.each do |php_version| + # Удаляем префикс 'PHP-' и остаёмся только с цифрами + version_number = php_version.gsub(/^PHP-/, '') + + # Вызываем команду v-add-web-php с номером версии PHP + puts "Выполняем команду: v-add-web-php #{version_number}" + system("v-add-web-php", version_number) + end + + # Получаем список пользователей Hestia + HESTIA_USERS_LIST = get_hestia_users + puts "Список пользователей Hestia: #{HESTIA_USERS_LIST.join(', ')}" + + # Для каждого пользователя из списка выполняем действия с доменами + HESTIA_USERS_LIST.each do |user| + puts "Обрабатываем пользователя: #{user}" + + # Получаем список доменов для текущего пользователя + user_domains = get_user_domains(user) + + # Обрабатываем каждый домен и изменяем шаблон бэкенда + user_domains.each do |domain, details| + current_domain = domain + current_backend = details['BACKEND'] + + puts "Обрабатываем домен: #{current_domain}, текущий бэкенд: #{current_backend}" + + # Вызываем команду для изменения шаблона бэкенда + command = ["v-change-web-domain-backend-tpl", user, current_domain, current_backend] + puts "Выполняем команду: #{command.join(' ')}" + system(*command) + end + end + + # Перенастраиваем alternatives для новго PHP + correct_php_version = get_correct_php_version(system_php_version) + puts "Перенастраиваем PHP на новый путь командой: v-change-sys-php #{correct_php_version}" + system("v-change-sys-php", system_php_version) + + # Список регулярных выражений для поиска пакетов, которые нужно удалить + patterns_to_remove = [ + /^php\d{2}-runtime-.*$/, + /^php\d{2}-php/ + ] + + # Получаем список установленных пакетов на системе + installed_packages = `yum list installed | grep remi`.split("\n").map { |line| line.split.first } + + # Фильтруем подходящие пакеты для удаления + packages_to_remove = [] + + patterns_to_remove.each do |pattern| + installed_packages.each do |package| + if package.match?(pattern) + packages_to_remove << package + end + end + end + + if packages_to_remove.empty? + puts "Нет подходящих пакетов для удаления." + else + puts "Следующие пакеты будут удалены:" + packages_to_remove.each_with_index { |package, index| puts "#{index + 1}. #{package}" } + + print "\nВы уверены, что хотите удалить эти пакеты? (y/n): " + response = gets.chomp.downcase + + if response == 'y' + # Формируем команду для удаления всех пакетов одной командой + remove_command = "yum remove -y #{packages_to_remove.join(' ')}" + system(remove_command) + puts "\nОперация завершена. Пакеты были успешно удалены." + else + puts "\nУдаление отменено пользователем." + end + end + + # Перезапустим все PHP-FPM + INSTALLED_PHP_LIST.each do |php_version| + # Удаляем префикс 'PHP-' и остаёмся только с цифрами + version_number = php_version.gsub(/^PHP-/, '') + + puts "Выполняем команду: systemctl restart brepo-php-fpm#{version_number}" + system("systemctl", "restart", "brepo-php-fpm#{version_number}") + end + +rescue => e + puts "Произошла ошибка: #{e.message}" +end