update: самый простой и грамотный способ исправить баг - обновитесь на Debian Wheezy.
Платформа: Debian 6 Squeeze, mod_fastcgi (не mod_fcgid!!!), PHP 5.3.
С такой неприятной ошибкой можно весьма легко столкнуься на заданной платформе:
Бороться ней программной/настройками, к сожалению, невозможно - это баг в ПО, который исправляется исключительно обновлением. Но в Дебияне (даже в sid) нет обновленной версии и ее нужно собрать самостоятельно.
Быстрое решение
Итак, короткое решение - если Вам нужно починить прямо сейчас и Вы доверяете мне сборку бинарного пакета:
Этот вариант стоит выбрать в случае, если Вы не доверяете мне сборку бинарного пакета, но доверяете моему патчу и сами его наложите.
Используя собранный мною патч, собрать свой пакет вручную можно так:
Наибольшее число информации по сабжевой проблеме Вы можете почерпнуть по адресу баг-трекера Дебияна. Официальный сайт модуля 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
Платформа: 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
/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.