Corriger les doublons de sources apt et fichiers .sources
L’erreur « Target is configured multiple times » vient souvent d’un fichier .list et d’un .sources. Gardez-en un seul pour retrouver un apt update propre.
Ce que signifie l’erreur des 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 (outil avancé de gestion des paquets) 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 menacé. Supprimez l’une des deux déclarations pour faire disparaître le message.
Voici la ligne que les utilisateurs copient dans un champ 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:1Lisez-la depuis la fin. Deux fichiers, chacun avec 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 à nouveau dans docker.sources à la ligne 1.
Avec apt 3.0 et les versions ultérieures, c’est-à-dire Ubuntu 25.04 et les versions ultérieures ainsi que Debian 13, le même message commence par Warning: au lieu de W:. Le texte qui suit le préfixe est identique.
Cet avertissement correspond au cas sans gravité. Apt fusionne les deux déclarations et la mise à jour s’exécute toujours, car les deux déclarations décrivent la même archive avec la même clé. Le cas bloquant arrête 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 il ne choisit pas entre deux valeurs Signed-By, car un mauvais choix entraînerait la vérification des signatures des paquets avec une clé que le propriétaire de l’archive n’a pas utilisée pour les signer. Apt ne lit donc aucune source. apt update et apt install échouent tous les deux avec ces mêmes deux lignes tant que vous n’avez pas modifié les fichiers manuellement.
Origine du doublon
Les deux formats sont stockés dans des fichiers distincts, avec des extensions différentes. Rien sur le disque n’empêche donc leur coexistence. apt ne détecte le chevauchement que tardivement, lorsqu’il développe chaque fichier de sources en liste de cibles d’index à télécharger. Jusque-là, docker.list et docker.sources sont deux fichiers sans lien.
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.listavec une lignetee. - Le paquet fourni par l’éditeur installe ensuite
/etc/apt/sources.list.d/vendor.sources. add-apt-repositorysur Ubuntu 24.04 et les versions ultérieures écrit des fichiers.sourcesau format deb822. Ainsi, un PPA (archive personnelle de paquets) que vous aviez ajouté manuellement sous la forme de.listréapparaît sous la forme de.sources.- Une mise à niveau de la distribution convertit les sources de la distribution elle-même au format deb822 et laisse votre fichier
.listcréé manuellement à côté des autres.
Chaque scénario est cohérent pris isolément. Le doublon apparaît lorsque deux d’entre eux 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 chacun de ses éléments est défini par sa position.
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stableL’ordre est fixe : le type (deb pour les paquets binaires, deb-src pour les paquets source), puis les options entre crochets, l’URI (identificateur uniforme de ressource) de l’archive, la suite, puis un ou plusieurs composants. Comme le sens dépend de la position, un espace mal placé modifie l’interprétation d’apt.
deb822 exprime la même information sous la forme d’une stanza composée 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.ascMême dépôt, même clé, sans rien ajouter. 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 séparée par des espaces. Dans une stanza, Suites: noble noble-updates noble-backports remplace trois lignes deb distinctes. Une ligne vide termine une stanza, de sorte qu’un seul fichier .sources peut contenir plusieurs dépôts. deb822 prend également en charge des paramètres que le format sur une seule ligne gère mal : Enabled: no pour désactiver un dépôt, Trusted, Check-Valid-Until, ainsi qu’une clé intégrée collé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: l’ancien fichier unique. 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: entrées sur une ligne, généralement un fichier par dépôt./etc/apt/sources.list.d/*.sources: blocs deb822. Ubuntu 24.04 et les versions ultérieures y stockent les dépôts de la distribution, dansubuntu.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 se terminant par .list ou .sources. Un nom de fichier peut contenir des lettres, des chiffres, un underscore, un tiret et un point. Un fichier avec une autre extension est ignoré avec un avertissement, ce qui est important pour la correction décrite ci-dessous.
Repérer 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.sourcesDeux fichiers portant le même nom de base et des extensions différentes constituent le cas le plus courant, mais ne vous fiez pas aux noms. Lisez leur contenu, car un doublon peut se trouver dans un fichier nommé n’importe comment :
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.ascLa 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 la suite noble : le même dépôt y est donc déclaré deux fois. Leurs chemins Signed-By diffèrent également, ce qui provoque 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à sur le conflit, il ne peut pas non plus répertorier vos sources. apt-cache policy affiche donc la même erreur au lieu de la réponse recherchée.
Corrigez le problème : conservez le fichier deb822 et supprimez l’ancien
Conservez le fichier .sources. C’est le format que les outils apt écrivent désormais, et c’est 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.ascSeul /etc/apt/keyrings/docker.asc est présent. Le fichier deb822 contient donc la bonne configuration, 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, copiez d’abord le chemin fonctionnel dans ce fichier, puis supprimez l’autre.
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 updateLe renommer en docker.list.bak et le laisser sur place fonctionne également, car apt ignore les extensions inconnues. Dans ce cas, chaque exécution d’apt affiche toutefois ceci :
N: Ignoring file 'docker.list.bak' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extensionDéplacer le fichier ailleurs supprime cet avertissement de l’écran tout en conservant la sauvegarde. Un fichier apt update sain ressemble ensuite à ceci, sans ligne qui 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.comSi la documentation d’un fournisseur suppose encore l’ancien fichier à une ligne, vous pouvez conserver celui-ci et supprimer le fichier .sources à la place. Une seule règle s’applique dans les deux cas : 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 variante correspond à 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 absent 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 ignore 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.ascUne 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 ne contient pas une clé, ce qui 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 variante apparaît après une mise à niveau de la distribution :
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.Le 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 statut 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 passe inaperçu. Les scripts d’installation des fournisseurs produisent ces deux variantes. C’est pourquoi la plupart des erreurs d’installation de Tailscale sur Ubuntu sont finalement dues à un trousseau de clés que le script n’a jamais écrit ou à un nom de code de version que l’archive ne propose pas.
Désactiver une source sans perturber les autres
Pour un fichier deb822, ajoutez un champ à la stanza, 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: noLe manuel apt recommande cette méthode plutôt que de commenter chaque ligne de la stanza. Elle est aussi plus facile à annuler. Pour un fichier à une seule ligne, placez un # au début de la ligne. Dans les deux formats, déplacer le fichier hors de /etc/apt/sources.list.d/ fonctionne également. C’est l’option à choisir 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 repasse à 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 dépôts de la distribution. apt n’a alors plus 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.gpgEnregistrez ce contenu 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 fournissent un convertisseur pour cette opération. Debian 13 l’intègre, tout comme Ubuntu 25.04 et toutes les versions suivantes, dont 26.04. Vérifiez la version, puis exécutez la commande :
apt --version
sudo apt modernize-sourcesCette 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 listez vous-même le répertoire et exécutez apt update avant de faire confiance au résultat. Ubuntu 24.04 fournit une version plus ancienne d’apt, qui ne possède pas cette sous-commande ; la commande répond 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 est néanmoins recommandée sur un serveur que vous prévoyez de conserver, car tous les outils qui écrivent des sources utilisent désormais le format deb822. Un serveur qui ne contient que des fichiers .sources ne peut donc plus générer ce type de doublon.
Nettoyer les sources tierces sur un serveur
Les dépôts tiers sont l’élément d’un serveur qui vieillit le plus mal. Chacun repose sur la promesse d’un fournisseur 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.
- Ajoutez un dépôt tiers uniquement lorsque le paquet de la distribution ne suffit pas. Une pile LAMP classique sur Ubuntu 24.04 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 non privilégié_apteffectue 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-Byvers ce fichier précis dans chaque stanza. Une clé placée dans/etc/apt/trusted.gpgou/etc/apt/trusted.gpg.d/est approuvée pour tous les dépôts du serveur. Une clé de fournisseur ajoutée il y a plusieurs années peut donc 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 trousseau de clés global se manifeste lors de 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é dans son propre fichier, puis faites pointer la stanza vers celui-ci :
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.gpgAjoutez Signed-By: /etc/apt/keyrings/docker.gpg à la stanza du dépôt, puis exécutez sudo apt update. L’avertissement disparaît lorsqu’aucun dépôt ne dépend plus de l’ancien trousseau de clés. 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 pour 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 celui des dix premières minutes sur un nouveau VPS, lorsque les seules entrées du serveur sont celles fournies par Ubuntu.
FAQ
Pourquoi apt indique-t-il qu’une cible est configurée plusieurs fois ?
Parce que deux fichiers de /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 leurs numéros de ligne, par exemple docker.list:1 et docker.sources:1. apt les fusionne et poursuit son exécution : la mise à jour fonctionne donc malgré tout. Il est toutefois 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, ce qui bloque également apt install.
Dois-je conserver le fichier .list ou le fichier .sources ?
Conservez le fichier .sources. deb822 est le format utilisé par add-apt-repository 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, car un nom .bak résiduel amène apt à afficher un avertissement concernant un fichier ignoré à chaque exécution.
Comment désactiver un dépôt apt sans le supprimer ?
Dans un fichier deb822 .sources, ajoutez Enabled: no à la strophe. Dans un fichier .list sur une seule 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. C’est la bonne méthode lorsqu’un dépôt tiers ne propose 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 seule ligne va-t-il disparaître ?
Il est obsolète, mais pas supprimé. apt continue de lire les fichiers .list et le fera encore 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 avez encore.