SSD Nodes Learn 🎉 VPS dès $5.50/mois
Guides Matt ConnorPar Matt Connor

Corriger les sources apt en double sur Ubuntu

Le message « Target Packages est configuré plusieurs fois » vient souvent d’un fichier .list et d’un fichier .sources. Gardez-en un seul.

Ce que signifie l’erreur de sources apt en double

Des sources apt en double signifient qu’un dépôt est déclaré deux fois, dans deux fichiers différents, et qu’APT (advanced package tool) a trouvé les deux copies. Sur Ubuntu 24.04 et les versions ultérieures, cela se produit presque toujours parce qu’un script d’installation tiers a créé un ancien fichier .list au format une ligne, alors qu’un fichier .sources au format deb822 pour le même dépôt se trouvait déjà sur le disque. Rien n’est corrompu et aucun paquet n’est en danger. Supprimez l’une des deux déclarations pour faire disparaître le message.

Voici la ligne que les utilisateurs collent dans un moteur de recherche :

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

Lisez-la en partant de la fin. Deux fichiers, avec chacun un numéro de ligne, déclarent la même chose. Target Packages est l’index qu’apt télécharge pour connaître les paquets proposés par un dépôt, et stable/binary-amd64/Packages indique le composant (stable) et l’architecture (amd64) couverts par cet index. apt vous indique donc que l’index amd64 du composant stable est configuré dans docker.list à la ligne 1, puis une nouvelle fois dans docker.sources à la ligne 1.

Avec apt 3.0 et les versions ultérieures, c’est-à-dire à partir d’Ubuntu 25.04 et avec Debian 13, le même message commence par Warning: au lieu de W:. Le texte qui suit ce préfixe est identique.

Cet avertissement correspond au cas simple. apt fusionne les deux déclarations et la mise à jour s’exécute quand même, car les deux déclarations décrivent la même archive avec la même clé. Le cas grave bloque toute l’opération :

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 refuse de continuer ici, car les deux déclarations indiquent des clés de signature différentes pour une même archive. Il fusionne deux déclarations identiques, mais ne choisit pas entre deux valeurs Signed-By, car choisir la mauvaise valeur reviendrait à vérifier les signatures des paquets avec une clé que le propriétaire de l’archive n’a jamais utilisée pour signer. apt ne lit donc aucune source. apt update et apt install échouent tous deux avec ces mêmes deux lignes jusqu’à ce que vous modifiiez les fichiers manuellement.

Comment le doublon apparaît

Les deux formats se trouvent dans des fichiers distincts avec des extensions différentes. Rien sur le disque n’empêche donc leur coexistence. apt détecte le chevauchement tardivement, lorsqu’il développe chaque fichier de sources en liste des cibles d’index qu’il prévoit de télécharger. Jusque-là, docker.list et docker.sources sont deux fichiers sans rapport.

Quatre événements courants produisent cette paire :

  • Un script d’installation d’un éditeur, ou une commande copiée depuis un ancien article, écrit /etc/apt/sources.list.d/vendor.list avec une ligne tee.
  • Le paquet de l’éditeur fournit ensuite /etc/apt/sources.list.d/vendor.sources et l’installe automatiquement.
  • add-apt-repository sur Ubuntu 24.04 et les versions ultérieures écrit des fichiers .sources au format deb822. Ainsi, un PPA (personal package archive) que vous aviez ajouté manuellement sous forme de .list réapparaît sous forme de .sources.
  • Une mise à niveau de la distribution convertit ses propres sources au format deb822 et laisse votre fichier .list écrit manuellement à côté.

Chaque scénario est cohérent pris séparément. Le doublon apparaît lorsque deux de ces scénarios se produisent sur le même serveur, souvent à plusieurs mois d’intervalle.

Les deux formats, côte à côte

L’ancien format utilise une ligne par dépôt, et chaque élément est défini par sa position.

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

L’ordre est fixe : le type (deb pour les paquets binaires, deb-src pour les paquets source), puis les options entre crochets, l’URI (identifiant uniforme de ressource) de l’archive, la suite, puis un ou plusieurs composants. Comme la signification dépend de la position, un espace mal placé modifie l’interprétation d’apt.

deb822 exprime la même configuration sous la forme d’un bloc de champs nommés. Le nom vient de la RFC 822, le format des en-têtes de courrier que Debian utilise déjà pour les fichiers de contrôle des paquets.

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

Même dépôt, même clé, rien n’est ajouté. La correspondance est directe : deb devient Types, l’adresse de l’archive devient URIs, la suite devient Suites, les composants deviennent Components, et chaque option entre crochets devient son propre champ ; ainsi, signed-by= devient Signed-By: et arch= devient Architectures:.

Chaque nom de champ est au pluriel, car chaque champ accepte une liste d’éléments séparés par des espaces. Suites: noble noble-updates noble-backports dans un bloc remplace trois lignes deb distinctes. Une ligne vide termine un bloc, donc un seul fichier .sources peut contenir plusieurs dépôts. deb822 prend également en charge des paramètres que le format sur une ligne gère mal : Enabled: no pour désactiver un dépôt, Trusted, Check-Valid-Until, ainsi qu’une clé intégrée directement dans Signed-By, avec chaque ligne indentée d’une espace et les lignes vides représentées par un point unique.

Emplacement de chaque fichier

  • /etc/apt/sources.list : le fichier unique d’origine. Sur Ubuntu 24.04 et les versions ultérieures, il est généralement vide ou contient uniquement un commentaire indiquant le nouvel emplacement.
  • /etc/apt/sources.list.d/*.list : des entrées d’une ligne, normalement un fichier par dépôt.
  • /etc/apt/sources.list.d/*.sources : des blocs deb822. Ubuntu 24.04 et les versions ultérieures y conservent les dépôts propres à la distribution, dans ubuntu.sources.
  • /etc/apt/keyrings/ : emplacement des clés que vous ajoutez. /usr/share/keyrings/ contient les clés fournies par un paquet.

apt ne lit que les fichiers dont le nom se termine par .list ou .sources. Un nom de fichier peut contenir des lettres, des chiffres, un underscore, un tiret et un point. Un fichier ayant une autre extension est ignoré avec un message d’information, ce qui est important pour le correctif ci-dessous.

Repérez la paire en double

Commencez par afficher le contenu du répertoire :

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

Deux fichiers portant le même nom de base et des extensions différentes constituent généralement la paire en double, mais ne vous fiez pas aux noms. Lisez leur contenu, car un doublon peut se trouver dans un fichier portant n’importe quel nom :

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

La paire correspond aux deux entrées qui utilisent le même hôte et la même suite. Elles pointent toutes les deux vers https://download.docker.com/linux/ubuntu et utilisent la suite noble : il s’agit donc du même dépôt déclaré deux fois. Leurs chemins Signed-By diffèrent également, ce qui produit l’erreur Conflicting values affichée précédemment.

Utilisez grep plutôt qu’une commande apt pour cette étape. Lorsque apt s’arrête déjà à cause du conflit, il ne peut pas non plus afficher vos sources. apt-cache policy affiche donc la même erreur au lieu de la réponse attendue.

Corriger le problème : conserver le fichier deb822 et supprimer l’ancien

Conservez le fichier .sources. C’est le format que les outils apt écrivent désormais et celui vers lequel Debian et Ubuntu évoluent. Avant de supprimer quoi que ce soit, vérifiez lequel des deux chemins de clé existe sur le disque :

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

Seul /etc/apt/keyrings/docker.asc est présent. Le fichier deb822 contient donc la configuration correcte, tandis que le fichier .list pointe vers une clé qui a été supprimée. Si le fichier que vous prévoyez de conserver référence la clé manquante, remplacez d’abord ce chemin par celui qui fonctionne, puis supprimez l’autre fichier.

Déplacez l’ancien fichier hors du répertoire au lieu de le supprimer directement :

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

Le renommer en docker.list.bak tout en le laissant sur place fonctionne également, car apt ignore les extensions inconnues. Cependant, chaque exécution d’apt affiche alors ceci :

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

Déplacer le fichier ailleurs supprime cet avertissement tout en conservant la sauvegarde. Un fichier apt update sain ressemble ensuite à ceci, sans ligne faisant référence à deux fichiers :

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.

Vérifiez maintenant que le dépôt fonctionne toujours après la modification :

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

Si la documentation du fournisseur suppose encore la présence du fichier sur une seule ligne, vous pouvez conserver celui-ci et supprimer le fichier .sources à la place. Une seule règle permet de trancher : un seul fichier peut déclarer une archive et une suite données.

Pourquoi une source tierce défectueuse bloque apt update

L’échec voisin semble différent, mais il a la même cause : une source tierce qu’apt ne peut pas utiliser. La première version provient d’une clé manquante :

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.

Le champ Signed-By est manquant ou pointe vers un fichier qui ne contient pas une clé utilisable. apt ne peut donc pas vérifier la signature du fichier InRelease de l’archive. Il écarte alors tout le dépôt au lieu de faire confiance à des listes de paquets qu’il ne peut pas vérifier. Examinez directement le fichier de clé :

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

Une clé valide affiche une ligne pub avec un identifiant de clé et une ligne uid indiquant le fournisseur. gpg: no valid OpenPGP data found. signifie que le fichier n’est pas une clé. Cela indique généralement que le téléchargement a enregistré une page d’erreur, parce que l’URL de la clé a changé. Téléchargez de nouveau la clé, vérifiez le fichier, puis exécutez apt update.

La deuxième version apparaît après une mise à niveau de la release :

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.

La PPA n’a rien publié pour cette suite. Le chemin n’existe donc pas sur le serveur et la requête renvoie une erreur 404. Vos autres dépôts continuent de se mettre à jour et les paquets déjà installés ne sont pas modifiés. L’exécution se termine toutefois avec un code différent de zéro. Tout script qui vérifie le code de sortie de apt update signale donc désormais un échec à chaque exécution. C’est pourquoi il faut supprimer toute source inactive sur une machine où les mises à niveau de sécurité automatiques sont configurées : c’est dans le bruit quotidien qu’un véritable échec peut passer inaperçu.

Désactiver une source sans perturber les autres

Dans un fichier deb822, ajoutez un champ à la section, puis enregistrez le fichier :

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

Le manuel d’apt recommande cette méthode plutôt que de commenter chaque ligne de la section. Elle est aussi plus facile à annuler. Pour un fichier contenant une seule ligne, placez un # au début de la ligne. Dans les deux formats, vous pouvez aussi déplacer le fichier hors de /etc/apt/sources.list.d/. Choisissez cette option lorsque le dépôt a été supprimé définitivement.

Exécutez de nouveau sudo apt update. Le bloc Err: de ce dépôt disparaît et le code de sortie revient à 0. Vous pouvez le vérifier avec echo $? à la ligne suivante.

Ne corrigez jamais une source défectueuse avec sudo rm /etc/apt/sources.list.d/*. Sur Ubuntu 24.04 et les versions ultérieures, cette commande supprime ubuntu.sources, qui contient les propres dépôts de la distribution. apt ne dispose alors plus d’aucune liste de paquets et signale E: Unable to locate package curl pour des logiciels qui existent pourtant. Si vous avez déjà exécuté cette commande, recréez le fichier :

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

Enregistrez-le sous /etc/apt/sources.list.d/ubuntu.sources, en remplaçant noble par le nom de votre propre version, indiqué par lsb_release -cs, puis exécutez sudo apt update.

Convertir les fichiers .list existants au format deb822

Depuis août 2026, apt 3.0 et les versions ultérieures incluent un convertisseur pour cette opération. Debian 13 l’inclut, tout comme Ubuntu 25.04 et toutes les versions suivantes, notamment 26.04. Vérifiez la version, puis exécutez la commande :

apt --version
sudo apt modernize-sources

La commande réécrit les fichiers à une ligne situés sous /etc/apt/sources.list.d/ au format deb822, dans des fichiers .sources. Lisez sa sortie, puis affichez vous-même le contenu du répertoire et exécutez apt update avant de considérer le résultat comme fiable. Ubuntu 24.04 fournit une version plus ancienne d’apt, sans ce sous-commande ; la commande renvoie alors E: Invalid operation modernize-sources. Sur cette version, effectuez la conversion manuellement en utilisant la correspondance des champs ci-dessus.

La conversion est facultative pour le moment, car apt lit toujours les deux formats. Elle reste recommandée sur un serveur que vous prévoyez de conserver, puisque tous les outils qui écrivent les sources utilisent désormais le format deb822. Un système qui ne contient que des fichiers .sources ne peut alors plus accumuler ce type de doublon.

Nettoyez les sources tierces sur un serveur

Les dépôts tiers sont la partie d’un serveur qui vieillit le plus mal. Chacun repose sur la promesse d’un tiers de continuer à publier des paquets pour votre version d’Ubuntu, et une mise à niveau de version met toutes ces promesses à l’épreuve le même jour.

  • N’ajoutez un dépôt tiers que si le paquet de la distribution ne suffit pas. Une pile LAMP sur Ubuntu 24.04 classique n’en nécessite aucun : l’archive Ubuntu contient tous les paquets utilisés, avec des mises à jour de sécurité pendant toute la durée de vie de la version.
  • Conservez les clés dans /etc/apt/keyrings/, avec un fichier par fournisseur et le mode 644. L’utilisateur sans privilèges _apt effectue les téléchargements et doit pouvoir lire la clé. Un fichier de clé lisible uniquement par root provoque donc une erreur de permission à chaque récupération depuis ce dépôt.
  • Faites pointer Signed-By vers ce fichier précis dans chaque stanza. Une clé placée dans /etc/apt/trusted.gpg ou /etc/apt/trusted.gpg.d/ est approuvée pour tous les dépôts de la machine. Une clé de fournisseur ajoutée il y a plusieurs années peut ainsi valider des paquets provenant de n’importe où.
  • Avant une mise à niveau de version, lisez vos sources et vérifiez que chaque fournisseur publie déjà des paquets pour la suite vers laquelle vous migrez.

Une clé présente dans l’ancien keyring global se signale à chaque mise à jour :

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.

Exportez cette clé seule dans son propre fichier, puis faites pointer la stanza vers ce fichier :

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

Ajoutez Signed-By: /etc/apt/keyrings/docker.gpg à la stanza du dépôt, puis exécutez sudo apt update. L’avertissement disparaît dès qu’aucun dépôt ne dépend plus de l’ancien keyring. Vous pouvez alors supprimer l’entrée avec sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --delete-key 7EA0A9C3F273FCD8.

Une autre habitude évite la plupart des problèmes. do-release-upgrade désactive les sources tierces pendant la mise à niveau et les laisse désactivées ensuite. Les réactiver manuellement, une par une, est précisément ce qui crée des déclarations en double. Lisez le guide de mise à niveau d’Ubuntu 24.04 vers 26.04 avant de commencer et notez les dépôts dont vous avez encore besoin. Sur une machine que vous venez de créer, le meilleur moment pour corriger les sources est pendant les dix premières minutes sur un nouveau VPS, lorsque les seules entrées présentes sur la machine sont celles fournies par Ubuntu.

FAQ

Pourquoi apt indique-t-il qu’une cible est configurée plusieurs fois ?

Deux fichiers situés sous /etc/apt/sources.list.d/ déclarent le même dépôt, la même suite et le même composant. Le message indique les deux fichiers avec leur numéro de ligne, par exemple docker.list:1 et docker.sources:1. apt les fusionne et poursuit son exécution. La mise à jour fonctionne donc toujours. Il est néanmoins préférable de supprimer le doublon : dès que les deux fichiers indiquent des clés de signature différentes, apt s’arrête avec E: Conflicting values set for option Signed-By et refuse de lire la moindre source. Cela bloque également apt install.

Dois-je conserver le fichier .list ou le fichier .sources ?

Conservez le fichier .sources. Le format deb822 est celui que add-apt-repository écrit sur Ubuntu 24.04 et les versions ultérieures. Il contient un champ nommé par paramètre, au lieu de texte positionnel entre crochets, et correspond à l’évolution prévue par les distributions. Avant de supprimer le fichier .list, vérifiez que le chemin Signed-By indiqué dans le fichier .sources pointe vers une clé existante, avec ls -l /etc/apt/keyrings/. Déplacez l’ancien fichier hors de /etc/apt/sources.list.d/ au lieu de le renommer dans ce répertoire. Un nom .bak résiduel fait afficher par apt un avertissement concernant un fichier ignoré à chaque exécution.

Comment désactiver un dépôt apt sans le supprimer ?

Dans un fichier .sources au format deb822, ajoutez Enabled: no à la stanza. Dans un fichier .list sur une ligne, placez un # au début de la ligne. Dans les deux cas, exécutez ensuite sudo apt update. Le bloc Err: correspondant à ce dépôt disparaît alors. C’est la bonne méthode lorsqu’un dépôt tiers ne contient pas encore de paquets pour votre version d’Ubuntu et que son erreur 404 fait quitter apt update avec un code différent de zéro.

Le format sources.list sur une ligne va-t-il disparaître ?

Il est obsolète, mais il n’a pas été supprimé. apt lit toujours les fichiers .list et continuera à le faire pendant longtemps. Rien ne cessera donc de fonctionner demain sur votre serveur. Les nouveaux outils écrivent au format deb822 : Ubuntu 24.04 et les versions ultérieures conservent les dépôts de la distribution dans /etc/apt/sources.list.d/ubuntu.sources, et add-apt-repository écrit des fichiers .sources. Avec apt 3.0 et les versions ultérieures, sudo apt modernize-sources convertit les fichiers que vous utilisez encore.

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