问题描述
因需求,需升级xxx.xxx.xxx.126服务器中的Nginx。
可行的操作包括:
- 使用可信的第三方RPM包更新Nginx
- 使用官方提供的Nginx源码进行编译并安装
很不幸,个人选择的是第二种方法。
在使用源码包中的configure检查环境时,发现该本地服务器中并无GCC等C语言编译器,遂尝试RPM安装GCC及其依赖。
在使用rpm命令,后缀--force --nodeps
参数升级Glibc至2.28后,执行rpm命令与yum命令均报'GLIBC_2.14 not found'
。
因缺少C编译器,无法通过编译旧版本Glibc源码回滚;又因rpm命令和yum命令均依赖Glibc而无法执行,问题严重了起来……
处理Glibc升级崩溃导致的报错’GLIBC_2.14 not found’
根据报错
rpm: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /lib64/libgcc_s.so.1)
可考虑大约是动态链接库方面存在问题,但只根据一台设备无法精确定位问题,故参考了相近配置的另一台服务器xxx.xxx.xxx.125,查询得差别如下:
xxx.xxx.xxx.126的相关信息
[root@**** lib64]# ls -la | grep libgcc
-rwxr-xr-x 1 root root 93224 4月 30 2012 libgcc_s-4.4.6-20120305.so.1
-rwxr-xr-x 1 root root 99672 11月 13 02:32 libgcc_s-8-20210514.so.1
lrwxrwxrwx 1 root root 24 1月 29 19:11 libgcc_s.so.1 -> libgcc_s-8-20210514.so.1
xxx.xxx.xxx.125的相关信息
[root@**** lib64]# ls -la | grep libgcc
-rwxr-xr-x. 1 root root 93320 Nov 22 2013 libgcc_s-4.4.7-20120601.so.1
lrwxrwxrwx. 1 root root 28 Feb 6 2018 libgcc_s.so.1 -> libgcc_s-4.4.7-20120601.so.1
观察得libgcc_s.so.1软链的目标有异。好在mv、cp等命令仍可正常使用,尝试备份原so文件后,将libgcc_s.so.1重链至libgcc_s-4.4.6-20120305.so.1。
经测试,重链后各命令均可正常调用。故判定故障原因为:在升级Glibc时中途崩溃,导致软链已被修改但指向的地址内文件不完整、无法正常调用。
升级Nginx
使用rpm包升级相近版本的Nginx
自nginx官方镜像仓库http://nginx.org/packages
下载适用于 Red Hat 6 的版本相近的升级包,即文件夹中的 nginx-1.18.0-2.el6.ngx.x86_64.rpm。
使用如下命令安装该包。
rpm -hiv nginx-1.18.0-2.el6.ngx.x86_64.rpm
得到反馈:
warning: nginx-1.18.0-2.el6.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing... ########################################### [100%]
getent: relocation error: getent: symbol __libc_dynarray_resize, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
getent: relocation error: getent: symbol __libc_dynarray_resize, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
1:nginx ########################################### [100%]
----------------------------------------------------------------------
Thanks for using nginx!
Please find the official documentation for nginx here:
* http://nginx.org/en/docs/
Please subscribe to nginx-announce mailing list to get
the most important news about nginx:
* http://nginx.org/en/support.html
Commercial subscriptions for nginx are available on:
* http://nginx.com/products/
----------------------------------------------------------------------
使用以下命令确认已升级至该版本。
nginx -v
修改引用参数并重启应用
在调用了Nginx服务的配置文件中可见:
home='pwd'
sbin/nginx -c ****/nginx.conf -p $home
将其引用的nginx路径修改为新版本所在的路径,仍旧引用之前的配置文件,即:
home='pwd'
nginx -c ****/nginx.conf -p $home
重启应用,见Nginx版本已更新。
后记
参考文章
https://blog.51cto.com/meiling/3937697 —— CentOS下安装nginx rpm包
https://blog.csdn.net/ex_xyz/article/details/116199551 —— nginx启动和配置
对以上文章的作者致以感谢。
感想
为什么这台Red Hat 6里没有GCC!?- 尽量不要
--force --nodeps
(即--强制安装 --不检查依赖
),否则后果无法估计。 - 尽量别升级Glibc等底层库。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289416.html