Solução de problemas do registro de pagamento por uso do SLES

Neste documento, descrevemos como resolver problemas ao conectar instâncias de máquina virtual (VM) do Compute Engine que executam o SUSE Linux Enterprise Server (SLES) de pagamento por uso (PAYG, na sigla em inglês) ao repositório do SUSE Subscription Management Tool (SMT).

Antes de começar

  • Verifique se a VM tem uma conta de serviço associada.
  • Confira se a API Service Metadata pode ser acessada pela VM.
  • Verifique se há conectividade de rede da VM com os respectivos servidores de região e servidores SMT.
  • Use a ferramenta sc-repocheck (link em inglês) para resolver os problemas automaticamente.
  • Verifique as etapas descritas no guia Solução de problemas do SUSE PAYG (link em inglês).
  • Configure a autenticação, caso ainda não tenha feito isso. Com isso, você confirma sua identidade para acesso a serviços e APIs do Google Cloud . Para executar código ou exemplos em um ambiente de desenvolvimento local, faça a autenticação no Compute Engine com um destes métodos:

    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. Instale a CLI do Google Cloud. Após a instalação, inicialize a CLI do Google Cloud executando o seguinte comando:

      gcloud init

      Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.

    2. Set a default region and zone.

Problemas na rede

Nome de domínio sem solução

Talvez você tenha os seguintes problemas se a VM não conseguir se conectar ao servidor SMT smt-gce.susecloud.net:

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

A causa desses problemas geralmente é uma resolução incorreta do nome de domínio do servidor SMT smt-gce.susecloud.net. Esse domínio não pode ser resolvido globalmente, então é preciso definir o endereço IP de acordo com a região da VM da seguinte forma:

Verifique o arquivo /etc/hosts para garantir que ele tenha uma entrada com o domínio smt-gce.susecloud.net.

cat /etc/hosts | grep -i smt

O resultado é semelhante ao seguinte, mas o endereço IP pode ser diferente:

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

Se o arquivo /etc/hosts não tiver as mesmas linhas do exemplo anterior, faça o seguinte:

  1. Encontre um endereço IP que corresponda à região da VM na lista de endereços IP do SUSE SMT (link em inglês).

  2. Edite o arquivo para adicionar o endereço IP do SUSE SMT e qualquer outra informação que esteja faltando.

Indisponibilidade da rede

Os erros a seguir podem ocorrer devido à indisponibilidade da rede, mesmo que a VM consiga resolver o nome de domínio do servidor de atualização do 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.

Confira alguns exemplos de erros no arquivo de registro /var/log/cloudregister durante a investigação:

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)]

Para saber mais sobre a causa do problema, faça um teste de conectividade de rede. O exemplo a seguir mostra como testar uma conexão HTTPS usando cURL:

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

A resposta do comando inclui um código de resposta HTTP ou uma mensagem de erro. Confira abaixo respostas e erros comuns:

  • Resposta bem-sucedida:

    Response code (>0 is OK): 200
    
  • Erro de tempo limite da solicitação:

    Response code (>0 is OK): 000
    curl: (28) Connection timed out after 5001 milliseconds
    
  • Erro de domínio sem solução:

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

Em determinados casos, como regras rigorosas de firewall de host, talvez o endereço IP padrão associado ao domínio smt-gce.susecloud.net não esteja disponível. Para garantir que o problema não seja relacionado apenas ao endereço IP atual, teste a conectividade de rede em servidores regionais alternativos. Recupere a lista de servidores regionais:

Acesse a IU da SUSE na web (link em inglês) para consultar a lista de servidores de atualização regionais.

Use a ferramenta pint para acessar a lista de servidores de atualização regionais pela CLI.

  1. Instale o pacote necessário

    sudo zypper install python3-susepubliccloudinfo
  2. Use o comando a seguir com a região específica

    pint google servers --region us-central1
  3. Uma resposta bem-sucedida contém uma lista de entradas no formato 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>
    

Se quiser a lista completa de IPs de servidor da SUSE para o Google Cloud, consulte os documentos a seguir:

Uma configuração incorreta da VM pode fazer a rede ficar indisponível. Em caso de problemas, realize um diagnóstico de rede para identificar a causa raiz.

Falha no registro

Talvez o seguinte erro apareça se você tiver VMs com um endereço IP particular no Cloud NAT:

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'.

Para resolver esse problema, revise a configuração do Cloud NAT e defina o parâmetro de portas mínimas por instância de VM como 256, pelo menos.

Para mais informações, consulte o boletim de suporte Falha de registro e zypper para as instâncias do Compute Engine atrás do Cloud NAT da SUSE (link em inglês).

Sem resposta

Se a VM tiver problemas para se comunicar com os servidores de atualização e região, talvez você note os seguintes erros:

  • Erro SUSEConnect:

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

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

Esses erros podem ocorrer quando os servidores de atualização e região não respondem. Para verificar se esse é o caso, confira se há conteúdo semelhante nos registros /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

Para resolver o problema, teste uma ou mais destas opções:

  • Confirme se a VM tem um endereço IP externo ou se a sub-rede da nuvem privada virtual usa NAT (Cloud NAT ou uma solução personalizada).

  • Se você tiver modificado as regras de roteamento de rede padrão, como ao limitar o acesso público à internet ou rotear o tráfego usando uma rede local, adicione rotas manualmente para IPs do SMT pelo gateway padrão do Compute Engine:

    1. Acesse a página Rotas no console do Google Cloud .

      Acessar a página "Rotas"

    2. Na guia Gerenciamento de rotas, procure uma rota que inclua os endereços IP do SUSE SMT e verifique se ela tem o gateway padrão do Compute Engine definido como o próximo salto.

    3. Se a rota estiver faltando, adicione-a clicando em Criar rota e inserindo as informações necessárias.

  • Caso você esteja usando um balanceador interno de carga de rede de passagem, por exemplo, com outro software intermediário de rede (como firewalls ou NATs personalizados), verifique se o balanceador de carga é o próximo salto para o tráfego de VMs:

    1. Acesse a página Instâncias de VM no console do Google Cloud .

      Acessar a página "Instâncias de VM"

    2. Clique no nome da VM que você quer verificar. A página Detalhes da VM é aberta.

    3. Na seção Interfaces de rede, clique em Ver detalhes.

    4. Na seção Detalhes sobre rotas e firewall, localize a rota que define o caminho para o intervalo de endereços IP selecionado.

    5. Clique no nome da rota e confirme se o balanceador interno de carga de rede de passagem ou o endereço IP dele é o próximo salto.

    Se não houver nenhuma rota que defina o caminho para o intervalo de endereços IP selecionado ou se o próximo salto da rota for diferente do balanceador interno, configure esse balanceador como o próximo salto.

  • Se você estiver usando um balanceador interno de carga de rede de passagem confirme se ele está na mesma região que a VM.

    1. Acesse a página Instâncias de VM no console do Google Cloud .

      Acessar a página "Instâncias de VM"

    2. Localize a VM que você quer verificar e anote a região dela.

    3. Acesse a página Balanceamento de carga no console do Google Cloud .

      Acessar a página "Balanceamento de carga"

    4. Localize o balanceador interno de carga de rede de passagem e verifique se ele está na mesma região que a VM.

    5. Se a VM e o balanceador não estiverem na mesma região, ative o acesso global.

Registro atrás de proxies

Poderá ocorrer um problema se as VMs usarem proxies não transparentes ou outros softwares que realizam inspeção de pessoa no meio (person-in-the-middle ou PITM). Por exemplo, Barracuda CloudGen Firewall, Palo Alto. O exemplo a seguir demonstra uma tentativa de registrar o SLES usando um proxy HTTP.

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"

A SUSE não é compatível oficialmente com o registro do SLES por trás de proxies PITM e não transparentes no Compute Engine. As configurações de proxy PITM falham durante o registro por conta da fixação de certificados.

Recomendamos usar uma configuração do Cloud NAT ou configurar um servidor SMT personalizado.

Violação do VPC Service Controls

Se a organização usa o VPC Service Controls (VPC-SC), talvez o registro falhe e uma mensagem de erro Request is prohibited by organization's policy apareça. Essa falha pode ser causada por violações de entrada ou saída se você não configurou exceções para a infraestrutura de atualização da SUSE na política do VPC-SC.

Para resolver esse problema, adicione os seguintes componentes a uma lista de permissões na sua política de VPC-SC para permitir que a VM se comunique com a infraestrutura de atualização da SUSE:

  • Atualizar projeto de infraestrutura: Suse-gce-smt (número do projeto: 778092048372)
  • Conta de serviço: 778092048372@project.gserviceaccount.com
  • Método obrigatório: compute.alpha.InstancesService.GetLicenses

Problemas de configuração do SO

Status de registro desconhecido

Se você não sabe se o SUSE Linux Enterprise Server (SLES) de PAYG está registrado, execute o seguinte comando:

sudo SUSEConnect --status-text

O resultado contém a versão e o status de registro dos produtos SUSE, incluindo o SUSE Linux Enterprise Server.

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

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

  Registered

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

Se o status for Not Registered, registre a VM novamente para corrigir o problema:

sudo registercloudguest --force-new

Talvez os seguintes erros aconteçam se o link de produto base redirecionar a um arquivo de produto incorreto:

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.

Esse erro ocorre quando o link simbólico /etc/products.d/baseproduct leva a um arquivo de produto incorreto (por exemplo, sle-module-toolchain.prod).

Para resolver esse problema, atualize o link simbólico em /etc/products.d/baseproduct para redirecionar ao arquivo de produto base apropriado:

  1. Navegue até o diretório /etc/products.d:

      cd /etc/products.d
  2. Execute o comando a seguir substituindo SLES.prod por SLES_SAP.prod se você instalou o SLES para SAP:

      sudo ln -sf SLES.prod baseproduct

Indisponibilidade das informações de identidade da instância

Talvez os seguintes erros aconteçam se as informações de identidade da instância não estiverem disponíveis para a VM. Esse problema poderá ocorrer se uma conta de serviço não estiver anexada à instância ou se a conta de serviço anexada tiver sido desativada.

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

Para acessar os metadados da instância relativos a tokens de identidade, todas as VMs precisam ter uma conta de serviço associada.

Para mais informações, leia a Atualização da infraestrutura em nuvem pública (link em inglês).

Para verificar o status da conta de serviço da VM, execute o seguinte comando na VM:

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

Exemplo de uma resposta bem-sucedida com um token de identidade:

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

Se a VM não for afetada, você vai receber um token. Caso a VM seja afetada, os metadados retornados serão uma mensagem de erro semelhante a esta:

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

Para corrigir o problema, siga estas etapas:

  1. Interrompa a VM:

    gcloud compute instances stop VM_NAME
  2. Adicione uma conta de serviço à VM:

    gcloud compute instances set-service-account VM_NAME \
      --service account SERVICE_ACCOUNT \
      --no-scopes
  3. Inicie a VM:

    gcloud compute instances start VM_NAME
  4. Depois de adicionar a conta de serviço que estava faltando, execute o seguinte comando na VM para registrar novamente o SLES:

    sudo registercloudguest --force-new

Pacotes obrigatórios faltando

O registro poderá falhar se a VM não tiver pacotes essenciais, como cloud-regionsrv-client, regionServiceClientConfigGCE, cloud-netconfig-gce ou suseconnect-ng.

Para resolver esse problema, instale os pacotes obrigatórios, limpe os arquivos de registro e registre a VM novamente.

  1. Instale os pacotes que estiverem faltando.

    sudo zypper install PACKAGE_NAME

    Substitua PACKAGE_NAME pelo nome do pacote que estiver faltando.

  2. Limpe os arquivos de registro antigos:

    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. Registre a VM novamente:

    sudo registercloudguest --force-new

Se você executar registercloudguest e o erro ModuleNotFoundError: No module named 'requests' aparecer, talvez um link simbólico /usr/bin/python3 incorreto seja a causa (por exemplo, se você o substituiu manualmente).

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

Para resolver esse problema, recrie o link simbólico para redirecionar à versão correta do Python.

  1. Confirme a versão do Python instalada na instância:

    sudo zypper info python3
  2. Verifique o link simbólico python3:

    ls -ll /usr/bin | grep -i python3
  3. Se o link estiver incorreto, remova-o e crie outro que redirecione à versão correta do Python (por exemplo, python3.6):

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

Falha na verificação do certificado SSL

Se os arquivos de certificado estiverem faltando no diretório /etc/pki/trust/anchors, talvez apareçam erros como Curl error 60 ou ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]. Confira um exemplo mais detalhado de um erro que pode acontecer em /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)

Para confirmar se os arquivos de certificado estão faltando, execute o comando a seguir e verifique se o resultado está vazio:

ls -lart /etc/pki/trust/anchors

O resultado precisa estar vazio se os certificados estiverem faltando:

total 0

Para resolver esse problema, tente uma das seguintes opções:

  • Opção 1: limpar e registrar novamente

    Limpe todos os arquivos associados ao registro e force um novo registro. O processo de registro baixa os certificados necessários dos servidores regionais.

    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
  • Opção 2: copiar certificados de uma instância de trabalho

    Se a limpeza e o novo registro não resolverem o problema, copie os arquivos de certificado de uma instância de trabalho usando gcloud compute scp ou anexando o disco de inicialização de uma instância de worker à instância com falha.

    Se você anexar e montar o disco de uma instância de trabalho em MOUNT_PATH, execute os seguintes comandos:

    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

Incompatibilidade de pacotes libzypp

Uma VM da SUSE de PAYG com SLES para SAP 15 talvez não seja registrada com um erro semelhante a este:

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':

Esse problema pode ocorrer quando uma atualização do pacote libzypp deixa incompatível uma versão do pacote libcurl4. Quando libzypp tenta se atualizar, ele não pode mais usar libcurl4 para fazer solicitações de locais de pacotes.

Para resolver esse problema, atualize manualmente o pacote libzypp. O comando a seguir é um exemplo, e talvez seja necessário ajustar o número da versão:

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

Versão do SO incompatível ou pacotes desatualizados

Se você estiver executando uma versão do SO fora do período de suporte geral (por exemplo, o SLES 12 SP4, cujo suporte geral foi encerrado em 30 de junho de 2020), o registro poderá falhar. Isso pode acontecer porque pacotes desatualizados na VM não conseguem se comunicar com a infraestrutura de atualização da SUSE. Talvez apareçam erros sobre IPs inacessíveis no arquivo de registro /var/log/cloudregister, mesmo que a conectividade de rede pareça parcialmente bem-sucedida (por exemplo, se o uso de telnet para servidores SMT retornar um erro 403 Forbidden).

Para verificar se os pacotes estão desatualizados, confira as datas de instalação. Pacotes que não são atualizados há mais de um ano podem estar desatualizados. Para verificar a última atualização de um pacote, use o seguinte comando:

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

Para resolver esse problema, faça upgrade para uma versão compatível do SLES. Talvez seja necessário atualizar pacotes específicos, conforme descrito em Documentos de informações técnicas (TIDs) da SUSE (links em inglês).