Имеем: Ubuntu 12.04.5, php версии 5.3.10 с вкомпилированным Suhosin и старый legacy-код, который криво работает с Suhosin. Отключение suhosin невозможно, т.к. в данной версии Ubuntu он вкомпилирован и не отключается. Увеличить версию php5 на более новую так же нельзя - код перестает работать.
Решение: собрать php самостоятельно. Глупо, но делать нечего.
Создаем рабочую папку и переходим в нее:
# cd /usr/src # mkdir packages # cd packages
Ставим пакеты для сборки:
# sudo apt-get install devscripts # sudo apt-get install gcc debhelper fakeroot
Скачиваем исходники PHP5
# sudo apt-get source php5
Скачиваем все зависимости:
# sudo apt-get build-dep php5
Отключаем Suhosin.
Открываем файл php5-5.3.10/debian/rules и изменяем строку
PHP5_SUHOSIN=yes
на
PHP5_SUHOSIN=no
Изменяем версию пакета php5 чтобы не было конфликтов при установке:
# cd php5-5.3.10 # debchange -v 5.3.10-1ubuntu3.20.1~nosuhosin
В редакторе по умолчанию откроется файл для редактирования, в нем можно написать что-нибудь вроде
* Disable Suhosin patch
После внесения изменений файл нужно сохранить
При попытке сборки я получал ошибку
# start our own mysql server for the tests /bin/sh debian/setup-mysql.sh 1995 /usr/src/php5-5.3.10/mysql_db make: *** [test-results.txt] Error 1 dpkg-buildpackage: error: debian/rules build gave error exit status 2
Как написано в интернетах это потому что не хватает прав на запуск mysql и лечится правкой файла php5-5.3.10/debian/setup-mysql.sh
Заменить строку:
$mysqld > $datadir/run.log 2>&1 &
на
$mysqld --user=root > $datadir/run.log 2>&1 &
У меня это не заработало, под каким бы пользователем я не пробовал запустить и с какими ключами.
Поэтому был выбран мошеннический способ: я ОТКЛЮЧИЛ тестирование MySQL путем правки файла php5-5.3.10/debian/rules
Было:
RUN_TESTS = yes ifeq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) $(warning Disabling checks due DEB_BUILD_OPTIONS) RUN_TESTS = no endif ifeq ($(DEB_HOST_ARCH),$(findstring $(DEB_HOST_ARCH),hurd-i386)) $(warning Disabling checks on hurd-i386) RUN_TESTS = no endif
стало:
RUN_TESTS = yes ifeq (nocheck,$(findstring nocheck,$(DEB_BUILD_OPTIONS))) $(warning Disabling checks due DEB_BUILD_OPTIONS) RUN_TESTS = no endif ifeq ($(DEB_HOST_ARCH),$(findstring $(DEB_HOST_ARCH),hurd-i386)) $(warning Disabling checks on hurd-i386) RUN_TESTS = no endif RUN_TESTS = no
Собираем php5 командой
# sudo dpkg-buildpackage -rfakeroot
Устанавливаем новые пакеты:
# sudo dpkg -i *.deb
и проверяем что у нас получилось:
# php5 -v PHP 5.3.10-1ubuntu3.20.1~nosuhosin (cli) (built: Oct 28 2015 15:48:35) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies