пересборка nginx 0.8 без aio для CentOS c epel5
Если после установки nginx в CentOS с epel5 после запуска оного в логе ошибок возникает вот такая штука :
2011/01/19 18:53:11 [emerg] 24730#0: eventfd() failed (38: Function not implemented)
2011/01/19 18:53:11 [alert] 24729#0: worker process 24730 exited with fatal code 2 and can not be respawn
2011/01/19 19:18:49 [emerg] 24904#0: eventfd() failed (38: Function not implemented)
2011/01/19 19:18:49 [alert] 24903#0: worker process 24904 exited with fatal code 2 and can not be respawn
2011/01/19 18:53:11 [emerg] 24730#0: eventfd() failed (38: Function not implemented)
2011/01/19 18:53:11 [alert] 24729#0: worker process 24730 exited with fatal code 2 and can not be respawn
2011/01/19 19:18:49 [emerg] 24904#0: eventfd() failed (38: Function not implemented)
2011/01/19 19:18:49 [alert] 24903#0: worker process 24904 exited with fatal code 2 and can not be respawn
то значит, что модуль aio не отрабатывает так как нужно и nginx будет работать либо неправильно, либо вообще не работать.
Пересобираем nginx без aio :
1. ставим все нужные пакеты и зависимости :
yum install -y pcre-devel zlib-devel openssl-devel libxslt-devel GeoIP-devel gd-devel rpmdevtools yum-utils
2. создаем нужные условия :
cd /usr/src
rpmdev-setuptree
3. качаем исходники и потрошим пакет :
yumdownloader —enablerepo=epel-source —source nginx
rpm -ihv nginx-*
4. убираем из файла сборки модуль —with-aio
nano /usr/src/redhat/SPECS/nginx.spec
5. пересобираем пакет :
rpmbuild -bb nginx.spec
6. копируем конфиг nginx в безопасное место и удаляем nginx :
cp /etc/nginx/nginx.conf /etc/
yum remove -y nginx
7. накатываем новый пакет :
rpm -i /usr/src/redhat/RPMS/i386/nginx-0.8.53-1.i386.rpm
8. возвращаем конфиг на место и перезапускаем nginx :
cp /etc/nginx.conf /etc/nginx/
/etc/init.d/nginx restart
!!!ВАЖНО!!!
В процессе пересобрки пакета в последних строчках будет что то типа :
Wrote: /usr/src/redhat/RPMS/i386/nginx-0.8.53-1.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/nginx-debuginfo-0.8.53-1.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.49670
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd nginx-0.8.53
+ rm -rf /var/tmp/nginx-0.8.53-1-root-root
+ exit 0
где и указан корректный пакет для установки , соответствующий системе.
Tags: aio, CentOS, epel, nginx
Спасибо за пост! Думаю, это чище, чем ставить из исходников.
Однако:
1) «yumdownloader –-enablerepo=epel-source –-source nginx» — нужно именно два дефиса, я не сразу заметил подвох)
2) epel-source надо сначала включить (тоже довольно очевидно, однако думаю, стоит напомнить)
3) странно, но сначала никак не хотел качаться src.rpm (centos 5.6), качался обычный. При отключении обычного epel — вообще ничего не качал. Собственно, тут http://centos.alt.ru/repository/centos/5/SRPMS/ действительно нет src для nginx-а. Я уже решил поставить nginx из CentALT, который судя по форумам имел правильную сборку, однако сейчас и в нем сборка с aio (версии 1.0.4). Решил скачать исходник из него, благо в нем src был, и внезапно у меня таки скачался src-пакет версии 0.8.54 -)
4) После шага «rpm -ivh nginx-*» nginx.spec по какой-то причине у меня писался не в /usr/src, а в хомяк текущего пользователя. Но это не страшно, можно и там править
5) при сборке (rpmbuild -bb) были ошибки на некоторые файлы и «file '/usr/sbin/nginx' contains an invalid rpath '/opt/ActivePerl-5.10/lib/CORE' in [/opt/ActivePerl-5.10/lib/CORE]». Первое полечилось комментированием их в секции %files файла spec (все равно какие-то маны и ненужный мне модуль nginx-а для перла), второе (у меня основной перл — несистемный, отсюда ошибка) полечилось отключением опции —with-perl-… там же.
какая у Вас стоит ОС ?
Гм, извините, уведомления о комментарии вроде не было в почте.
У меня CentOS 5.6
Кроме этого в список нужного ПО и зависимостей желательно добавить gcc и perl-devel, т.к. не на всех системах они есть, а без них компиляция не пройдет.