我有一台安装了 Nginx 的 CentOS 7 VM。我使用 Webmin 来管理服务器。
它通常会自动安装更新,但 nginx 更新失败,因此我尝试手动进行更新。它返回以下内容:
Installing package(s) with command /bin/yum -y install nginx ..
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.netsite.dk
* epel: mirror.netsite.dk
* extras: mirror.netsite.dk
* updates: mirror.netsite.dk
Resolving Dependencies
--> Running transaction check
---> Package nginx.x86_64 1:1.20.1-9.el7 will be updated
--> Processing Dependency: nginx(abi) = 1.20.1 for package: 1:nginx-mod-mail-1.20.1-9.el7.x86_64
--> Processing Dependency: nginx(abi) = 1.20.1 for package: 1:nginx-mod-stream-1.20.1-9.el7.x86_64
--> Processing Dependency: nginx(abi) = 1.20.1 for package: 1:nginx-mod-http-perl-1.20.1-9.el7.x86_64
--> Processing Dependency: nginx(abi) = 1.20.1 for package: 1:nginx-mod-http-image-filter-1.20.1-9.el7.x86_64
--> Processing Dependency: nginx(abi) = 1.20.1 for package: 1:nginx-mod-http-xslt-filter-1.20.1-9.el7.x86_64
---> Package nginx.x86_64 1:1.20.2-1.el7.ngx will be an update
--> Finished Dependency Resolution
Error: Package: 1:nginx-mod-http-perl-1.20.1-9.el7.x86_64 (@epel)
Requires: nginx(abi) = 1.20.1
Removing: 1:nginx-1.20.1-9.el7.x86_64 (@epel)
nginx(abi) = 1.20.1
Updated By: 1:nginx-1.20.2-1.el7.ngx.x86_64 (nginx)
Not found
Error: Package: 1:nginx-mod-stream-1.20.1-9.el7.x86_64 (@epel)
Requires: nginx(abi) = 1.20.1
Removing: 1:nginx-1.20.1-9.el7.x86_64 (@epel)
nginx(abi) = 1.20.1
Updated By: 1:nginx-1.20.2-1.el7.ngx.x86_64 (nginx)
Not found
Error: Package: 1:nginx-mod-mail-1.20.1-9.el7.x86_64 (@epel)
Requires: nginx(abi) = 1.20.1
Removing: 1:nginx-1.20.1-9.el7.x86_64 (@epel)
nginx(abi) = 1.20.1
Updated By: 1:nginx-1.20.2-1.el7.ngx.x86_64 (nginx)
Not found
Error: Package: 1:nginx-mod-http-image-filter-1.20.1-9.el7.x86_64 (@epel)
Requires: nginx(abi) = 1.20.1
Removing: 1:nginx-1.20.1-9.el7.x86_64 (@epel)
nginx(abi) = 1.20.1
Updated By: 1:nginx-1.20.2-1.el7.ngx.x86_64 (nginx)
Not found
Error: Package: 1:nginx-mod-http-xslt-filter-1.20.1-9.el7.x86_64 (@epel)
Requires: nginx(abi) = 1.20.1
Removing: 1:nginx-1.20.1-9.el7.x86_64 (@epel)
nginx(abi) = 1.20.1
Updated By: 1:nginx-1.20.2-1.el7.ngx.x86_64 (nginx)
Not found
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
.. install failed!
我尝试运行建议的 rpm 命令 - 然后重新执行软件包更新。但这并没有什么效果。
我还尝试安装其他 19 个软件包 - 它们都安装正确。然后我重试了 Nginx - 但仍然失败并出现相同的错误... 我还尝试依次禁用 nginx 存储库和 epel 存储库(以防两个存储库之间发生冲突) - 但没有任何效果。
有谁知道是什么导致了这个问题 - 以及如何解决它?
提前致谢!
/约翰
答案1
我已经为我的系统解决了这个问题,但我的解决方案可能并不适用于所有人,这取决于您是否使用nginx-*
导致依赖问题的模块。
我的解决方案是移除nginx-mod-http-perl
、nginx-mod-stream
、nginx-mod-mail
、nginx-mod-http-image-filter
和nginx-mod-http-xslt-filter
,然后我就能够yum upgrade
获取最新的 nginx 版本。
编辑添加:除了删除这些软件包之外,我还更新/etc/yum.repos.d/epel.repo
了exclude=nginx*
,以防止@epel
重新安装提供的 nginx 软件包。
这对我来说很有用,因为我实际上并不使用这些软件包提供的功能;我有一种预感,它们是由 Webmin 安装的(和 OP 一样,我也在使用它),以支持它的一些功能能提供。
如果您正在使用这些模块提供的功能,那么我认为解决方案(至少目前而言)是禁用 nginx 存储库,并在发布兼容模块时重新启用它@epel
。如果这样做,您将没有任何可用的 nginx 升级,因为 上没有可用的 1.20.2 @epel
。
核心问题似乎是您(和我)已经nginx-1.20.1-9.el7.x86_64 (@epel)
安装,但同时@epel
启用nginx
了 repos。
11 月 16 日左右,该nginx
仓库发布了nginx-1.20.2
,因此 yum 正在尝试更新到该版本。但是,安装的各种模块(无论是还是)都没有相应的1.20.2
更新,因此无法更新。这些模块还需要,它是提供的(但它确实nginx-*
@epel
nginx
nginx(abi) = 1.20.1
@epel
nginx
不是似乎提供)因此依赖性检查失败。
边注:在我们的案例中,我们做过nginx
在某个时间点安装了提供的核心包,并且在某个时间点用该版本替换它-@epel
这是来自 yum 日志:
# zgrep -h nginx.x86 /var/log/yum.log-202* /var/log/yum.log
Apr 22 03:55:37 Updated: nginx.x86_64 1:1.18.0-1.el7.ngx
Oct 30 09:27:11 Updated: nginx.x86_64 1:1.18.0-2.el7.ngx
Apr 21 08:48:33 Updated: nginx.x86_64 1:1.20.0-1.el7.ngx
May 26 04:20:28 Updated: nginx.x86_64 1:1.20.1-1.el7.ngx
Jun 18 06:46:31 Installed: nginx.x86_64 1:1.20.1-2.el7
Oct 27 04:51:03 Updated: nginx.x86_64 1:1.20.1-9.el7
6 月 18 日,该.ngx
软件包被 提供的软件包替换@epel
。这可能与当前的问题有关,也可能无关。
答案2
yum remove nginx-mod-http-perl*
yum remove nginx-mod-stream*
yum remove nginx-mod-mail*
yum remove nginx-mod-http-image-filter*
yum remove nginx-mod-http-xslt-filter*
也不要惊慌,nginx-all-modules 将被删除
https://yum-info.contradodigital.com/view-package/epel/nginx-all-modules/