Nginx

帶有 Nginx 的 Centos 7 伺服器在更新軟體包時報告錯誤

  • December 17, 2021

我有一個安裝了 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 儲存庫(以防兩個儲存庫之間發生衝突) - 但它沒有任何區別。

有誰知道是什麼導致了這個問題 - 以及如何解決它?

提前致謝!

/約翰

我已經為我的系統解決了這個問題,儘管我的解決方案可能不適用於所有人,這取決於您是否使用nginx-*導致依賴性問題的模組。


我的解決方案是刪除nginx-mod-http-perlnginx-mod-streamnginx-mod-mailnginx-mod-http-image-filternginx-mod-http-xslt-filter,然後我就能夠yum upgrade獲得最新的 nginx 版本。

編輯添加:除了刪除這些包之外,我還更新/etc/yum.repos.d/epel.repo為 have exclude=nginx*,以防止@epel重新安裝 -provided 的 nginx 包。

這對我有用,因為我實際上並沒有使用這些包提供的功能;我有一種預感,它們是由 Webmin(與 OP 一樣,我也在使用)安裝的,以支持它可以提供的一些功能。

如果您正在使用這些模組提供的功能,那麼我認為至少目前的解決方案是禁用 nginx repo@epel ,並在/當發布兼容模組時重新啟用它。如果你這樣做,你將沒有任何可用的 nginx 升級,因為 .20.2 上沒有可用的 1.20.2 @epel


核心問題似乎是你(和我)已經nginx-1.20.1-9.el7.x86_64 (@epel)安裝了,但是@epelnginxrepos 都啟用了。

在 11 月 16 日左右,nginxrepo 發布了nginx-1.20.2,所以 yum 現在正在嘗試更新到那個版本。1.20.2但是,安裝的各種nginx-*模組(無論是 on@epel還是 on )都沒有相應的更新,因此無法更新nginx它們。這些模組也需要nginx(abi) = 1.20.1,這是@epel提供(但nginx似乎沒有提供)的模組,因此依賴項檢查失敗。

旁注:在我們的例子中,我們確實在某個時間點安裝了nginx-provided 核心包,並在某個時候被@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. 這可能與手頭的問題相關,也可能不相關。

引用自:https://serverfault.com/questions/1085573