====== Как собрать 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}}