Вопрос или проблема
У нас старая PHP-приложение, которая используется внутри компании. Это приложение имеет строгую зависимость от версии PHP 5.4 или ниже.
В настоящее время приложение размещено на виртуальной машине с Debian 7 Wheezy. Однако мы планируем перенести все устаревшие приложения на виртуальные машины с Ubuntu 22.04 или Debian 12.
Я понимаю, что PHP 5.4 нельзя установить из репозитория на современных системах Ubuntu или Debian, поэтому пытался собрать PHP 5.4 из исходников на машине с Debian 12, но безуспешно.
Я установил зависимости:
apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev \
libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libreadline-dev \
libtidy-dev libxslt1-dev libzip-dev libbz2-dev libicu-dev
Попытался запустить configure
для настройки сборочной среды:
./configure --prefix=/usr/local/php5.4 \
--with-config-file-path=/usr/local/php5.4/etc \
--with-mysql --with-mysqli --with-pdo-mysql \
--with-openssl=/usr --with-curl --with-zlib \
--with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir \
--with-mcrypt --with-readline --with-tidy --with-xsl \
--with-bz2 --with-gettext --with-iconv --with-intl \
--enable-mbstring --enable-zip --enable-soap --enable-sockets \
--enable-bcmath --enable-pcntl --enable-shmop --enable-sysvsem \
--enable-sysvshm --enable-calendar --enable-exif --enable-ftp \
--enable-opcache
И в итоге получил ошибку:
configure: error: Cannot find OpenSSL's libraries
Но пакет libssl-dev
уже установлен, а параметр конфигурации --with-openssl=/usr
используется.
Есть ли вообще какие-либо варианты скомпилировать PHP 5.4 на современных версиях Ubuntu или Debian, используя библиотеку openssl из этих дистрибутивов?
Насколько я помню, OpenSSL отключил поддержку SSLv3 начиная с версии OpenSSL 1.1. По этой причине современные операционные системы на базе Linux имеют проблемы с компиляцией старых версий PHP.
Таким образом, похоже, единственный вариант – это скомпилировать и установить старую версию OpenSSL в пользовательский каталог. Например, OpenSSL 1.0.2u, который поддерживает SSLv3.
Но ребята из Olvy Cloud недавно поделились руководством: Как скомпилировать PHP 5.3, 5.4 и 5.5 версии на Debian 10/11/12 и Ubuntu 20.04/22.04 с компиляцией зависимостей, таких как OpenSSL 1.0.2u, c-client, Curl 7.88.
Мне нужно было скомпилировать PHP 5.3 на моем Ubuntu 20.04 – и это руководство помогло мне сделать это успешно.
Ответ или решение
Установка PHP 5.4 на современных версиях Ubuntu 22.04 или Debian 12 может быть настоящей проблемой из-за устаревших зависимостей и несовместимости с современными библиотеками, такими как OpenSSL. Однако это возможно сделать, хотя и требует дополнительных шагов по установке и настройке необходимых компонентов.
Теоретическая часть
Устаревшие версии PHP часто вызывают проблемы на современных системах из-за отказа от поддержки старых библиотек. Например, OpenSSL версии 1.1 и выше отключила поддержку SSLv3, что делает невозможным сборку старых версий PHP, таких как 5.4, которые полагались на эту функциональность. Кроме того, различные зависимости, такие как libcurl или libpng, могли изменить свои API и ABI, что также создает сложности при компиляции.
Пример
Из описания проблемы видно, что попытка собрать PHP 5.4 из исходников на Debian 12 завершилась неудачно, несмотря на наличие различных необходимых пакетов. Проблема заключалась в ошибке поиска библиотек OpenSSL, даже при установленном пакете libssl-dev
и указании конфигацией параметра --with-openssl=/usr
. Это указывает на несовместимость современного OpenSSL с ожиданиями старого PHP.
Решение, предложенное в руководстве от Olvy Cloud, заключается в необходимости самостоятельной сборки и установки старой версии OpenSSL (например, 1.0.2u) в отдельном каталоге, что позволит обеспечить совместимость с PHP 5.4.
Применение
Чтобы успешно установить PHP 5.4 на Ubuntu 22.04 или Debian 12, следуйте следующему пошаговому руководству:
-
Установка необходимых инструментов и библиотек:
sudo apt update sudo apt install -y build-essential libxml2-dev libssl-dev libcurl4-openssl-dev \ libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libreadline-dev \ libtidy-dev libxslt1-dev libzip-dev libbz2-dev libicu-dev
-
Скачивание и установка OpenSSL 1.0.2u:
-
Скачайте исходники OpenSSL 1.0.2u с официального сайта OpenSSL.
-
Распакуйте и перейдите в каталог с исходниками.
wget https://www.openssl.org/source/openssl-1.0.2u.tar.gz tar -xzvf openssl-1.0.2u.tar.gz cd openssl-1.0.2u
-
Соберите и установите OpenSSL в пользовательский каталог, чтобы избежать конфликтов с системной версией.
./config --prefix=/usr/local/openssl-1.0.2u --openssldir=/usr/local/openssl-1.0.2u shared zlib make sudo make install
-
-
Скачивание и подготовка исходников PHP 5.4:
-
Скачайте архив с исходниками PHP 5.4 и распакуйте его.
wget http://museum.php.net/php5/php-5.4.x.tar.gz # Замените x на конкретную минорную версию, например, 45. tar -xzvf php-5.4.x.tar.gz cd php-5.4.x
-
-
Конфигурация для сборки PHP:
Теперь на этапе конфигурации укажите путь до установленного вами OpenSSL:
./configure --prefix=/usr/local/php5.4 \ --with-config-file-path=/usr/local/php5.4/etc \ --with-mysql --with-mysqli --with-pdo-mysql \ --with-openssl=/usr/local/openssl-1.0.2u \ --with-curl --with-zlib \ --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir \ --with-mcrypt --with-readline --with-tidy --with-xsl \ --with-bz2 --with-gettext --with-iconv --with-intl \ --enable-mbstring --enable-zip --enable-soap --enable-sockets \ --enable-bcmath --enable-pcntl --enable-shmop --enable-sysvsem \ --enable-sysvshm --enable-calendar --enable-exif --enable-ftp \ --enable-opcache
-
Сборка и установка PHP:
-
После успешной конфигурации выполните команды сборки и установки:
make sudo make install
-
-
Проверка установки:
Проверьте успешность установки, запустив команду:
/usr/local/php5.4/bin/php -v
Этот процесс достаточно сложен и требует внимательности, особенно при работе с устаревшими компонентами. Однако, следуя данному руководству, вы сможете успешно установить PHP 5.4 на современные версии Ubuntu или Debian, сохраняя возможность эксплуатации вашего старого PHP-приложения.