SSD Nodes Learn 🎉 VPS vanaf $5.50/mnd
Gidsen Matt ConnorDoor Matt Connor · Bijgewerkt 2026-08-13

Foutmelding dubbele apt-bronnen oplossen

Krijgt u de melding dat een target meerdere keren is geconfigureerd tijdens apt update? Ontdek hoe u conflicterende .list en .sources bestanden verwijdert voor een schone update.

Wat de foutmelding over dubbele apt-bronnen betekent

Dubbele apt-bronnen betekenen dat een repository twee keer is gedeclareerd in twee verschillende bestanden, en dat APT (advanced package tool) beide kopieën heeft gevonden. Op Ubuntu 24.04 en nieuwer gebeurt dit bijna altijd omdat een installatiescript van derden een oud .list-bestand in de oude regelstijl heeft aangemaakt, terwijl er al een deb822 .sources-bestand voor dezelfde repository op de schijf stond. Er is niets beschadigd en er loopt geen enkel pakket gevaar. Verwijder een van de twee declaraties en de melding verdwijnt.

Dit is de regel die mensen in een zoekvenster plakken:

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

Lees deze vanaf het einde. Twee bestanden, elk met een regelnummer, declareren hetzelfde. Target Packages is de index die apt downloadt om te achterhalen welke pakketten een repository aanbiedt, en stable/binary-amd64/Packages benoemt de component (stable) en de architectuur (amd64) die die index beslaat. Apt vertelt u dus dat de amd64-index voor de stable-component is geconfigureerd in docker.list op regel 1, en nogmaals in docker.sources op regel 1.

Op apt 3.0 en nieuwer, wat betekent Ubuntu 25.04 en later en Debian 13, begint dezelfde melding met Warning: in plaats van W:. De tekst na het voorvoegsel is hetzelfde.

Die waarschuwing is het milde geval. apt voegt de twee declaraties samen en de update wordt nog steeds uitgevoerd, omdat beide hetzelfde archief met dezelfde sleutel beschrijven. Het ernstige geval blokkeert alles:

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 weigert hier actie te ondernemen omdat de twee declaraties verschillende ondertekeningssleutels voor één archief benoemen. Het voegt twee identieke declaraties samen, maar het zal niet kiezen tussen twee Signed-By-waarden, omdat het kiezen van de verkeerde waarde betekent dat pakket-handtekeningen worden gecontroleerd tegen een sleutel waarmee de eigenaar van het archief nooit heeft ondertekend. Dus apt leest helemaal geen bronnen meer. apt update en apt install falen beide met diezelfde twee regels totdat u de bestanden handmatig bewerkt.

Hoe de dubbele vermelding ontstaat

De twee formaten bevinden zich in afzonderlijke bestanden met verschillende extensies, waardoor niets op de schijf het naast elkaar bestaan ervan verhindert. apt merkt de overlap pas laat op, wanneer het elk bronbestand uitbreidt naar de lijst met indexdoelen die het wil ophalen. Tot dat moment zijn docker.list en docker.sources twee ongerelateerde bestanden.

Vier alledaagse gebeurtenissen veroorzaken dit paar:

  • Een installatiescript van een leverancier, of een commando gekopieerd uit een ouder bericht, schrijft /etc/apt/sources.list.d/vendor.list met een tee-regel.
  • Het eigen pakket van de leverancier levert later /etc/apt/sources.list.d/vendor.sources en installeert dit voor u.
  • add-apt-repository op Ubuntu 24.04 en nieuwer schrijft deb822 .sources-bestanden, waardoor een PPA (personal package archive) die u ooit handmatig als .list heeft toegevoegd, terugkeert als een .sources.
  • Een release-upgrade heeft de eigen bronnen van de distributie herschreven naar deb822 en uw handgeschreven .list-bestand ongewijzigd ernaast laten staan.

Elk pad is op zichzelf logisch. De dubbele vermelding ontstaat wanneer twee van deze gebeurtenissen op hetzelfde systeem plaatsvinden, vaak met maanden ertussen.

De twee formaten, naast elkaar

Het oude formaat bestaat uit één regel per repository, waarbij elk onderdeel positioneel is.

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

De volgorde staat vast: het type (deb voor binaire pakketten, deb-src voor broncodepakketten), gevolgd door opties tussen vierkante haken, daarna de URI (uniform resource identifier) van het archief, de suite, en tot slot een of meer componenten. Omdat de betekenis wordt bepaald door de positie, verandert een spatie op de verkeerde plek de manier waarop apt de regel leest.

deb822 beschrijft hetzelfde met een stanza van benoemde velden. De naam is afgeleid van RFC 822, de stijl voor e-mailheaders die Debian al gebruikt voor pakketcontrolebestanden.

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

Dezelfde repository, dezelfde sleutel, niets toegevoegd. De toewijzing is direct: deb wordt Types, het archiefadres wordt URIs, de suite wordt Suites, de componenten worden Components, en elke optie tussen haken wordt een eigen veld; zo wordt signed-by= tot Signed-By: en arch= tot Architectures:.

Elke veldnaam is meervoudig omdat elk veld een door spaties gescheiden lijst accepteert. Suites: noble noble-updates noble-backports in één stanza vervangt drie afzonderlijke deb-regels. Een lege regel beëindigt een stanza, waardoor één .sources-bestand meerdere repositories kan bevatten. deb822 ondersteunt ook instellingen die in het oude formaat lastig zijn: Enabled: no om een repository uit te schakelen, Trusted, Check-Valid-Until, en een inline-sleutel die direct in Signed-By wordt geplakt, waarbij elke regel één spatie is ingesprongen en lege regels worden geschreven als een enkele punt.

Locatie van bestanden

  • /etc/apt/sources.list: het oorspronkelijke enkele bestand. Op Ubuntu 24.04 en nieuwer is dit meestal leeg of bevat het enkel een opmerking die naar de nieuwe locatie verwijst.
  • /etc/apt/sources.list.d/*.list: regels met één item, normaal gesproken één bestand per repository.
  • /etc/apt/sources.list.d/*.sources: deb822-stanzas. Ubuntu 24.04 en nieuwer bewaren de eigen repositories van de distributie hier, in ubuntu.sources.
  • /etc/apt/keyrings/: de plek waar door u toegevoegde sleutels thuishoren. /usr/share/keyrings/ bevat sleutels die afkomstig zijn van een pakket.

apt leest alleen bestanden die eindigen op .list of .sources, en een bestandsnaam mag letters, cijfers, underscores, koppeltekens en punten bevatten. Een bestand met een andere extensie wordt overgeslagen met een melding; dit is van belang voor de onderstaande oplossing.

Het dubbele paar vinden

Begin met de directory-listing:

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

Twee bestanden met dezelfde stam en verschillende extensies vormen het gebruikelijke paar, maar vertrouw niet op de namen. Lees de inhoud, want een duplicaat kan zich in een bestand met een willekeurige naam bevinden:

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

Het paar bestaat uit de twee items met dezelfde host en dezelfde suite. Beide verwijzen naar https://download.docker.com/linux/ubuntu en de suite noble, dus het is dezelfde repository die tweemaal is geschreven. Hun Signed-By-paden verschillen ook, wat de eerder getoonde Conflicting values-fout veroorzaakt.

Gebruik grep in plaats van een apt-commando voor deze stap. Wanneer apt al stopt vanwege het conflict, kan het uw bronnen ook niet weergeven, waardoor apt-cache policy dezelfde foutmelding geeft in plaats van het gewenste antwoord.

Herstel: behoud het deb822-bestand, verwijder het legacy-bestand

Behoud het .sources-bestand. Dit is het formaat waarin apt-tools tegenwoordig schrijven en het is de standaard waar zowel Debian als Ubuntu naartoe bewegen. Controleer voordat u iets verwijdert welke van de twee sleutelpaden op de schijf aanwezig is:

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

Alleen /etc/apt/keyrings/docker.asc is aanwezig, dus het deb822-bestand bevat de juiste informatie en het .list-bestand verwijst naar een sleutel die is verwijderd. Als blijkt dat het bestand dat u wilt behouden naar de ontbrekende sleutel verwijst, kopieer dan eerst het werkende pad naar dat bestand en verwijder vervolgens het andere bestand.

Verplaats het legacy-bestand uit de map in plaats van het direct te verwijderen:

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

Het hernoemen naar docker.list.bak en het laten staan werkt ook, omdat apt onbekende extensies negeert, maar dan toont elke apt-run deze melding:

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

Door het bestand ergens anders heen te verplaatsen, blijft die melding achterwege en behoudt u toch de back-up. Een gezonde apt update ziet er daarna als volgt uit, zonder regel die naar twee bestanden verwijst:

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.

Bevestig nu dat de repository de wijziging heeft overleefd:

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

Als de documentatie van een leverancier nog steeds uitgaat van het bestand met één regel, kunt u dat bestand behouden en in plaats daarvan het .sources-bestand verwijderen. Eén regel is hierbij leidend: exact één bestand mag een specifiek archief en suite declareren.

Waarom één defecte externe bron apt update blokkeert

Het gerelateerde probleem ziet er anders uit, maar heeft dezelfde oorzaak: een externe bron die apt niet kan gebruiken. De eerste versie betreft een ontbrekende sleutel:

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.

Het Signed-By-veld ontbreekt, of het verwijst naar een bestand dat geen bruikbare sleutel is. Hierdoor kan apt de handtekening op het InRelease-bestand van het archief niet verifiëren. Het systeem verwerpt vervolgens de volledige repository in plaats van pakketlijsten te vertrouwen die het niet kan controleren. Inspecteer het sleutelbestand zelf:

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

Een werkende sleutel toont een pub-regel met een sleutel-ID en een uid-regel met de naam van de leverancier. gpg: no valid OpenPGP data found. betekent dat het bestand helemaal geen sleutel is. Dit duidt er meestal op dat de download een foutpagina heeft opgeslagen omdat de URL van de sleutel is gewijzigd. Haal de sleutel opnieuw op, controleer het bestand en voer daarna apt update uit.

De tweede versie treedt op na een release-upgrade:

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.

De PPA heeft geen publicaties voor die suite, waardoor het pad niet bestaat op de server en het verzoek een 404-foutmelding geeft. Uw overige repositories worden nog steeds bijgewerkt en de pakketten die u al heeft, blijven ongewijzigd. De uitvoering eindigt echter met een non-zero status, waardoor elk script dat de exit-status van apt update controleert, bij elke uitvoering een fout rapporteert. Daarom is het zinvol om een defecte bron te verwijderen op een systeem met automatische beveiligingsupdates geconfigureerd: in de dagelijkse ruis kunnen echte fouten verborgen blijven.

Eén bron uitschakelen zonder de rest te verbreken

Voeg voor een deb822-bestand één veld toe aan de stanza en sla het op:

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

De apt-handleiding beveelt dit aan boven het uitcommentariëren van elke regel in de stanza, en het is eenvoudiger ongedaan te maken. Plaats voor een bestand met één regel een # aan het begin van de regel. Voor beide formaten werkt het verplaatsen van het bestand uit /etc/apt/sources.list.d/ ook; dit is de optie die u kiest wanneer de repository definitief is verwijderd.

Voer sudo apt update opnieuw uit. Het Err:-blok voor die repository verdwijnt en de exit-status keert terug naar 0, wat u op de volgende regel kunt controleren met echo $?.

Herstel een defecte bron nooit met sudo rm /etc/apt/sources.list.d/*. Op Ubuntu 24.04 en nieuwer verwijdert dit ubuntu.sources, dat de eigen repositories van de distributie bevat, waardoor apt geen pakketlijsten meer heeft en E: Unable to locate package curl rapporteert voor software die overduidelijk bestaat. Als u dit al heeft uitgevoerd, schrijf het bestand dan terug:

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

Sla dit op als /etc/apt/sources.list.d/ubuntu.sources, waarbij noble is vervangen door uw eigen release-naam uit lsb_release -cs, en voer vervolgens sudo apt update uit.

Converteren van legacy .list-bestanden naar deb822

Vanaf augustus 2026 bevat apt 3.0 en nieuwer een converter hiervoor. Debian 13 beschikt hierover, evenals Ubuntu 25.04 en elke release daarna, inclusief 26.04. Controleer de versie en voer het commando vervolgens uit:

apt --version
sudo apt modernize-sources

Dit herschrijft de bestanden met één regel onder /etc/apt/sources.list.d/ naar deb822 .sources-bestanden. Lees de uitvoer, controleer daarna zelf de map en voer apt update uit voordat u het resultaat vertrouwt. Ubuntu 24.04 bevat een oudere versie van apt zonder dit subcommando; daar geeft het commando de melding E: Invalid operation modernize-sources. Converteer op die release handmatig met behulp van de bovenstaande veldtoewijzing.

Converteren is momenteel optioneel, omdat apt beide formaten nog steeds leest. Het is de moeite waard op een server die u wilt behouden, aangezien elke tool die bronbestanden schrijft dit nu in deb822-formaat doet. Een systeem met alleen .sources-bestanden voorkomt dat dit type duplicaten ontstaat.

Houd externe bronnen op een server overzichtelijk

Externe repositories zijn het onderdeel van een server dat het snelst veroudert. Elke repository is een belofte van een derde partij om pakketten te blijven publiceren voor uw Ubuntu-release, en een release-upgrade stelt al die beloften op dezelfde middag op de proef.

  • Voeg alleen een externe repository toe als het distributiepakket niet voldoet. Een standaard LAMP stack op Ubuntu 24.04 heeft er geen nodig: het Ubuntu-archief bevat elk pakket dat wordt gebruikt, inclusief beveiligingsupdates voor de gehele levensduur van de release.
  • Bewaar sleutels in /etc/apt/keyrings/, één bestand per leverancier, met modus 644. De ongeprivilegieerde gebruiker _apt voert het downloaden uit en moet de sleutel kunnen lezen; een sleutelbestand dat alleen leesbaar is voor root veroorzaakt daarom een toegangs-fout bij elke fetch van die repository.
  • Verwijs in elke stanza met Signed-By naar dat specifieke bestand. Een sleutel in /etc/apt/trusted.gpg of /etc/apt/trusted.gpg.d/ wordt vertrouwd voor elke repository op de server, wat betekent dat een jaren geleden toegevoegde leverancierssleutel pakketten van overal kan valideren.
  • Controleer vóór een release-upgrade uw bronnen en verifieer of elke leverancier al publiceert voor de suite waarnaar u overstapt.

Een sleutel in de oude globale keyring kondigt zichzelf aan bij elke update:

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.

Exporteer die specifieke sleutel naar een eigen bestand en verwijs de stanza daarnaar:

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

Voeg Signed-By: /etc/apt/keyrings/docker.gpg toe aan de stanza van de repository en voer sudo apt update uit. De waarschuwing stopt zodra geen enkele repository meer afhankelijk is van de oude keyring, waarna u het item kunt verwijderen met sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --delete-key 7EA0A9C3F273FCD8.

Eén extra gewoonte bespaart de meeste problemen. do-release-upgrade schakelt externe bronnen uit voor de upgrade en laat ze daarna uitgeschakeld; het handmatig één voor één weer inschakelen is precies waar dubbele declaraties ontstaan. Lees de Ubuntu 24.04 naar 26.04 upgrade handleiding voordat u begint en noteer welke repositories u nog nodig heeft. Op een machine die u net heeft opgezet, is het goedkoopste moment om bronnen correct in te stellen tijdens de eerste tien minuten op een nieuwe VPS, terwijl de enige items op de server de door Ubuntu meegeleverde bronnen zijn.

FAQ

Waarom meldt apt dat een target meerdere keren is geconfigureerd?

Omdat twee bestanden onder /etc/apt/sources.list.d/ dezelfde repository, suite en component declareren. De melding noemt beide bestanden met regelnummers, zoals docker.list:1 en docker.sources:1. apt voegt ze samen en gaat door, dus de update zelf werkt nog steeds. Het is echter verstandig de dubbele vermelding te verwijderen: zodra de twee bestanden verschillende ondertekeningssleutels benoemen, stopt apt met E: Conflicting values set for option Signed-By en weigert het om welke bron dan ook te lezen, wat ook apt install blokkeert.

Moet ik het .list bestand of het .sources bestand behouden?

Behoud het .sources bestand. deb822 is wat add-apt-repository schrijft op Ubuntu 24.04 en nieuwer; het bevat één benoemd veld per instelling in plaats van positionele tekst tussen vierkante haken, en dit is de standaard waar distributies naartoe bewegen. Voordat u het .list bestand verwijdert, dient u te bevestigen dat het Signed-By pad in het .sources bestand verwijst naar een bestaande sleutel, met ls -l /etc/apt/keyrings/. Verplaats het oude bestand uit /etc/apt/sources.list.d/ in plaats van het binnen de map te hernoemen, omdat een achtergebleven .bak naam ervoor zorgt dat apt bij elke uitvoering een melding geeft over een genegeerd bestand.

Hoe schakel ik een apt repository uit zonder deze te verwijderen?

Voeg in een deb822 .sources bestand Enabled: no toe aan de stanza. Plaats in een .list bestand van één regel een # aan het begin van de regel. Voer in beide gevallen daarna sudo apt update uit, waarna het Err: blok voor die repository verdwijnt. Dit is de juiste actie wanneer een externe repository nog geen pakketten heeft voor uw Ubuntu-release en de 404-fout ervoor zorgt dat apt update met een foutcode afsluit.

Gaat het sources.list formaat van één regel verdwijnen?

Het is verouderd, niet verwijderd. apt leest nog steeds .list bestanden en zal dat nog lange tijd blijven doen, dus er gaat morgen niets kapot op uw server. Nieuwe tools schrijven deb822: Ubuntu 24.04 en nieuwer bewaren de distributie-repositories in /etc/apt/sources.list.d/ubuntu.sources, en add-apt-repository schrijft .sources bestanden. Op apt 3.0 en nieuwer converteert sudo apt modernize-sources de bestanden die u nog heeft.

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