SLES 従量課金制の登録のトラブルシューティング

このドキュメントでは、従量課金制(PAYG)の SUSE Linux Enterprise Server(SLES)を実行している Compute Engine 仮想マシン(VM)インスタンスを SUSE サブスクリプション管理ツール(SMT)リポジトリに接続するときに発生する可能性のある問題を解決する方法について説明します。

始める前に

  • VM にサービス アカウントが関連付けられていることを確認します。
  • VM から Service Metadata API にアクセスできることを確認します。
  • VM からそれぞれのリージョン サーバーSMT サーバーへのネットワーク接続を確認します。
  • sc-repocheck ツールを使用すると、問題を自動的にトラブルシューティングできます。
  • SUSE PAYG のトラブルシューティングガイドで説明されている手順を確認します。
  • まだ設定していない場合は、認証を設定します。認証では、 Google Cloud サービスと API にアクセスするための ID が確認されます。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Google Cloud CLI をインストールします。 インストール後、次のコマンドを実行して Google Cloud CLI を初期化します。

      gcloud init

      外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

    2. Set a default region and zone.

ネットワークに関する問題

解決できないドメイン名

VM が smt-gce.susecloud.net SMT サーバーに接続できない場合、次の問題が発生することがあります。

SUSEConnect error: SocketError: getaddrinfo: Name or service not known
ping: unknown host smt-gce.susecloud.net

これらの問題は、一般に、SMT サーバーのドメイン名 smt-gce.susecloud.net が正しく解決されないことが原因で起こります。このドメインはグローバルに解決できないため、VM リージョンに沿って IP アドレスを設定する必要があります。手順は次のとおりです。

/etc/hosts ファイルを調べて、smt-gce.susecloud.net ドメインのエントリが含まれていることを確認します。

cat /etc/hosts | grep -i smt

出力は次のようになりますが、IP アドレスは異なる場合があります。

# Added by SMT registration do not remove, retain comment as well
108.59.80.221   smt-gce.susecloud.net   smt-gce

/etc/hosts ファイルに前述の例と同じ行が含まれていない場合は、次のようにします。

  1. SUSE SMT の IP アドレスのリストで、VM のリージョンに対応する IP アドレスを探します。

  2. ファイルを編集して、SUSE SMT の IP アドレスとその他の情報を追加します。

ネットワークが利用できない

VM が Compute Engine 更新サーバーのドメイン名を解決できる場合でも、ネットワークが利用できないために、次のエラーが発生することがあります。

Unexpected exception.
Not ready to read within timeout.
Repository 'SLE-Module-Adv-Systems-Management12-Pool' is invalid.
Repository 'SLE-Module-Adv-Systems-Management12-Updates' is invalid.

調査中に /var/log/cloudregister ログファイルで見つかることがあるエラーの例を次に示します。

WARNING:Unable to remove client registration from server
WARNING:HTTPSConnectionPool(host='smt-gce.susecloud.net', port=443): Max retries exceeded with url: /connect/systems (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 110] Connection timed out',))
INFO:Region server arguments: ?regionHint=europe-central2
ERROR:No response from: [('34.118.112.80', None), ('34.116.251.218', None), ('34.116.224.144', None)]

問題の原因を詳しく調べるには、ネットワーク接続テストを行います。次の例は、cURL を使用して HTTPS 接続をテストする方法を示しています。

curl -sSI -m 5 -o /dev/null \
  -w 'Response code (>0 is OK): %{http_code}\n' \
  'https://smt-gce.susecloud.net'

コマンドの出力には、HTTP レスポンス コードまたはエラー メッセージが含まれます。一般的なレスポンスとエラーは次のとおりです。

  • 正常なレスポンス:

    Response code (>0 is OK): 200
    
  • リクエスト タイムアウト エラー:

    Response code (>0 is OK): 000
    curl: (28) Connection timed out after 5001 milliseconds
    
  • 解決できないドメインエラー:

    Response code (>0 is OK): 000
    curl: (6) Could not resolve host: smt-gce.susecloud.net
    

厳格なホスト ファイアウォール ルールなどの特定のシナリオでは、smt-gce.susecloud.net ドメインに関連付けられたデフォルトの IP アドレスを使用できない場合があります。問題が現在の IP アドレスのみに関連していることを確認するには、代替リージョン サーバーでネットワーク接続テストを実行します。次の手順でリージョン サーバーのリストを取得してください。

SUSE WebUI に移動して、リージョン アップデート サーバーのリストを取得します。

pint ツールを使用して、CLI でリージョン アップデート サーバーのリストを取得します。

  1. 必要なパッケージをインストールします

    sudo zypper install python3-susepubliccloudinfo
  2. 特定のリージョンで次のコマンドを使用します。

    pint google servers --region us-central1
  3. 成功の出力には、XML 形式のエントリのリストが含まれます。

    <?xml version='1.0' encoding='UTF-8'?>
        <servers>
          <server ip="146.148.73.14" name="" region="us-central1" type="regionserver-sles"/>
          <server ip="162.222.182.90" name="" region="us-central1" type="regionserver-sap"/>
          <server ip="108.59.80.221" name="smt-gce.susecloud.net" region="us-central1" type="smt"/>
          <server ip="108.59.85.41" name="smt-gce.susecloud.net" region="us-central1" type="smt"/>
          <server ip="108.59.80.58" name="smt-gce.susecloud.net" region="us-central1" type="smt"/>
        </servers>
    

Google Cloudの SUSE サーバー IP の全リストを確認するには、次のドキュメントを確認します。

VM の構成ミスが原因で、ネットワークが利用できない可能性があります。問題が発生した場合は、ネットワーク診断を実行して根本原因を特定します。

登録エラー

Cloud NAT にプライベート IP アドレスを持つ VM がある場合、次のエラーが発生することがあります。

ERROR:  Registration failed: Registering system to registration proxy https://smt-gce.susecloud.net
command '/usr/bin/zypper --non-interactive refs Python_3_Module_x86_64' failed
Error: zypper returned 4 with 'Problem retrieving the repository index file for service 'Python_3_Module_x86_64':
Timeout exceeded when accessing 'https://smt-gce.susecloud.net/services/2045/repo/repoindex.xml?credentials=Python_3_Module_x86_64'.

この問題を解決するには、Cloud NAT の構成を調べて、VM インスタンスあたりの最小ポート数のパラメータが 256 以上に設定されていることを確認します。

詳細については、SUSE のサポートに関する公開情報で、Cloud NAT の背後にある Compute Engine インスタンスの登録と zypper の失敗をご覧ください。

応答がない

VM で更新サーバーやリージョン サーバーとの通信に問題が発生すると、次のエラーが表示されることがあります。

  • SUSEConnect エラー:

    SUSEConnect error: Errno::ETIMEDOUT: Connection timed out - connect(2) for "smt-gce.susecloud.net" port 443
    
  • zypper エラー:

    Error retrieving metadata for 'SLE-Module-Adv-Systems-Management12-Pool':
    Not ready to read within timeout.
    ...
    

これらのエラーは、更新サーバーとリージョン サーバーが応答しない場合に発生します。これを確認するには、/var/log/cloudregister ログで同様の内容を探します。

INFO:Region server arguments: ?regionHint=europe-central2
INFO:Using API: regionInfo
INFO:Region server arguments: ?regionHint=europe-central2
INFO:Getting update server information, attempt 1
INFO:   Using region server: 130.211.242.136
ERROR:  No response from: 130.211.242.136
INFO:   Using region server: 35.187.193.56
ERROR:  No response from: 35.187.193.56
INFO:   Using region server: 162.222.182.90
ERROR:  No response from: 162.222.182.90
INFO:   Using region server: 130.211.88.88
ERROR:  No response from: 130.211.88.88
ERROR:  None of the servers responded
ERROR:  Attempted: [IPv4Address('130.211.242.136'), IPv4Address('35.187.193.56'), IPv4Address('162.222.182.90'), IPv4Address('130.211.88.88')]
...
...
...
ERROR:Request not answered by any server after 3 attempts
ERROR:Exiting without registration

この問題を解決するには、次の対処方法をいくつか試してください。

  • VM に外部 IP アドレスがあること、または Virtual Private Cloud サブネットが NAT(Cloud NAT またはカスタム ソリューション)を使用していることを確認します。

  • 公共のインターネット アクセスを制限する、オンプレミス ネットワーク経由でトラフィックをルーティングするなど、デフォルトのネットワーク ルーティング ルールを変更した場合は、Compute Engine のデフォルト ゲートウェイ経由で SMT IP のルートを手動で追加します。手順は次のとおりです。

    1. Google Cloud コンソールの [ルート] ページに移動します。

      [ルート] ページに移動

    2. [ルート管理] タブで、SUSE SMT の IP アドレスを含むルートを探し、Compute Engine のデフォルト ゲートウェイがネクストホップとして設定されていることを確認します。

    3. ルートが表示されない場合は、[ルートの作成] をクリックし、必要な情報を入力して追加します。

  • 追加の中間ネットワーク ソフトウェア(ファイアウォールやカスタム NAT など)で内部パススルー ネットワーク ロードバランサを使用している場合は、ロードバランサが VM トラフィックのネクストホップであることを確認します。手順は次のとおりです。

    1. Google Cloud コンソールの [VM インスタンス] ページに移動します。

      [VM インスタンス] ページに移動

    2. 確認する VM の名前をクリックします。[VM の詳細] ページが開きます。

    3. [ネットワーク インターフェース] セクションで、[詳細を表示] をクリックします。

    4. [ファイアウォールとルートの詳細] セクションで、選択した IP アドレス範囲へのパスを定義するルートを見つけます。

    5. ルートの名前をクリックし、内部パススルー ネットワーク ロードバランサまたはその IP アドレスがネクストホップであることを確認します。

    選択した IP アドレス範囲へのパスを定義するルートがない場合、またはルートのネクストホップが内部パススルー ネットワーク ロードバランサと異なる場合は、内部パススルー ネットワーク ロードバランサをネクストホップとして設定します

  • 内部パススルー ネットワーク ロードバランサを使用している場合は、VM と同じリージョンにあることを確認します。

    1. Google Cloud コンソールの [VM インスタンス] ページに移動します。

      [VM インスタンス] ページに移動

    2. 確認する VM を見つけて、リージョンをメモします。

    3. Google Cloud コンソールで [ロード バランシング] ページに移動します。

      [ロード バランシング] ページに移動

    4. 使用されている内部パススルー ネットワーク ロードバランサを見つけて、VM と同じリージョンにあるかどうかを確認します。

    5. VM と内部パススルー ネットワーク ロードバランサが同じリージョンにない場合は、グローバル アクセスを有効にします。

プロキシ経由の登録

VM で非透過プロキシまたは中間者(PITM)検査を行う他のソフトウェア(Barracuda CloudGen Firewall、Palo Alto など)が使用されている場合、問題が発生することがあります。次の例は、HTTP プロキシを使用して SLES を登録する方法を示しています。

ERROR: Baseproduct registration failed
ERROR: Registering system to registration proxy https://smt-gce.susecloud.net

Announcing system to https://smt-gce.susecloud.net ...
SUSEConnect error: Net::HTTPFatalError: 503 "Service Unavailable"

SUSE は、Compute Engine の PITM(Person-in-the-Middle)プロキシおよび非透過プロキシの背後にある SLES 登録を公式にサポートしていません。証明書のピニングが原因で、登録中に PITM プロキシ構成が失敗します。

Cloud NAT 構成を使用するか、カスタム SMT サーバーを設定することをおすすめします。

VPC Service Controls の違反

組織で VPC Service Controls(VPC-SC)を使用している場合、登録が失敗し、Request is prohibited by organization's policy エラー メッセージが表示されることがあります。VPC-SC ポリシーで SUSE Update Infrastructure の例外を構成していない場合、上り(内向き)または下り(外向き)の違反が原因でこのエラーが発生する可能性があります。

この問題を解決するには、VPC-SC ポリシーの許可リストに次のコンポーネントを追加して、VM が SUSE Update Infrastructure と通信できるようにします。

  • インフラストラクチャ プロジェクトの更新: Suse-gce-smt(プロジェクト番号: 778092048372)
  • サービス アカウント: 778092048372@project.gserviceaccount.com
  • 必要なメソッド: compute.alpha.InstancesService.GetLicenses

OS の構成に関する問題

登録ステータスが不明

従量課金制(PAYG)の SUSE Linux Enterprise Server(SLES)が登録されているかどうかがわからない場合は、次のコマンドを実行します。

sudo SUSEConnect --status-text

出力には、SUSE Linux Enterprise Server などの SUSE プロダクトのバージョンと登録ステータスが含まれます。

Installed Products:
------------------------------------------

  SUSE Linux Enterprise Server 12 SP5
  (SLES/12.5/x86_64)

  Registered

------------------------------------------
...

ステータスが Not Registered の場合は、VM を再登録して問題を解決します。

sudo registercloudguest --force-new

ベース プロダクト リンクが誤った商品ファイルを指している場合、次のエラーが発生することがあります。

2020-06-17 12:03:56,124 ERROR:Unable to obtain product information from server "108.59.85.41,None"
        Unprocessable Entity
        {"type":"error","error":"Unmet product dependencies, activate one of these products first: SUSE Linux Enterprise Server 12 x86_64, SUSE Linux Enterprise Server for SAP Applications 12 x86_64, SUSE Linux Enterprise Server 12 SP1 x86_64, ...","localized_error":"..."}
Unable to register modules, exiting.

このエラーは、シンボリック リンク /etc/products.d/baseproduct が誤ったプロダクト ファイル(sle-module-toolchain.prod など)を指している場合に発生します。

この問題を解決するには、次のようにして、適切なベース プロダクト ファイルを指すように /etc/products.d/baseproduct のシンボリック リンクを更新します。

  1. /etc/products.d ディレクトリに移動します。

      cd /etc/products.d
  2. SLES for SAP をインストールした場合は、SLES.prodSLES_SAP.prod に置き換えて、次のコマンドを実行します。

      sudo ln -sf SLES.prod baseproduct

インスタンス ID 情報が利用できない

VM のインスタンス ID 情報が利用できない場合、次のエラーが発生することがあります。この問題は、サービス アカウントがインスタンスに関連付けられていない場合や、関連付けられているサービス アカウントが無効になっている場合に発生することがあります。

ERROR:Data collected from stderr for instance data collection "b'Unable to access instance identity information\n'"

ID トークンのインスタンス メタデータにアクセスするには、すべての VM に関連付けられたサービス アカウントが必要です。

詳しくは、Public Cloud Infrastructure Update をご覧ください。

VM のサービス アカウントのステータスを確認するには、VM で次のコマンドを実行します。

curl -s -H 'Metadata-Flavor: Google' \
  'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=test'

ID トークンを含む正常なレスポンスの例:

eyJhbGciOiJSUzI1NiIsImtpZCI6IjkzOTd0MDQxSHQ2NDNxNzkzUjY1MDIwNzEyMjZPNnppaTdqNTl3eTciLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJ0ZXN0IiwiYXpwIjoiMjY1MDIwMDUyMzgzMjYyNTk0ODU2IiwiZXhwIjoxNjgzNzEyNTQzLCJpYXQiOjE2ODM3MTI4NjQsImlzcyI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbSIsInN1YiI6IjQ1NjA2MzQ5MDg5Mzc0Njg3ODI5NyJ9.EpzQ3NZ8mKStdpH10fL34qsKG0rjQEflzvLJLm2tVNX4xBJAkMhi8lcs5InUEY-QMK3njgbzdzNtD1fXoIfKoeWsqkA8vG3NkBz5zqRrtaB2STcO14H5tjIdTBsrCtET447tRXlGG5cvgMcWnRDZG92-jUZEpWki_Ri4T69X5-bBWkfE2Thm3oSUW4fScdeVOEmOgWnzD2jeVqQ_2YniywvpkT-rLzKfN-5AgN66zgBfXqJVTC90KFMebfiaOoL7z6ZSM9AjZGf45QEMZjxjd-Xzyee6ZWK8s0RE3hJlytb3zYcLt3tJwQ1WhnrC2ToJ-ZmKxxK3xKDLCvCQ6Ny5to

VM が影響を受けない場合は、トークンが返されます。VM が影響を受ける場合、返されるメタデータは次のようなエラー メッセージです。

{
  "error": "invalid_request",
  "error_description": "Service account not enabled on this instance"
}

この問題を解決するには、次の操作を行います。

  1. VM を停止します。

    gcloud compute instances stop VM_NAME
  2. VM にサービス アカウントを追加します。

    gcloud compute instances set-service-account VM_NAME \
      --service account SERVICE_ACCOUNT \
      --no-scopes
  3. VM を起動します。

    gcloud compute instances start VM_NAME
  4. 不足しているサービス アカウントを追加した後、VM から次のコマンドを実行して SLES を再登録します。

    sudo registercloudguest --force-new

必要なパッケージが不足している

VM に cloud-regionsrv-clientregionServiceClientConfigGCEcloud-netconfig-gcesuseconnect-ng などの必須パッケージがない場合、登録が失敗することがあります。

この問題を解決するには、必要なパッケージをインストールし、登録ファイルをクリーンアップして、VM を再登録します。

  1. 不足しているパッケージをインストールします。

    sudo zypper install PACKAGE_NAME

    PACKAGE_NAME は、不足しているパッケージの名前に置き換えます。

  2. 古い登録ファイルをクリーンアップします。

    sudo registercloudguest --clean
    sudo SUSEConnect --cleanup
    sudo rm -f /etc/zypp/credentials.d/*
    sudo rm -f /etc/zypp/repos.d/*
    sudo rm -f /etc/zypp/services.d/*
  3. VM を再登録します。

    sudo registercloudguest --force-new

registercloudguest を実行して ModuleNotFoundError: No module named 'requests' エラーが表示された場合は、/usr/bin/python3 シンボリック リンクが正しくないことが原因である可能性があります(手動で上書きした場合など)。

Traceback (most recent call last):
File "/usr/sbin/registercloudguest", line 34, in <module>
import requests
ModuleNotFoundError: No module named 'requests'

この問題を解決するには、正しい Python バージョンを指すようにシンボリック リンクを再作成します。

  1. インスタンスにインストールされている Python のバージョンを確認します。

    sudo zypper info python3
  2. python3 シンボリック リンクを確認します。

    ls -ll /usr/bin | grep -i python3
  3. リンクが正しくない場合は、リンクを削除して、正しい Python バージョン(python3.6 など)を指す新しいリンクを作成します。

    sudo rm /usr/bin/python3
    sudo ln -sf /usr/bin/python3.6 /usr/bin/python3

SSL 証明書の検証に失敗する

/etc/pki/trust/anchors ディレクトリに証明書ファイルがない場合は、Curl error 60ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] などのエラーが表示されることがあります。/var/log/cloudregister に表示される可能性のあるエラーのより詳細な例を次に示します。

Traceback (most recent call last):
 File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 677, in urlopen
 ...
 File "/usr/lib64/python3.6/ssl.py", line 689, in do_handshake
 self._sslobj.do_handshake()
 ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)

次のコマンドを実行して出力が空であることを確認することで、証明書ファイルがないことを確認できます。

ls -lart /etc/pki/trust/anchors

証明書がない場合、出力は空になります。

total 0

この問題を解決するには、以下のいずれかを試します。

  • オプション 1: クリーンアップして再登録する

    登録に関連付けられているすべてのファイルをクリーンアップし、強制的に新しい登録行います。登録プロセスでは、必要な証明書がリージョン サーバーからダウンロードされます。

    sudo registercloudguest --clean && \
      sudo SUSEConnect --cleanup && \
      sudo rm -f /etc/zypp/credentials.d/* && \
      sudo rm -f /etc/zypp/repos.d/* && \
      sudo rm -f /etc/zypp/services.d/* && \
      sudo rm -f /etc/pki/trust/anchors/* && \
      sudo sed -i '/^# Added by SMT reg/,+1d' /etc/hosts && \
      sudo registercloudguest --force-new
  • オプション 2: 動作中のインスタンスから証明書をコピーする

    クリーンアップと再登録で問題が解決しない場合は、gcloud compute scp を使用して、または動作中のインスタンスのブートディスクを失敗したインスタンスにアタッチして、動作中のインスタンスから証明書ファイルをコピーできます。

    動作中のインスタンスのディスクを MOUNT_PATH にアタッチしてマウントする場合は、次のコマンドを実行します。

    sudo cp MOUNT_PATH/etc/pki/trust/anchors/* /etc/pki/trust/anchors/
    sudo update-ca-certificates
    sudo cp -pr MOUNT_PATH/usr/lib/regionService /usr/lib/regionService
    sudo registercloudguest --force-new

libzypp パッケージの非互換性

SLES for SAP 15 を使用する従量課金制の SUSE VM が、次のようなエラーで登録に失敗することがあります。

ERROR:Baseproduct registration failed
Registering system to registration proxy https://smt-gce.susecloud.net
...
command '/usr/bin/zypper --non-interactive refs SUSE_Linux_Enterprise_Server_for_SAP_Applications_x86_64' failed
Error: zypper returned 1 with 'Error occurred while setting download (curl) options for 'https://smt-gce.susecloud.net/services/2294?credentials=SUSE_Linux_Enterprise_Server_for_SAP_Applications_x86_64':
Unexpected exception.
Unknown error reading from 'plugin:/susecloud?credentials=SUSE_Linux_Enterprise_Server_for_SAP_Applications_x86_64&path=/services/2294'
...
- Error occurred while setting download (curl) options for 'https://smt-gce.susecloud.net/services/2294?credentials=SUSE_Linux_Enterprise_Server_for_SAP_Applications_x86_64':

この問題は、libzypp パッケージの更新によって、互換性のないバージョンの libcurl4 パッケージが残った場合に発生することがあります。libzypp が自己更新を試みると、libcurl4 を使用してパッケージの場所へのリクエストを行うことができなくなります。

この問題を解決するには、libzypp パッケージを手動で更新します。次のコマンドは例です。バージョン番号の調整が必要になることがあります。

sudo rpm -i libzypp-17.31.31-150400.3.52.2.x86_64.rpm

サポートされていない OS バージョンまたは古いパッケージ

ジェネラル サポート期間外の OS バージョン(たとえば、一般サポートが 2020 年 6 月 30 日に終了した SLES 12 SP4)を実行している場合、登録が失敗することがあります。このエラーは、VM 上の古いパッケージが SUSE 更新インフラストラクチャと通信できないために発生することがあります。ネットワーク接続が部分的に成功しているように見える場合でも(たとえば、telnet を使用して SMT サーバーに接続すると 403 Forbidden エラーが返される場合など)、/var/log/cloudregister ログファイルに到達不能な IP に関するエラーが表示されることがあります。

パッケージが古いかどうかを確認するには、インストール日を確認します。1 年以上更新されていないパッケージは、古い可能性があります。パッケージの最終更新時刻を確認するには、次のコマンドを使用します。

rpm -qa --qf '%{NAME}-%{VERSION} : %{INSTALLTIME:date}\n' | grep PACKAGE_NAME

この問題を解決するには、サポートされている SLES バージョンにアップグレードしてください。SUSE の技術情報ドキュメント(TID)の説明に沿って、特定のパッケージを更新する必要がある場合もあります。