次の方法で共有


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

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

注意

この記事では、終了 (EOL) 状態に近い Linux ディストリビューションである CentOS を参照します。 使用と計画を適宜検討してください。 詳細については、 CentOS の終了に関するガイダンスを参照してください。

概要

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

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

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

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

解決策 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 パッケージと最新リリースのパッケージの互換性が失われ、エラーが発生します。

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

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

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

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

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

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

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

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

exclude=systemd

このパッケージの除外を終了するには、テキスト エディター (、vim、、 nanoなどvi) を使用して、/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 インストールされている新しいパッケージと共に古いパッケージ バージョンが保持される可能性があります。 パッケージが重複すると、後続のツールの使用中にシステム操作が混乱し、最終的に "保護されたマルチリブ" エラーや誤解を招く依存関係の問題が発生する可能性があります。

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

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

  • SIGINTと のシグナルをkill -2プロセスにyum送信するか、CtrlCキー+を押してアクティブな実行中にプロセスを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' エラーが表示される

出力の "404 Not Found" エラー メッセージは、サーバー上の yum パッケージまたはリソースが見つからなかったことを 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-new-version-release.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。EUS の x バージョンを使用できます。 これらのバージョンには、RHEL 8.1、8.2、8.4、8.6、および 8.8 が含まれます。

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

      バージョンの可用性の詳細については、「 Red Hat Enterprise Linux Life Cycle」を参照してください。

    • システムで 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 データベースの問題

、または コマンドを実行すると、次のrpmdnfup2dateyumエラーが表示されます。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. コマンドを実行して、/var/lib/rpm ディレクトリのバックアップをtarCreateします。

    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. VM にサード パーティ製の curl パッケージがインストールされているかどうかを確認します。
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 で問題が発生します。

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

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

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

      sudo yumdownloader curl.x86_64 libcurl.x86_64 libcurl-devel.x86_64
      
  2. 手順 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=*
    

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

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

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

Microsoft では、このトピックに関する追加情報を見つけるのに役立つサード パーティの連絡先情報を提供しています。 将来予告なしに変更されることがあります。 Microsoft は、第三者の連絡先情報の正確性を保証しません。

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

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