跳至内容

为什么我在运行 RHEL 的 Amazon EC2 实例上使用 yum 时会收到错误?

3 分钟阅读
0

我想在运行 Red Hat Enterprise Linux (RHEL) 的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上使用 yum,但我收到了错误。

简短描述

在 EC2 实例上运行 yum 命令后,您可能会收到错误。要确定发生的错误,请使用 yum 命令的输出消息。然后,使用最适合您的错误消息的解决方法。

解决方法

连接超时或无法下载软件包错误

错误: “Connection timed out XXXX milliseconds or failed to download the packages.”(连接超时 XXXX 毫秒或无法下载软件包。)

要解决此错误,请完成下面的步骤:

  1. 验证附加到您的 EC2 实例的安全组是否允许出站 HTTP 或 HTTPS 流量。

  2. 验证与您的实例子网关联的网络访问控制列表(网络 ACL)是否允许出站 HTTP 和 HTTPS 流量。请参阅以下网络 ACL 规则示例:

    Inbound rules  Rule#    Type                    Protocol    Port Range    Source        Allow/Deny
    130      Custom TCP Rule         TCP (6)     1024-65535    0.0.0.0/0     ALLOW
    140      Custom TCP Rule         TCP (6)     1024-65535    ::/0          ALLOW
    *        ALL Traffic             ALL         ALL           0.0.0.0/0     DENY
    *        ALL Traffic             ALL         ALL           ::/0          DENY
    
    
    Outbound rules  
    Rule #    Type                   Protocol    Port Range    Destination  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

    在前面的示例中,出站规则中的规则 100 和规则 101 对应于入站规则中的规则 130。出站规则中的规则 102 和规则 103 对应于入站规则中的规则 140。端口 80 和端口 443(HTTP 和 HTTPS)上允许的出站流量与临时端口上允许的入站流量相匹配。

    示例网络 ACL 使用的临时端口范围为 1024-65535。您使用或与之通信的客户端类型决定了网络 ACL 的范围。要涵盖可能向虚拟私有云 (VPC) 中面向公众的实例发起流量的不同类型的客户端,请打开临时端口 1024-65535。您还可以向网络 ACL 添加规则,拒绝该范围内任何恶意端口的流量。确保将 deny(拒绝)规则置于表中比打开各种临时端口的 allow(允许)规则更早。

    有关详细信息,请参阅临时端口自定义网络 ACL

  3. 验证您的实例是否可以访问 RHEL 存储库。

    如果您的实例位于带有互联网网关的公共子网中,请参阅互联网接入配置

    如果您的实例位于带有 NAT 网关的私有子网中,请参阅 NAT 网关

    如果您的实例位于带有 NAT 实例的私有子网中,请参阅 NAT 实例

    如果您的实例位于带有 Amazon Simple Storage Service (Amazon S3) VPC 端点的公共或私有子网中,请参阅 Red Hat 网站上的我们如何更新断开连接或受物理隔离的系统(没有互联网连接的系统)?

    如果您的实例位于带有代理的私有子网中,请将 yum 配置为使用代理。使用以下参数修改 /etc/yum.conf 文件。在以下示例中,将 proxy-portproxy-user-nameproxy-password 替换为您的代理的正确值:

    proxy=http://proxy-server-IP-address:proxy_port
    proxy_username="proxy-user-name"  
    proxy_password="proxy-password"
  4. 要确认该实例可以访问存储库,请运行以下命令:

    sudo yum check-update

    如果该命令成功检索到软件包信息而不出现错误,则您的实例可以访问存储库。

    如果遇到错误,请检查 /etc/yum.repos.d/ 目录中的存储库配置文件,以确保它们配置正确。然后,使用适当的安全组规则确认您的实例位于公共子网中,以允许出站互联网流量。

无法联系任何 CDS 负载均衡器错误

错误: “Could not contact any CDS load balancers.”(无法联系任何 CDS 负载均衡器。)

要解决此错误,请使用与您的实例相同的 RHEL 版本的最新版本启动 EC2 实例。

  1. 要下载最新的 RHUI 客户端软件包,请登录到新实例,然后运行以下命令:

    $ sudo yum install --downloadonly --downloaddir=/root/ rh-amazon-rhui-client.noarch
  2. 将下载的 rpm 包复制到该实例。接着,运行以下命令:

    $ sudo yum remove -y rh-amazon-rhui-client  
    $ sudo rpm -ivh --nodeps /path/to/rpmfile/rh-amazon-rhui-client*

    **注意:**将 /path/to/rpmfile 替换为将文件复制到的文件路径。

  3. 安装软件包后,必须重新安装它才能获得所有依赖关系:

    $ sudo yum reinstall -y rh-amazon-rhui-client
  4. 从 RHUI 下载所需的软件包:

    $ sudo yum clean all
    $ sudo yum repolist
    $ sudo yum list

“Failure: Repodata/repomd.xml”(失败:Repodata/repomd.xml)错误或类似的“404 - Not Found”(404 - 未找到)错误

错误: “Failure: repodata/repomd.xml from rhel-7-server-rhui-rh-common-rpms: [Errno 256] No more mirrors to try or https://rhui3.eu-west-1.aws.ce.redhat.com/pulp/repos/content/dist/rhel/rhui/server/7/7/x86_64/rh-common/os/repodata/repomd.xml : [Errno 14] HTTPS Error 404 - Not Found”(失败:来自 rhel-7-server-rhui-rh-common-rpms 的 repodata/repomd.xml:\ [Errno 256] 没有镜像可以尝试或者 https://rhui3.eu-west-1.aws.ce.redhat.com/pulp/repos/content/dist/rhel/rhui/server/7/7/x86_64/rh-common/os/repodata/repomd.xml:[Errno 14] HTTPS 错误 404 - 未找到)

出现此错误的原因如下:

  • yum 缓存损坏
  • 由网络相关问题导致的存储库 URL 无法访问
  • 自定义或其他媒体存储库
  • 当您使用基于 IP 的防火墙配置访问 Red Hat 的内容分发网络 (CDN) 时,允许名单已过期

要移除然后重建 yum 缓存,请运行以下命令:

# rm -rf /var/cache/yum/*
# yum clean all
# yum check-update
# yum repolist enabled

有关详细信息,请参阅 Red Hat 网站上的 Red Hat Satellite 6 客户端上出现的“[Errno 14] HTTPS Error 404 - Not Found”([Errno 14] HTTPS 错误 404 - 未发现)错误

此系统未注册,但出现授权服务器错误

错误: “This system is not registered with an entitlement server.You can use subscription-manager to register.”(此系统未在授权服务器上注册。您可以使用订阅管理器进行注册。)

要解决此错误,请使用 subscription-manager(订阅管理器)注册系统。当您从 AWS Marketplace 运行实例时,该实例在 Red Hat 提供的元数据中包含嵌入式账单产品。当 Red Hat 连接到 AWS 使用的 RHUI 存储库时,Red Hat 会使用账单产品来检查订阅是否有效。

要检查实例上的账单产品,请运行以下命令:

$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
&& curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document -q 2>/dev/null | grep billingProducts

  "billingProducts" : [ "bp-6fa54006" ],

如果您的实例拥有所需的账单代码,请忽略来自 subscription-manager(订阅管理器)的消息。如果您不想看到该消息,请将 /etc/yum/pluginconf.d/subscription-manager.conf 中的 subscription-manager(订阅管理器)插件设置为 enabled=0。运行以下命令:

sudo vi  /etc/yum/pluginconf.d/subscription-manager.conf
enabled=0

然后,保存并退出配置文件。

**注意:**如果您迁移实例或使用快照创建亚马逊机器映像 (AMI),则账单产品不可用。如果您使用具有账单代码的现有实例中的 CreateImage,则新 AMI 将继承此信息。AMI 现在可以与 RHUI 存储库通信。

AWS 官方已更新 1 年前