在centos7系统中更新python2到python3文章中会遇到zlib版本较旧。提示升级到新版1.2.11的问题。以下是升级centos中的zlib.
- 首先查看一下系统中的zlib版本。
yum info zlib
如果查看到你的zlib版本为1.2.7,根据需求可以更新到1.2.11. - 使用linux以下命令一气可成:
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11
cd zlib-1.2.11
./configure --libdir=/lib64/
注意:这里我们没有加 --prefix=/usr/local/zlib 预安装目录,只加了 库文件的生成路径 --libdir=/lib64/
- Linux默认的一些关于目录的软连接:
ls -ld /var/*
编译:make
安装:make install
注意:从输出可以看出,make install 这一步实际上是对编译生成zlib相关文件的一个分发,也就是将编译生成文件拷贝到相关路径,我们在做离线升级安装包的时候,直接拷贝这些命令加到脚本就可以了!
- 卸载原zlib包,这样就完成zlib的升级
#rpm -qa | grep zlib | xargs rpm -e --nodeps
#rm -f /lib64/libz.so.1.2.7
注:卸载zlib,顺序很重要,如果卸早,上一步make就会失败,提示:zlib的库文件,libz.so*没有,无法完成编译!
zlib这个基础库相当重要,一旦玩崩了,会导致跟多基本命令无法使用,服务器重启起不来!
- 刷新系统库文件
ldconfig
ll /lib64/libz.*
从上可以看出,编译时带 --libdir=/lib64/ 新的库文件 直接就放置到了 /lib64/ 目录下了! - 如果只是本机安装到此结束了。如果你要升级多台机器上的zlib。以下是制作离线升级安装包方法
# vim zlib-1.2.11/zlibUpgrade.sh
##################################################
#!/bin/bash
parent_path=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P )
cd "$parent_path"
rm -f /lib64//libz.a
cp libz.a /lib64/
chmod 644 /lib64//libz.a
cp libz.so.1.2.11 /lib64/
chmod 755 /lib64//libz.so.1.2.11
rm -f /usr/local/share/man/man3/zlib.3
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3
rm -f /lib64//pkgconfig/zlib.pc
cp zlib.pc /lib64//pkgconfig
chmod 644 /lib64//pkgconfig/zlib.pc
rm -f /usr/local/include/zlib.h /usr/local/include/zconf.h
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h
rpm -qa | grep zlib | xargs rpm -e --nodeps
rm -rf /lib64/libz.so.1.2.7
ldconfig
ls -l /lib64/libz*
######################################################
chmod +x zlib-1.2.11/zlibUpgrade.sh
tar -zcf zlib-1.2.11Upgrade.tar.gz zlib-1.2.11
如果需要批量升级其他机器,没有必要在每台机器上都编译安装一遍,将zlib-1.2.11Upgrade.tar.gz拷贝过去,解压执行脚本即可完成升级。
你也可以将其做成ansible playbook,用ansible完成批量升级安装。
- 在别的机器使用刚制作的离线包升级zlib
# tar -zxf zlib-1.2.11Upgrade.tar.gz
# cd zlib-1.2.11
# sh -x zlibUpgrade.sh
# ll /lib64/libz.*
如果你喜欢本博文章请点赞收藏。