nixp.ru v3.0

20 января 2017,
пятница,
19:02:08 MSK

DevOps с компанией «Флант»
Аватар пользователя Дмитрий Шурупов
Дмитрий Шурупов написал 12 ноября 2006 года в 21:10 (783 просмотра) Ведет себя как фрик; открыл 669 тем в форуме, оставил 5601 комментарий на сайте.

Потратил некоторое время на решение проблемы — вдруг кому пригодится.

Нужно было поставить такую связку (suPHP для Apache версии 2.2) на сервере с Gentoo Linux. Во-первых, www-apache/mod_suphp-0.6.1-r2 оказался masked, но это не проблема:

echo '=www-apache/mod_suphp-0.6.1-r2'>> /etc/portage/package.keywords
echo '=www-apache/mod_suphp-0.6.1-r2'>> /etc/portage/package.unmask
emerge  -av =www-apache/mod_suphp-0.6.1-r2

Однако во время компиляции все счастье вывалилось с:

!!! ERROR: www-apache/mod_suphp-0.6.1-r2 failed.

!!! Function src_compile, Line 104, Exitcode 2

!!! make failed

Взял исходники оригинального с http://www.suphp.org/Download.html, распаковал, сконфигурил и запустил сборку:

./configure --with-apache-user=root --with-setid-mode=owner --with-apxs=/usr/sbin/apxs2 --with-apr=/usr/bin/apr-1-config --prefix=/usr
make

Вылезла та же проблема. Оказалось, что suPHP формально не поддерживает Apache 2.2.

Цитата с http://www.suphp.org/FAQ.html

Dows suPHP work with Apache 2.2? No, Apache 2.2 uses a slightly different API that does not provide some functions required by suPHP, so the module code will have to be adapted to work with his version of Apache.

Начал искать решения проблемы — нашел какие-то сомнительные патчи, но они не помогли, а потом наткнулся на http://packages.debian.org/unstable/source/suphp

Увидев в зависимостях apache2-mpm-prefork (>= 2.2.0), порадовался. Скачал suphp_0.6.1.20061108.orig.tar.gz, повторил операции и… о чудо! Собралось без проблем. Начинаю тестирование ;-)

Дмитрий Шурупов

Исправленные опции ./configure стали выглядеть так:

./configure --with-apache-user=root --with-setid-mode=owner --with-apxs=/usr/sbin/apxs2 --with-apr=/usr/bin/apr-1-config --with-logfile=/var/log/apache2/suphp_log --sysconfdir=/etc --sbindir=/usr/sbin

В качестве основы конфига (/etc/suphp.conf) можно брать файл doc/suphp.conf-example или прямо вытаскивать из портежа: /usr/portage/www-apache/mod_suphp/files/suphp.conf

Кроме того, хорошую помощь оказал еще один конфиг из портежа: /usr/portage/www-apache/mod_suphp/files/70_mod_suphp.conf

Его я тупо скопировал в каталог /etc/apache2/modules и слегка подредактировал по вкусу.

Далее. ВАЖНО, чтобы был собран не только php-cli, но php-cgi. На сервере, где ставил я, собрано было без cgi, и я очень долго не мог понять, в чем проблема: при обращении к любому php-скрипту браузер выдавал ошибку 500 Internal server error, а в /var/log/apache2/error_log добавлялись строчки:

[Mon Nov 13 00:03:39 2006] [error] [client x.x.x.x] suPHP version 0.6.1
[Mon Nov 13 00:03:39 2006] [error] [client x.x.x.x] (c) 2002-2005 Sebastian Marsching
[Mon Nov 13 00:03:39 2006] [error] [client x.x.x.x]
[Mon Nov 13 00:03:39 2006] [error] [client x.x.x.x] suPHP has to be called by mod_suphp to work.
[Mon Nov 13 00:03:39 2006] [error] [client x.x.x.x] Premature end of script headers: a.php

Вновь помог http://www.suphp.org/FAQ.html

Решилось, соответственно, пересборкой php:

USE="cgi" emerge php
Дмитрий Шурупов

Решиться-то решилось, но от проблемы не избавило. И еще возникло подозрение, что файл /etc/suphp.conf банально игнорируется.

Продолжение, вероятно, следует…

Дмитрий Шурупов

А вот и продолжение…

Проблема невозможности сборки suphp из портежа наконец-то решилась. Откатом к APR из ветки 0.x (0.9.12). APR 1.2.x стояла для Apache 2.2. Apache 2.2 с APR 0.x не собирается, приходилось после установки APR 1.2.x делать:

mv /usr/bin/apr-config /usr/bin/apr-config.old
ln -s /usr/bin/apr-1-config /usr/bin/apr-config

И аналогично Apache-2.2 была нужна APU-2.2 (apr-util).

Для нормальной сборки suphp удалять APR 1.x не надо: достаточно символическую ссылку apr-config вернуть на apr-1-config. Иногда еще возникают танцы с бубнами вокруг /usr/include/apr-0, /usr/include/apr-1 и /usr/include/apache2. Изменять по вкусу, а точнее — по требованиям собираемых пакетов.

Собраться-то собралось, но при запуске apache 2.2 с таким suphp, web-сервер начинает падать с Segmentation fault. Подозреваю, из-за того, что apache-2.2 собран с apr-1.2, а модуль к нему (mod_suphp.c) — с apr-0.9.

Дмитрий Шурупов

Собрался я было править исходники suPHP, чтобы проблему решить, зашел опять на suphp.org… А там:

suPHP 0.6.2 released

[..]

Features / improvements:

* Apache 2.2 compatibility

* (Basic) mod_userdir support

Hallelujah, товарищи. Как проверю функционирование, доложу.

Дмитрий Шурупов

Сделал свой ebuild к 0.6.2 по мотивам аналогичного к 0.6.1-r2. Собралось все нормально. Но не помогло :-\

Откатываемся на Apache-2.0…

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.