New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
为什么我在运行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 EC2 实例上使用 yum 时会收到错误?
我在运行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上使用 yum 时收到错误。
简短描述
要确定发生的错误,请使用 yum 命令的输出消息。您可能会收到以下常见错误消息之一:
- “连接超时 ABCD 毫秒”
- “HTTP 错误 403 - 禁止访问”
- “无法解析主机:abcdexyz.$awsregion.$awsdomain”
- “HTTP 错误 407 - 需要代理身份验证”
- “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) 端点。
- 对于带有代理的私有子网中的实例,在配置文件中添加以下参数以将 yum 配置为使用代理:
**注意:**如果您已配置代理并且使用了相同的配置文件,则代理密码将在文件中以纯文本形式显示。将 proxy-port 替换为代理使用的端口,将 proxy-user-name 替换为您的代理用户名,将 proxy-password 替换为您的代理密码。有关详细信息,请参阅 Fedora Project 网站上的将 yum 与代理服务器结合使用。对于 Amazon Linux 1 和 Amazon Linux 2,修改 /etc/yum.conf 文件。对于 Amazon Linux 2023,修改 /etc/dnf/dnf.conf 文件。proxy=http://proxy-server-IP-address:proxy_port proxy_username=proxy-user-name proxy_password=proxy-password
配置实例后,运行以下 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
**注意:**在前面的命令中,将 us-east-1 替换为您的实例的 AWS 区域。
curl 命令预安装在所有亚马逊机器映像 (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/* 和 arn:aws:s3:::repo.region.amazonaws.com/*
Amazon Linux 2:arn:aws:s3:::amazonlinux.region.amazonaws.com/ 和 arn:aws:s3:::amazonlinux-2-repos-region/
**注意:**在前面的资源中,将 region 替换为您的实例的区域。
有关详细信息,请参阅 Amazon S3 的网关端点。
使用代理
如果您使用代理访问 Amazon Linux 存储库,请验证 .amazonaws.com 子域是否在代理配置的允许列表中。
您使用的是不支持的存储库
您可能会收到以下错误: “错误: 无法下载存储库‘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] - not able to install/upgrade packages after activating repo_gpgcheck。
无法解析主机:abcdexyz.$awsregion.$awsdomain
/etc/yum/vars 目录必须包含 awsdomain 和 awsregion 变量。要验证 /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 替换为您的实例的区域。
请注意,通过 169.254.169.253 IPv4 地址和 fd00:ec2::253 IPv6 地址向 Amazon 提供的 DNS 服务器发出的查询成功。通过 VPC IPv4 网络范围基址 + 2 的预留 IP 地址向 Amazon 提供的 DNS 服务器发出的查询也成功。IPv6 地址只能在基于 Nitro 的 EC2 实例上访问。
HTTP 错误 407 - 需要代理身份验证
如果您的代理由于 yum 或 dnf 没有代理服务器的正确身份验证凭证而无法完成请求,就会出现这种问题。要将 yum 或 dnf 配置为使用代理,请使用以下参数修改配置文件:
proxy=http://proxy-server-IP-address:proxy_port proxy_username=proxy-user-name proxy_password=proxy-password
**注意:**如果您已配置代理并且使用了相同的配置文件,则代理密码将在文件中以纯文本形式显示。将 proxy-port 替换为代理使用的端口,将 proxy-user-name 替换为您的代理用户名,将 proxy-password 替换为您的代理密码。对于 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 配置文件中的 timeout 值。有关详细信息,请参阅 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 官方已更新 8 个月前
- AWS 官方已更新 8 个月前