Perbaiki Sumber apt Duplikat dan File deb822
Atasi pesan "Target is configured multiple times" di apt. Temukan pasangan file .list dan .sources, simpan satu, lalu jalankan apt update tanpa peringatan.
Arti error sumber apt duplikat
Sumber apt duplikat berarti satu repositori dideklarasikan dua kali dalam dua file berbeda, dan APT (advanced package tool) menemukan kedua salinan tersebut. Pada Ubuntu 24.04 dan yang lebih baru, hal ini hampir selalu terjadi karena skrip instalasi pihak ketiga menulis file satu baris lama .list, sementara file deb822 .sources untuk repositori yang sama sudah ada di disk. Tidak ada yang rusak dan tidak ada paket yang berisiko. Hapus salah satu dari kedua deklarasi tersebut agar pesan ini hilang.
Berikut baris yang biasanya ditempelkan orang ke kotak pencarian:
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:1Baca pesan tersebut dari bagian akhir. Dua file, masing-masing dengan nomor baris, mendeklarasikan hal yang sama. Target Packages adalah indeks yang diunduh apt untuk mengetahui paket yang ditawarkan repositori, sedangkan stable/binary-amd64/Packages menyebutkan komponen (stable) dan arsitektur (amd64) yang dicakup indeks tersebut. Jadi, apt memberi tahu Anda bahwa indeks amd64 untuk komponen stable dikonfigurasi dalam docker.list pada baris 1, dan dikonfigurasi lagi dalam docker.sources pada baris 1.
Pada apt 3.0 dan yang lebih baru, yang berarti Ubuntu 25.04 dan yang lebih baru serta Debian 13, pesan yang sama dimulai dengan Warning:, bukan W:. Teks setelah awalan tersebut sama.
Peringatan ini adalah kasus ringan. apt menggabungkan kedua deklarasi dan proses update tetap berjalan karena keduanya menjelaskan arsip yang sama dengan key yang sama. Kasus yang lebih serius menghentikan seluruh proses:
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 menolak melanjutkan dalam kasus ini karena kedua deklarasi menyebutkan key penandatanganan yang berbeda untuk satu arsip. apt akan menggabungkan dua deklarasi yang identik, tetapi tidak akan memilih antara dua nilai Signed-By. Memilih nilai yang salah berarti memeriksa tanda tangan paket menggunakan key yang tidak pernah digunakan pemilik arsip untuk menandatangani paket tersebut. Karena itu, apt tidak membaca sumber apa pun. apt update dan apt install sama-sama gagal dengan dua baris tersebut sampai Anda mengedit file secara manual.
Cara duplikat tersebut muncul
Kedua format berada dalam file terpisah dengan ekstensi berbeda, sehingga tidak ada mekanisme pada disk yang mencegah keduanya ada secara bersamaan. apt mendeteksi tumpang tindih tersebut pada tahap akhir, saat apt memperluas setiap file sumber menjadi daftar target indeks yang akan diunduh. Sampai tahap itu, docker.list dan docker.sources merupakan dua file yang tidak saling berkaitan.
Empat kejadian umum dapat menghasilkan pasangan tersebut:
- Skrip instalasi vendor, atau perintah yang disalin dari artikel lama, menulis
/etc/apt/sources.list.d/vendor.listdengan baristee. - Paket milik vendor kemudian merilis
/etc/apt/sources.list.d/vendor.sourcesdan menginstalnya untuk Anda. add-apt-repositorypada Ubuntu 24.04 dan versi yang lebih baru menulis file deb822.sources, sehingga PPA (personal package archive) yang sebelumnya Anda tambahkan secara manual sebagai.listmuncul kembali sebagai.sources.- Upgrade rilis menulis ulang source milik distribusi ke format deb822 dan membiarkan file
.listyang Anda buat secara manual tetap berada di sampingnya.
Setiap cara tersebut masuk akal jika dilihat sendiri. Duplikat muncul ketika dua cara terjadi pada server yang sama, sering kali dengan jeda beberapa bulan.
Kedua format, berdampingan
Format lama menggunakan satu baris untuk setiap repository, dan setiap bagiannya ditentukan berdasarkan posisi.
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stableUrutannya tetap: jenisnya (deb untuk paket biner, deb-src untuk paket sumber), lalu opsi dalam tanda kurung siku, kemudian URI (uniform resource identifier) arsip, suite, dan satu atau beberapa komponen. Karena maknanya ditentukan oleh posisi, spasi yang salah dapat mengubah cara apt membaca baris tersebut.
deb822 menyatakan informasi yang sama sebagai stanza yang berisi field bernama. Namanya berasal dari RFC 822, yaitu gaya header email yang sudah digunakan Debian untuk file kontrol paket.
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.ascRepository sama, kunci sama, tanpa tambahan apa pun. Pemetaan dilakukan secara langsung: deb menjadi Types, alamat arsip menjadi URIs, suite menjadi Suites, komponen menjadi Components, dan setiap opsi dalam kurung siku menjadi field tersendiri, sehingga signed-by= menjadi Signed-By: dan arch= menjadi Architectures:.
Setiap nama field berbentuk jamak karena setiap field menerima daftar yang dipisahkan oleh spasi. Suites: noble noble-updates noble-backports dalam satu stanza menggantikan tiga baris deb terpisah. Baris kosong mengakhiri sebuah stanza, sehingga satu file .sources dapat memuat beberapa repository. deb822 juga mendukung pengaturan yang kurang praktis jika ditulis dalam format satu baris: Enabled: no untuk menonaktifkan repository, Trusted, Check-Valid-Until, dan kunci inline yang ditempelkan langsung ke Signed-By, dengan setiap baris diindentasi satu spasi dan baris kosong ditulis sebagai satu titik.
Lokasi setiap file
/etc/apt/sources.list: file tunggal asli. Pada Ubuntu 24.04 dan versi yang lebih baru, file ini biasanya kosong atau hanya berisi komentar yang menunjuk ke lokasi baru./etc/apt/sources.list.d/*.list: entri satu baris, biasanya satu file untuk setiap repository./etc/apt/sources.list.d/*.sources: stanza deb822. Ubuntu 24.04 dan versi yang lebih baru menyimpan repository milik distribusi di sini, dalamubuntu.sources./etc/apt/keyrings/: lokasi untuk menyimpan key yang Anda tambahkan./usr/share/keyrings/menyimpan key yang berasal dari package.
apt hanya membaca file yang diakhiri dengan .list atau .sources, dan nama file dapat berisi huruf, angka, garis bawah, tanda hubung, serta titik. File dengan ekstensi lain akan dilewati dan menghasilkan pemberitahuan. Hal ini penting untuk perbaikan di bawah.
Temukan pasangan duplikat
Mulai dengan menampilkan isi direktori:
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.sourcesDua file dengan nama dasar sama dan ekstensi berbeda biasanya merupakan pasangan tersebut, tetapi jangan langsung memercayai namanya. Baca isinya, karena duplikat dapat tersembunyi dalam file dengan nama apa pun:
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.ascPasangan tersebut adalah dua entri dengan host dan suite yang sama. Keduanya mengarah ke https://download.docker.com/linux/ubuntu dan suite noble, sehingga merupakan repositori yang sama yang ditulis dua kali. Path Signed-By pada keduanya juga berbeda. Perbedaan inilah yang menghasilkan error Conflicting values yang ditampilkan sebelumnya.
Gunakan grep, bukan perintah apt, untuk langkah ini. Saat apt sudah berhenti karena konflik, apt juga tidak dapat menampilkan daftar source Anda. Karena itu, apt-cache policy akan mencetak error yang sama, bukan jawaban yang Anda perlukan.
Perbaiki: pertahankan file deb822, hapus file lama
Pertahankan file .sources. Itulah format yang kini ditulis oleh tooling apt, dan Debian serta Ubuntu sedang beralih ke format tersebut. Sebelum menghapus apa pun, periksa path utama mana dari kedua path berikut yang ada di disk:
ls -l /etc/apt/keyrings/ /usr/share/keyrings/ | grep -i docker-rw-r--r-- 1 root root 4813 Aug 9 14:40 docker.ascHanya /etc/apt/keyrings/docker.asc yang ada. Jadi, file deb822 berisi konfigurasi yang benar, sedangkan file .list mengarah ke key yang sudah dihapus. Jika ternyata file yang ingin dipertahankan menyebutkan key yang tidak ada, salin path yang berfungsi ke file tersebut terlebih dahulu, lalu hapus file lainnya.
Pindahkan file lama keluar dari direktori, bukan langsung menghapusnya:
sudo mkdir -p /root/apt-sources-backup
sudo mv /etc/apt/sources.list.d/docker.list /root/apt-sources-backup/
sudo apt updateMengganti namanya menjadi docker.list.bak dan membiarkannya di tempat semula juga dapat dilakukan karena apt mengabaikan ekstensi yang tidak dikenal. Namun, setiap eksekusi apt akan menampilkan pesan berikut:
N: Ignoring file 'docker.list.bak' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extensionMemindahkan file ke lokasi lain menghilangkan pesan tersebut dari layar dan tetap menyimpan cadangan. Setelah itu, apt update yang benar akan terlihat seperti berikut, tanpa baris yang menyebutkan dua 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.Sekarang, pastikan repository tetap berfungsi setelah perubahan:
apt-cache policy | grep download.docker.com 500 https://download.docker.com/linux/ubuntu noble/stable amd64 Packages
origin download.docker.comJika dokumentasi vendor masih mengasumsikan file satu baris, Anda dapat mempertahankan file tersebut dan menghapus file .sources sebagai gantinya. Satu aturan berlaku dalam kedua kasus: tepat satu file boleh mendeklarasikan archive dan suite tertentu.
Mengapa satu source pihak ketiga yang rusak membuat apt update gagal
Kegagalan di sebelahnya terlihat berbeda, tetapi memiliki akar masalah yang sama: source pihak ketiga yang tidak dapat digunakan oleh apt. Versi pertama disebabkan oleh key yang hilang:
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.Field Signed-By tidak ada, atau menunjuk ke file yang bukan key yang dapat digunakan. Akibatnya, apt tidak dapat memverifikasi signature pada file InRelease archive. apt kemudian membuang seluruh repository tersebut, alih-alih mempercayai package list yang tidak dapat diverifikasi. Periksa file key itu sendiri:
ls -l /etc/apt/keyrings/docker.asc
gpg --show-keys /etc/apt/keyrings/docker.ascKey yang berfungsi menampilkan baris pub dengan key id dan baris uid yang mencantumkan vendor. gpg: no valid OpenPGP data found. berarti file tersebut bukan key sama sekali. Biasanya, ini terjadi karena proses download menyimpan halaman error setelah URL key berpindah. Download kembali key tersebut, periksa file, lalu jalankan apt update.
Versi kedua muncul setelah upgrade 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.PPA tersebut tidak menyediakan apa pun untuk suite itu. Karena itu, path tersebut tidak ada di server dan request menghasilkan 404. Repository lain tetap diperbarui, dan package yang sudah terpasang tidak berubah. Namun, proses tersebut tetap keluar dengan status non-zero. Akibatnya, setiap script yang memeriksa exit status apt update akan melaporkan kegagalan setiap kali dijalankan. Inilah alasan satu source yang mati perlu dihapus pada server yang dikonfigurasi dengan upgrade keamanan otomatis: noise harian dapat menyembunyikan kegagalan yang sebenarnya. Script instalasi vendor dapat mengalami kedua versi masalah ini. Karena itu, sebagian besar error instalasi Tailscale di Ubuntu ternyata disebabkan oleh keyring yang tidak pernah ditulis oleh script atau codename release yang tidak disediakan oleh archive.
Menonaktifkan satu sumber tanpa mengganggu sumber lainnya
Untuk file deb822, tambahkan satu field ke stanza, lalu simpan:
Types: deb
URIs: https://ppa.launchpadcontent.net/ondrej/php/ubuntu
Suites: plucky
Components: main
Signed-By: /etc/apt/keyrings/ondrej-php.asc
Enabled: noManual apt merekomendasikan cara ini daripada mengomentari setiap baris dalam stanza, dan cara ini lebih mudah dibatalkan. Untuk file satu baris, letakkan # di awal baris. Untuk kedua format tersebut, memindahkan file keluar dari /etc/apt/sources.list.d/ juga dapat dilakukan. Pilih opsi ini jika repository tersebut tidak akan digunakan lagi.
Jalankan kembali sudo apt update. Blok Err: untuk repository tersebut akan hilang, dan exit status kembali ke 0. Anda dapat memeriksanya dengan echo $? pada baris berikutnya.
Jangan pernah memperbaiki source yang rusak dengan sudo rm /etc/apt/sources.list.d/*. Pada Ubuntu 24.04 dan yang lebih baru, perintah tersebut menghapus ubuntu.sources, yang berisi repository bawaan distribusi. Akibatnya, apt tidak memiliki package list sama sekali dan melaporkan E: Unable to locate package curl untuk software yang sebenarnya tersedia. Jika Anda sudah menjalankan perintah tersebut, tulis ulang 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.gpgSimpan sebagai /etc/apt/sources.list.d/ubuntu.sources, dengan mengganti noble menggunakan nama release Anda sendiri dari lsb_release -cs, lalu jalankan sudo apt update.
Konversi file .list lama ke deb822
Mulai Agustus 2026, apt 3.0 dan versi yang lebih baru menyertakan konverter untuk keperluan ini. Debian 13 memilikinya, begitu juga Ubuntu 25.04 dan setiap rilis setelahnya, termasuk 26.04. Periksa versinya, lalu jalankan:
apt --version
sudo apt modernize-sourcesKonverter tersebut menulis ulang file satu baris di bawah /etc/apt/sources.list.d/ menjadi file deb822 .sources. Baca hasil yang ditampilkan, lalu tampilkan isi direktori secara manual dan jalankan apt update sebelum mempercayai hasilnya. Ubuntu 24.04 menyertakan apt versi lama yang tidak memiliki subperintah tersebut. Pada rilis itu, perintah tersebut menghasilkan E: Invalid operation modernize-sources. Pada rilis tersebut, lakukan konversi secara manual menggunakan pemetaan field di atas.
Konversi belum wajib dilakukan karena apt masih membaca kedua format tersebut. Namun, konversi layak dilakukan pada server yang akan dipertahankan. Setiap tool yang menulis sources kini menggunakan deb822, sedangkan server yang hanya memiliki file .sources tidak dapat menambah jenis duplikat ini.
Jaga sumber pihak ketiga tetap tertata di server
Repositori pihak ketiga adalah bagian server yang paling cepat menjadi usang. Setiap repositori merupakan janji dari pihak lain untuk terus menerbitkan paket bagi rilis Ubuntu Anda, dan upgrade rilis akan menguji semua janji tersebut pada waktu yang sama.
- Tambahkan repositori pihak ketiga hanya jika paket dari distribusi tidak dapat memenuhi kebutuhan. LAMP stack pada Ubuntu 24.04 yang sederhana tidak memerlukannya: Ubuntu archive menyediakan semua paket yang digunakannya, termasuk security update selama masa dukungan rilis.
- Simpan key di
/etc/apt/keyrings/, satu file untuk setiap vendor, dengan mode 644. User_aptyang tidak memiliki hak istimewa melakukan pengunduhan dan harus dapat membaca key tersebut. Jika file key hanya dapat dibaca oleh root, setiap pengambilan paket dari repositori itu akan menghasilkan permission error. - Arahkan
Signed-Byke file yang tepat tersebut dalam setiap stanza. Key yang disimpan di/etc/apt/trusted.gpgatau/etc/apt/trusted.gpg.d/akan dipercaya untuk semua repositori di server, sehingga key vendor yang ditambahkan beberapa tahun lalu dapat memvalidasi paket dari mana saja. - Sebelum melakukan upgrade rilis, baca konfigurasi sources dan pastikan setiap vendor sudah menerbitkan paket untuk suite tujuan upgrade.
Key di keyring global lama akan muncul pada setiap 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.Ekspor key tersebut ke file tersendiri, lalu arahkan stanza ke file itu:
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.gpgTambahkan Signed-By: /etc/apt/keyrings/docker.gpg ke stanza repositori, lalu jalankan sudo apt update. Peringatan akan berhenti setelah tidak ada repositori yang bergantung pada keyring lama. Setelah itu, Anda dapat menghapus entri tersebut dengan sudo gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --delete-key 7EA0A9C3F273FCD8.
Ada satu kebiasaan lain yang paling banyak mengurangi masalah. do-release-upgrade menonaktifkan sumber pihak ketiga selama upgrade dan membiarkannya tetap nonaktif setelah upgrade selesai. Mengaktifkannya kembali secara manual, satu per satu, adalah kondisi yang sering menyebabkan deklarasi duplikat. Baca panduan upgrade Ubuntu 24.04 ke 26.04 sebelum memulai, lalu catat repositori yang masih diperlukan. Pada mesin yang baru selesai Anda bangun, waktu paling tepat untuk menata sources adalah selama sepuluh menit pertama pada VPS baru, saat satu-satunya entri di server adalah yang disertakan Ubuntu.
FAQ
Mengapa apt menyatakan bahwa suatu target dikonfigurasi beberapa kali?
Karena dua file di bawah /etc/apt/sources.list.d/ mendeklarasikan repositori, suite, dan komponen yang sama. Pesan tersebut mencantumkan kedua file beserta nomor barisnya, seperti docker.list:1 dan docker.sources:1. apt menggabungkan keduanya lalu melanjutkan proses, sehingga pembaruan tetap berhasil. Namun, duplikasi ini tetap perlu dihapus: jika kedua file tersebut nantinya mencantumkan kunci penandatanganan yang berbeda, apt akan berhenti dengan E: Conflicting values set for option Signed-By dan menolak membaca sumber apa pun. Akibatnya, apt install juga terblokir.
Apakah saya harus mempertahankan file .list atau file .sources?
Pertahankan file .sources. deb822 adalah format yang digunakan add-apt-repository untuk menulis konfigurasi pada Ubuntu 24.04 dan yang lebih baru. Format ini menyimpan satu field bernama untuk setiap pengaturan, bukan teks posisional dalam tanda kurung siku, dan merupakan format yang akan digunakan oleh distribusi ke depannya. Sebelum menghapus file .list, pastikan path Signed-By di dalam file .sources mengarah ke kunci yang benar-benar ada, menggunakan ls -l /etc/apt/keyrings/. Pindahkan file lama keluar dari /etc/apt/sources.list.d/, jangan mengganti namanya di dalam direktori tersebut, karena nama .bak yang tersisa membuat apt menampilkan notifikasi file yang diabaikan setiap kali dijalankan.
Bagaimana cara menonaktifkan satu repositori apt tanpa menghapusnya?
Pada file deb822 .sources, tambahkan Enabled: no ke stanza tersebut. Pada file .list satu baris, letakkan # di awal baris. Setelah itu, jalankan sudo apt update. Blok Err: untuk repositori tersebut akan hilang. Ini adalah langkah yang tepat ketika repositori pihak ketiga belum menyediakan paket untuk rilis Ubuntu Anda dan error 404-nya membuat apt update keluar dengan kode nonzero.
Apakah format satu baris sources.list akan dihentikan?
Format tersebut sudah tidak digunakan lagi secara aktif, tetapi belum dihapus. apt masih membaca file .list dan akan terus melakukannya dalam waktu lama, sehingga server Anda tidak akan langsung mengalami masalah. Tool baru menulis konfigurasi dalam format deb822: Ubuntu 24.04 dan yang lebih baru menyimpan repositori distribusi di /etc/apt/sources.list.d/ubuntu.sources, sedangkan add-apt-repository menulis file .sources. Pada apt 3.0 dan yang lebih baru, sudo apt modernize-sources mengonversi file yang masih Anda miliki.