リポジトリ 'epel'メタデータのダウンロード中にエラーが発生しました。

リポジトリ 'epel'メタデータのダウンロード中にエラーが発生しました。

cloud-initエラーが発生せずに正しく機能するまで、他の操作を再試行して以下に示すエラーメッセージを処理するには、以下の抜粋スクリプトでどの特定の構文を変更する必要がありますか?

エラーが発生したコマンドは次のとおりです。

エラーの原因と思われる起動スクリプトのコマンドは次のとおりです。

dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

エラーメッセージ:

エラーメッセージは次のとおりです。

azure-arm: Errors during downloading metadata for repository 'epel':
azure-arm:   - Status code: 503 for https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=x86_64&infra=$infra&content=$contentdir (IP: 123.45.678.901)
azure-arm:   - Status code: 503 for https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=x86_64&infra=$infra&content=$contentdir (IP: 123.45.678.908)
azure-arm:   - Status code: 503 for https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=x86_64&infra=$infra&content=$contentdir (IP: 98.765.43.21)
azure-arm: Error: Failed to download metadata for repo 'epel': Cannot prepare internal mirrorlist: Status code: 503 for https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=x86_64&infra=$infra&content=$contentdir (IP: 86.753.09.11)

コンテキスト

Packerは起動スクリプトを使用してAzureからRHEL 7イメージを構築しますcloud-init。通常、ビルドはうまく機能します。ただし、一部の依存関係の問題により、下の行で以下のエラーが発生した場合、ビルドは失敗します。

設置がスムーズに完了するために、切断線の周りの線をどのように書き直す必要がありますか?

dnf install私たちの要件は、以下のように特定のファイルで直接作業を行うことですがrpm、まれにrpmに提供されたURLが正しく応答しない場合、プロセスが失敗するのを防ぐためにどのように変更できますか?

ビルドを含む自動化は、このエラーが発生した時点まで実行するのに長い時間がかかります。

したがって、このエラーを処理すると、長い自動化プロセスを再実行する必要がなくなり、無駄な時間が大幅に短縮されます。

@Haxiel提案されたコードの結果:

以下の投稿された回答で提案されたコードを試しましたが、次@Haxielのエラーが発生しました。

このエラーを解決し、このOPに投稿された元の質問を解決するには、どの特定の構文を変更する必要がありますか?

azure-arm: + for repourl in "https://fedora.cu.be/epel" "https://lon.mirror.rackspace.com/epel" "https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel"
azure-arm: + curl --silent --fail --max-time 5 https://fedora.cu.be/epel
azure-arm: + echo 'Repository reachable.'
azure-arm: Repository reachable.
azure-arm: + for repourl in "https://fedora.cu.be/epel" "https://lon.mirror.rackspace.com/epel" "https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel"
azure-arm: + curl --silent --fail --max-time 5 https://lon.mirror.rackspace.com/epel
azure-arm: + echo 'Repository reachable.'
azure-arm: Repository reachable.
azure-arm: + for repourl in "https://fedora.cu.be/epel" "https://lon.mirror.rackspace.com/epel" "https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel"
azure-arm: + curl --silent --fail --max-time 5 https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel
azure-arm: + echo 'Repository reachable.'
azure-arm: Repository reachable.
azure-arm: + sudo dnf --cacheonly -y install https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel/epel-release-latest-8.noarch.rpm
azure-arm: Last metadata expiration check: 0:11:50 ago on Mon 07 Feb 2022 05:36:46 PM UTC.
azure-arm: epel-release-latest-8.noarch.rpm                 37 kB/s |  23 kB     00:00
azure-arm: Dependencies resolved.
azure-arm: ================================================================================
azure-arm:  Package             Architecture  Version            Repository           Size
azure-arm: ================================================================================
azure-arm: Installing:
azure-arm:  epel-release       (B noarch        8-13.el8           @commandline         23 k
azure-arm:
azure-arm: Transaction Summary
azure-arm: ================================================================================
azure-arm: Install  1 Package
azure-arm:
azure-arm: Total size: 23 k
azure-arm: Installed size: 35 k
azure-arm: Downloading Packages:
azure-arm: Running transaction check
azure-arm: Transaction check succeeded.
azure-arm: Running transaction test
azure-arm: Transaction test succeeded.
azure-arm: Running transaction
azure-arm:   Preparing        :                                                        1/1
azure-arm:   Installing       : epel-release-8-13.el8.noarch                           1/1
azure-arm:   Running scriptlet: epel-release-8-13.el8.noarch                           1/1
azure-arm:   Verifying        : epel-release-8-13.el8.noarch                           1/1
azure-arm: Installed products updated.
azure-arm:
azure-arm: Installed:
azure-arm:   epel-release-8-13.el8.noarch
azure-arm:
azure-arm: Complete!
azure-arm: + sed -i '/^metalink.*/d' /etc/yum.repos.d/epel-modular.repo /etc/yum.repos.d/epel-playground.repo /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing-modular.repo /etc/yum.repos.d/epel-testing.repo
azure-arm: + sed -i 's|^#baseurl.*|baseurl=https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel|g' /etc/yum.repos.d/epel-modular.repo /etc/yum.repos.d/epel-playground.repo /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing-modular.repo /etc/yum.repos.d/epel-testing.repo
azure-arm: + dnf install -y telnet
azure-arm: Extra Packages for Enterprise Linux 8 - x86_64  205  B/s | 196  B     00:00
azure-arm: Errors during downloading metadata for repository 'epel':
azure-arm:   - Status code: 404 for https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel/repodata/repomd.xml (IP: 123.45.678.90)
azure-arm: Error: Failed to download metadata for repo 'epel': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

答え1

これは私が思いついた概念証明です。これを出発点として使用できます。

for repourl in \
"https://fedora.cu.be/epel" \
"https://lon.mirror.rackspace.com/epel" \
"https://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora-projects/epel"
do
    if curl --silent --fail --max-time 5 $repourl &> /dev/null
        then echo "Repository reachable."
    fi
done

sudo dnf --cacheonly install "$repourl/epel-release-latest-8.noarch.rpm"

sed -i '/^metalink.*/d' /etc/yum.repos.d/epel*
sed -i "s|^#baseurl=https://download.example/pub/epel|baseurl=$repourl|g" /etc/yum.repos.d/epel*

EPELリポジトリミラーURLのリストから始めます。利用可能な画像は次の場所にリストされています。https://admin.fedoraproject.org/mirrormanager/。最も近い2つまたは3つのミラーを選択できます。ここでは3つのミラーをランダムに選択しました。

ループ内でHTTP GETを実行して、curlストレージサーバーが応答していることを確認します。この--failオプションを使用すると、サーバー側のエラー(HTTP 5XXエラー)が発生した場合にエラーが発生します。curlこの--max-time 5オプションを使用すると、ジョブが中断されるまで最大5秒間続行できますcurl

アクセス可能なリポジトリ(3つのうち1つ以上)がある場合は、ループを中断してそのリポジトリepel-release-latest-8.noarch.rpmからパッケージをインストールします。この--cacheonlyオプションは、既存のストレージへの依存関係を防ぐのに役立ちます。

EPELパッケージをインストールした後、特定のストレージイメージを指すようにURLを変更する必要があります。私たちはいくつかのコマンドを使ってsedこれを行います。最初は「metalink」属性を削除します。https://mirrors.fedoraproject.org。 2番目は、「baseurl」プロパティを正しく動作していることを確認した特定の画像に設定します。

すべての作業が完了したら、EPELリポジトリを使用できます。追加dnfのコマンドは正しく機能します。

関連情報