SSD Nodes Learn Hosting plans →
Guías Matt ConnorPor Matt Connor · Actualizado 2026-08-23

Corregir fuentes apt duplicadas y archivos .sources

Si apt update muestra "configured multiple times", localiza el par .list y .sources, conserva una declaración y recupera una actualización limpia.

Qué significa el error de fuentes de apt duplicadas

Las fuentes de apt duplicadas significan que un repositorio está declarado dos veces, en dos archivos diferentes, y APT (advanced package tool) ha encontrado ambas copias. En Ubuntu 24.04 y versiones posteriores, casi siempre ocurre porque un script de instalación de terceros escribió un archivo antiguo de una línea .list cuando ya existía en el disco un archivo deb822 .sources para el mismo repositorio. No hay nada dañado y ningún paquete está en riesgo. Elimine una de las dos declaraciones y el mensaje desaparecerá.

Esta es la línea que se suele pegar en un cuadro de búsqueda:

W: Target Packages (stable/binary-amd64/Packages) is configured multiple times in /etc/apt/sources.list.d/docker.list:1 and /etc/apt/sources.list.d/docker.sources:1

Léala desde el final. Dos archivos, cada uno con un número de línea, declaran lo mismo. Target Packages es el índice que apt descarga para saber qué paquetes ofrece un repositorio, y stable/binary-amd64/Packages indica el componente (stable) y la arquitectura (amd64) que cubre ese índice. Por tanto, apt le informa de que el índice amd64 del componente stable está configurado en docker.list, en la línea 1, y de nuevo en docker.sources, también en la línea 1.

En apt 3.0 y versiones posteriores, es decir, Ubuntu 25.04 y versiones posteriores y Debian 13, el mismo mensaje comienza con Warning: en lugar de W:. El texto posterior al prefijo es el mismo.

Esta advertencia es el caso leve. apt combina las dos declaraciones y la actualización continúa, porque ambas describen el mismo archivo con la misma clave. El caso grave detiene todo:

E: Conflicting values set for option Signed-By regarding source https://download.docker.com/linux/ubuntu/ noble: /usr/share/keyrings/docker-archive-keyring.gpg != /etc/apt/keyrings/docker.asc
E: The list of sources could not be read.

apt se niega a continuar porque las dos declaraciones indican claves de firma diferentes para un mismo archivo. Puede combinar dos declaraciones idénticas, pero no puede elegir entre dos valores Signed-By, porque seleccionar el incorrecto implica comprobar las firmas de los paquetes con una clave que el propietario del archivo nunca utilizó para firmarlos. Por eso apt no lee ninguna fuente. apt update y apt install fallan con esas mismas dos líneas hasta que edite los archivos manualmente.

Cómo aparece el duplicado

Los dos formatos se almacenan en archivos independientes con extensiones diferentes, por lo que nada en el disco impide que existan ambos. apt detecta la coincidencia tarde, cuando expande cada archivo de origen en la lista de destinos de índices que planea descargar. Hasta ese momento, docker.list y docker.sources son dos archivos sin relación.

Cuatro eventos habituales producen este par:

  • Un script de instalación del proveedor, o un comando copiado de una publicación antigua, escribe /etc/apt/sources.list.d/vendor.list con una línea tee.
  • Posteriormente, el paquete del propio proveedor incluye /etc/apt/sources.list.d/vendor.sources y lo instala automáticamente.
  • add-apt-repository en Ubuntu 24.04 y versiones posteriores escribe archivos .sources en formato deb822, por lo que un PPA (archivo personal de paquetes) que añadió manualmente en el pasado como .list reaparece como .sources.
  • Una actualización de versión reescribió los orígenes propios de la distribución en formato deb822 y dejó intacto su archivo .list escrito manualmente junto a ellos.

Cada caso es razonable por separado. El duplicado aparece cuando dos de ellos ocurren en el mismo equipo, a menudo con meses de diferencia.

Los dos formatos, uno junto al otro

El formato antiguo usa una línea por repositorio y cada parte ocupa una posición fija.

deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable

El orden es fijo: el tipo (deb para paquetes binarios, deb-src para paquetes de código fuente), las opciones entre corchetes, el URI (identificador uniforme de recursos) del archivo, la suite y uno o varios componentes. Como el significado depende de la posición, un espacio en el lugar incorrecto cambia lo que interpreta apt.

deb822 expresa lo mismo como un bloque de campos con nombre. El nombre procede de RFC 822, el formato de cabeceras de correo que Debian ya utiliza para los archivos de control de paquetes.

Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc

El mismo repositorio y la misma clave, sin añadir nada. La correspondencia es directa: deb se convierte en Types, la dirección del archivo se convierte en URIs, la suite se convierte en Suites, los componentes se convierten en Components y cada opción entre corchetes pasa a ser su propio campo, de modo que signed-by= se convierte en Signed-By: y arch= se convierte en Architectures:.

Todos los nombres de campo están en plural porque cada campo acepta una lista separada por espacios. Suites: noble noble-updates noble-backports en un bloque sustituye a tres líneas deb independientes. Una línea en blanco termina un bloque, por lo que un solo archivo .sources puede contener varios repositorios. deb822 también permite expresar configuraciones que el formato de una línea gestiona mal: Enabled: no para desactivar un repositorio, Trusted, Check-Valid-Until y una clave incluida directamente en Signed-By, con cada línea indentada un espacio y las líneas en blanco escritas como un único punto.

Dónde se encuentra cada archivo

  • /etc/apt/sources.list: el archivo único original. En Ubuntu 24.04 y versiones posteriores, normalmente está vacío o sólo contiene un comentario que apunta a la nueva ubicación.
  • /etc/apt/sources.list.d/*.list: entradas de una línea, normalmente un archivo por repositorio.
  • /etc/apt/sources.list.d/*.sources: bloques deb822. Ubuntu 24.04 y versiones posteriores mantienen aquí los repositorios propios de la distribución, en ubuntu.sources.
  • /etc/apt/keyrings/: aquí deben ubicarse las claves que añada. /usr/share/keyrings/ contiene las claves procedentes de un paquete.

apt sólo lee los archivos que terminan en .list o .sources, y el nombre de archivo puede contener letras, dígitos, guion bajo, guion y punto. Los archivos con cualquier otra extensión se omiten y se muestra un aviso. Esto es importante para la corrección que se describe a continuación.

Busca el par duplicado

Empieza con el listado del directorio:

ls -l /etc/apt/sources.list.d/
-rw-r--r-- 1 root root  195 Aug  3 09:12 docker.list
-rw-r--r-- 1 root root  254 Aug  9 14:40 docker.sources
-rw-r--r-- 1 root root 2683 Jun 11 08:02 ubuntu.sources

Dos archivos con el mismo nombre base y extensiones distintas suelen formar el par, pero no confíes en los nombres. Lee el contenido, porque un duplicado puede estar oculto en un archivo con cualquier nombre:

grep -rn -E '^(deb |deb-src |Types:|URIs:|Suites:|Signed-By:)' /etc/apt/sources.list /etc/apt/sources.list.d/
/etc/apt/sources.list.d/docker.list:1:deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu noble stable
/etc/apt/sources.list.d/docker.sources:1:Types: deb
/etc/apt/sources.list.d/docker.sources:2:URIs: https://download.docker.com/linux/ubuntu
/etc/apt/sources.list.d/docker.sources:3:Suites: noble
/etc/apt/sources.list.d/docker.sources:6:Signed-By: /etc/apt/keyrings/docker.asc

El par son las dos entradas con el mismo host y la misma suite. Ambas apuntan a https://download.docker.com/linux/ubuntu y a la suite noble, por lo que son el mismo repositorio escrito dos veces. Sus rutas Signed-By también difieren, y eso es lo que produce el error Conflicting values mostrado antes.

Usa grep en lugar de un comando de apt para este paso. Cuando apt ya se detiene por el conflicto, tampoco puede mostrar tus fuentes, por lo que apt-cache policy imprime el mismo error en lugar de la respuesta que necesitas.

Solución: conserve el archivo deb822 y retire el archivo heredado

Conserve el archivo .sources. Es el formato que escribe ahora apt tooling y es la dirección que siguen Debian y Ubuntu. Antes de eliminar nada, compruebe cuál de las dos rutas principales existe en el disco:

ls -l /etc/apt/keyrings/ /usr/share/keyrings/ | grep -i docker
-rw-r--r-- 1 root root 4813 Aug  9 14:40 docker.asc

Sólo está presente /etc/apt/keyrings/docker.asc, por lo que el archivo deb822 contiene la información correcta y el archivo .list apunta a una clave que se eliminó. Si el archivo que planea conservar nombra la clave que falta, copie primero en él la ruta válida y elimine después el otro archivo.

Mueva el archivo heredado fuera del directorio en lugar de eliminarlo directamente:

sudo mkdir -p /root/apt-sources-backup
sudo mv /etc/apt/sources.list.d/docker.list /root/apt-sources-backup/
sudo apt update

También puede cambiarle el nombre a docker.list.bak y dejarlo en el mismo directorio, porque apt ignora las extensiones desconocidas, pero entonces cada ejecución de apt muestra esto:

N: Ignoring file 'docker.list.bak' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extension

Mover el archivo a otra ubicación evita que aparezca ese aviso y conserva la copia de seguridad. Después, un archivo apt update correcto se ve así, sin ninguna línea que nombre dos archivos:

Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 https://download.docker.com/linux/ubuntu noble InRelease [48.8 kB]
Get:3 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Fetched 175 kB in 1s (146 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

Ahora confirme que el repositorio sigue funcionando después de la edición:

apt-cache policy | grep download.docker.com
 500 https://download.docker.com/linux/ubuntu noble/stable amd64 Packages
     origin download.docker.com

Si la documentación del proveedor todavía presupone el archivo de una sola línea, puede conservar ese archivo y eliminar en su lugar el archivo .sources. La regla es la misma en ambos casos: exactamente un archivo puede declarar un archivo y una suite determinados.

Por qué una fuente de terceros defectuosa bloquea apt update

El fallo cercano parece diferente, pero tiene la misma causa: una fuente de terceros que apt no puede utilizar. La primera variante se debe a una clave ausente:

Err:5 https://download.docker.com/linux/ubuntu noble InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
E: The repository 'https://download.docker.com/linux/ubuntu noble InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.

Falta el campo Signed-By, o apunta a un archivo que no contiene una clave utilizable. Por eso apt no puede verificar la firma del archivo InRelease del archivo de paquetes. Entonces descarta todo el repositorio en lugar de confiar en listas de paquetes que no puede comprobar. Revise el propio archivo de clave:

ls -l /etc/apt/keyrings/docker.asc
gpg --show-keys /etc/apt/keyrings/docker.asc

Una clave válida muestra una línea pub con un identificador de clave y una línea uid que indica el proveedor. gpg: no valid OpenPGP data found. significa que el archivo no es una clave. Normalmente, esto ocurre porque la descarga guardó una página de error después de que cambiara la URL de la clave. Descargue de nuevo la clave, compruebe el archivo y ejecute apt update.

La segunda variante aparece después de actualizar la versión del sistema:

Err:6 https://ppa.launchpadcontent.net/ondrej/php/ubuntu plucky InRelease
  404  Not Found [IP: 10.0.0.80 443]
E: The repository 'https://ppa.launchpadcontent.net/ondrej/php/ubuntu plucky Release' does not have a Release file.

El PPA no ha publicado nada para esa suite. Por eso la ruta no existe en el servidor y la solicitud devuelve 404. Los demás repositorios siguen actualizándose y los paquetes que ya están instalados no se modifican. Sin embargo, la ejecución termina con un código distinto de cero. Por tanto, cualquier script que compruebe el estado de salida de apt update informa de un fallo cada vez que se ejecuta. Por eso conviene eliminar una fuente inactiva en un equipo con actualizaciones de seguridad desatendidas configuradas: el ruido diario puede ocultar un fallo real. Los scripts de instalación de proveedores presentan ambas variantes. Por eso, la mayoría de los errores de instalación de Tailscale en Ubuntu se deben a un keyring que el script nunca creó o a un nombre en clave de versión que el archivo no ofrece.

Desactive una fuente sin afectar a las demás

En un archivo deb822, añada un campo a la estrofa y guárdelo:

Types: deb
URIs: https://ppa.launchpadcontent.net/ondrej/php/ubuntu
Suites: plucky
Components: main
Signed-By: /etc/apt/keyrings/ondrej-php.asc
Enabled: no

El manual de apt recomienda este método en lugar de comentar cada línea de la estrofa. También es más fácil revertirlo. En un archivo de una sola línea, coloque un # al principio de la línea. En ambos formatos, también puede mover el archivo fuera de /etc/apt/sources.list.d/. Elija esta opción cuando el repositorio se haya eliminado definitivamente.

Ejecute de nuevo sudo apt update. El bloque Err: de ese repositorio desaparece y el estado de salida vuelve a 0. Puede comprobarlo con echo $? en la línea siguiente.

Nunca corrija una fuente dañada con sudo rm /etc/apt/sources.list.d/*. En Ubuntu 24.04 y versiones posteriores, ese comando elimina ubuntu.sources, que contiene los repositorios propios de la distribución. Como resultado, apt se queda sin listas de paquetes y muestra E: Unable to locate package curl para software que existe claramente. Si ya lo ha ejecutado, vuelva a escribir el archivo:

Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Guárdelo como /etc/apt/sources.list.d/ubuntu.sources, sustituyendo noble por el nombre de su propia versión obtenido de lsb_release -cs. Después, ejecute sudo apt update.

Convertir los archivos .list heredados a deb822

Desde agosto de 2026, apt 3.0 y las versiones posteriores incluyen un convertidor para este formato. Debian 13 lo incluye, al igual que Ubuntu 25.04 y todas las versiones posteriores, incluida 26.04. Compruebe la versión y ejecútelo:

apt --version
sudo apt modernize-sources

El comando reescribe los archivos de una sola línea de /etc/apt/sources.list.d/ como archivos deb822 .sources. Lea lo que muestra, enumere después el directorio manualmente y ejecute apt update antes de dar por válido el resultado. Ubuntu 24.04 incluye una versión anterior de apt que no tiene este subcomando; en esa versión, el comando responde E: Invalid operation modernize-sources. En esa versión, convierta los archivos manualmente con la correspondencia de campos anterior.

La conversión es opcional por ahora, porque apt todavía lee ambos formatos. Conviene hacerla en un servidor que piense mantener, ya que todas las herramientas que escriben las fuentes utilizan ahora deb822, y un sistema que sólo tenga archivos .sources no puede acumular este tipo de duplicados.

Mantenga ordenados los repositorios de terceros en un servidor

Los repositorios de terceros son la parte de un servidor que más se deteriora con el tiempo. Cada uno es un compromiso de otra entidad para seguir publicando paquetes para su versión de Ubuntu, y una actualización de versión pone a prueba todos esos compromisos la misma tarde.

  • Añada un repositorio de terceros sólo cuando el paquete de la distribución no sea suficiente. Una pila LAMP en Ubuntu 24.04 normal no necesita ninguno: el archivo de Ubuntu contiene todos los paquetes que utiliza, con actualizaciones de seguridad durante todo el ciclo de vida de la versión.
  • Mantenga las claves en /etc/apt/keyrings/, un archivo por proveedor, con modo 644. El usuario sin privilegios _apt descarga los paquetes y debe poder leer la clave, por lo que un archivo de clave legible sólo por root provoca un error de permisos en cada descarga desde ese repositorio.
  • Haga que Signed-By apunte a ese archivo exacto en cada estrofa. Una clave ubicada en /etc/apt/trusted.gpg o /etc/apt/trusted.gpg.d/ tiene confianza para todos los repositorios del equipo, lo que significa que una clave de proveedor añadida hace años puede validar paquetes de cualquier origen.
  • Antes de actualizar la versión, lea las fuentes y compruebe que cada proveedor ya publica paquetes para la suite a la que va a cambiar.

Una clave del antiguo almacén de claves global se anuncia en cada actualización:

W: https://download.docker.com/linux/ubuntu/dists/noble/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

Exporte esa clave individual a su propio archivo y haga que la estrofa apunte a él:

gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --export 7EA0A9C3F273FCD8 | sudo tee /etc/apt/keyrings/docker.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/docker.gpg

Añada Signed-By: /etc/apt/keyrings/docker.gpg a la estrofa del repositorio y ejecute sudo apt update. La advertencia desaparece cuando ningún repositorio depende del antiguo almacén de claves; después puede eliminar la entrada con sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --delete-key 7EA0A9C3F273FCD8.

Hay otro hábito que evita la mayoría de los problemas. do-release-upgrade desactiva las fuentes de terceros durante la actualización y las deja desactivadas después. Volver a activarlas manualmente, una por una, es precisamente el momento en que se crean declaraciones duplicadas. Lea la guía para actualizar de Ubuntu 24.04 a 26.04 antes de empezar y anote qué repositorios sigue necesitando. En una máquina que acaba de crear, el momento más sencillo para configurar correctamente las fuentes es durante los primeros diez minutos en un VPS nuevo, cuando las únicas entradas del equipo son las que Ubuntu ha incluido.

FAQ

¿Por qué apt indica que un destino está configurado varias veces?

Porque dos archivos de /etc/apt/sources.list.d/ declaran el mismo repositorio, suite y componente. El mensaje indica ambos archivos con sus números de línea, como docker.list:1 y docker.sources:1. apt los combina y continúa, por lo que la actualización sigue funcionando. Aun así, conviene eliminar el duplicado: en cuanto los dos archivos indiquen claves de firma diferentes, apt se detiene con E: Conflicting values set for option Signed-By y se niega a leer cualquier origen, lo que también bloquea apt install.

¿Debo conservar el archivo .list o el archivo .sources?

Conserve el archivo .sources. deb822 es el formato que add-apt-repository escribe en Ubuntu 24.04 y versiones posteriores. Contiene un campo con nombre para cada ajuste, en lugar de texto posicional entre corchetes, y es el formato hacia el que avanzan las distribuciones. Antes de eliminar el archivo .list, confirme con ls -l /etc/apt/keyrings/ que la ruta Signed-By dentro del archivo .sources apunta a una clave existente. Mueva el archivo antiguo fuera de /etc/apt/sources.list.d/ en lugar de cambiarle el nombre dentro del directorio, porque un nombre .bak sobrante hace que apt muestre un aviso sobre un archivo ignorado en cada ejecución.

¿Cómo desactivo un repositorio de apt sin eliminarlo?

En un archivo .sources de deb822, añada Enabled: no a la estrofa. En un archivo .list de una sola línea, coloque un # al principio de la línea. En ambos casos, ejecute sudo apt update después y desaparecerá el bloque Err: de ese repositorio. Esta es la opción adecuada cuando un repositorio de terceros todavía no tiene paquetes para su versión de Ubuntu y su error 404 hace que apt update termine con un código distinto de cero.

¿Está desapareciendo el formato de una sola línea de sources.list?

Está obsoleto, pero no se ha eliminado. apt todavía lee archivos .list y seguirá haciéndolo durante mucho tiempo, por lo que su servidor no dejará de funcionar mañana. Las herramientas nuevas escriben deb822: Ubuntu 24.04 y versiones posteriores mantienen los repositorios de la distribución en /etc/apt/sources.list.d/ubuntu.sources, y add-apt-repository escribe archivos .sources. En apt 3.0 y versiones posteriores, sudo apt modernize-sources convierte los archivos que aún conserva.

#apt#ubuntu#deb822#package-management#troubleshooting