適用対象: ✔️ 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 で次のシェル コマンドを入力します。
VM にインターネット にアクセスできる場合は、次のコマンドを使用して VM から直接スクリプトを実行します。
curl -sL https://raw.githubusercontent.com/Azure/azure-support-scripts/refs/heads/master/Linux_scripts/rhui-check/rhui-check.py | sudo python2 -
VM に直接インターネット にアクセスできない場合は、次の URL からスクリプトをダウンロードします。 RHUI チェック スクリプト、VM にスクリプトを転送してから、次のコマンドを実行します。
sudo python2 ./rhui-check.py
このスクリプトは、検出された問題を含むレポートを生成します。 スクリプトの出力は、実行後も
/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
このパッケージの除外を終了するには、テキスト エディター ( vi
、 vim
、 nano
など) を使用して、 /etc/yum.conf または /etc/dnf.conf ファイルの "exclude" 行のエントリを削除またはコメント アウトします。
シナリオ 3: Python のバージョンが正しくありません
yum
、dnf
、および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 が使用されていることを確認する場合は、この問題を解決するためのオプションがいくつかあります。
解決策 3a: シンボリック リンクを修正する
サポートされていないバージョンの 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
を実行し、更新プロセス中に接続の中断が発生するSIGINT
とkill -2
シグナルをyum
プロセスに送信するか、アクティブな実行中にプロセスを終了+yum
を選択します更新プロセスの途中でシステムの再起動が発生する
ソリューション 4
考えられる解決策は 2 つあります。トランザクションを完了するか、重複するパッケージを手動で削除してください。 これらの方法を完了する手順は、Linux インストールのディストリビューションとバージョンによって異なります。
解決策 4a: トランザクションを完了する
次の yum-complete-transaction コマンドを実行して、トランザクションを完了してみてください。
sudo yum-complete-transaction
重複を残さずに操作が成功した場合は、手順 2 に進みます。
重複が存在する場合は、
--cleanup-only
コマンドでyum-complete-transaction
パラメーターを指定して、このトランザクションを解決します。sudo yum-complete-transaction --cleanup-only
解決策 4b: 重複を手動で削除する
次のコマンドを実行して、重複するパッケージを手動で削除します。
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
重複が削除された後、失敗したトランザクションに新しいカーネルが含まれていた場合は、カーネルを再インストールして、正しい世代の 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 リポジトリの場合) 場合は、次の手順に従います。
システムで EUS リポジトリと非 EUS リポジトリのどちらが使用されているかを確認します。 これを行うには、次の
rpm
/grep
コマンドの組み合わせを実行します。sudo rpm -qa | grep -i rhui
コマンドによって生成されるファイル名の形式は、次の表に示すように、リポジトリの種類によって異なります。
リポジトリの種類 ファイル名の形式 EUS rhui-azure-rhelX-eus-<新バージョン>-<リリース>.noarch 非 EUS rhui-azure-rhelX-<new-version>-<release>.noarch 次の
cat
コマンドを実行して、リリース バージョンの現在の値を確認します。RHEL バージョン command RHEL 7 sudo cat /etc/yum/vars/releasever
RHEL 8 および 9 sudo cat /etc/dnf/vars/releasever
リリース バージョンの正しい値を変更して使用します。
システムで 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 データベースの問題
rpm
、up2date
、yum
、dnf
、または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 データベースを再構築します。
重要
これらの手順を実行する前に、十分な空きディスク領域があることを確認してください。
コマンドを実行して、
tar
ディレクトリのバックアップを作成します。sudo tar zcvf /var/lib/rpm-backup.tar.gz /var/lib/rpm
古いロックを回避するには、 __db* ファイルを削除し、 Packages ファイルの整合性を確認します。
sudo cd /var/lib/rpm sudo rm -f __db.* sudo /usr/lib/rpm/rpmdb_verify Packages
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
サードパーティの 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 に問題が発生します。
RHEL 7.9 用に提供されている
curl
、libcurl
、および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
手順 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 フィードバック コミュニティに製品フィードバックを送信することもできます。