环境:
CentOS 5.8 64位
系统自带 zlib:
1.2.1
安装版本:
1.2.3
这段时间在重新编译 LNMP,发现 Linux 中很多软件对 zlib 的依赖都比较大,但是系统中安装的 zlib 版本普遍比较低。如果使用 yum 直接升级,那么在安装 Nginx 的时候又没有办法方便地指定 zlib 的目录,所以最终还是需要编译安装 zlib。但是,如果只是单独编译安装一套新的 zlib,而系统中原来的版本还存在,很多程序依然可能继续使用系统自带的库。因此,如果能够直接把系统中已经安装的 zlib 替换掉,应该是比较理想的方案。不过,在编译过程中,很多系统工具本身也依赖 zlib,所以这个替换过程中的顺序非常重要。
下面是我在没有什么参考资料的情况下,自己尝试了差不多一天之后总结出来的经验。
1、下载并解压 zlib
首先下载 zlib 1.2.3,然后解压到:
/usr/local/src/
2、查看系统中 zlib 的安装位置
可以使用:
rpm -ql zlib
查看系统中 zlib 安装的文件。
通过查看可以发现,相关库文件位于:
/lib64/
3、配置 zlib
进入 zlib 的源码目录,执行:
./configure --prefix=/usr/local/zlib/
也可以加上:
--libdir=/lib64/
直接指定库文件的安装位置。
这里为了方便以后管理,我选择把所有文件统一安装到:
/usr/local/zlib/
目录下。
4、编译 zlib
使用:
make
进行编译。
这里需要特别注意一个问题:
这个时候不要急着卸载系统自带的 zlib。
因为当前系统中的一些程序,包括编译过程中需要使用的工具,仍然依赖原来的 zlib。
如果这个时候就把系统自带的 zlib 删除,后面的编译过程可能会直接失败。
5、卸载系统原来的 zlib
等 zlib 已经成功编译完成之后,再卸载系统中的旧版本:
rpm -e--nodeps zlib
卸载完成后,可以查看:
/lib64/
目录。
这时候会发现原来的 libz.so*
库文件已经没有了。
这个步骤的顺序非常重要。如果前面卸载得太早,那么在编译 zlib 的过程中就可能因为缺少系统库而失败。
6、安装编译好的 zlib
接下来执行:
make install
将刚刚编译好的 zlib 安装到系统中。
安装完成之后,可以在:
/usr/local/zlib/
目录下面看到一个 lib 目录,里面存放的就是 zlib 的库文件。
7、注册新的共享库
这时候如果直接运行 yum 等系统工具,可能会提示找不到:
libz.so*
这是因为虽然新的库文件已经安装到了:
/usr/local/zlib/lib/
但是系统还不知道应该到这个目录去寻找共享库。
所以需要修改:
/etc/ld.so.conf
在文件下面增加一行:
/usr/local/zlib/lib/
保存退出。
8、更新共享库缓存
然后执行:
ldconfig
重新更新系统的共享库缓存。
这时候再运行 yum 等工具,发现已经可以正常运行了。
至此,zlib 的替换就完成了。
整个过程大致可以总结为:
这里最关键的一点就是:
先编译,再卸载,最后安装。
如果顺序错误,很容易导致系统中的其他工具无法正常运行。
另外注意一下,zlib现在的最高版本是 1.2.8,但是如果在 CentOS 5.* 中安装大于 1.2.3 的版本,会出现一些错误,上一篇博客已有讲到,这里不再重复。
评论0
欢迎分享你的看法,也欢迎补充不同的实践经验。