You are viewing net_shark

net_shark
net_shark
.::..:::: ::.:......
March 2011
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

net_shark [userpic]
Сборка Apache-mpm-itk для Slackware Linux

Пришлось недавно перестроить сервер, дать возможность Апачу работать с виртуальными хостами под определенными для этих виртуальных хостов параметрами пользователя (имя пользователя/группа). 

После поисков в сети был выбран вариант использовать MPM-ITK. Это модификация стандартного MPM-prefork модуля, входящего в поставку Апача. В модификацию добавлены возможности задания имени пользователя и группы на виртуальном хосте, а так же возможности ограничения количества соединений на виртуальный хост.


Цитируя kaba (описание процесса установки mpm-itk на FreeBSD)

1) для того чтобы пользователи постоянно не жаловались, что они не могут удалить те или иные файлы созданные через веб интерфейс, так как виртуальный хост будет теперь работать от имени пользователя в системе

2) исчезает головная боль у системного администратора с квотированием места для веб сайтов. Теперь файлы закачанные на сервер через веб интерфейс имеют владельца и группу пользователя, соответственно попадают в подсчет квоты.

3) приоритет процессов в системе. Очень удобно “душить” очень сильно грузящие сервер сайты

4) задание количества соединений на виртуальный хост – уходит сюрприз когда один сайт съедает максимальное количество соединений выставленных для всего сервера.

5) так как виртуальный сервер (домен пользователя) работает с правами пользователя, то возможно установить ограничение на процессорное время в системе.

Спросите почему не использовать тот же suphp? Причины: 1) у suphp есть куча ситуаций когда php код написанный под mod_php не работает. 2) suphp не работает с php кэшерами (eaccelerator, xcache и т.д.) 3) большая нагрузка на сервер


Сам модуль можно взять здесь в виде монолитного патча, либо в виде серии патчей. 

В моем случае сборка/установка производилась на Slackware Linux v12.1.

И так, по порядку. 

Качаем исходники Апача (на момент написания 2.2.17 наиболее актуальны). Распаковываем исходники в отдельную папку. Кидаем в нее монолитный патч mpm-itk, далее:
 
# patch –p1 <apache2.2-mpm-itk-20090414-00.patch

Если при обработке патча ошибок не появилось - делаем autoconf. Если и тут ошибок не проявилось - пакуем пропатченные исходники
 
# tar -cjf httpd-2.2.17-mpm-itk.tar.bz2 httpd-2.2.17-mpm-itk
 
далее, чтобы получить готовый пакет для инсталляции берем из папки с исходниками Slackware  скрипт сборки и его окружение и кидаем все это богатство в папку, где будем собирать пакет, добавляя к ним архив с патченным Апачем.
 
config.layout.diff.gz  
doinst.sh.gz
httpd-2.2.17-mpm-itk.tar.bz2
httpd.SlackBuild
httpd.nossldefault.diff.gz  
httpd.runasapache.diff.gz
logrotate.httpd  
rc.httpd
slack-desc
 
Редактируем скрипт httpd.Slackbuild

в строке 
VERSION=${VERSION:-2.2.15}

меняем на 
VERSION=${VERSION:-2.2.17-mpm-itk}

в строке 
--with-mpm=prefork
 
меняем на 
--with-mpm=itk 
 
остальные параметры сборки меняем по вкусу (кто работал со слакбилдами тот в курсе за их структуру :) )
затем, если httpd.Slackbuild не имеет атрибутов запуска, меняем ему атрибуты (chmod 755 httpd.Slackbuild)
 
Запускаем слакбилд (от рута). Если сборка прошла без ошибок, на выходе мы получим файл httpd-2.2.17-mpm-itk.tgz, те готовый для установки пакет. 

Если Апач у нас уже имеет место быть, останавливаем его и удаляем его пакет с помощью pkgtool (сохранив при этом резервную копию конфигов, на всякий случай).
 
Устанавливаем собранный нами пакет

# installpkg httpd- 2.2.17-mpm-itk.tgz

Затем лезем править конфиги.  В /etc/httpd/extra/httpd-mpm.conf комментируем строчки относящиеся к mpm_prefork_module и вставляем следующий блок:

<IfModule itk.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 110
MaxClients 100
MaxRequestsPerChild 4000
</IfModule>

Настройки естественно выставляем по потребностям. Далее - правим httpd-vhosts.conf, вставляя в параметрах виртуальных хостов строчку AssignUserID username usergroup

проверяем конфиги (apachectl configtest), если все ок, запускаем Апач.

Меняем параметры владельцев на файлах и папках относящимся к существующим виртуальным хостам
# chown -R username.usergroup sitefolder
# cd
sitefolder # find . -type d -exec chmod 750 {} \;
# find . -type f -exec chmod 640 {} \;
Для проверки работы создаем в папке любого хоста php скрипт:

<?php system ("id");?

проверяем результаты работы через веб. При правильной работе Apache с mpm-itk результат будет примерно такой:
uid=1500(username) gid=1500(usergroup) groups=1500(usergroup)
на этом все :)