因需求,需升级xxx.xxx.xxx.126服务器中的Nginx。
可行的操作包括:
很不幸,个人选择的是第二种方法。
在使用源码包中的configure检查环境时,发现该本地服务器中并无GCC等C语言编译器,遂尝试RPM安装GCC及其依赖。
在使用rpm命令,后缀--force --nodeps
参数升级Glibc至2.28后,执行rpm命令与yum命令均报'GLIBC_2.14 not found'
。
因缺少C编译器,无法通过编译旧版本Glibc源码回滚;又因rpm命令和yum命令均依赖Glibc而无法执行,问题严重了起来……
根据报错
rpm: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /lib64/libgcc_s.so.1)
可考虑大约是动态链接库方面存在问题,但只根据一台设备无法精确定位问题,故参考了相近配置的另一台服务器xxx.xxx.xxx.125,查询得差别如下:
[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
[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官方镜像仓库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启动和配置
对以上文章的作者致以感谢。
--force --nodeps
(即--强制安装 --不检查依赖
),否则后果无法估计。