帶有 Nginx 的 Centos 7 伺服器在更新軟體包時報告錯誤
我有一個安裝了 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-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
為 haveexclude=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)
安裝了,但是@epel
和nginx
repos 都啟用了。在 11 月 16 日左右,
nginx
repo 發布了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
. 這可能與手頭的問題相關,也可能不相關。