RHEL を実行している Amazon EC2 インスタンスで yum を使用するとエラーが発生する理由を教えてください。
Red Hat Enterprise Linux (RHEL) を実行している Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで yum を使用したいのですが、エラーが発生します。
簡単な説明
EC2 インスタンスで yum コマンドを実行すると、エラーが発生する場合があります。yum コマンドの出力メッセージを参考に、発生したエラーを特定します。次に、エラーメッセージに最も適した解決方法をとります。
解決策
接続タイムアウトまたは、パッケージのダウンロード失敗エラー
エラー: 「接続が XXXX ミリ秒後にタイムアウトしたか、パッケージのダウンロードに失敗しました。」
このエラーを解決するには、次の手順を実行します。
-
EC2 インスタンスにアタッチされたセキュリティグループで、アウトバウンド HTTP および HTTPS トラフィックが許可されていることを確認します。
-
インスタンスのサブネットに関連付けられているネットワークアクセスコントロールリスト (ネットワーク 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
上記の例では、アウトバウンドルールの Rule 100 と Rule 101 は、インバウンドルールの Rule 130 に対応しています。アウトバウンドルールの Rule 102 と Rule 103 は、インバウンドルールの Rule 140 に対応しています。ポート 80 とポート 443 (HTTP および HTTPS) で許可されたアウトバウンドトラフィックは、エフェメラルポートで許可されたインバウンドトラフィックに対応します。
ネットワーク ACL の例では、1024 ~ 65535 のエフェメラルポート範囲を使用しています。使用するクライアントや通信先のクライアントのタイプによって、ネットワーク ACL の範囲が決まります。仮想プライベートクラウド (VPC) 内のパブリック向けインスタンスへのトラフィックを開始する可能性のあるさまざまなタイプのクライアントに対応するには、エフェメラルポート 1024-65535 を開きます。ネットワーク ACL に、その範囲内の悪意のあるポートへのトラフィックを拒否するルールを追加することもできます。拒否ルールは、広範囲のエフェメラルポートを開く許可ルールよりも前に配置します。
詳細については、「エフェメラルポート」および「カスタムネットワーク ACL」を参照してください。
-
インスタンスが RHEL リポジトリにアクセスできることを確認します。
インスタンスがインターネットゲートウェイのあるパブリックサブネットにある場合は、「インターネットアクセス用の設定」を参照してください。
インスタンスが NAT ゲートウェイのあるプライベートサブネットにある場合は、「NAT ゲートウェイ」を参照してください。
インスタンスが NAT インスタンスのあるプライベートサブネットにある場合は、「NAT インスタンス」を参照してください。
インスタンスが Amazon Simple Storage Service (Amazon S3) VPC エンドポイントのあるパブリックサブネットまたはプライベートサブネットにある場合は、Red Hat のウェブサイトで「切断されたシステムまたはエアギャップシステム (インターネットに接続されていないシステム) を更新する方法」を参照してください。
インスタンスがプロキシのあるプライベートサブネットにある場合は、プロキシを使用するように yum を設定します。次のパラメータを使用して /etc/yum.conf ファイルを変更します。次の例において、proxy-port、proxy-user-name、および proxy-password は、使用しているプロキシの正しい値に置き換えてください。
proxy=http://proxy-server-IP-address:proxy_port proxy_username="proxy-user-name" proxy_password="proxy-password"
-
インスタンスがリポジトリにアクセスできることを確認するには、次のコマンドを実行します。
sudo yum check-update
コマンドがエラーなしでパッケージ情報を正常に取得した場合、インスタンスはリポジトリにアクセスできることを示しています。
エラーが発生した場合は、/etc/yum.repos.d/ ディレクトリにあるリポジトリ設定ファイルをチェックして、正しく設定されていることを確認してください。次に、アウトバウンドのインターネットトラフィックを許可する適切なセキュリティグループルールが設定されたパブリックサブネットにインスタンスがあることを確認します。
CDS ロードバランサーへの接続失敗エラー
エラー: 「どの CDS ロードバランサーにも接続できませんでした。」
このエラーを解決するには、インスタンスと同じ RHEL リリースの最新バージョンで EC2 インスタンスを起動します。
-
最新の RHUI クライアントパッケージをダウンロードするには、新しいインスタンスにログインし、次のコマンドを実行します。
$ sudo yum install --downloadonly --downloaddir=/root/ rh-amazon-rhui-client.noarch
-
ダウンロードした rpm パッケージをインスタンスにコピーします。次に、以下のコマンドを実行します。
$ sudo yum remove -y rh-amazon-rhui-client $ sudo rpm -ivh --nodeps /path/to/rpmfile/rh-amazon-rhui-client*
注: /path/to/rpmfile は、ファイルをコピーした先のファイルパスに置き換えます。
-
パッケージをインストールしたら、再インストールしてすべての依存関係を取得する必要があります。
$ sudo yum reinstall -y rh-amazon-rhui-client
-
RHUI から必要なパッケージをダウンロードします。
$ sudo yum clean all $ sudo yum repolist $ sudo yum list
"エラー発生: Repodata/repomd.xml" エラー、またはそれに類似した "404 - Not Found" エラー
エラー: "rhel-7-server-rhui-rh-common-rpms の repodata/repomd.xml from rhel-7-server-rhui-rh-common-rpms でエラー発生: [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 Error 404 - Not Found が発生しました"
このエラーが発生する原因を次に示します。
- 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' エラーのトラブルシューティング」を参照してください。
システムがエンタイトルメントサーバーに登録されていないというエラー
エラー: "このシステムはエンタイトルメントサーバーに登録されていません。登録するには、subscription-manager を使用してください。"
このエラーを解決するには、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
その後、設定ファイルを保存して終了します。
注: インスタンスを移行するか、スナップショットから Amazon マシンイメージ (AMI) を作成する場合、請求製品は使用できません。請求コードのある既存のインスタンスの CreateImage を使用する場合、新しい AMI はこの情報を継承します。すると、AMI が RHUI リポジトリと通信できるようになります。