Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの SUSE オペレーティングシステム (OS) をアップグレードしようとしましたが、インスタンスのステータスチェックの失敗、OS の登録解除、Zypper コマンドの失敗などのエラーが表示されました。
解決策
インスタンスステータスチェックの失敗を探す
インスタンスステータスチェックの失敗については、「オペレーティングシステムの問題でインスタンスのステータスチェックに失敗した EC2 Linux インスタンスのトラブルを解決する方法を教えてください。」を参照してください。
susecloud-repocheck スクリプトを使用すると、軽微な問題を自動的に診断して修正します。
susecloud-repocheck スクリプトは OS リポジトリのチェックを実行します。また、以下の場合に、インスタンスが SUSE 更新インフラストラクチャに登録されない問題を修正します。
- Microsoft Azure
- AWS
- Google Cloud Platform (GCP)
- 従量課金 (PAYG) オンデマンドインスタンス
詳細については、SUSE GitHub リポジトリの susecloud-repocheck を参照してください。
次のコマンドを使用してスクリプトを実行します。
$ python3 <(curl -sL https://raw.githubusercontent.com/SUSE/susecloud-repocheck/main/sc-repocheck.py)
このスクリプトは、sc-repocheck_<YYMMDD_hhmmss>.tar.xz という名前の /var/log/ ディレクトリにログを作成します。
登録を手動で確認し、アップグレードの失敗を解決する
インスタンス billingProducts または marketplaceProductCodes コードを確認します。
PAYG バニラ SLES の場合は、インスタンスの billingProducts コードを確認します。SAP アプリケーション用 PAYG SLES については、marketplaceProductCodes のコードを確認してください。
次のコマンドを実行して、billingProducts または marketplaceProductCodes のコードを確認してください:
# /usr/bin/curl --noproxy '*' -w "\n" -s -H "X-aws-ec2-metadata-token: $(curl --noproxy '*' -s -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 300")" http://169.254.169.254/latest/dynamic/instance-identity/document | grep -E 'billingProducts|marketplaceProductCodes'
コマンドの出力は次のとおりです。
billingProducts" : [ "bp-********" ]
または、
"marketplaceProductCodes" : \[ "\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*" \],
/etc/hosts ファイル内の SMT 登録エントリを確認します。
/etc/hosts ファイルで、# SMT 登録で追加されました。削除せず、コメントも残してくださいという行が続くエントリを探してください。
**注:**AWS リージョン内には複数の SUSE パブリッククラウド更新サーバーが存在します。詳細については、SUSE パブリッククラウドソリューションウェブサイトの AWS リージョンのアップデートサーバ IP アドレスのリストを参照してください。
現在の登録ステータスを確認するには、次のコマンドを実行します。
# SUSEConnect -s
上記のコマンド出力で、Status パラメータが [登録済み] または [未登録] であることを確認します。出力が [未登録] の場合は、インスタンスを再登録してみてください。
以前の登録からエントリを削除するには、次のコマンドを実行します。
# registercloudguest --clean
インスタンスを再登録するには、次のコマンドを実行します。
# registercloudguest --force-new
現在の登録ステータスを確認するには、次のコマンドを実行します。
# SUSEConnect -s
登録に失敗した場合は、/var/log/cloudregister のログを見直して失敗の原因を特定してください。ログ内のエラーの例を以下に示します:
SUSEConnect error: Errno::ENOSPC: No space left on device
/etc/hosts ファイル内の重複または追加の SMT 登録エントリをすべて削除します。以下は、SMT 登録によって追加されたサンプルエントリです。
# vi /etc/hosts
# Added by SMT registration do not remove, retain comment as well
54.246.90.215 smt-ec2.susecloud.net smt-ec2
一般的な登録エラーのトラブルシューティング
一般的な登録エラーをトラブルシューティングするには、次の手順を実行します。
-
必要な cloud-regionsrv-client と関連する依存関係パッケージが OS にインストールされていることを確認するには、次のコマンドを実行します。
# rpm -qa | grep -E 'cloud-regionsrv-client|cloud-regionsrv-client-plugin-ec2|regionServiceClientConfigEC2|SUSEConnect|suseconnect-ng|python3-ec2metadata|python3-dnspython|python3-lxml|python3-cssselect|python3-M2Crypto|python3-zypp-plugin|libzypp|ruby-common'
以下は、前述のコマンドのサンプルです:
libzypp-17.31.20-150400.3.40.1.x86_64
suseconnect-ng-1.6.0~git0.31371c8-150400.3.22.1.x86_64
python3-zypp-plugin-0.6.3-150000.4.2.1.noarch
python3-cssselect-1.0.3-150000.3.3.1.noarch
python3-M2Crypto-0.38.0-150400.7.64.x86_64
python3-lxml-4.7.1-150200.3.10.1.x86_64
regionServiceClientConfigEC2-4.1.1-150000.3.27.1.noarch
ruby-common-2.1-3.15.noarch
python3-ec2metadata-5.0.0-150000.3.12.1.noarch
cloud-regionsrv-client-10.1.6-150000.6.105.1.noarch
cloud-regionsrv-client-plugin-ec2-1.0.4-150000.6.105.1.noarch
python3-dnspython-1.15.0-150000.3.2.1.noarch
パッケージが古いか見つからず、オペレーティングシステムが Zypper にアクセスできない場合は、オフラインでアップグレードしてください。オフラインでアップグレードするには、Zypper を使用して別の動作ホストに rpm パッケージをダウンロードし、rpm を非動作ホストに転送します。次に、rpm パッケージの Zypper インストールを実行します。
-
不明なリポジトリを特定します。
-
SUSE インスタンスにソフトウェアリポジトリがない場合は、次のコマンドを実行して、使用可能なすべてのリポジトリへの新規登録を強制します。
# registercloudguest --force-new
# SUSEConnect --list-extensions
# zypper lr --uri
関連情報
Amazon EC2 での SUSE Linux Enterprise Server (SLES) に関するよくある質問