пересборка 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: , , ,

4 комментария to “пересборка nginx 0.8 без aio для CentOS c epel5”

  1. Дмитрий Шалашов Says:

    Спасибо за пост! Думаю, это чище, чем ставить из исходников.

    Однако:
    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-… там же.

  2. admin Says:

    какая у Вас стоит ОС ?

  3. Дмитрий Шалашов Says:

    Гм, извините, уведомления о комментарии вроде не было в почте.
    У меня CentOS 5.6

  4. Дмитрий Says:

    Кроме этого в список нужного ПО и зависимостей желательно добавить gcc и perl-devel, т.к. не на всех системах они есть, а без них компиляция не пройдет.

Leave a Reply