Centos 5 and apache-mpm-itk

Posted by & filed under Программы.

проблема следующая: когда пользователь заливает файлик через WEB интерфейс CMS (скажем Joomla), этому файлу присваивается владелец apache

-rw-rw-r— 1 apache apache 1003158 Apr 4 14:10 001.jpg

Сначала мы создаем пользователя.  RPMS так как root является плохой идеей.

cd
wget http://www.oldrpm.org/hintskinks/buildtree/RPM-build-tree.txt
chmod 755 RPM-build-tree.txt
./RPM-build-tree.txt

Теперь создаем папку buiding  и скачиваем с CentOS 5 apache2 SRPM.

mkdir /build
mkdir /build/httpd-itk
cd /build/httpd-itk
wget http://isoredirect.centos.org/centos/5/os/SRPMS/httpd-2.2.3-11.el5_1.centos.3.src.rpm

rpmbuild --rebuild httpd-2.2.3-11.el5_1.centos.3.src.rpm

Если нет rpmbuild то

yum install rpm-build

Еще возможно понадобятся доп. пакеты…

cp /rpmbuild/SPECS/httpd.spec httpd-itk.spec

cd /rpmbuild/SOURCES
wget http://mpm-itk.sesse.net/apache2.2-mpm-itk-20090414-00.patch
nano apache2.2-mpm-itk-200790414-00.patch

в apache2.2-mpm-itk-20090414-00.patch ищем строчку

+#define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0)

вставляем после нее

+#define MPM_VALID_PID(p) (getpgid(p) == getpgrp())

cd ~/build/httpd
rpmbuild -ba httpd-itk.spec

Если все пойдет хорошо и без ошибок, в папке /rpmbuild/RPMS появятся файлы RPMS-ITK MPM.

su
cd /home/userwebuildrpmsas/rpmbuild/RPMS
rpm -U httpd-2.2.3-11.itk.3.i386.rpm mod_ssl-2.2.3-11.itk.3.i386.rpm httpd-devel-2.2.3-11.itk.3.i386.rpm httpd-manual-2.2.3-11.itk.3.i386.rpm

Теперь проверка, что MPM-ITK установлена.

httpd.itk -l

Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

редактируем httpd.conf

# itk modules

<IfModule itk.c>

AssignUserID apache apache
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000

</IfModule>

<IfModule itk.c>
LoadModule php5_module modules/libphp5.so
</IfModule>

редактируем /etc/sysconfig/httpd и вносим запись

HTTPD=/usr/sbin/httpd.itk

и рестарт апача

/etc/init.d/httpd restart

или

/etc/rc.d/init.d/httpd restart

а вот и ошибки…

(98)Address already in use: make_sock could not bind to address 0.0.0.0:80

или

(98)Address already in use: make_sock could not bind to address 0.0.0.0:8443

netstat -tulpn| grep :80

killall -9 httpd

и рестарт апача

/etc/init.d/httpd restart

или

/etc/rc.d/init.d/httpd restart