次の方法で共有


linux 用 yum および dnf パッケージ管理ツールの一般的な問題のトラブルシューティング

適用対象: ✔️ Linux VM

この記事では、 yum および dnf パッケージ管理ツールを使用して、Microsoft Azure 仮想マシン (VM) にアプリケーションをインストールまたは更新するときに発生する可能性がある一般的な問題について説明し、解決します。

注意事項

この記事では、サポート終了 (EOL) に達した Linux ディストリビューションである CentOS を参照します。 それに応じて、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。

概要

yum コマンドライン パッケージ管理ツールは、RPM パッケージ マネージャーを使用する Linux ディストリビューションで使用されます。 このツール名は、"Yellowdog Updater Modified" の頭字語であり、当初は Yellow Dog Linux 用に開発されました。 yum ツールは、特に Red Hat Enterprise Linux (RHEL)、CentOS、Oracle Linux、Mariner、Fedora などの RPM ベースのディストリビューションで広く使用されています。

dnf コマンドライン パッケージ管理ツール ("Dandified Yum") は、RPM ベースの Linux ディストリビューション用の最新化および強化されたパッケージ マネージャー ツールです。

シナリオ 1: リポジトリ アクセスの問題

証明書またはネットワーク接続に適用されるエラーが発生します。

検証スクリプトを実行する

Azure には、GitHub の Red Hat Update Infrastructure (RHUI) リポジトリ チェック スクリプトが用意されています。 この Python スクリプトには、次の機能が含まれています。

  • RHUI クライアント証明書を検証します。
  • RHUI rpm の整合性を検証します。
  • 拡張更新サポート (EUS) と EUS 以外のリポジトリ構成とその要件の整合性を確認します。
  • RHUI リポジトリへの接続を検証します。
  • エラーが検出されない場合は、リポジトリの接続に成功したことを報告します。
  • RHUI リポジトリへの SSL 接続を確認します。
  • RHUI リポジトリのみに焦点を当てます。
  • 定義された条件を使用して検出されたエラーを検証し、修正の推奨事項を提供します。

サポートされている Red Hat イメージ

このバージョンのチェック スクリプトでは、現在、Azure Marketplace イメージからデプロイされた次の Red Hat VM のみがサポートされています。

  • RHEL 7.x PAYG VM
  • RHEL 8.x PAYG VM
  • RHEL 9.x PAYG VM
  • RHEL 10.x PAYG VMs

RHUI チェック スクリプトを実行する方法

チェック スクリプトを実行するには、Red Hat VM で次のシェル コマンドを入力します。

  1. VM にインターネット にアクセスできる場合は、次のコマンドを使用して VM から直接スクリプトを実行します。

    curl -sL https://raw.githubusercontent.com/Azure/azure-support-scripts/refs/heads/master/Linux_scripts/rhui-check/rhui-check.py | sudo python2 -
    
  2. VM に直接インターネット にアクセスできない場合は、次の URL からスクリプトをダウンロードします。 RHUI チェック スクリプト、VM にスクリプトを転送してから、次のコマンドを実行します。

    sudo python2 ./rhui-check.py 
    
  3. このスクリプトは、検出された問題を含むレポートを生成します。 スクリプトの出力は、実行後も /var/log/rhuicheck.log に保存されます。

解決策 1

RHEL システムについては、「 Azure での Red Hat RHUI 証明書の問題のトラブルシューティングAzure での Red Hat RHUI 接続の問題のトラブルシューティングを参照してください。

その他の Linux ディストリビューションの場合は、対応するリポジトリへの通信がポート 443 を介して許可されていることを確認します。 さらに、有効な証明書が必要な場合は、オペレーティング システムで有効な証明書が使用されていることを確認します。

シナリオ 2: 依存関係の問題

更新中に依存関係の競合が発生すると、いくつかのエラーが発生する可能性があります。 次のサブセクションでは、一般的な依存関係エラーの出力症状を示します。

症状 2a

Error: 
 Problem: package leapp-0.16.0-2.el8.noarch requires python3-leapp = 0.16.0-2.el8, but none of the providers can be installed
  - package python2-leapp-0.16.0-1.el7_9.noarch conflicts with python3-leapp provided by python3-leapp-0.16.0-2.el8.noarch
  - package python3-leapp-0.16.0-2.el8.noarch conflicts with python2-leapp provided by python2-leapp-0.16.0-1.el7_9.noarch
  - cannot install the best update candidate for package leapp-0.16.0-1.el7_9.noarch
  - problem with installed package python2-leapp-0.16.0-1.el7_9.noarch
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

現象 2b

Error: 
 Problem 1: package systemd-udev-239-78.el8.x86_64 requires systemd(x86-64) = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-udev-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 2: package systemd-container-239-78.el8.x86_64 requires systemd(x86-64) = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-container-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 3: package systemd-pam-239-78.el8.x86_64 requires systemd = 239-78.el8, but none of the providers can be installed
  - cannot install the best update candidate for package systemd-pam-239-74.el8_8.5.x86_64
  - package systemd-239-78.el8.i686 is filtered out by exclude filtering
  - package systemd-239-78.el8.x86_64 is filtered out by exclude filtering
 Problem 4: systemd-libs-239-74.el8_8.5.i686 has inferior architecture
  - package systemd-239-74.el8_8.5.x86_64 requires systemd-libs = 239-74.el8_8.5, but none of the providers can be installed
  - cannot install both systemd-libs-239-78.el8.x86_64 and systemd-libs-239-74.el8_8.5.x86_64
  - cannot install the best update candidate for package systemd-libs-239-74.el8_8.5.x86_64
  - problem with installed package systemd-239-74.el8_8.5.x86_64
(try to add '--allowerasing' to command line to replace conflicting packages or '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

解決策 2

依存関係の問題が発生した場合は、まず、不足しているか互換性のないパッケージとバージョンの特定の組み合わせを特定します。 通常、 yum エラー メッセージは、必要なパッケージ バージョンの組み合わせが、使用できないことを示します。

現象 2a の解決策: 古いパッケージを削除する

現象 2a の場合、 yum はトランザクションを拒否し、エラー メッセージを返します。 このエラーは、古いリリースの python2-leapp パッケージと最新リリースの間の nn 非互換性が原因で発生します。

このエラーを解決するには、次の コマンドを実行して、競合の原因となる古いパッケージ (この場合は yum remove) を削除する必要があります。

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

その後、必要なパッケージの更新またはインストールを続行できます。

現象 2b の解決策: 構成ファイルからパッケージの除外を削除する

現象 2b の場合、 yum はトランザクションを拒否し、エラー メッセージを返します。 除外フィルターによってエラーが発生します。

必要なパッケージの更新またはインストールを再開できるように、このエラーを修正するには、 systemd パッケージが /etc/yum.conf または /etc/dnf.conf 構成ファイルで除外されていないことを確認します。 systemd パッケージの除外が発生しているかどうかを確認するには、次のcat/grepの組み合わせなどのコマンドを実行します。

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

systemd パッケージが除外されている場合は、次の出力が表示されます。

exclude=systemd

このパッケージの除外を終了するには、テキスト エディター ( vivimnano など) を使用して、 /etc/yum.conf または /etc/dnf.conf ファイルの "exclude" 行のエントリを削除またはコメント アウトします。

シナリオ 3: Python のバージョンが正しくありません

yumdnf、およびrpmツールは Python で記述されており、Python インタープリターに依存して正しく動作します。 具体的には、Python インタープリターが提供する特定の機能とライブラリに依存してコードを実行し、システムと対話します。 システムにインストールされている Python の既定のバージョンを変更すると、特定の Python のバージョンと構成に依存するため、 yum または dnf 内で問題が発生する可能性があります。

たとえば、正しいバージョンの Python がインストールされていない場合は、次のいずれかのエラーが発生する可能性があります。

  • "構文が無効です"

    yum list all
      File "/usr/bin/yum", line 30
        except KeyboardInterrupt, e:
                                ^
    SyntaxError: invalid syntax
    
  • "yum という名前のモジュールがありません"

    yum repolist
    There was a problem importing one of the Python modules
    required to run yum. The error leading to this problem was:
    
       No module named yum
    
  • "不適切なインタープリター: そのようなファイルやディレクトリはありません"

    bash: /usr/bin/yum: /usr/bin/pythonX.X: bad interpreter: No such file or directory
    

解決策 3

Linux ディストリビューションの公式ドキュメントを参照することで、既定の Python バージョンを自信を持って検証し、システムにインストールされているバージョンと比較することができます。 このプロセスは、ソフトウェアの依存関係とシステム構成の間の一貫性と互換性を確保するのに役立ちます。

Linux ディストリビューションの Python の既定のバージョンを特定したら、次のいずれかのコマンドを実行して、現在インストールされているバージョンを確認できます。

sudo ls -al `which python`
sudo ls -lrth /usr/bin/python*
sudo rpm -V python

サポートされていないバージョンの Python が使用されていることを確認する場合は、この問題を解決するためのオプションがいくつかあります。

サポートされていないバージョンの Python へのシンボリック リンクを削除し、次のコマンドを実行して、サポートされているバージョンの Python へのシンボリック リンクを作成します。

sudo cd /usr/bin
sudo unlink python
sudo ln -s python2.7 python  # Modify if necessary.

解決策 3b: RPM を使用して Python を再インストールする

次の rpm コマンドを実行して、Python パッケージを再インストールします。

sudo rpm -ivh python-<release>.<arch>.rpm --replacepkgs --replacefiles

解決策 3c: 復旧 VM から Python を再インストールする

復旧 VM から Python パッケージを再インストールします。 手順については、「 重要なシステム コア ライブラリとパッケージの読み取りを参照してください。

シナリオ 4: パッケージを複製する

yumの更新中に中断が発生した場合、yumは、インストールする新しいパッケージと共に古いパッケージ バージョンを保持する可能性があります。 パッケージが重複すると、ツールの後続の使用中にシステム操作が混乱し、最終的に "保護された multilib" エラーや誤解を招く依存関係の問題が発生する可能性があります。

次のシナリオが一般的です。

  • Secure Shell (SSH) 経由で yum update を実行し、更新プロセス中に接続の中断が発生する

  • SIGINTkill -2シグナルをyumプロセスに送信するか、アクティブな実行中にプロセスを終了+yumを選択します

  • 更新プロセスの途中でシステムの再起動が発生する

ソリューション 4

考えられる解決策は 2 つあります。トランザクションを完了するか、重複するパッケージを手動で削除してください。 これらの方法を完了する手順は、Linux インストールのディストリビューションとバージョンによって異なります。

解決策 4a: トランザクションを完了する

  1. 次の yum-complete-transaction コマンドを実行して、トランザクションを完了してみてください。

    sudo yum-complete-transaction
    

    重複を残さずに操作が成功した場合は、手順 2 に進みます。

  2. 重複が存在する場合は、--cleanup-only コマンドで yum-complete-transaction パラメーターを指定して、このトランザクションを解決します。

    sudo yum-complete-transaction --cleanup-only
    

解決策 4b: 重複を手動で削除する

  1. 次のコマンドを実行して、重複するパッケージを手動で削除します。 yum check コマンドには多くの時間が必要な場合がありますが、出力を取得することは、次の手順に進む上で非常に重要です。

    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
    
  2. 重複が削除された後、失敗したトランザクションに新しいカーネルが含まれていた場合は、カーネルを再インストールして、正しい世代の Grand Unified Bootloader (GRUB) エントリ、初期 RAM ディスク (initrd)、および初期 RAM ファイル システム (initramfs) がインストールされていることを確認します。

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

シナリオ 5: Yum が機能せず、"404 Not Found" エラーが表示される

yum出力の "404 Not Found" エラー メッセージは、yumがサーバー上のパッケージまたはリソースを見つけられなかったことを示します。 この問題は通常、 yum がリポジトリからパッケージをダウンロードまたはアクセスしようとしたときに、それに関連付けられているパッケージ ファイルまたはメタデータがサーバーに存在しないか使用できない場合に発生します。 このシナリオには、次のようなさまざまな原因があります。

  • パッケージまたはリソースがリポジトリから削除されました。

  • リポジトリの URL または構成が正しくありません。

  • ネットワークの問題により、 yum がリポジトリ サーバーにアクセスできなくなります。

  • サーバーの一時的なダウンタイムまたはメンテナンスが発生しました。

このエラーの例は、さまざまな Linux ディストリビューションのサンプル出力に示されています。

Red Hat Enterprise Linux 9 for x86_64 - Supplem  46  B/s |  14  B     00:00    
Errors during downloading metadata for repository 'rhel-9-for-x86_64-supplementary-rhui-rpms':
  - Status code: 404 for https://rhui4-1.microsoft.com/pulp/repos/content/dist/rhel9/rhui/9.1/x86_64/supplementary/os/repodata/repomd.xml (IP: 52.142.4.99)
Error: Failed to download metadata for repo 'rhel-9-for-x86_64-

解決策 5

次の考えられる解決策は、さまざまな Linux ディストリビューションに適用されます。

拡張更新サポート (EUS) ライフサイクル リポジトリと非 EUS リポジトリを切り替える場合、または非 EUS から EUS に切り替える場合は、必ず正しいプロセスに従ってください。 詳細については、「 イメージの更新動作を参照してください。

エラーが通常発生するのは、 /etc/yum/vars/releasever および /etc/dnf/vars/releasever に正しくない値が使用されていること、または値が存在しない必要がある (非 EUS リポジトリの場合) 場合は、次の手順に従います。

  1. システムで EUS リポジトリと非 EUS リポジトリのどちらが使用されているかを確認します。 これを行うには、次の rpm/grep コマンドの組み合わせを実行します。

    sudo rpm -qa | grep -i rhui
    

    コマンドによって生成されるファイル名の形式は、次の表に示すように、リポジトリの種類によって異なります。

    リポジトリの種類 ファイル名の形式
    EUS rhui-azure-rhelX-eus-<新バージョン>-<リリース>.noarch
    非 EUS rhui-azure-rhelX-<new-version>-<release>.noarch
  2. 次の cat コマンドを実行して、リリース バージョンの現在の値を確認します。

    RHEL バージョン command
    RHEL 7 sudo cat /etc/yum/vars/releasever
    RHEL 8 および 9 sudo cat /etc/dnf/vars/releasever
  3. リリース バージョンの正しい値を変更して使用します。

    • システムで EUS リポジトリを使用している場合は、適切なバージョン ロックが適用されていることを確認します。 次の例では、 RHUI EUS リポジトリが使用されているため、RHEL 9.2 のバージョン ロックが追加されています。

      sudo sh -c 'echo 9.2 > /etc/dnf/vars/releasever'
      

      RHEL7 EUS のサポートは、2021 年 8 月 30 日に終了しました。 RHEL7 で EUS リポジトリを使用しなくなったことをお勧めします。

      RHEL 8.x EUS のバージョンを使用できます。 これらのバージョンには、RHEL 8.8、8.6、8.4、8.2、8.1 が含まれます。

      RHEL 9.x EUS のバージョンを使用できます。 現在、これらのバージョンには RHEL 9.2 と 9.0 が含まれています。

      バージョンの可用性の詳細については、「 Red Hat Enterprise Linux ライフ サイクルを参照してください。

    • システムで非 EUS リポジトリを使用している場合は、次のコマンドを実行して、 /etc/yum/vars/releasever または /etc/dnf/vars/releasever ファイルのバージョン ロックを削除してください。

      RHEL バージョン command
      RHEL 7 sudo echo "" > /etc/yum/vars/releasever
      RHEL 8 および 9 sudo echo "" > /etc/dnf/vars/releasever

シナリオ 6: RPM データベースの問題

rpmup2dateyumdnf、またはtdnfコマンドを実行すると、次のエラーが表示されます。

error: rpmdb: BDB0113 Thread/process 24669/140693557245760 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 - (-30973)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

これらのエラーは、次のいずれかの理由で発生する可能性があります。

  • 破損した RPM データベース
  • データベースを使用する別のアプリケーション
  • /var/lib/rpm ディレクトリの領域が不足しています

解決策 6

次の手順に従って RPM データベースを再構築します。

重要

これらの手順を実行する前に、十分な空きディスク領域があることを確認してください。

  1. コマンドを実行して、tar ディレクトリのバックアップを作成します。

    sudo tar zcvf /var/lib/rpm-backup.tar.gz /var/lib/rpm
    
  2. 古いロックを回避するには、 __db* ファイルを削除し、 Packages ファイルの整合性を確認します。

    sudo cd /var/lib/rpm
    sudo rm -f __db.*
    sudo /usr/lib/rpm/rpmdb_verify Packages
    
  3. rpm コマンドを実行して RPM データベースを再構築します。

    sudo rpm -vv --rebuilddb
    

シナリオ 7: Yum コマンドが失敗し、'[Errno 14] HTTPS エラー 403 --Forbidden' が返される

Red Hat 7.yum コマンドを実行すると、次のエラーが表示されます。x RHUI に接続されている VM。

https://rhui4-1.microsoft.com/pulp/repos/content/dist/rhel/rhui/server/7/7Server/x86_64/rh-common/os/repodata/repomd.xml: [Errno 14] HTTPS Error 403 - Forbidden

解決策 7

  1. サードパーティの curl パッケージが VM にインストールされているかどうかを確認します。

    sudo rpm -qa | grep -i curl
    
    rpm -q --queryformat '%{VENDOR}\n' curl libcurl
    
    curl-7.73.0-2.0.cf.rhel7.x86_64 
    libcurl-7.73.0-2.0.cf.rhel7.x86_64
    libcurl-devel-7.73.0-2.0.cf.rhel7.x86_64 
    
    city-fan.org repo http://www.city-fan.org/ftp/contrib/
    

    サード パーティ製パッケージがインストールされている場合は、手順 2 に進みます。

    重要

    サードパーティのソースからの curl パッケージは、Red Hat で認識されない独自のバイナリと証明書と共に提供されます。 この非互換性により、yum に問題が発生します。

  2. RHEL 7.9 用に提供されている curllibcurl、および libcurl-devel パッケージの最新バージョンをダウンロードするには、次のいずれかの方法を使用します。

    • Red Hat Download にログオンして手動でパッケージをダウンロードし、影響を受ける VM に rpms ファイルをアップロードします。

    • 動作している RHEL 7.9 VM (PAYGO)にログオンし、 yumdownloader コマンドを使用して必要なパッケージをダウンロードし、影響を受ける VM に rpms ファイルをコピーします。

      sudo yumdownloader curl.x86_64 libcurl.x86_64 libcurl-devel.x86_64
      
  3. 手順 2 の rpms ファイルを使用して curl パッケージをダウングレードします。

    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=*
    

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

サードパーティのお問い合わせ窓口に関する免責事項

サードパーティのお問い合わせ窓口に関する情報は、ユーザーの便宜のために提供されているものであり、 この連絡先情報は、予告なしに変更される可能性があります。 マイクロソフトは、掲載されている情報に対して、いかなる責任も負わないものとします。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。