Listar repositorios configurados

El siguiente comando nos mostrará una lista de los repositorios que hay configurados actualmente en nuestro sistema:

apt policy

La respuesta será más o menos:

Package files:
 100 /var/lib/dpkg/status
     release a=now
 500 https://packages.microsoft.com/repos/ms-teams stable/main amd64 Packages
     release o=ms-teams stable,a=stable,n=stable,l=ms-teams stable,c=main,b=amd64
     origin packages.microsoft.com
 500 http://apt.postgresql.org/pub/repos/apt focal-pgdg/main amd64 Packages
     release o=apt.postgresql.org,a=focal-pgdg,n=focal-pgdg,l=PostgreSQL for Debian/Ubuntu repository,c=main,b=amd64
     origin apt.postgresql.org
 500 https://nvidia.github.io/nvidia-docker/ubuntu20.04/amd64  Packages
     release v=1.0,o=https://nvidia.github.io/nvidia-docker,a=bionic,n=bionic,l=NVIDIA CORPORATION <cudatools@nvidia.com>,c=
     origin nvidia.github.io
 500 https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu20.04/amd64  Packages
     release v=1.0,o=https://nvidia.github.io/nvidia-container-runtime,a=bionic,n=bionic,l=NVIDIA CORPORATION <cudatools@nvidia.com>,c=
     origin nvidia.github.io
 500 https://nvidia.github.io/libnvidia-container/stable/ubuntu20.04/amd64  Packages
     release v=1.0,o=https://nvidia.github.io/libnvidia-container,a=bionic,n=bionic,l=NVIDIA CORPORATION <cudatools@nvidia.com>,c=
     origin nvidia.github.io
 500 https://deb.nodesource.com/node_14.x focal/main amd64 Packages
     release o=Node Source,n=focal,l=Node Source,c=main,b=amd64
     origin deb.nodesource.com
 500 https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
     release o=microsoft-ubuntu-focal-prod focal,a=focal,n=focal,l=microsoft-ubuntu-focal-prod focal,c=main,b=amd64

 ...

Borrar repositorio del sistema

Se pueden eliminar repositorios que no necesitamos mediante el comando:

sudo add-apt-repository --remove ppa:<NOMBRE_REPOSITORIO>/<PPA>

Donde <NOMBRE_REPOSITORIO es el nombre del repositorio que queremos borrar, por ejemplo en nuestra lista de arriba podríamos querer borrar nvidia-docker, y PPA es “Personal Package Archive”.

Ejemplo:

sudo add-apt-repository --remove nvidia.github.io/nvidia-docker

Note that we deleted the ppa: at the beginning, because this one was not a repository from Ubuntu.

Eliminar mensajes de error debido a la arquitectura

En ocasiones podemos tener un repositorio configurado que añade arquitecturas no compatibles con nuestra máquina. En esos casos veremos un mensaje de error como:

N: Skipping acquire of configured file 'main/binary-i386/Packages' as repository 'http://apt.postgresql.org/pub/repos/apt focal-pgdg InRelease' doesn't support architecture 'i386'

Para eliminar este mensaje, hay que buscar cuál es el repositorio que tenemos mal configurado en /etc/apt/sources.list.d. En nuestro caso era el repositorio oficial de PostgreSQL para la arquitectura i386, luego podemos buscar con el comando:

grep postgres * | grep -v i386

Una vez tenemos los ficheros, los editamos añadiendo el filtro [arch=amd64]. En nuestro ejemplo:

deb [arch=amd64] http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main

Añadir claves GPG de repositorios

Los repositorios proveen de una clave GPG que hay que instalar y mantener actualizada, ya que de lo contrario podemos encontrarnos con errores al hacer apt update, como por ejemplo éste:

W: An error occurred during the signature verification. 
The repository is not updated and the previous index files will be used. 
GPG error: https://packages.cloud.google.com/apt cloud-sdk InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B53DC80D13EDEF05
W: Failed to fetch https://packages.cloud.google.com/apt/dists/cloud-sdk/InRelease  
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B53DC80D13EDEF05
W: Some index files failed to download. They have been ignored, or old ones used instead.

Para instalar las claves GPG, por ejemplo valiéndonos de éste mismo ejemplo de repositorio para Google Cloud SDK, haremos lo siguiente:

wget -O- https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/cloud.google.gpg

Es decir, wget -O- a la clave GPG del repositorio, que habitualmente se ofrece en el mismo, un gpg --dearmor a la clave y el resultado lo guardaremos en /usr/share/keyrings/clave.gpg.

Después de hacer esto, nos aseguraremos de que el fichero con la clave se encuentra señalado en la configuración del repositorio, en nuestro ejemplo en /etc/apt/sources.list.d/google-cloud-sdk.list:

deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main