Можно ли перекомпилировать этот пакет? - PullRequest
5 голосов
/ 02 апреля 2010

Здравствуйте, я задал этот вопрос суперпользователю, но я не получил там хорошего вопроса, и мне действительно нужен ответ. Я знаю, что некоторые из вас могут ответить на этот вопрос.

Я установил nginx через yum. Теперь я хочу добавить модуль, но мне нужно снова скомпилировать исходный код и включить новый модуль.

Но я не могу найти источник. Кто-нибудь знает, что мне нужно сделать, чтобы перекомпилировать исходный код и получить модуль.

Обновление

Я сделал все в ответе Патрика, и это сработало великолепно. Однако, когда теперь, когда я запускаю обновление yum, он хочет обновить установленную версию с той же версией.

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

1 Ответ

6 голосов
/ 02 апреля 2010

Redhat и связанные дистрибутивы (fedora, centos) хранят свои исходные rpms в очень регулярном дереве каталогов. для RHEL5 вы хотите: ftp: //ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/ для других выпусков, вы можете просматривать ftp-сервер, пока не найдете то, что ты хочешь. В противном случае, Google для точной версии nginx у вас есть (rpm -q nginx)

Предполагая, что вы можете найти srpm, установите его с помощью rpm:

rpm -ivh nginx-xxxx.src.rpm

Это поместит исходники и файлы сборки в /usr/src/redhat/{BUILD,SPEC,SRC,SOURCES}. Вы можете изменить файл .spec в /usr/src/redhat/SPEC, чтобы собрать нужный модуль вместе с остальной частью nginx, или вы можете собрать nginx вручную.

Какой модуль вы хотите построить? В nagx.spec fedora, несколько модулей указываются при запуске configure. Это может быть так просто, как добавление строки здесь:

./configure \
[snip...]
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_perl_module \
[snip...]

После добавления любых изменений в nginx.spec вы можете построить финальный rpm с помощью rpmbuild:

rpmbuild -ba nginx.spec

При условии, что пакет собирается без ошибок, rpmbuild оставит его в /usr/src/redhat/RPMS/

Обновление: yum захочет заменить ваш пакет nginx по мере появления обновлений. Вы, вероятно, захотите пересобрать каждый новый пакет по мере его появления, используя тот же процесс, что и выше. Однако Если безопасность не имеет значения, вы можете просто исключить nginx из списка обновлений, добавив следующее в вашу конфигурацию yum (вероятно, /etc/yum.repos.d/${repo}.repo или аналогичную. Обязательно свяжите его с Правое РЕПО ):

exclude=nginx*

Или запустить yum с опцией --exclude

yum --exclude=nginx*
...