Resolver problemas com pacotes do SO

Saiba mais sobre as etapas de solução de problemas que podem ser úteis se você se deparar com ao gerenciar pacotes de SO no Artifact Registry.

Para informações sobre como resolver problemas com o Artifact Registry remoto repositórios para pacotes de SO, consulte Resolva problemas de repositórios remotos.

Problemas de autenticação e permissões

Não é possível se conectar a um repositório para realizar ações como instalar um pacote. A saída do gerenciador de pacotes inclui um erro 401 ou 403, que indica problemas com autenticação ou permissões.

Exemplos de erros de Apt:

Err:1 ar+https://us-central1-apt.pkg.dev/projects/my-project my-package Release
  Error downloading: code 401
E: Failed to fetch https://us-central1-apt.pkg.dev/projects/my-project/dists/quickstart-apt-repo/main/binary-amd64/Packages  403  Forbidden [IP: 74.125.20.82 443]
E: Some index files failed to download. They have been ignored, or old ones used instead.

Exemplo de erro do Yum:

/repodata/repomd.xml: [Errno 14] HTTPS Error 403 - Forbidden

Há várias causas possíveis para esses erros. Verifique se a VM atende os seguintes requisitos:

  1. Verifique se a VM tem uma conta de serviço associada.

    VM do Compute Engine

    1. Acesse a página Instâncias da VM.
    2. Na lista de VMs, clique no nome da sua VM.

      Na guia Detalhes, a conta de serviço e os escopos de acesso aparecem em Gerenciamento de APIs e identidades.

    Por padrão, as VMs do Compute Engine usam a conta de serviço padrão do Compute Engine e têm um conjunto limitado de escopos de acesso. O endereço de e-mail da conta de serviço padrão está no formato PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Para alterar a conta de serviço ou anexar uma conta de serviço a uma VM, consulte Alterar a conta de serviço e os escopos de acesso de uma instância.

    Outra VM

    Para outras VMs, você precisa ter uma conta de serviço para agir em nome da VM.

    1. Crie uma conta de serviço se ainda não tiver uma.

    2. Conceder ao Leitor do Artifact Registry (roles.artifactregistry.reader) ao criar a conta de serviço. Assim, você não precisa para configurar as permissões em outra etapa.

  2. Verifique se a conta de serviço da VM tem permissões de leitura para o repositório como além do escopo de acesso da API cloud-platform.

    VM do Compute Engine

    O Artifact Registry recupera automaticamente as credenciais da conta de serviço da VM. O a configuração necessária depende se você está usando a conta de serviço ou uma conta de serviço gerenciado pelo usuário.

    Conta padrão de serviço

    Se a VM usar a conta de serviço padrão, esse serviço tem o papel de Editor por padrão, o que inclui permissões de leitura para repositórios no mesmo projeto. Se o repositório estiver em um projeto do que a VM, conceda o acesso de Leitor do Artifact Registry à conta de serviço da VM.

    Além disso, a conta de serviço padrão não tem todos os escopos de acesso à API.

    Para definir o escopo de acesso cloud-platform,

    1. Interrompa a instância de VM, substituindo INSTANCE pelo Nome da instância da VM.

      gcloud compute instances stop INSTANCE
      
    2. Defina o escopo de acesso:

      gcloud compute instances set-service-account INSTANCE \
          --scopes=cloud-platform
      
    3. Reinicie a instância de VM.

      gcloud compute instances start INSTANCE
      
    Conta serviço gerenciado pelo usuário
    Se a VM usar uma conta de serviço gerenciada pelo usuário, conceda o papel Leitor do Artifact Registry à conta de serviço da VM. As contas de serviço gerenciado pelo usuário têm o escopo de acesso cloud-platform.

    Outra VM

    Conceda o papel de Leitor do Artifact Registry ao serviço de VM do Compute Engine. Por padrão, as contas de serviço gerenciado pelo usuário têm o cloud-platform escopo de acesso.

  3. Verifique se você seguiu as etapas para preparar a VM para acessar o repositório de dados. Confira a preparação do Apt ou do Yum instruções.

  4. Verifique se você configurou corretamente o Apt ou o Yum para acessar o repositório.

    Se você estiver se conectando a um repositório Apt por uma VM do Compute Engine, verifique se o URL do repositório inclui o prefixo ar+.

Problemas com o auxiliar de credenciais

A mensagem de erro a seguir aparece quando a VM não consegue localizar a credencial Apt assistente:

E: Unable to locate package apt-transport-artifact-registry

O erro ocorre quando você tenta instalar o pacote apt-transport-artifact-registry em uma VM criada a partir de uma imagem que não inclui a chave de assinatura do repositório Apt.

Para resolver esse problema, faça o seguinte:

  1. Instale a chave de assinatura na VM:

    VM do Debian

    Instale as chaves de assinatura do repositório Apt usando o seguinte comando:

    curl https://LOCATION-apt.pkg.dev/doc/repo-signing-key.gpg | sudo apt-key add -
    

    Substitua LOCATION pelo local do repositório de dados.

    VM do Ubuntu

    Instale as chaves de assinatura do repositório do Apt usando o seguinte comando:

    curl https://LOCATION-apt.pkg.dev/doc/repo-signing-key.gpg | sudo apt-key add - && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    

    Substitua LOCATION pelo local do repositório.

  2. Tente novamente as etapas de preparação da VM.

Problemas com o plug-in de autenticação

A seguinte mensagem de erro aparece quando há um problema com o Yum ou DNF plug-in de autenticação:

Plugin "artifact-registry" can't be imported

Esse erro pode ocorrer por vários motivos. Para resolver o erro, tente executar o plug-in diretamente para confirmar dependências, verificar problemas do Python ou revelar outros possíveis problemas subjacentes.

Para executar o plug-in diretamente, use um dos seguintes comandos:

  • Para o plug-in Yum:

    python /usr/lib/yum-plugins/artifact-registry.py
    
  • Para o plug-in DNF:

    python3 /usr/lib/pythonVERSION-NUMBER/site-packages/dnf-plugins/artifact-registry.py
    

    Substitua VERSION-NUMBER pela versão padrão do Python para a distribuição Linux. Por exemplo, o Enterprise Linux 8 inclui o Python 3.6.

    É possível listar os arquivos no pacote de plug-in instalado para verificar o nome do diretório da biblioteca Python.

    rpm -ql dnf-plugin-artifact-registry|grep artifact-registry.py
    

Artefatos enviados recentemente ausentes

Se o cliente Apt ou Yum não encontrar um pacote que foi enviado ou importado recentemente para o repositório, talvez o processo de regeneração do índice de pacotes do Apt ou Yum ainda não tenha sido concluído.

Para repositórios pequenos, regenerar o arquivo de índice Apt ou Yum pode levar vários segundos. Para repositórios maiores, a reindexação pode levar vários minutos ou mais.

Para verificar se um pacote foi adicionado ao repositório, use a Google Cloud CLI para listar arquivos no pacote. Execute o comando:

gcloud artifacts files list \
    --package=PACKAGE \
    --project=PROJECT-ID \
    --repository=REPOSITORY \
    --location=LOCATION

Por exemplo, você pode verificar se o pacote python-gflags chamado python3-gflags_1.5.1-5_all.deb foi enviado ao repositório us-central1-apt.pkg.dev\apt-project\apt-repo com o comando:

gcloud artifacts files list \
    --package=python-gflags \
    --project=apt-project \
    --repository=apt-repo \
    --location=us-central1

Se o upload do pacote foi concluído, o arquivo aparecerá na saída com um identificador exclusivo no nome do arquivo, semelhante ao seguinte exemplo:

FILE                                                                  CREATE_TIME          UPDATE_TIME          SIZE (MB)  OWNER
pool/python3-gflags_1.5.1-5_all_2414c7af6a64c99a5f488aad366d637a.deb  2023-01-12T20:39:53  2023-01-12T20:39:53  0.035      projects/apt-project/locations/us-central1/repositories/apt-repo/packages/python3-gflags/versions/1.5.1-5

Erro de autenticação em alguns pacotes enviados ou importados

Se o tempo para importar ou fazer upload de arquivos exceder o período de validade do token de autenticação, os uploads após esse período vão falhar. Os tokens expiram 60 minutos após a obtenção. Um erro semelhante ao exemplo a seguir aparece saída do comando de importação se o token tiver expirado.

errors:
- error:
    code: 16
    message: The request does not have valid authentication credentials.
  gcsSource:
    uris:
    - gs://my-bucket/debs/python/python3-gflags_1.5.1-5_all.deb

Para resolver esse problema:

  1. Tente fazer upload ou importar o pacote específico apenas para verificar se é possível adicionar o pacote individualmente em vez de em uma importação em lote.
  2. Se vários pacotes falharem, importe ou faça o upload em lotes menores para que a operação não exceda o período de validade do token.