服务器设置和教程 · 19 7 月, 2025

如何排查 Linux yum 和 dnf 包管理工具常見問題

本文介紹在 香港伺服器香港雲伺服器 上的 Microsoft Azure 虛擬機器(VM)使用 yum 和 dnf 套件管理工具時,安裝或更新應用程式可能遇到的常見問題及解決方案。

注意:本文提及 CentOS,其已達生命週期終止(EOL)。請參考 CentOS 生命週期終止指南 進行規劃。

概述

yum(Yellowdog Updater Modified)是基於 RPM 的 Linux 發行版(如 RHEL、CentOS、Oracle Linux、Mariner 和 Fedora)的套件管理工具。
dnf(Dandified Yum)是 yum 的現代化增強版本,適用於基於 RPM 的 Linux 系統。

以下為常見問題及解決方案:


方案 1:儲存庫訪問問題

問題:證書或網路連線錯誤。
解決方案

  1. 執行 RHUI 檢查腳本
    Azure 提供 GitHub 上的 RHUI 檢查腳本,用於驗證:

    • RHUI 客戶端證書
    • RHUI rpm 一致性
    • EUS 與非 EUS 儲存庫配置
    • RHUI 儲存庫連線及 SSL 連線

    執行命令

    • 有網路訪問:
      curl -sL https://raw.githubusercontent.com/Azure/azure-support-scripts/refs/heads/master/Linux_scripts/rhui-check/rhui-check.py | sudo python2 -
      
    • 無網路訪問:下載腳本後執行:
      sudo python2 ./rhui-check.py
      

    腳本生成報告並儲存至 /var/log/rhuicheck.log

  2. 其他發行版:確保端口 443 連線暢通,並使用有效證書。

支援的 Red Hat 映像:RHEL 7.x、8.x、9.x、10.x PAYG VM。


方案 2:依賴項衝突

問題:更新時出現依賴項衝突錯誤,如:

Error: package leapp-0.16.0-2.el8.noarch requires python3-leapp = 0.16.0-2.el8, but none of the providers can be installed

解決方案

  1. 症狀 2a – 移除舊套件
    移除衝突的舊套件:

    sudo yum remove python2-leapp-0.16.0-1.el7_9.noarch
    

    然後繼續更新或安裝。

  2. 症狀 2b – 檢查排除項
    檢查 /etc/yum.conf/etc/dnf.conf 是否排除 systemd

    sudo cat /etc/yum.conf | grep -i exclude
    

    若存在 exclude=systemd,使用編輯器(如 vim 或 nano)刪除或註釋該行。


方案 3:Python 版本錯誤

問題:yum/dnf 依賴特定 Python 版本,錯誤範例:

SyntaxError: invalid syntax
No module named yum
bash: /usr/bin/yum: /usr/bin/pythonX.X: bad interpreter: No such file or directory

解決方案

  1. 驗證 Python 版本
    sudo ls -al `which python`
    sudo rpm -V python
    
  2. 修復方案
    • 方案 3a:修復符號連結:
      sudo cd /usr/bin
      sudo unlink python
      sudo ln -s python2.7 python
      
    • 方案 3b:重新安裝 Python 套件:
      sudo rpm -ivh python-<release>.<arch>.rpm --replacepkgs --replacefiles
      
    • 方案 3c:從救援 VM 重新安裝 Python(參考官方文件)。

方案 4:重複套件問題

問題:更新中斷導致重複套件,引發「受保護的多庫」錯誤。
解決方案

  1. 方案 4a – 完成事務
    sudo yum-complete-transaction
    

    若仍有重複套件:

    sudo yum-complete-transaction --cleanup-only
    
  2. 方案 4b – 手動移除重複套件
    sudo tar -cjf /tmp/rpm_dbbkp.tar.bz2 /var/lib/{rpm,yum}
    sudo yum check &> /tmp/yumcheck
    grep "duplicate" /tmp/yumcheck | awk '{ print $NF }' | egrep -v "\:" > /tmp/duplicaterpms
    grep "duplicate" /tmp/yumcheck | awk '{ print $NF }' | egrep ":" | awk -F':' '{ print $NF }' >> /tmp/duplicaterpms
    for i in $(cat /tmp/duplicaterpms); do sudo rpm -e --justdb --nodeps $i; done
    sudo yum update
    

    若涉及新內核,重新安裝:

    sudo yum remove kernel-<newversion>-<release>.<arch>
    sudo yum install kernel-<newversion>-<release>.<arch>
    

方案 5:Yum 404 錯誤

問題:yum 顯示「404 未找到」錯誤,如:

http://olcentgbl.trafficmanager.net/centos/7.9/extras/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found

解決方案

  • CentOS 映像:檢查並移除 /etc/yum/vars/releasever
    sudo cat /etc/yum/vars/releasever
    sudo rm -f /etc/yum/vars/releasever
    

方案 6:RPM 資料庫問題

問題:執行 rpm/yum/dnf 報錯,如:

error: rpmdb: BDB0113 Thread/process 24669/140693557245760 failed

解決方案

  1. 備份 RPM 資料庫:
    sudo tar zcvf /var/lib/rpm-backup.tar.gz /var/lib/rpm
    
  2. 移除鎖定檔案並驗證套件:
    sudo cd /var/lib/rpm
    sudo rm -f __db.*
    sudo /usr/lib/rpm/rpmdb_verify Packages
    
  3. 重建 RPM 資料庫:
    sudo rpm -vv --rebuilddb
    

方案 7:Yum 403 錯誤

問題:執行 yum 報「HTTPS 錯誤 403 – Forbidden」。
解決方案

  1. 檢查第三方 curl 套件:
    sudo rpm -qa | grep -i curl
    rpm -q --queryformat '%{VENDOR}\n' curl libcurl
    
  2. 降級 curl 套件至 RHEL 7.9 版本:
    • 從 Red Hat 手動下載或使用 yumdownloader:
      sudo yumdownloader curl.x86_64 libcurl.x86_64 libcurl-devel.x86_64
      
    • 降級:
      sudo cd /path/location/of/rpms/downloaded
      sudo yum downgrade curl-X.XX.0-XX.el7_9.X.x86_64.rpm libcurl-X.XX.X-XX.el7_9.X.x86_64.rpm libcurl-devel-X.XX.X-XX.el7_9.X.x86_64.rpm --disablerepo=*
      

透過以上方案,可有效解決在 香港伺服器、或 香港雲伺服器 上使用 yum 和 dnf 時遇到的常見問題。如需進一步支援,請參考 Azure 或 Linux 發行版官方文件