Amazon EC2 实例无法更新或使用 yum

Posted

技术标签:

【中文标题】Amazon EC2 实例无法更新或使用 yum【英文标题】:Amazon EC2 instance can't update or use yum 【发布时间】:2014-01-16 07:18:35 【问题描述】:

我正在使用亚马逊的 installing a LAMP server 教程。前几条指令涉及使用yum,但我尝试使用的每一种方式都导致了相同的消息。我最近发现了一些关于同一问题的其他问题,但这些问题都没有改变我的设置。

这是消息:

Loaded plugins: priorities, update-motd, upgrade-helper
Could not retrieve mirrorlist http://repo.us-east-1.amazonaws.com/latest/main/mirror.list error was
12: Timeout on http://repo.us-east-1.amazonaws.com/latest/main/mirror.list: (28, 'Connection timed out after 10001 milliseconds')


One of the configured repositories failed (Unknown),
and yum doesn't have enough cached data to continue. At this point the only
safe thing yum can do is fail. There are a few ways to work "fix" this:

 1. Contact the upstream for the repository and get them to fix the problem.

 2. Reconfigure the baseurl/etc. for the repository, to point to a working
    upstream. This is most often useful if you are using a newer
    distribution release than is supported by the repository (and the
    packages for the previous distribution release still work).

 3. Disable the repository, so yum won't use it by default. Yum will then
    just ignore the repository until you permanently enable it again or use
    --enablerepo for temporary usage:

        yum-config-manager --disable <repoid>

 4. Configure the failing repository to be skipped, if it is unavailable.
    Note that yum will try to contact the repo. when it runs most commands,
    so will have to try and fail each time (and thus. yum will be be much
    slower). If it is a very temporary problem though, this is often a nice
    compromise:

        yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

 Cannot find a valid baseurl for repo: amzn-main/latest

我之前使用相同的教程做过同样的事情,没有遇到任何问题,但那是几个月前的事了。我不知道发生了什么变化,但我微薄的经验让我无法弄清楚。

【问题讨论】:

你试过 yum clean all 了吗? 我遇到了类似(相同?)的问题;我在工作的代理后面。为 HTTP 和 DNS(UPD 和 TCP)添加出站规则就可以了。 如果您的 VPC 上有一个 S3 终端节点,那么这可能会阻止 yum。请参阅下面的答案以获取修复。 GraduateOfAcmeU 你能解释一下“睡眠 60”是什么意思吗? 据我所知,AWS 讨厌它的客户 【参考方案1】:

看起来主机在联系 yum 服务器时遇到了问题。确保实例具有出站 Internet 访问权限(检查安全组等)。如果实例在 VPC 中并且安全组看起来不错,您可能需要使用 nat 设备或附加弹性 IP。

祝你好运-

【讨论】:

在我的情况下,我在创建实例时未选中“自动为您的实例分配公共 IP 地址”。 除了查德尼尔的回答。如果您创建了自定义/新安全组,请检查并配置您的实例的出站流量。 检查您在 iptables 中没有可能导致问题的规则 没有出站互联网访问权限 不确定 munna_1 的评论,我不得不完全相反。如果没有公共 IP 地址(也没有 NAT),实例将无法连接到公共互联网。【参考方案2】:

只需将默认安全组与您可能创建的安全组一起分配即可。这解决了我的问题。 ;)

【讨论】:

【参考方案3】:

很多初次使用 Amazon EC2 的用户都会遇到这个问题。根据我的经验,这通常是未在其实例的安全组上设置允许的传出连接的结果。 Amazon 用于配置 Amazon Linux 实例的教程仅提及设置传入连接,因此很容易忘记您从未设置允许的传出连接。只需允许HTTPHTTPS 对任何IP 地址的请求即可解决此问题。

【讨论】:

即使我也遇到了同样的问题。我将HTTPHTTPS 请求添加到Outbound 规则中的任何IP 地址。然后我重新启动了实例,我遇到了同样的错误。你可以在这里查看我的问题:***.com/questions/33125410/… 如果我错了,请纠正我,但安全组在 AWS 中是有状态的,这意味着入站流量中的任何设置对出站流量也一样。不过我想,如果您将其绑定到您的单个 IP 地址,那么它可能无法在出站模式下工作? @AspiretoCode 我完全同意你的看法 默认情况下,安全组允许所有出站流量。 @CyclingDave 有趣,这似乎是 Terraform 特有的东西。当您从 AWS 控制台、awscli、SDK(我使用 boto3)或 CloudFormation 中的任何一个创建新的 (VPC) 安全组时,它会自动填充一条出口规则,允许所有流量、所有协议为 0.0。 0.0/0.【参考方案4】:

我有同样的问题,并且与名称解析有关。我使用以下内容进行更正:

EC2 instance has no public DNS

这是来自 Mat 的很好的解释:

转到 console.aws.amazon.com 转到 服务 -> VPC 打开您的 VPC 选择您的 VPC 连接到您的 EC2 并 编辑 摘要 ---> 将 DNS 主机名:更改为 YES

【讨论】:

【参考方案5】:

如果您的 VPC 上有 S3 端点,那么这将导致 yum 失败,因为 repo 文件存储在 S3 中。要解决此问题,请将以下策略添加到 S3:


"Version": "2012-10-17",
"Statement": [
    
        "Effect": "Allow",
        "Principal": "*",
        "Action": "*",
        "Resource": [
            "arn:aws:s3:::repo.eu-west-1.amazonaws.com",
            "arn:aws:s3:::repo.eu-west-1.amazonaws.com/*"
        ]
    
]

将 eu-west-1 替换为您的 S3 端点所在的相关区域代码。

【讨论】:

谢谢你,这正是我的问题!如果你的问题和我的一样,你可能不仅仅需要访问 repo.whatever,你可能还需要访问 packages.whatever。因此,我使用的是这样的 acl: "Version": "2012-10-17", "Statement": [ "Effect": "Allow", "Principal": "*", "Action": "*", "Resource": [ "arn:aws:s3:::*.amazonaws.com", "arn:aws:s3:::*.amazonaws.com/*" ] ] 确切地说,将此策略添加到“VPC 中的 S3 端点”。我实际上有一个允许所有资源、所有主体、所有操作的策略。并且仍然在启动期间实例会超时安装包。 补充:aws.amazon.com/amazon-linux-ami/faqs/#vpc-endpoint on :: 如何配置 VPC 终端节点以允许连接到 Amazon Linux AMI 存储库? 能否请您简要解释一下或发布有关如何编辑此政策的链接?谢谢! 谢谢!我挣扎了几个小时,为什么我什至无法 ping yum repo。添加您的政策解决了它。【参考方案6】:

有了 chadnal 的评论。 需要将DNS解析设置为Yes

转到 console.aws.amazon.com 转到 服务 -> VPC 打开您的 VPC 选择您的 VPC 连接到您的 EC2 点击Edit DNS Resolution并设置Yes

【讨论】:

不一样。 > DNS 解析:指示在此 VPC 中启动的实例是否获取 DNS 主机名。 > DNS 主机名:指示此 VPC 是否支持 DNS 解析。如果为“否”,则未启用将公有 DNS 主机名解析为 IP 地址的 AWS 提供的 DNS 服务器。【参考方案7】:

此外,如果您无法使任何 DNS 正常工作,请检查您的 DHCP 选项集。我留下了一个旧的,当我清理一个涉及活动目录集成的项目时,它坏了。答案很简单,就是改回原来的/保存的选项。

【讨论】:

【参考方案8】:

我收到了与问题中描述的 yum 完全相同的错误消息。就我而言,我有一个 NACL,它允许所有传出流量,但将传入流量限制为 HTTP/HTTPS、SSH 和所有 ICMP。由于 NACLS 是无状态的,因此尝试运行 yum 失败,因为 yum 使用的传入临时连接未明确允许,因此被丢弃。

【讨论】:

是的,这个。来自实例的 yum 在端口 443 上发送出站请求,从实例通过 SSG、通过 nACL、通过 Internet 网关并发送到 Web。来自 web 的 yum 服务器通过临时端口响应,这意味着入站流量从 web 进入 VPC,介于 1024 和 65535 之间,通过 ig、nACL 和 sg 返回。【参考方案9】:

我遇到了同样的问题,但问题不是我的安全组或 NACL。

背景: 我通过Route53添加了一个域名。 域名继续由 DiscountASP.net 托管。 VPC 是手动创建的(没有向导或默认设置)。 我用我的域名和 Route53 给我的 4 个服务器 IP 地址创建了一个 DHCP 选项集。

分析: 首先,我需要证明问题不在于安全组或 NACL。 我通过将默认 DHCP 选项集附加到我的新 VPC 来做到这一点。有效! 我可以进行 yum 更新和“curl http://www.google.com”。没问题。

然后,我使用我的域名和 Google DNS 服务器创建了一个新的 DHCP 选项集。 8.8.8.8 & 8.8.4.4 这也有效。

然后,我使用了 Route 53 提供的 4 个 DNS 服务器 IP 中的 1 个,并将其与我的域名一起用于新的 DHCP 选项集中。 我进行了测试,但失败了。我对其余 4 个 DNS 服务器 IP 中的 2 个重复了相同的测试,创建了两个单独的 DHCP 选项集。 我进行了测试,但都失败了。

在检查了我的域名的拼写后,我只能断定问题出在域名服务器上。

解决方案: Amazon Virtual Private Cloud 用户指南(PDF 第 222 页) Amazon DNS 服务器(子主题)

“当您创建 VPC 时,我们会自动创建一组 DHCP 选项并将它们与 VPC 关联。这组选项包括两个选项:domain-name-servers = AmazonProvidedDNS 和 domain-name=domainname-for -your-region。AmazonProvidedDNS 是 Amazon DNS 服务器,此选项启用 DNS 对于需要通过 VPC 的 Internet 网关进行通信的实例。字符串 AmazonProvidedDNS 映射到在 VPC IPv4 网络范围基础的保留 IP 地址上运行的 DNS 服务器,再加上两个。例如,10.0.0.0/16 网络上的 DNS 服务器位于 10.0.0.2。"

从第 221 页开始: DHCP:域名服务器

选项名称说明 “最多四个域名服务器的 IP 地址,或 AmazonProvidedDNS。默认 DHCP 选项集指定 AmazonProvidedDNS。如果指定多个域名服务器,请用逗号分隔它们。” em>

它所指的 IP 地址用于外部域名服务器(不包括您创建自定义 DNS 的可能性)。

因此,我使用我的域名和 domain-name-servers=AmazonProvidedDNS 创建了最终的 DHCP 选项集。有效! 顺便说一句,VPC DNS 解析 = 是 & DNS 主机名 = 否。

【讨论】:

【参考方案10】:

该问题可能发生在安全组和 NACL 两个级别。就我而言,我发现即使在修改了安全组之后,更新也失败了。但是,当NACL被修改时..更新成功

【讨论】:

【参考方案11】:

我遇到了同样的问题,原来另一个系统管理员决定通过代理路由出站互联网流量。我通过注意到一些厌倦的代理环境设置发现了这一点,挖得更深一点,然后注意到我的 /etc/yum.conf 文件中有一个条目。

注释掉 proxy= 行,然后一切都恢复正常了。

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
#proxy=http://pos-proxy-in-my-way-of-doing-actual-real-work:666

【讨论】:

【参考方案12】:

我使用 sudo 运行了以下命令(如果您不是 root,则不能单独执行 yum)并解决了问题。

yum-config-manager --save --setopt=dev.mysql.com_downloads_repo_yum_.skip_if_unavailable=true

 

【讨论】:

【参考方案13】:

我遇到了同样的问题。就我而言,我错误地删除了我的安全组的出站规则。添加出站规则以允许所有流量解决了问题。

【讨论】:

【参考方案14】:

请按照以下步骤操作

第 1 步:转到 AWS-VPC

第 2 步:找到 DHCP 选项

第 3 步:如果您没有任何 DHCP 选项,请创建一个新的 DHCP

第4步:添加域名=ap-south-1.compute.internal(如果您使用其他地区,请使用其他地区名称)

第五步:添加域名服务器=AmazonProvidedDNS

第 6 步:然后选择您的 VPC --> 操作 -->编辑您的 DHCP 选项集 --> 选择您刚刚创建的 DHCP 集 --> 保存

第 7 步:然后重启您的实例

第 8 步:登录您的实例 然后只需输入 yum list installed --> 它会毫无疑问地为您提供已安装的列表

谢谢

【讨论】:

【参考方案15】:

别担心,这是一个简单的错误。 这也不是连接互联网。

只是为了用 vi 编辑器创建新文件:

vi /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

然后输入这个退出 vi: :wq

【讨论】:

【参考方案16】:

干!这是我找到的完美答案

去出站规则添加

所有流量

就是这样

【讨论】:

【参考方案17】:

检查您的出站条目是否已从分配的安全组中删除/修改。通常出站条目设置为“所有流量”并允许任何 IP。

就我而言,出站已被删除。我再次设置为“所有流量”并且它有效。

【讨论】:

【参考方案18】:

我使用的是默认 VPC,并且默认启用 DNS 主机解析;不是我的问题。我按照建议添加了默认安全组,这解决了我的问题。

【讨论】:

【参考方案19】:

加载的插件:priorities、update-motd、upgrade-helper 无法检索镜像列表 http://repo.us-east-1.amazonaws.com/latest/main/mirror.list 错误是 12:http://repo.us-east-1.amazonaws.com/latest/main/mirror.list 超时:(28,'连接在 10001 毫秒后超时')

其中一个配置的存储库失败(未知), 并且 yum 没有足够的缓存数据来继续。此时唯一 百胜可以做的安全的事情是失败。有几种方法可以“解决”这个问题:

    联系存储库的上游并让他们解决问题。

    重新配置baseurl/etc。对于存储库,指向一个工作 上游。如果您使用的是较新的,这通常很有用 分发版本比存储库支持的版本(和 以前发行版的软件包仍然有效)。

    禁用存储库,因此 yum 默认不会使用它。百胜会 只需忽略存储库,直到您再次永久启用它或使用 --enablerepo 临时使用:

    yum-config-manager --disable <repoid>
    

    配置要跳过的失败存储库,如果它不可用。 请注意,yum 将尝试联系 repo。当它运行大多数命令时, 所以每次都必须尝试失败(因此。百胜会很多 慢点)。如果这是一个非常暂时的问题,这通常是一个很好的 妥协:

    yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true
    

找不到 repo 的有效 baseurl:amzn-main/latest

上周我也遇到了同样的错误,我几乎尝试了所有方法,但无法安装服务器并启动 httpd 服务。

通过只允许所有进出安全组和 NACL 的流量来解决它...试试吧,它会被挑衅地解决。

【讨论】:

【参考方案20】:

如果您在子网上使用 NACL,则 EC2 所在的位置。

快速修复

您必须为此yum update 打开入站 Ephemeral ports。

例如在下面添加 #100 inbound 规则:

请注意,即使 出站 规则允许所有流量,这仍然是必要的:

为什么必须这样做?

    yum80/443 等端口上打开出站连接时,它会在随机高端口(临时端口)返回。

    网络 ACL 是无状态的(与安全组不同),默认情况下不允许在同一端口上返回连接。


您可以在here阅读更多内容。

【讨论】:

【参考方案21】:

您的 vpc 中的 ACL 与实例入站或出站规则不同。我每天多次看到 vpc 的 acl get people。

【讨论】:

【参考方案22】:

转到为其配置了 EC2 的安全组。 并验证其入站规则中的以下字段。如果以下字段不存在,则通过单击按钮添加它编辑入站规则

    类型-:所有流量 协议-:全部 端口范围-:全部 目的地-:0.0.0.0/0

希望这能解决问题。

【讨论】:

【参考方案23】:

我遇到了同样的问题,我解决它的方法是允许HTTPS协议端口443的入站流量您的 NAT 实例的安全组。大多数存储库使用 HTTPS 协议。确保你没有错过这个。

【讨论】:

同样对我有用。我正在关注 acloud.guru 的解决方案架构师课程。在该系列中,他们很少允许入站 HTTPS,一开始我无法理解为什么我的实例的行为与他们的不同。我相信该课程是在 2019 年录制的,并且从那时起许多存储库都已更新为 HTTPS 协议。 这也适用于我。谢谢你的回答。【参考方案24】:

检查私有托管区域,例如“eu-west-1.s3.eu-west-1.amazonaws.com”,并确保 EC2 有互联网,例如,如果您的 EC2 实例位于您需要的私有子网中确保您的路由指向 nat 网关或实例。

【讨论】:

以上是关于Amazon EC2 实例无法更新或使用 yum的主要内容,如果未能解决你的问题,请参考以下文章

如何转换 Amazon EC2 实例以用于 Auto Scaling?

如何在 Amazon Auto-scaling 组中的多个 ec2 实例上部署和更新应用程序?

Amazon Lightsail 实例是不是托管/自动更新?

如何在 .NET 中以编程方式启动 Amazon EC2 实例

Amazon Linux EC2 安装 SSL(无连接)

连接到 Amazon EC2 实例时 SSH 挂起