Compare commits
3 Commits
8b2c076e2e
...
5610859f17
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5610859f17 | ||
|
|
598c9abdfb | ||
|
|
5d461cc39b |
@@ -130,10 +130,10 @@ echo
|
||||
|
||||
if [ "$LOCAL_PHP" == "yes" ]; then
|
||||
for mod in $php_modules_install; do
|
||||
enable_local_php_extension "$version" "$mod"
|
||||
fn_enable_local_php_extension "$version" "$mod"
|
||||
done
|
||||
for mod in $php_modules_disable; do
|
||||
disable_local_php_extension "$version" "$mod"
|
||||
fn_disable_local_php_extension "$version" "$mod"
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
169
install/utility/hestiacp_replace_remi_to_local.rb
Normal file
169
install/utility/hestiacp_replace_remi_to_local.rb
Normal file
@@ -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
|
||||
@@ -335,7 +335,7 @@ if [ "$dontinstalldeps" != 'true' ]; then
|
||||
echo "Installing dependencies for compilation..."
|
||||
dnf install -y -q $SOFTWARE
|
||||
|
||||
mock -r msvsphere+epel-${release}-$BUILD_ARCH --clean
|
||||
mock -r alma+epel-${release}-$BUILD_ARCH --clean
|
||||
else
|
||||
# Set package dependencies for compiling
|
||||
SOFTWARE='wget tar git curl build-essential libxml2-dev libz-dev libzip-dev libgmp-dev libcurl4-gnutls-dev unzip openssl libssl-dev pkg-config libsqlite3-dev libonig-dev rpm lsb-release'
|
||||
@@ -536,7 +536,7 @@ if [ "$NGINX_B" = true ]; then
|
||||
|
||||
# Build the package
|
||||
echo Building Nginx RPM
|
||||
mock -r msvsphere+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia-nginx.spec --resultdir $RPM_DIR
|
||||
mock -r alma+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia-nginx.spec --resultdir $RPM_DIR
|
||||
rm -f $BUILD_DIR/*
|
||||
fi
|
||||
fi
|
||||
@@ -674,7 +674,7 @@ if [ "$PHP_B" = true ]; then
|
||||
|
||||
# Build RPM package
|
||||
echo Building PHP RPM
|
||||
mock -r msvsphere+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia-php.spec --resultdir $RPM_DIR
|
||||
mock -r alma+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia-php.spec --resultdir $RPM_DIR
|
||||
rm -f $BUILD_DIR/*
|
||||
fi
|
||||
fi
|
||||
@@ -792,7 +792,7 @@ if [ "$HESTIA_B" = true ]; then
|
||||
|
||||
# Build RPM package
|
||||
echo Building Hestia RPM
|
||||
mock -r msvsphere+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia.spec --resultdir $RPM_DIR
|
||||
mock -r alma+epel-${release}-$BUILD_ARCH --sources $BUILD_DIR --spec $BUILD_DIR/hestia.spec --resultdir $RPM_DIR
|
||||
rm -f $BUILD_DIR/*
|
||||
fi
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
Name: hestia
|
||||
Version: 1.9.6
|
||||
Release: 2%{dist}
|
||||
Release: 3%{dist}
|
||||
Summary: Hestia Control Panel
|
||||
Group: System Environment/Base
|
||||
License: GPLv3
|
||||
@@ -184,6 +184,9 @@ fi
|
||||
%{_tmpfilesdir}/%{name}.conf
|
||||
|
||||
%changelog
|
||||
* Thu Jan 15 2026 Alexey Berezhok <a@bayrepo.ru> - 1.9.6-3
|
||||
- Fix error on local php installation and extension activation
|
||||
|
||||
* Thu Oct 09 2025 Alexey Berezhok <a@bayrepo.ru> - 1.9.6-2
|
||||
- Fix error on all web and mail domains after Apache 2.4.64 update
|
||||
|
||||
|
||||
Reference in New Issue
Block a user