Soluciona problemas de paquetes de SO

Obtén información sobre los pasos para solucionar problemas que pueden servirte si tienes dificultades para administrar paquetes de SO en Artifact Registry.

Si quieres obtener información sobre cómo resolver problemas con los repositorios remotos de Artifact Registry para paquetes de SO, consulta Soluciona problemas de repositorios remotos.

Problemas de autenticación y permisos

No puedes conectarte a un repositorio para realizar acciones como instalar un paquete. El resultado del administrador de paquetes incluye un error 401 o 403, que indica problemas con la autenticación o los permisos.

Ejemplos de errores 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.

Ejemplo de error de Yum:

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

Estos errores pueden deberse a varias causas. Asegúrate de que tu VM cumpla con los siguientes requisitos:

  1. Verifica que la VM tenga una cuenta de servicio asociada.

    VM de Compute Engine

    1. Ve a la página Instancias de VM.
    2. En la lista de VMs, haz clic en su nombre.

      En la pestaña Detalles, la cuenta de servicio y los permisos de acceso aparecen en Administración de identidades y API.

    De forma predeterminada, las VM de Compute Engine usan la cuenta de servicio predeterminada de Compute Engine y tienen un conjunto limitado de permisos de acceso. La dirección de correo electrónico de la cuenta de servicio predeterminada tiene el formato PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Para cambiar la cuenta de servicio o conectar una cuenta de servicio a una VM, consulta Cambia la cuenta de servicio y los permisos de acceso de una instancia.

    Otra VM

    Para otras VMs, debes tener una cuenta de servicio que actúe en nombre de la VM.

    1. Crea una cuenta de servicio si no tienes una.

    2. Otorga el rol de lector de Artifact Registry (roles.artifactregistry.reader) mientras creas la cuenta de servicio para que no necesites configurar permisos en un paso separado.

  2. Asegúrate de que la cuenta de servicio de VM tenga permisos de lectura para el repositorio y el permiso de acceso a la API de cloud-platform.

    VM de Compute Engine

    Artifact Registry recupera las credenciales de la cuenta de servicio de la VM de forma automática. La configuración requerida depende de si usas la cuenta de servicio predeterminada o una cuenta de servicio administrada por el usuario.

    Cuenta de servicio predeterminada

    Si la VM usa la cuenta de servicio predeterminada, esta cuenta de servicio tiene el rol Editor de forma predeterminada, que incluye permisos de lectura para repositorios en el mismo proyecto. Si el repositorio está en un proyecto diferente al de la VM, otorga el rol de lector de Artifact Registry a la cuenta de servicio de la VM.

    Además, la cuenta de servicio predeterminada no tiene todos los permisos de acceso a la API necesarios.

    Para configurar el permiso de acceso de cloud-platform, haz lo siguiente:

    1. Detén la instancia de VM y reemplaza INSTANCE por el nombre de la instancia de VM.

      gcloud compute instances stop INSTANCE
      
    2. Configura el permiso de acceso:

      gcloud compute instances set-service-account INSTANCE \
          --scopes=cloud-platform
      
    3. Reinicia la instancia de VM.

      gcloud compute instances start INSTANCE
      
    Cuenta de servicio administrada por el usuario
    Si la VM usa una cuenta de servicio administrada por el usuario, otorga el rol de lector de Artifact Registry a la cuenta de servicio de la VM. Las cuentas de servicio administradas por el usuario tienen el permiso de acceso cloud-platform.

    Otra VM

    Otorga el rol de lector de Artifact Registry a la cuenta de servicio de VM. De forma predeterminada, las cuentas de servicio administradas por el usuario tienen el permiso de acceso cloud-platform.

  3. Verifica si seguiste los pasos para preparar la VM para acceder al repositorio. Consulta las instrucciones para preparar Apt o Yum.

  4. Verifica si configuraste correctamente Apt o Yum para acceder al repositorio.

    Si te conectas a un repositorio de Apt desde una VM de Compute Engine, asegúrate de que la URL del repositorio incluya el prefijo ar+.

Problemas con el auxiliar de credenciales

El siguiente mensaje de error aparece cuando la VM no puede encontrar el auxiliar de credenciales de Apt:

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

El error se produce cuando intentas instalar el paquete apt-transport-artifact-registry en una VM que se creó a partir de una imagen que no incluye la clave de firma del repositorio Apt.

Para solucionar este problema, haz lo siguiente:

  1. Instala la clave de firma en la VM:

    VM de Debian

    Instala las claves de firma del repositorio de Apt con el siguiente comando:

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

    Reemplaza LOCATION por la ubicación del repositorio.

    VM de Ubuntu

    Instala las claves de firma del repositorio de Apt con el siguiente 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 -
    

    Reemplaza LOCATION por la ubicación del repositorio.

  2. Vuelve a probar los pasos de preparación de la VM.

Problemas con el complemento de autenticación

El siguiente mensaje de error aparece cuando hay un problema con el complemento de autenticación de Yum o DNF:

Plugin "artifact-registry" can't be imported

Este error se puede generar por varios motivos. Para resolver el error, intenta ejecutar el complemento directamente a fin de confirmar las dependencias, buscar problemas de Python o revelar otros posibles problemas subyacentes.

Para ejecutar el complemento directamente, usa uno de los siguientes comandos:

  • Para el complemento de Yum:

    python /usr/lib/yum-plugins/artifact-registry.py
    
  • Para el complemento de DNF:

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

    Reemplaza VERSION-NUMBER por la versión predeterminada de Python para la distribución de Linux. Por ejemplo, Enterprise Linux 8 incluye Python 3.6.

    Puedes obtener una lista de los archivos en el paquete del complemento instalado para verificar el nombre del directorio de la biblioteca de Python.

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

Faltan artefactos subidos recientemente

Si tu cliente Apt o Yum no encuentra un paquete que se haya subido o importado recientemente a tu repositorio, puede deberse a que el proceso para volver a generar el índice del paquete Apt o Yum aún no se completó.

Para repositorios pequeños, regenerar el archivo de índice Apt o Yum puede tardar varios segundos. Para repositorios más grandes, la reindexación puede tardar varios minutos o más.

Si deseas verificar que un paquete se agregó de forma correcta al repositorio, usa Google Cloud CLI para enumerar los archivos del paquete. Ejecute el comando:

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

Por ejemplo, puedes verificar que el paquete python-gflags llamado python3-gflags_1.5.1-5_all.deb se subió de forma correcta al repositorio us-central1-apt.pkg.dev\apt-project\apt-repo con el siguiente comando:

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

Si el paquete se subió correctamente, el archivo aparece en el resultado con un identificador único en el nombre del archivo, similar al siguiente ejemplo:

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

Error de autenticación para algunos paquetes subidos o importados

Si el tiempo para importar o subir archivos supera el período de vencimiento del token de autenticación, las cargas posteriores al período de vencimiento fallarán. Los tokens vencen 60 minutos después de que los obtienes. Si el token venció, se muestra un error similar al siguiente en el resultado del comando de importación.

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

Sigue estos pasos para solucionar el problema:

  1. Intenta subir o importar el paquete específico solo para verificar que puedas agregarlo de forma individual en lugar de hacerlo mediante una importación por lotes.
  2. Si varios paquetes fallan, importa o sube en lotes más pequeños para que la operación no exceda el período de vencimiento del token.