저장소 '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개를 선택할 수 있습니다. 여기서는 거울 세 개를 무작위로 선택했습니다.

루프 내에서 HTTP GET을 수행하여 curl저장소 서버가 응답하는지 확인합니다. 이 --fail옵션을 사용하면 서버측 오류(HTTP 5XX 오류)가 발생하면 오류가 발생합니다. curl--max-time 5옵션을 사용하면 작업이 중단되기 전에 최대 5초 동안 계속될 수 있습니다 curl.

액세스 가능한 저장소(3개 중 하나 이상)가 있으면 루프를 중단하고 epel-release-latest-8.noarch.rpm해당 저장소에서 패키지를 설치합니다. 이 --cacheonly옵션은 기존 저장소에 대한 종속성을 방지하는 데 도움이 됩니다.

EPEL 패키지를 설치한 후 특정 저장소 이미지를 가리키도록 URL을 수정해야 합니다. 우리는 여러 명령을 사용하여 sed이를 수행합니다 . 첫 번째는 "metalink" 속성을 제거합니다.https://mirrors.fedoraproject.org. 두 번째는 "baseurl" 속성을 방금 올바르게 작동하는지 확인한 특정 이미지로 설정합니다.

이 모든 작업이 완료되면 EPEL 저장소를 사용할 수 있습니다. 추가 dnf명령은 제대로 작동합니다.

관련 정보