SSD Nodes Learn Hosting plans →
Mga Gabay Matt ConnorNi Matt Connor · Na-update 2026-08-30

Ayusin ang duplicate apt sources at .sources files

Lumilitaw ang “configured multiple times” sa apt update? Hanapin ang magkaparehong .list at deb822 .sources file, panatilihin ang isa, at linisin ang update.

Ano ang ibig sabihin ng duplicate apt sources error

Ibig sabihin ng duplicate apt sources ay dalawang beses dineklara ang isang repository, sa dalawang magkaibang file, at nakita ng APT (advanced package tool) ang dalawang kopya. Sa Ubuntu 24.04 at mas bago, halos palaging nangyayari ito dahil nagsulat ang isang third-party install script ng lumang one-line .list file kahit mayroon nang deb822 .sources file para sa parehong repository. Walang nasirang file at walang package na nasa panganib. Burahin ang isa sa dalawang declaration para mawala ang mensahe.

Ito ang line na karaniwang ipinapaste ng mga tao sa search box:

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

Basahin ito mula sa hulihan. Dalawang file, na may tig-isang line number, ang nagdedeklara ng parehong bagay. Ang Target Packages ay ang index na dina-download ng apt para malaman kung anong mga package ang iniaalok ng isang repository, at tinutukoy ng stable/binary-amd64/Packages ang component (stable) at architecture (amd64) na saklaw ng index na iyon. Kaya sinasabi ng apt na ang amd64 index para sa stable component ay naka-configure sa docker.list sa line 1, at muli sa docker.sources sa line 1.

Sa apt 3.0 at mas bago, na nangangahulugang Ubuntu 25.04 pataas at Debian 13, nagsisimula ang parehong mensahe sa Warning: sa halip na W:. Pareho ang text pagkatapos ng prefix.

Mild case lamang ang warning na iyon. Pinagsasama ng apt ang dalawang declaration at nagpapatuloy pa rin ang update dahil parehong naglalarawan ang mga ito ng parehong archive gamit ang parehong key. Pinatitigil naman ng hard case ang lahat:

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.

Tumanggi ang apt sa sitwasyong ito dahil magkaibang signing key ang tinutukoy ng dalawang declaration para sa isang archive. Pinagsasama nito ang dalawang magkaparehong declaration, pero hindi ito pipili sa pagitan ng dalawang value ng Signed-By. Kapag mali ang napili, mabe-verify ang package signatures laban sa key na hindi ginamit ng may-ari ng archive sa pag-sign. Kaya walang sources na binabasa ang apt. Parehong nagfa-fail ang apt update at apt install gamit ang dalawang linyang iyon hanggang manu-mano mong ma-edit ang mga file.

Paano nalilikha ang duplicate

Magkahiwalay na file ang dalawang format at magkaiba ang extension, kaya walang pumipigil na parehong magkaroon ng kopya sa disk. Nahuhuli nang napapansin ng apt ang overlap, kapag binubuksan nito ang bawat source file upang mabuo ang listahan ng mga index target na ida-download nito. Bago iyon, dalawang magkahiwalay at walang kaugnayang file ang docker.list at docker.sources.

Apat na karaniwang pangyayari ang lumilikha ng pares:

  • Ang install script ng vendor, o command na kinopya mula sa mas lumang post, ay nagsusulat ng /etc/apt/sources.list.d/vendor.list na may tee line.
  • Kalaunan, naglalabas ang sariling package ng vendor ng /etc/apt/sources.list.d/vendor.sources at awtomatiko itong ini-install para sa iyo.
  • Ang add-apt-repository sa Ubuntu 24.04 at mas bago ay nagsusulat ng mga deb822 .sources file, kaya ang PPA (personal package archive) na minsan mong manu-manong idinagdag bilang .list ay muling lumilitaw bilang .sources.
  • Isang release upgrade ang nag-rewrite sa sariling sources ng distribution sa deb822 at iniwan ang manu-mong isinulat mong .list file sa tabi ng mga iyon.

Makatuwiran ang bawat paraan kung mag-isa lamang itong nangyari. Nagkakaroon ng duplicate kapag dalawa sa mga ito ang nangyari sa iisang server, kadalasan makalipas ang ilang buwan.

Ang dalawang format, magkatabi

Ang lumang format ay tig-iisang linya para sa bawat repository, at positional ang bawat bahagi nito.

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

Nakatakda ang pagkakasunod-sunod: ang type (deb para sa binary packages, deb-src para sa source packages), pagkatapos ang mga option sa loob ng square brackets, kasunod ang URI (uniform resource identifier) ng archive, pagkatapos ang suite, at panghuli ang isa o higit pang component. Dahil nakabatay sa posisyon ang kahulugan, nagbabago ang binabasa ng apt kapag napunta sa maling lugar ang isang space.

Inilalahad ng deb822 ang parehong impormasyon bilang stanza ng mga field na may pangalan. Ang pangalan ay mula sa RFC 822, ang style ng mail header na ginagamit na ng Debian para sa package control files.

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

Parehong repository at parehong key; walang idinagdag. Direktang ang mapping: nagiging Types ang deb, nagiging URIs ang address ng archive, nagiging Suites ang suite, nagiging Components ang mga component, at nagiging sariling field ang bawat bracket option, kaya nagiging Signed-By: ang signed-by= at nagiging Architectures: ang arch=.

Plural ang bawat field name dahil space-separated list ang tinatanggap ng bawat field. Pinapalitan ng Suites: noble noble-updates noble-backports sa isang stanza ang tatlong magkakahiwalay na linya ng deb. Tinatapos ng blank line ang isang stanza, kaya maaaring maglaman ng ilang repository ang isang file na .sources. Nagdadala rin ang deb822 ng mga setting na hindi maayos na nahahawakan ng one-line format: Enabled: no para i-off ang isang repository, Trusted, Check-Valid-Until, at isang inline key na direktang inilalagay sa Signed-By, kung saan naka-indent ng isang space ang bawat linya at ang mga blank line ay isinusulat bilang isang tuldok.

Kung saan matatagpuan ang bawat file

  • /etc/apt/sources.list: ang orihinal na iisang file. Sa Ubuntu 24.04 at mas bago, karaniwan itong walang laman o naglalaman lamang ng comment na tumutukoy sa bagong lokasyon.
  • /etc/apt/sources.list.d/*.list: mga entry na tig-iisang linya, karaniwang isang file para sa bawat repository.
  • /etc/apt/sources.list.d/*.sources: mga deb822 stanza. Sa Ubuntu 24.04 at mas bago, narito ang sariling repository ng distribution, sa ubuntu.sources.
  • /etc/apt/keyrings/: dito dapat ilagay ang mga key na idinaragdag mo. Ang /usr/share/keyrings/ ay naglalaman ng mga key na nagmula sa isang package.

Binabasa lamang ng apt ang mga file na nagtatapos sa .list o .sources, at maaaring maglaman ang filename ng mga letra, digit, underscore, hyphen, at period. Nilalaktawan ang file na may ibang extension at nagpapakita ito ng notice. Mahalaga ito para sa pag-aayos sa ibaba.

Hanapin ang duplicate na pares

Magsimula sa 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

Karaniwang pares ang dalawang file na magkapareho ang stem pero magkaiba ang extension, ngunit huwag umasa sa mga pangalan. Basahin ang laman dahil maaaring nakatago ang duplicate sa file na anumang pangalan:

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

Ang pares ay ang dalawang entry na magkapareho ang host at suite. Pareho silang tumuturo sa https://download.docker.com/linux/ubuntu at sa suite na noble, kaya dalawang beses naisulat ang iisang repository. Magkaiba rin ang mga path ng Signed-By, kaya lumilitaw ang error na Conflicting values na ipinakita kanina.

Gamitin ang grep sa halip na apt command para sa hakbang na ito. Kapag humihinto na ang apt dahil sa conflict, hindi rin nito maililista ang iyong sources, kaya ang apt-cache policy ay nagpi-print ng parehong error sa halip na sagot na kailangan mo.

Ayusin ito: panatilihin ang deb822 file, alisin ang legacy file

Panatilihin ang .sources file. Ito ang format na sinusulatan ngayon ng apt tooling, at ito ang direksiyong tinatahak ng Debian at Ubuntu. Bago mag-delete ng kahit ano, tingnan kung alin sa dalawang pangunahing path ang umiiral sa disk:

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

/etc/apt/keyrings/docker.asc lamang ang naroroon. Ibig sabihin, ang deb822 file ang naglalaman ng tamang impormasyon, at ang .list file ay tumutukoy sa key na inalis na. Kung ang file na balak mong panatilihin ay tumutukoy sa nawawalang key, ilagay muna rito ang gumaganang path, saka alisin ang kabilang file.

Ilipat ang legacy file palabas ng directory sa halip na direktang i-delete:

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

Gagana rin ang pagpapalit ng pangalan nito sa docker.list.bak habang nananatili ito sa parehong lokasyon, dahil binabalewala ng apt ang mga hindi kilalang extension. Gayunman, ilalabas ng bawat apt run ang sumusunod:

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

Kapag inilipat ang file sa ibang lokasyon, hindi na lalabas ang notice na iyon at mananatili pa rin ang backup. Ganito dapat ang maayos na apt update pagkatapos ng pagbabago, nang walang linyang tumutukoy sa dalawang file:

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.

Suriin ngayon kung nanatiling gumagana ang repository pagkatapos ng pag-edit:

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

Kung ipinapalagay pa rin ng documentation ng vendor na single-line file ang ginagamit, maaari mong panatilihin ang file na iyon at alisin sa halip ang .sources file. Iisa ang panuntunan sa alinmang paraan: eksaktong isang file lamang ang maaaring magdeklara ng isang archive at suite.

Bakit pinipigil ng isang sirang third-party source ang apt update

Magkaiba ang hitsura ng katabing failure, pero pareho ang ugat: isang third-party source na hindi magamit ng apt. Ang unang bersyon ay nawawalang key:

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.

Nawawala ang field na Signed-By, o tumutukoy ito sa isang file na hindi usable na key. Dahil dito, hindi ma-verify ng apt ang signature sa file na InRelease ng archive. Itinatapon nito ang buong repository sa halip na pagkatiwalaan ang mga package list na hindi nito ma-check. Suriin mismo ang key file:

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

Ang gumaganang key ay nagpi-print ng linyang pub na may key id at linyang uid na naglalagay ng pangalan ng vendor. Ibig sabihin ng gpg: no valid OpenPGP data found. na hindi key ang file. Karaniwan itong nangyayari kapag error page ang na-save ng download dahil nagbago ang lokasyon ng key URL. Kunin muli ang key, suriin ang file, at pagkatapos ay patakbuhin ang apt update.

Lumilitaw ang ikalawang bersyon pagkatapos ng 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.

Walang na-publish ang PPA para sa suite na iyon. Dahil dito, walang ganoong path sa server at 404 ang ibinabalik ng request. Patuloy pa ring nag-a-update ang iba mong repository, at hindi naaapektuhan ang mga package na mayroon ka na. Gayunman, non-zero ang exit status ng run. Kaya nag-uulat ng failure sa bawat pagtakbo ang anumang script na sumusuri sa exit status ng apt update. Ito ang dahilan kung bakit dapat alisin ang isang dead source sa server na may naka-configure na unattended security upgrades: sa araw-araw na ingay maaaring matago ang totoong failure. Parehong bersyon ang nararanasan sa mga script ng vendor para sa pag-install. Kaya karamihan sa mga error sa pag-install ng Tailscale sa Ubuntu ay nauuwi sa keyring na hindi naisulat ng script o release codename na hindi dala ng archive.

I-disable ang isang source nang hindi naaapektuhan ang iba

Para sa deb822 file, magdagdag ng isang field sa stanza at i-save ito:

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

Inirerekomenda ito ng apt manual sa halip na lagyan ng comment ang bawat linya ng stanza, at mas madali rin itong ibalik. Para sa one-line file, ilagay ang # sa simula ng linya. Sa alinmang format, maaari ring ilipat ang file palabas ng /etc/apt/sources.list.d/. Ito ang piliin kapag tuluyan nang wala ang repository.

Patakbuhin muli ang sudo apt update. Mawawala ang Err: block para sa repository na iyon, at babalik sa 0 ang exit status. Maaari mo itong tingnan gamit ang echo $? sa susunod na linya.

Huwag kailanman ayusin ang sirang source gamit ang sudo rm /etc/apt/sources.list.d/*. Sa Ubuntu 24.04 at mas bago, dine-delete nito ang ubuntu.sources, na naglalaman ng sariling repositories ng distribution. Dahil dito, wala nang package lists ang apt at iuulat nito ang E: Unable to locate package curl para sa software na malinaw namang umiiral. Kung pinatakbo mo na ito, isulat muli ang file:

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

I-save ito bilang /etc/apt/sources.list.d/ubuntu.sources, palitan ang noble ng sarili mong release name mula sa lsb_release -cs, at pagkatapos ay patakbuhin ang sudo apt update.

I-convert ang mga legacy na .list file sa deb822

Simula Agosto 2026, may converter na ang apt 3.0 at mga mas bagong bersyon para rito. Kasama ito sa Debian 13, gayundin sa Ubuntu 25.04 at sa lahat ng kasunod na release nito, kabilang ang 26.04. Suriin ang bersyon, pagkatapos ay patakbuhin ito:

apt --version
sudo apt modernize-sources

Nire-rewrite nito bilang mga deb822 .sources file ang mga one-line file sa ilalim ng /etc/apt/sources.list.d/. Basahin ang output nito, pagkatapos ay manu-manong ilista ang directory at patakbuhin ang apt update bago pagkatiwalaan ang resulta. May mas lumang apt ang Ubuntu 24.04 na walang ganitong subcommand; doon, ang command ay nagbabalik ng E: Invalid operation modernize-sources. Sa release na iyon, manu-manong mag-convert gamit ang field mapping sa itaas.

Opsyonal pa ang pag-convert sa ngayon dahil binabasa pa rin ng apt ang parehong format. Gayunman, makabubuting gawin ito sa server na balak mong panatilihin, dahil deb822 na ngayon ang isinusulat ng bawat tool na nagre-rewrite ng sources. Hindi rin makakabuo ng ganitong uri ng duplicate ang isang server na .sources file lamang ang mayroon.

Panatilihing maayos ang third-party sources sa isang server

Ang mga third-party repository ang bahagi ng server na pinakamabilis maluma. Bawat isa ay pangako ng ibang provider na patuloy itong maglalabas ng mga package para sa Ubuntu release mo, at sinusubok ng release upgrade ang lahat ng pangakong iyon sa parehong araw.

  • Magdagdag lang ng third-party repository kapag hindi sapat ang distribution package. Ang isang karaniwang LAMP stack sa Ubuntu 24.04 ay hindi nangangailangan nito: nasa Ubuntu archive ang lahat ng package na ginagamit nito, kasama ang security updates sa buong support life ng release.
  • Itago ang mga key sa /etc/apt/keyrings/, isang file bawat vendor, na may mode 644. Ang unprivileged na _apt user ang nagda-download at kailangang makabasa ng key, kaya magdudulot ng permission error sa bawat fetch mula sa repository na iyon ang key file na root lang ang makakabasa.
  • Ituro ang Signed-By sa eksaktong file na iyon sa bawat stanza. Kapag nasa /etc/apt/trusted.gpg o /etc/apt/trusted.gpg.d/ ang key, pinagkakatiwalaan ito para sa bawat repository sa server, kaya maaaring ma-validate ng vendor key na idinagdag ilang taon na ang nakaraan ang mga package mula sa kahit saan.
  • Bago ang release upgrade, basahin ang sources at tiyaking naglalabas na ang bawat vendor para sa suite na lilipatan mo.

Makikita sa bawat update kapag nasa lumang global keyring ang isang key:

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.

I-export ang key na iyon sa sarili nitong file, at ituro rito ang stanza:

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

Idagdag ang Signed-By: /etc/apt/keyrings/docker.gpg sa stanza ng repository at patakbuhin ang sudo apt update. Mawawala ang warning kapag wala nang repository na umaasa sa lumang keyring, at maaari mo nang alisin ang entry gamit ang sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --delete-key 7EA0A9C3F273FCD8.

May isa pang gawain na makakaiwas sa pinakamalaking abala. Dina-disable ng do-release-upgrade ang mga third-party source para sa upgrade at iniiwan ang mga ito na naka-off pagkatapos. Kapag isa-isa mo silang ibinalik nang mano-mano, doon eksaktong nabubuo ang mga duplicate declaration. Basahin ang gabay sa pag-upgrade mula Ubuntu 24.04 patungong 26.04 bago magsimula, at itala kung aling mga repository ang kailangan mo pa. Sa isang machine na bagong-build pa lang, pinakamura at pinakamadaling ayusin ang sources sa unang sampung minuto sa bagong VPS, habang ang mga entry lang na inilabas ng Ubuntu ang nasa server.

FAQ

Bakit sinasabi ng apt na maraming beses na naka-configure ang isang target?

Dahil may dalawang file sa ilalim ng /etc/apt/sources.list.d/ na nagdedeklara ng parehong repository, suite, at component. Tinutukoy ng mensahe ang dalawang file kasama ang mga line number, gaya ng docker.list:1 at docker.sources:1. Pinagsasama ng apt ang mga ito at nagpapatuloy, kaya gumagana pa rin ang update. Gayunman, dapat alisin ang duplicate: kapag magkaibang signing key ang tinukoy ng dalawang file, hihinto ang apt na may E: Conflicting values set for option Signed-By at tatangging basahin ang anumang source, kaya nahaharangan din ang apt install.

Dapat ko bang panatilihin ang .list file o ang .sources file?

Panatilihin ang .sources file. Ang deb822 ang ginagamit ng add-apt-repository sa Ubuntu 24.04 at mas bagong bersyon. Mayroon itong isang pinangalanang field para sa bawat setting sa halip na positional text sa loob ng square brackets, at ito ang format na ginagamit ng mga distribution sa hinaharap. Bago tanggalin ang .list file, tiyaking tumutukoy ang Signed-By path sa loob ng .sources file sa isang key na umiiral, gamit ang ls -l /etc/apt/keyrings/. Ilipat ang lumang file palabas ng /etc/apt/sources.list.d/ sa halip na palitan ang pangalan nito sa loob ng directory, dahil ang natitirang .bak name ay magpapalabas sa apt ng ignored-file notice sa bawat run.

Paano ko io-off ang isang apt repository nang hindi ito inaalis?

Sa isang deb822 .sources file, idagdag ang Enabled: no sa stanza. Sa one-line .list file, maglagay ng # sa simula ng line. Sa alinmang paraan, patakbuhin ang sudo apt update pagkatapos, at mawawala ang Err: block para sa repository na iyon. Ito ang tamang gawin kapag wala pang package ang third-party repository para sa iyong Ubuntu release at nagiging sanhi ang 404 nito upang mag-exit ang apt update nang non-zero.

Mawawala na ba ang one-line sources.list format?

Deprecated ito, pero hindi pa inaalis. Binabasa pa rin ng apt ang .list files at matagal pa nitong gagawin, kaya walang masisirang anuman sa iyong server bukas. Deb822 ang isinusulat ng mga bagong tooling: sa Ubuntu 24.04 at mas bagong bersyon, nasa /etc/apt/sources.list.d/ubuntu.sources ang mga distribution repository, at add-apt-repository ang nagsusulat ng .sources files. Sa apt 3.0 at mas bagong bersyon, kino-convert ng sudo apt modernize-sources ang mga file na mayroon ka pa.

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