跳至內容

為什麼我在執行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 EC2 執行個體上使用 yum 時會收到錯誤訊息?

4 分的閱讀內容
0

為什麼我在執行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上使用 yum 時會收到錯誤訊息。

簡短說明

若要確定發生了什麼錯誤,請使用 yum 命令的輸出訊息。您可能會收到下列其中一個常見錯誤訊息:

  • 「Connection timed out ABCD milliseconds」(連線逾時 ABCD 毫秒)
  • 「HTTP Error 403 - Forbidden」(HTTP 錯誤 403 - 禁止)
  • 「Could not resolve host: abcdexyz.$awsregion.$awsdomain」(無法解析主機:abcdexyz.$awsregion.$awsdomain)
  • 「HTTP Error 407 - Proxy Authentication Required」(HTTP 錯誤 407 - 需要 Proxy 驗證)
  • 「Resolving timed out after 5000 milliseconds」(5000 毫秒後解析逾時)

解決方法

連線逾時 ABCD 毫秒

若要解決此問題,請確認附加到您執行個體的安全群組是否允許傳出 HTTP 或 HTTPS 流量。也請確認證與執行個體子網路關聯的網路存取控制清單 (網路 ACL) 是否允許傳出 HTTP 或 HTTPS 流量。

下列範例顯示允許連接埠 80 和 443 傳出流量的自訂網路 ACL:

Inbound rules
Rule#    Type                    Protocol    Port Range    Source        Allow/Deny
100      Custom TCP Rule         TCP (6)     1024-65535    0.0.0.0/0     ALLOW
101      Custom TCP Rule         TCP (6)     1024-65535    ::/0          ALLOW
*        ALL Traffic             ALL         ALL           ::/0          DENY
*        ALL Traffic             ALL         ALL           0.0.0.0/0     DENY
Outbound rules
Rule #    Type                   Protocol    Port Range    Source       Allow/Deny
100       HTTP (80)              TCP (6)     80            0.0.0.0/0    ALLOW
101       HTTPS (443)            TCP (6)     443           0.0.0.0/0    ALLOW
102       HTTP (80)              TCP (6)     80            ::/0         ALLOW
103       HTTPS (443)            TCP (6)     443           ::/0         ALLOW
*         ALL Traffic            ALL         ALL           ::/0         DENY
*         ALL Traffic            ALL         ALL           0.0.0.0/0    DENY

若要存取 Amazon Linux 儲存庫,您的執行個體必須根據您的組態使用下列其中一個網際網路存取設定:

  • 對於公有子網路中的執行個體,請使用網際網路閘道
  • 對於私有子網路中的執行個體,請使用 NAT 閘道NAT 執行個體
  • 對於公有或私有子網路中的執行個體,請使用 Amazon Simple Storage Service (Amazon S3) 虛擬私有雲端 (VPC) 端點
  • 對於具有 Proxy 的私有子網路中的執行個體,請將下列參數新增至組態檔,以將 yum 設定為使用 Proxy:
    proxy=http://proxy-server-IP-address:proxy_port
    proxy_username=proxy-user-name
    proxy_password=proxy-password
    **注意:**如果您已經設定 Proxy 並且使用相同的組態檔,則 Proxy 密碼會以純文字形式顯示在檔案中。將 proxy-port 取代為您 Proxy 使用的連接埠,將 proxy-user-name 取代為您的 Proxy 使用者名稱,將 proxy-password 取代為您的 Proxy 密碼。如需詳細資訊,請參閱 Fedora Project 網站上的搭配 Proxy 伺服器使用 yum。對於 Amazon Linux 1 和 Amazon Linux 2,請修改 /etc/yum.conf 檔案。對於 Amazon Linux 2023,請修改 /etc/dnf/dnf.conf 檔案。

設定執行個體之後,請執行下列 curl 命令,以確保執行個體可以存取儲存庫。

Amazon Linux 2023:

curl -I al2023-repos-us-east-1-de612dc2.s3.dualstack.us-east-1.amazonaws.com

Amazon Linux 1:

curl -I repo.us-east-1.amazonaws.com

Amazon Linux 2:

curl -I amazonlinux.us-east-1.amazonaws.com

注意: 在上述命令中,請以執行個體的 AWS 區域取代 us-east-1

curl 命令已預先安裝在所有 Amazon Machine Image (AMI) 上。但是,如果沒有憑證,您就無法存取 Amazon Linux 儲存庫,且 curl 命令無法取得 yum 儲存庫的憑證。執行 curl 命令時,您會收到類似於以下範例的存取遭拒錯誤訊息:

$ curl -I amazonlinux.us-east-1.amazonaws.com
HTTP/1.1 403 Forbidden
x-amz-bucket-region: us-east-1
x-amz-request-id: xxxxxxxx
x-amz-id-2: xxxxxxxxxxxxx=
Content-Type: application/xml
Date: Thu, 17 Nov 2022 16:59:59 GMT
Server: AmazonS3

使用 curl 命令測試逾時問題是否仍然發生。範例錯誤訊息顯示網路可連線,且逾時問題已不再發生,

HTTP 錯誤 403 - 禁止

**您使用 VPC 端點 **

如果您使用 Amazon S3 VPC 端點,請確定附加的政策會根據您的 Linux 版本允許 s3:GetObject API 呼叫。

Amazon Linux 2023:arn:aws:s3:::al2023-repos-region-de612dc2/*

Amazon Linux 1:arn:aws:s3:::packages.region.amazonaws.com/* and arn:aws:s3:::repo.region.amazonaws.com/*

Amazon Linux 2:arn:aws:s3:::amazonlinux.region.amazonaws.com/ and arn:aws:s3:::amazonlinux-2-repos-region/

注意: 在上述資源中,以您的執行個體的「區域」取代區域

如需相關資訊,請參閱 Amazon S3 的閘道端點

您使用 Proxy

如果您使用 Proxy 存取 Amazon Linux 儲存庫,請確認 .amazonaws.com 子網域是否位於 Proxy 組態的允許清單中。

您使用了不支援的儲存庫

您可能會收到下列錯誤訊息: 「錯誤: 無法下載儲存庫 'amazonlinux' 的中繼資料: GPG 驗證已啟用,但無法使用 GPG 簽章。這可能是個錯誤,或者儲存庫不支援 GPG 驗證」。這是一個已知問題,當您在 /etc/yum.repos.d/ 目錄下的儲存庫檔案 (例如 repository.repo 檔案或 /etc/yum.conf) 中啟動 repo_gpgcheck 時,就會發生該問題。Amazon Linux 2023 儲存庫未啟動中繼資料簽署。此外,如果將此組態用於不支援的儲存庫,則套件安裝或作業系統 (OS) 更新可能會失敗。作為因應措施,請開啟儲存庫 repo 檔案,並將儲存庫的 repo_gpgcheck 值設為 0。例如,將值設為 repo_gpgcheck=0

如需有關此情況的更多資訊,請參閱 GitHub 網站上的 [Bug] - 啟動 repo_gpgcheck 後無法安裝/升級套件

無法解析主機:abcdexyz.$awsregion.$awsdomain

/etc/yum/vars 目錄必須包含 awsdomainawsregion 變數。若要確認 /etc/yum/vars 目錄是否定義了您的自訂 yum 變數,請執行以下命令:

$ cat /etc/yum/vars/awsregion
us-east-1

$ cat /etc/yum/vars/awsdomain
amazonaws.com

注意:us-east-1 取代為執行個體的區域。

執行個體必須解析 Amazon Linux 儲存庫的網域名稱。若要確認執行個體的 DNS 解析,請執行以下命令:

$ dig amazonlinux.us-east-1.amazonaws.com

$ dig repo.us-east-1.amazonaws.com

$ dig al2023-repos-us-east-1-de612dc2

注意:us-east-1 取代為執行個體的區域。

請注意,針對 Amazon 提供的 DNS 伺服器 (169.254.169.253 IPv4 位址和 fd00:ec2::253 IPv6 位址) 的查詢會成功。針對 Amazon 提供的 DNS 伺服器 (以 VPC IPv4 網路範圍加 2 為基礎之預留 IP 位址) 的查詢也會成功。IPv6 位址只能在以 Nitro 為基礎的 EC2 執行個體上存取。

HTTP 錯誤 407 - 需要 Proxy 驗證

如果您的 Proxy 伺服器無法完成要求,就會發生此錯誤,因為 yum 或 dnf 沒有適合 Proxy 伺服器的正確驗證憑證。若要設定 yum 或 dnf 使用 Proxy,請使用下列參數修改組態檔:

proxy=http://proxy-server-IP-address:proxy_port
proxy_username=proxy-user-name
proxy_password=proxy-password

**注意:**如果您已經設定 Proxy 並且使用相同的組態檔,則 Proxy 密碼會以純文字形式顯示在檔案中。將 proxy-port 取代為您 Proxy 使用的連接埠,將 proxy-user-name 取代為您的 Proxy 使用者名稱,將 proxy-password 取代為您的 Proxy 密碼。對於 Amazon Linux 1 和 Amazon Linux 2,請修改 /etc/yum.conf 檔案。對於 Amazon Linux 2023,請修改 /etc/dnf/dnf.conf 檔案。

逾時問題

執行下列命令來確認 /etc/resolv.conf 檔案是否具有指向您 DNS 伺服器的正確 IP 位址:

cat /etc/resolv.conf
nameserver YourDNSIP

若要修改 5000 毫秒的預設逾時期間,請修改 yum 組態檔中的逾時值。如需更多資訊,請參閱 die.net 網站上的 yum.conf。對於 Amazon Linux 2023,請變更 /etc/yum.repos.d/amazonlinux.repo 中的 metadata_expire 值,以修改逾時期限。

若要使用 dig 命令來檢查查詢時間,請執行以下命令:

$ dig repo.us-east-1.amazonaws.com | grep time

注意:us-east-1 取代為執行個體的區域。

AWS 官方已更新 1 年前