今天在编译LNMP环境时,遇到系统zlib版本有点低,由于Nginx需要指定zlib库安装位置,所以干脆就直接替换掉系统自带的zlib。在这里遇到了一个问题:升级zlib时候,是用yum直接升级呢,还是先卸载掉原来的,然后编译安装。如果是用yum升级的话,nginx安装时候指定zlib位置时用哪个?由于不能解决解决这个问题,所以最终我选择编译安装zlib,去官网下载了最新版本,然后编译,编译时指定安装目录为/usr/local/zlib,库文件路径为/lib64,编译完成之后,其它一切正常,却发现yum运行不正常,一直提示Segmentation fault。
网上查了一些资料,最终在centos的网站上找到了关于这个信息的描述,原来是个bug! http://bugs.centos.org/view.php?id=4702&nbn=1上有这样的描述:
Some apps require the latest version of zlib (1.2.5)
After installation from source yum segfaults. (took me ages to figure it out)
Solution, rm -rf /usr/lib/libz.* & reinstall zlib-1.2.3.
Affects all CentOS 4.* and RHEL 4.* versions.
这里说到受这个bug影响的主要是centos 4.*和red hat 4.*的系统,解决办法比较有意思,是删掉/usr/lib/下的zlib共享文件,然后重新安装zlib-1.2.3,估计这里的意思是,系统版本过低,而zlib版本过高,导致了不兼容的存在,要解决问题,只有安装低版本的才行,下面也有管理员的回复说不是centos本身的问题。把zlib换成1.2.3,发现yum能正常运行了。看来,随时更新服务器系统还是有必要的o(∩_∩)o 。
到这里,yum的问题解决了,还剩一个问题是,如果系统中自带zlib库或者用yum安装zlib库,安装nginx的时候,怎么去指定呢?zlib的默认安装路径是/usr/local,安装的时候是指定这个位置吗?实验测试了一番,发现指定–with-zlib=/usr/local,nginx编译不成功。