FastNetMon

Tuesday, 5 March 2013

Фикс бага Interrupted system call: FastCGI: comm with server "xxx" aborted: select() failed

update: самый простой и грамотный способ исправить баг - обновитесь на Debian Wheezy.

Платформа: Debian 6 Squeeze, mod_fastcgi (не mod_fcgid!!!), PHP 5.3.

С такой неприятной ошибкой можно весьма легко столкнуься на заданной платформе:

[Tue Mar 05 10:48:37 2013] [error] [client xx.xx.xx.xx] (4)Interrupted system call: FastCGI: comm with server "/var/www/fcgi/xxxx" aborted: select() failed


Бороться ней программной/настройками, к сожалению, невозможно - это баг в ПО, который исправляется исключительно обновлением. Но в Дебияне (даже в sid) нет обновленной версии и ее нужно собрать самостоятельно.

Быстрое решение

Итак, короткое решение - если Вам нужно починить прямо сейчас и Вы доверяете мне сборку бинарного пакета:
wget https://fastvps.googlecode.com/svn/trunk/patches/mod_fastcgi/libapache2-mod-fastcgi_2.4.6-1_amd64.debsudo dpkg -i libapache2-mod-fastcgi_2.4.6-1_amd64.deb
# Блокируем обновления пакета вообще, иначе при обновлении системы встанет бажная версия
echo "libapache2-mod-fastcgi hold" | dpkg --set-selections
Качественное решение

Этот вариант стоит выбрать в случае, если Вы не доверяете мне сборку бинарного пакета, но доверяете моему патчу и сами его наложите.

Используя собранный мною патч, собрать свой пакет вручную можно так:
cd /usr/src
# депенденси для сборки:
apt-get install -y dpkg-dev devscripts build-essential fakeroot
apt-get build-dep libapache2-mod-fastcgi
apt-get source libapache2-mod-fastcgi
cd libapache-mod-fastcgi-2.4.6/debian/patches
wget https://fastvps.googlecode.com/svn/trunk/patches/mod_fastcgi/upgrade_mod_fastcgi_to_snap_2_4_7_0910052141.dpatch
echo "upgrade_mod_fastcgi_to_snap_2_4_7_0910052141.dpatch" >  00list
cd ..
cd ..
debuild -us -uc
Решение для тех, кто хочет знать все

Наибольшее число информации по сабжевой проблеме Вы можете почерпнуть по адресу баг-трекера Дебияна. Официальный сайт модуля mod_fastcgi живет вот здесь. Вот альтернативные версии патча: http://article.gmane.org/gmane.comp.web.fastcgi.devel/2514

Сиутация такова, что системный вызов select в Linux нередко выдает код ошибки EAGAIN, при котором клиенсткая программа должна повторить попытку подключения, чтобы получить данные, баг mod_fastcgi в том, что он так не делает. Вариантов фикса два - сторонние патчи (я нашел 2-3 версии в сети) либо установка снапшота 2.7 версии mod_fastcgi (еще не вышедшей, но визуально не имеющей никаких проблем со стабильностью). Я выбрал второй вариант.

Итак, нам нужно сделать патч-обновление (между версией 2.6 и версией 2.7-SNAPSHOT-0910052141), которым пропатчить стандартный пакет в Дебияне. Вот мои итоговые патчи: https://code.google.com/p/fastvps/source/browse/trunk/patches/mod_fastcgi/upgrade_mod_fastcgi_to_snap_2_4_7_0910052141.patch https://code.google.com/p/fastvps/source/browse/trunk/patches/mod_fastcgi/upgrade_mod_fastcgi_to_snap_2_4_7_0910052141.dpatch


Сборка патча

Стягиваем Дебияновское дерево исходных кодов и то, что есть в снапшоте, чтобы собрать патч.

cd /usr/src# депенденси для сборки:apt-get install -y dpkg-dev devscripts build-essential fakerootapt-get build-dep libapache2-mod-fastcgiapt-get source libapache2-mod-fastcgicd /usr/srcmkdir origian_sources_mod_fastcgi_snapcd origian_sources_mod_fastcgi_snapwget http://www.fastcgi.com/dist/mod_fastcgi-SNAP-0910052141.tar.gztar -xf mod_fastcgi-SNAP-0910052141.tar.gz cd mod_fastcgi-SNAP-0910052141

Собираем патч между версиями:

diff -x 'debian' -rupN  /usr/src/libapache-mod-fastcgi-2.4.6 /usr/src/origian_sources_mod_fastcgi_snap/mod_fastcgi-SNAP-0910052141 > /tmp/upgrade_mod_fastcgi_to_snap_2_4_7_0910052141.patch

Папка дебиян исключена специально, так как там все неактуальное.

Идем в папку пакета:

cd /usr/src/libapache-mod-fastcgi-2.4.6/
dpatch-edit-patch upgrade_mod_fastcgi_to_snap_2_4_7_0910052141
patch -p4 < /tmp/upgrade_mod_fastcgi_to_snap_2_4_7_0910052141.patch
#Выходим из шелла:
exit

В итоге в папочке debian/patches будет созданн аккуратный патчик:
/usr/src/libapache-mod-fastcgi-2.4.6/debian/patches/upgrade_mod_fastcgi_to_snap_2_4_7_0910052141.dpatch

Все, теперь используя этот патч собираем полный пакет (мануал чуточку выше).

Отдельное спасибо блогу http://blog.mathieu-leplatre.info/apply-debian-patches-step-by-step.html за понятное руководство по работе с dpatch.

No comments :

Post a Comment

Note: only a member of this blog may post a comment.