Module 这个包可以重新编译吗

Module 这个包可以重新编译吗,module,compilation,nginx,yum,Module,Compilation,Nginx,Yum,你好,我向超级用户问了这个问题,但我没有得到一个好问题,我真的需要答案。我知道在座的一些人可以回答这个问题 我已经通过yum安装了nginx。现在我想添加一个模块,但我必须再次编译源代码并包含新模块 但我找不到源头。有人知道我必须做什么来重新编译源代码并获得模块吗 更新 我做了帕特里克回答的所有事情,结果很好。但是,当我运行yum update时,它希望用相同的版本更新已安装的rpm 我可以让它更新吗,或者我应该指定它已经是最新的。Redhat和相关发行版(fedora,centos)将其源RP

你好,我向超级用户问了这个问题,但我没有得到一个好问题,我真的需要答案。我知道在座的一些人可以回答这个问题

我已经通过yum安装了nginx。现在我想添加一个模块,但我必须再次编译源代码并包含新模块

但我找不到源头。有人知道我必须做什么来重新编译源代码并获得模块吗

更新 我做了帕特里克回答的所有事情,结果很好。但是,当我运行yum update时,它希望用相同的版本更新已安装的rpm


我可以让它更新吗,或者我应该指定它已经是最新的。

Redhat和相关发行版(fedora,centos)将其源RPM保存在高度规则的目录树中。对于您想要的RHEL5:对于其他版本,您可以浏览ftp服务器,直到找到您想要的。否则,请用谷歌搜索您拥有的nginx的确切版本(
rpm-q nginx

假设您可以找到srpm,请使用rpm安装:

rpm -ivh nginx-xxxx.src.rpm
这将把源代码和构建文件放在
/usr/src/redhat/{build,SPEC,src,sources}
中。您可以在
/usr/src/redhat/spec
中修改
.spec
文件,以构建所需的模块和nginx的其余部分,也可以手动构建nginx

您想构建哪个模块?在中,运行
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
之后,您可以使用
rpmbuild
构建最终的
rpm

rpmbuild -ba nginx.spec
假设包生成时没有错误,rpmbuild将把它保留在
/usr/src/redhat/RPMS/

更新:当更新可用时,yum将希望替换nginx软件包。您可能希望使用与上面相同的过程,在每个新包可用时重新生成它但是,如果不考虑安全性,您可以通过将以下内容添加到您的yum config(可能是
/etc/yum.repos.d/${repo}.repo
或类似内容)简单地将nginx从更新列表中排除。请确保将其与正确的repo相关联):

或者使用--exclude选项运行yum

yum --exclude=nginx*

谢谢你的回答。我已经找到了rpm。我尝试了rpm-ivh nginx-xxxx.src.rpm,但这只是安装文件,没有留下任何痕迹。“rpm2cpio nginx-xxx.src.rpm | cpio--list”给了您什么?您也可以使用“rpm2cpio nginx-xxx.rpm | cpio-ivd”手动解包。是的,我发现了问题,我没有得到src包,而是编译的包。现在文件进入正确的目录。让我试试重建染料,我认为这种方法有效。我没有得到任何错误。谢谢你的回复和时间。赛义夫,我已经添加了一些关于如何处理更新的讨论。简而言之,要么获取新的.src.rpm并构建它,要么从更新中排除nginx。
yum --exclude=nginx*