SSD Nodes Learn 🎉 VPS mula $5.50/buwan
Mga Gabay Matt ConnorNi Matt Connor · Na-update 2026-08-13

Ayusin ang duplicate apt sources at .sources files

Nakikita ang "configured multiple times" sa apt update? Hanapin ang magkaparis na legacy .list at deb822 .sources file, magtira ng isa, at ibalik ang malinis na update.

Ang ibig sabihin ng duplicate apt sources error

Ibig sabihin ng duplicate apt sources ay dalawang beses dineklara ang isang repository sa magkaibang file, at parehong kopya ang nakita ng APT (advanced package tool). Sa Ubuntu 24.04 at mas bagong bersyon, 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 sa disk. Walang nasirang file at walang package na nasa panganib. Burahin ang isa sa dalawang declaration para mawala ang mensahe.

Ito ang linyang 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 dulo. May dalawang file, na parehong may line number, na nagdedeklara ng iisang bagay. Ang Target Packages ay ang index na dina-download ng apt upang malaman kung aling mga package ang iniaalok ng 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 naka-configure ang amd64 index para sa stable component sa docker.list sa line 1, at muli sa docker.sources sa line 1.

Sa apt 3.0 at mas bagong bersyon, 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 inilalarawan ng mga ito ang parehong archive gamit ang parehong key. Pinahihinto 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 dito dahil magkaibang signing key ang tinutukoy ng dalawang declaration para sa isang archive. Pagsasamahin nito ang dalawang magkaparehong declaration, pero hindi ito pipili sa pagitan ng dalawang Signed-By value. Kapag maling value ang pinili, susuriin ang package signatures gamit ang key na hindi ginamit ng may-ari ng archive sa pag-sign. Kaya walang sources na binabasa ang apt. Parehong mabibigo ang apt update at apt install na may parehong dalawang linya hanggang sa manu-mano mong ma-edit ang mga file.

Paano nalilikha ang duplicate

Magkahiwalay na file na may magkakaibang extension ang dalawang format, kaya walang pumipigil sa parehong file na manatili sa disk. Nahuhuli ng apt ang overlap kapag binubuo na nito ang listahan ng lahat ng index target na kukunin mula sa bawat source file. Bago iyon, dalawang walang kaugnayang file ang docker.list at docker.sources.

Apat na karaniwang pangyayari ang lumilikha sa 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 linyang tee.
  • Sa kalaunan, naglalabas ang sariling package ng vendor ng /etc/apt/sources.list.d/vendor.sources at awtomatiko itong ini-install.
  • 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 muling sumulat sa sariling sources ng distribution sa deb822 at iniwang hindi nagalaw ang mano-mano mong ginawang .list file sa tabi ng mga ito.

Makatuwiran ang bawat proseso kung hiwalay itong nangyari. Nagkakaroon ng duplicate kapag dalawa sa mga ito ang nangyari sa iisang server, kadalasan ay may pagitan na ilang buwan.

Ang dalawang format, magkatabi

Ang lumang format ay isang linya 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 nasa maling lugar ang isang space.

Inilalahad ng deb822 ang parehong impormasyon bilang stanza na may mga field na may pangalan. Ang pangalan ay mula sa RFC 822, ang estilo 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 magkatugma ang mga field: nagiging deb ang Types, nagiging URIs ang address ng archive, nagiging Suites ang suite, nagiging Components ang mga component, at nagiging hiwalay na field ang bawat option sa brackets, kaya nagiging Signed-By: ang signed-by= at nagiging Architectures: ang arch=.

Plural ang bawat pangalan ng field dahil space-separated list ang tinatanggap ng bawat field. Pinapalitan ng Suites: noble noble-updates noble-backports sa isang stanza ang tatlong magkakahiwalay na linyang deb. Tinatapos ng blank line ang isang stanza, kaya maaaring maglaman ang iisang .sources file ng ilang repository. May mga setting din ang deb822 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 may isang space na indentation ang bawat linya at ang mga blank line ay isinusulat bilang iisang tuldok.

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 may comment lamang na tumutukoy sa bagong lokasyon.
  • /etc/apt/sources.list.d/*.list: mga entry na tig-iisang linya, karaniwan ay isang file para sa bawat repository.
  • /etc/apt/sources.list.d/*.sources: mga deb822 stanza. Sa Ubuntu 24.04 at mas bago, dito inilalagay 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 ng notice, na mahalaga 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 ng mga ito, dahil maaaring nakatago ang duplicate sa file na kahit ano ang 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 parehong repository. Hindi rin magkapareho ang kanilang Signed-By path, at ito ang nagdudulot ng Conflicting values error na ipinakita kanina.

Gamitin ang grep sa halip na isang 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 magpi-print ng parehong error sa halip na ang 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 dito patungo ang Debian at Ubuntu. Bago mag-delete ng anuman, 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, kaya ang deb822 file ang naglalaman ng tamang impormasyon at ang .list file ay tumutukoy sa key na inalis na. Kung ang file na plano 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

Gumagana rin ang pagpapalit ng pangalan nito sa docker.list.bak at pananatili nito sa directory, dahil binabalewala ng apt ang mga hindi kilalang extension, pero 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 inilagay 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, na walang line na 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.

Ngayon, tiyaking gumagana pa rin ang repository matapos ang 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 one-line file ang gagamitin, maaari mong panatilihin ang file na iyon at alisin na lamang ang .sources file. Iisa lang ang patakaran sa alinmang paraan: eksaktong isang file lamang ang maaaring magdeklara ng isang archive at suite.

Bakit pinatitigil 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 tumuturo ito sa file na hindi valid na key. Dahil dito, hindi ma-verify ng apt ang signature sa InRelease file ng archive. Itinatapon nito ang buong repository sa halip na pagkatiwalaan ang mga package list na hindi nito ma-check. Suriin ang mismong 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. Ipinapakita 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. I-download muli ang key, suriin ang file, at pagkatapos ay patakbuhin ang apt update.

Lumalabas ang ikalawang bersyon matapos ang 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 inilabas ang PPA para sa suite na iyon. Dahil dito, hindi umiiral ang path sa server at nagbabalik ng 404 ang request. Patuloy pa ring nag-a-update ang iba mong repository, at hindi naaapektuhan ang mga package na mayroon ka na. Gayunman, nag-e-exit ang run na may non-zero status. Kaya bawat pagtakbo ng script na sumusuri sa exit status ng apt update ay nag-uulat ng failure. Ito ang dahilan kung bakit dapat alisin ang isang hindi gumaganang source sa isang machine na may naka-configure na unattended security upgrades: sa araw-araw na noise madalas natatago ang totoong failure.

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 kaysa i-comment out ang bawat linya ng stanza, at mas madali rin itong ibalik. Para sa one-line file, maglagay ng # sa simula ng linya. Sa alinmang format, maaari ring ilipat ang file palabas ng /etc/apt/sources.list.d/. Piliin ang paraang ito 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 suriin 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, binubura nito ang ubuntu.sources, na naglalaman ng sariling repositories ng distribution. Dahil dito, wala nang package lists ang apt at mag-uulat ito ng E: Unable to locate package curl para sa software na malinaw namang umiiral. Kung napaandar 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, at palitan ang noble ng sarili mong release name mula sa lsb_release -cs. Pagkatapos, patakbuhin ang sudo apt update.

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

Simula August 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, kabilang ang 26.04. Suriin ang bersyon, pagkatapos ay patakbuhin ito:

apt --version
sudo apt modernize-sources

Ni-rewrite nito ang mga one-line file sa ilalim ng /etc/apt/sources.list.d/ bilang mga deb822 .sources file. 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, kaya ang sagot ng command doon ay E: Invalid operation modernize-sources. Sa release na iyon, manu-manong mag-convert gamit ang field mapping sa itaas.

Opsyonal pa lamang ang pag-convert ngayon dahil binabasa pa rin ng apt ang parehong format. Mainam itong gawin sa server na balak mong panatilihin, dahil deb822 na ang isinusulat ngayon ng bawat tool na nagma-manage ng sources. Ang server na may .sources file lamang ay hindi na makakapagdagdag ng ganitong uri ng duplicate.

Panatilihing maayos ang third-party sources sa isang server

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

  • Magdagdag lamang ng third-party repository kapag hindi sapat ang distribution package. Walang kailangan ang isang karaniwang LAMP stack sa Ubuntu 24.04: nasa Ubuntu archive na ang lahat ng package na ginagamit nito, kasama ang security updates habang suportado ang release.
  • Itago ang mga key sa /etc/apt/keyrings/, tig-isang file bawat vendor, na may mode 644. Ang unprivileged na _apt user ang nagda-download at kailangang makabasa ng key, kaya magkakaroon ng permission error sa bawat fetch mula sa repository kung root lamang ang makakabasa ng key file.
  • 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. Dahil dito, maaaring mag-validate ng package mula sa kahit saan ang vendor key na idinagdag maraming taon na ang nakalipas.
  • Bago magpatakbo ng release upgrade, basahin ang iyong 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, pagkatapos ay 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 nakakaiwas sa pinakamalaking problema. Idini-disable ng do-release-upgrade ang mga third-party source para sa upgrade at nananatiling naka-off ang mga ito pagkatapos. Kapag isa-isa mong ibinalik sa manual ang mga ito, doon kadalasang nagkakaroon ng duplicate declarations. Basahin ang Ubuntu 24.04 hanggang 26.04 upgrade guide bago magsimula, at itala kung aling mga repository ang kailangan mo pa. Sa isang machine na kakabuo mo pa lamang, pinakamura at pinakamadaling ayusin ang sources sa unang sampung minuto sa bagong VPS, habang ang tanging entries pa lamang sa server ay ang mga isinama ng Ubuntu.

FAQ

Bakit sinasabi ng apt na maraming beses na-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 numero ng linya, gaya ng docker.list:1 at docker.sources:1. Pinagsasama ng apt ang mga ito at nagpapatuloy, kaya gumagana pa rin ang update mismo. Gayunpaman, dapat alisin ang duplicate: kapag magkaibang signing key ang tinukoy ng dalawang file, hihinto ang apt gamit ang E: Conflicting values set for option Signed-By at tatangging basahin ang anumang source. Dahil dito, maaapektuhan din ang apt install.

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

Panatilihin ang .sources file. Ito ang format na isinusulat ng add-apt-repository sa Ubuntu 24.04 at mas bagong bersyon. May hiwalay itong pinangalanang field para sa bawat setting sa halip na positional text sa loob ng square brackets, at ito ang direksiyong tinatahak ng mga distribution. 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 magpapakita ang natirang .bak name ng ignored-file notice sa bawat pagtakbo ng apt.

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

Sa isang deb822 .sources file, idagdag ang Enabled: no sa stanza. Sa isang one-line .list file, ilagay ang # sa simula ng linya. Sa alinmang paraan, patakbuhin pagkatapos ang sudo apt update at mawawala ang Err: block para sa repository na iyon. Ito ang tamang hakbang kapag wala pang package para sa iyong Ubuntu release ang isang third-party repository at nagiging sanhi ang 404 nito para 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 magpapatuloy itong gawin sa mahabang panahon, kaya walang biglang masisira sa server mo. 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 nagsusulat ang add-apt-repository ng .sources files. Sa apt 3.0 at mas bago, kino-convert ng sudo apt modernize-sources ang mga file na mayroon ka pa.

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