ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

关于一次升级Nginx时遇到的问题及解决

2022-09-14 11:34:04  阅读:253  来源: 互联网

标签:nginx rpm so.1 遇到 升级 Nginx libgcc root


问题描述

因需求,需升级xxx.xxx.xxx.126服务器中的Nginx。
可行的操作包括:

  1. 使用可信的第三方RPM包更新Nginx
  2. 使用官方提供的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启动和配置

对以上文章的作者致以感谢。

感想

  1. 为什么这台Red Hat 6里没有GCC!?
  2. 尽量不要--force --nodeps(即--强制安装 --不检查依赖),否则后果无法估计。
  3. 尽量别升级Glibc等底层库。

标签:nginx,rpm,so.1,遇到,升级,Nginx,libgcc,root
来源: https://www.cnblogs.com/EnddleRD/p/16692392.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有