====== Как собрать PHP в Ubuntu без Suhosin ====== Имеем: Ubuntu 12.04.5, php версии 5.3.10 с вкомпилированным Suhosin и старый legacy-код, который криво работает с Suhosin. Отключение suhosin невозможно, т.к. в данной версии Ubuntu он вкомпилирован и не отключается. Увеличить версию php5 на более новую так же нельзя - код перестает работать. Решение: собрать php самостоятельно. Глупо, но делать нечего. ===== Шаг 1 ===== Создаем рабочую папку и переходим в нее: # cd /usr/src # mkdir packages # cd packages ===== Шаг 2 ===== Ставим пакеты для сборки: # sudo apt-get install devscripts # sudo apt-get install gcc debhelper fakeroot ===== Шаг 3 ===== Скачиваем исходники PHP5 # sudo apt-get source php5 ===== Шаг 4 ===== Скачиваем все зависимости: # sudo apt-get build-dep php5 ===== Шаг 5 ===== Отключаем Suhosin. Открываем файл php5-5.3.10/debian/rules и изменяем строку PHP5_SUHOSIN=yes на PHP5_SUHOSIN=no ===== Шаг 6 ===== Изменяем версию пакета php5 чтобы не было конфликтов при установке: # cd php5-5.3.10 # debchange -v 5.3.10-1ubuntu3.20.1~nosuhosin В редакторе по умолчанию откроется файл для редактирования, в нем можно написать что-нибудь вроде * Disable Suhosin patch После внесения изменений файл нужно сохранить ===== Шаг 6 1/2 ===== Не все так просто, иначе бы и не писалась эта инструкция! При попытке сборки я получал ошибку # 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 ===== Шаг 7 ===== Собираем php5 командой # sudo dpkg-buildpackage -rfakeroot ===== Шаг 8 ===== Устанавливаем новые пакеты: # 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 {{tag>ubuntu 12.04 php5 suhosin patch mysql setup-mysql.sh}}