Bagaimana cara memperbaiki kesalahan "Masalah dengan MergeList" atau "file status tidak dapat diuraikan" ketika mencoba melakukan pembaruan?

355

Komputer memberi saya output ini di jendela:

E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_natty_main_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.

Bagaimana saya bisa memperbaikinya?

Braiam
sumber
7
Itu terus membingungkan saya betapa canggung sistem operasi ini menangani pembaruannya, bahkan sekarang, bahwa ini dan hal-hal serupa diperlukan setelah tidak ada penyalahgunaan khusus oleh pengguna.
matt

Jawaban:

485

Perintah terminal ini harus menyelesaikan masalah Anda:

Pertama-tama hapus Daftar Gabung dengan membuka terminal (Tekan Ctrl+ Alt+ Tuntuk meluncurkan) dan jalankan perintah ini *:

sudo rm -vf /var/lib/apt/lists/*

Selanjutnya, buat yang baru dengan menjalankan pembaruan sederhana:

sudo apt-get update

Berikut ini adalah laporan bug (dan lainnya ) untuk masalah ini, yang sekarang sudah diperbaiki sehingga tidak boleh membuat file cacat baru, namun jika Anda sudah memiliki file cacat Anda harus menghapusnya seperti yang dijelaskan dalam posting ini.


* Opsi yang digunakan untuk rm adalah -vverbose

-v, --verbose menjelaskan apa yang sedang dilakukan

dan -fkekuatan

-f, - memaksa mengabaikan file dan argumen yang tidak ada, tidak pernah meminta

Jika Anda tidak yakin tentang baris perintah atau opsi yang digunakan selalu lihat halaman manual untuk perintah tersebut. Ini dapat diakses di internet dengan mencari man dan perintah misalnya man rm atau Anda dapat mengakses informasi yang sama dengan mengetikkan perintah yang persis sama di terminal, misalnya man rminstruksi untuk keluar dari halaman akan berada di bagian bawah terminal seperti ini

gambar opsi halaman manual

Allan
sumber
8
Satu individu menemukan dia harus melakukan dua langkah ini beberapa kali, tetapi akhirnya berhasil.
John S Gruber
5
Sangat aneh untuk meletakkannya -vfdi akhir rmperintah.
Keith Thompson
6
Itu tidak memecahkan masalah bagi saya. pembaruan masih menunjukkan kesalahan itu kepada saya.
marinir
1
Ini adalah masalah yang berulang. Itu terus terjadi sesekali. Adakah yang mengetahui penyebab masalah ini?
Rushil Paul
1
Saya telah mengedit jawaban untuk memahami kemampuan @jasser
Allan
82

Buka Terminal dan jalankan perintah berikut satu per satu:

sudo rm /var/lib/apt/lists/* -vf
sudo apt-get update

Lihat juga:

tommyk
sumber
1
apa yang dilakukan -vf?
speedox
5
@speedox, menurut man rm, -vberarti 'verbose', dan -fberarti 'kekuatan'. Dengan kata lain, hapus semua file yang ditunjuk tanpa diminta dan beri tahu pengguna apa yang dilakukannya.
Fouric
Dalam kasus saya, hanya melakukan sudo apt-get updateperbaikan masalah. Saya pikir Allan menyebutkan versi apt yang lebih baru untuk memperbaikinya secara otomatis, jadi mungkin coba saja pembaruannya terlebih dahulu.
ThorSummoner
23

Anda mengacau saat diedit /var/lib/dpkg/status. Kembalikan dari cadangan yang Anda buat sebelum mengeditnya. Tentu saja, Anda membuat cadangan, bukan?

Karena Anda tidak membuat cadangan, edit lagi, dengan hati-hati . Cobalah untuk tidak menyebabkan lebih banyak kerusakan.

Anda dapat menggunakan /var/lib/dpkg/status.oldsebagai titik referensi. Ini adalah cadangan statusfile dari sebelum terakhir kali dpkgdijalankan. Lari

diff /var/lib/dpkg/status.old /var/lib/dpkg/status

untuk melihat perbedaannya. Batalkan perubahan yang Anda buat secara manual, dan simpan perubahan yang dibuat oleh dpkgmenjalankan terakhir .

Jika Anda benar-benar tidak dapat mengatur untuk memperbaiki file, copy /var/lib/dpkg/status.oldlebih /var/lib/dpkg/status. Anda akan mendapatkan basis data paket yang terbentuk dengan baik tetapi ketinggalan zaman.

Anda tidak perlu mengedit /var/lib/dpkg/statusdalam operasi normal. Bahkan jika ada kesalahan serius, /var/lib/dpkg/statusbukanlah sesuatu yang cenderung memerlukan intervensi administrator. Apa pun masalah Anda crossplatformui, mungkin ada cara yang lebih baik untuk menyelesaikannya. Satu-satunya waktu saya perlu mengedit /var/lib/dpkg/statusadalah ketika Packagesfile hulu rusak.

Gilles
sumber
Saya juga ingin tahu cara terbaik yang Anda sebutkan untuk menghapus crossplatformui jika Anda dapat membantu karena saya mencoba setiap cara yang mungkin untuk menghapusnya dan mencoba menemukan banyak solusi tetapi hanya yang saya sebutkan telah bekerja ...
Nirmik
1
@Nirmik Tidak tahu crossplatformui. Tanyakan itu sebagai pertanyaan terpisah. Saya dapat memberitahu Anda bahwa dalam lebih dari satu dekade menggunakan dpkg, termasuk banyak sumber tidak resmi, saya sangat jarang perlu mengedit statusfile, dan hanya ketika ada repositori pihak ketiga yang rusak.
Gilles
Oke ... Terima kasih banyak sekali lagi ... seperti yang Anda sarankan saya akan mempostingnya sebagai pertanyaan baru :) juga karena Anda tampaknya pengguna yang sangat maju saya ingin bertanya apakah Anda tahu cara membuat HOT tidak berfungsi -KTEYS bekerja ?? (Tombol nirkabel tidak berfungsi)
Nirmik
Mencoba untuk menempatkan yang lama di tempat yang baru, tidak memperbaiki untuk saya. :-(
Stéphane Gourichon
1
re: {Anda mengacaukan ketika Anda mengedit / var / lib / dpkg / status} seperti untuk saya - tidak, saya tidak, saya belum menyentuh file ini :) Namun ini hanya solusi yang menyelesaikan masalah di komputer saya kasus. Terima kasih.
ruslo
18

aku melakukannya

sudo apt-get clean
sudo apt-get update

dan itu berhasil.

psychok7
sumber
1
Tidak memperbaiki untuk saya. :-(
Stéphane Gourichon
16

Langkah-langkah berikut 2-5 dalam Prosedur Pemecahan Masalah Package Manager biasanya menyelesaikan masalah ini.

Untuk langkah 2 , nonaktifkan semua PPA Anda. Anda dapat menghapus centang semuanya di Sumber Perangkat Lunak dengan cara yang sama seperti Anda menghapus centang hanya satu; lihat Cara menonaktifkan PPA tertentu? . Anda dapat mengaktifkannya kembali nanti.

Untuk langkah 3 , tutup semua program terbuka yang Anda bisa. Mungkin aman untuk menjaga browser web Anda tetap terbuka sehingga Anda memiliki instruksi di depan Anda. Tapi ini sangat penting untuk memastikan manajer paket tidak berjalan . Ini termasuk Pusat Perangkat Lunak, Pembaruan Perangkat Lunak (Manajer Pembaruan dalam versi Ubuntu yang lebih lama), Synaptic, dan Gdebi. Ini juga termasuk utilitas baris perintah manajemen paket seperti apt-get, dpkg, dan aptitude.

Perhatikan bahwa jika pengguna lain masuk pada saat yang sama, mereka harus keluar jika memungkinkan.

Untuk langkah 4 , buka jendela terminal. Salah satu cara untuk melakukan ini yang berfungsi apa pun lingkungan desktop yang Anda gunakan, adalah dengan menekan Ctrl+ Alt+ T.

Untuk langkah 5 , jalankan perintah ini di jendela terminal:

ubuntu-support-status
sudo grep -R proxy /etc/apt/*
grep proxy  /etc/environment
echo $http_proxy
echo $ftp_proxy
grep proxy /etc/bash.bashrc
grep proxy ~/.bashrc
cat /etc/apt/apt.conf
sudo fuser -vvv /var/lib/dpkg/lock
sudo fuser -vvv /var/cache/apt/archives/lock
cat /etc/lsb-release
uname -a
sudo rm /var/lib/apt/lists/lock 
sudo rm  /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup
sudo mv /var/lib/dpkg/status /var/lib/dpkg/status-bad
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status  ||  sudo cp /var/backups/apt.extended_states.0 /var/lib/dpkg/status
sudo mv /var/lib/dpkg/available /var/lib/dpkg/available-bad
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available
sudo rm -rf /var/lib/dpkg/updates/*
sudo rm -rf /var/lib/apt/lists
sudo rm /var/cache/apt/*.bin
sudo mkdir /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists/partial
LANG=C;sudo apt-get clean
LANG=C;sudo apt-get autoclean
LANG=C;sudo apt-get --purge autoremove
LANG=C;sudo apt-get --fix-missing update -o APT::Cache-Limit=100000000
sudo dpkg --configure -a
sudo dpkg --clear-avail
LANG=C;sudo apt-get -f install
LANG=C;sudo apt-get --fix-missing install
LANG=C;sudo apt-get update -o APT::Cache-Limit=100000000 && sudo apt-get dist-upgrade
find /etc/apt -name '*.list' -exec bash -c 'echo -e "\n$1\n"; cat -n "$1"' _ '{}' \;

Saya menyalin kata demi kata itu dari PackageManagementTroubleshoootingProcedure pada 2 Maret 2014. Perintah-perintah itu telah berkembang di masa lalu dan perintah yang disarankan dalam artikel itu dapat diubah atau diperluas lagi di masa mendatang . Jadi, Anda mungkin ingin bekerja dari langkah 5 di sana . (Artikel itu, dibuat / diedit oleh "Kontributor wiki dokumentasi Ubuntu" - terutama Mark Rijckenberg - berlisensi CC-BY-SA 3.0 , yang memungkinkan penyertaan di sini dengan atribusi yang tepat.)

Beberapa dari perintah tersebut berusaha untuk memperbaiki masalah (dan juga dapat menampilkan informasi diagnostik); yang lain menampilkan informasi berharga tentang masalah yang dapat Anda sertakan dalam pertanyaan Anda atau berikan kepada seseorang yang membantu Anda. (Atau, tergantung pada keahlian Anda, memungkinkan Anda untuk mendiagnosis dan menyelesaikannya.)

Seringkali ini memperbaikinya tetapi ketika tidak sering memberikan informasi yang cukup untuk memperbaikinya.

Anda tidak harus mengetikkan perintah-perintah itu secara manual; Anda dapat menyalin dan menempelkannya. Saya sarankan menempel dan menjalankan masing-masing secara terpisah. Ini membuatnya lebih jelas apa output dari perintah mana.

Eliah Kagan
sumber
Saya menyalin seluruh blok dan tempel alih-alih menjalankan satu demi satu. Meskipun beberapa perintah dalam hal ini tidak berguna dan beberapa gagal, tetapi akhirnya itu membantu dalam kasus saya
phuclv
11

Saya juga melihat masalah ini terjadi ketika Anda memiliki terlalu banyak sumber di repo Anda.

Coba solusi yang diposting di atas dan / atau mungkin ini yang kadang-kadang direkomendasikan di launchpad:

sudo mv /var/lib/apt/lists /var/lib/apt/lists-old
sudo mkdir -p /var/lib/apt/lists/partial
sudo apt-get update

Beri tahu kami bagaimana caranya.

andybleaden
sumber
Terima kasih! Ini tidak bekerja dengan DSL tanpa makedir juga.
Doug
4

Saya mengalami kesalahan serupa:

Reading package lists... Error!
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/dpkg/status
E: The package lists or status file could not be parsed or opened.

Saya mengikuti saran serupa untuk menyalin status-old.

$ head /var/lib/dpkg/status
$ head /var/lib/dpkg/status-old

Semua file status saya kosong karena alasan tertentu. Untungnya, saya menemukan ada cadangan dari file-file ini:

$ ls -l /var/backups/dpkg.status.*
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.0
-rw-r--r-- 1 root root 444620 Nov 15 06:33 /var/backups/dpkg.status.1.gz
-rw-r--r-- 1 root root 128168 Sep 20  2013 /var/backups/dpkg.status.2.gz
-rw-r--r-- 1 root root 112545 Sep 16  2013 /var/backups/dpkg.status.3.gz
-rw-r--r-- 1 root root 107767 Sep 14  2013 /var/backups/dpkg.status.4.gz
-rw-r--r-- 1 root root 107766 Sep 11  2013 /var/backups/dpkg.status.5.gz
-rw-r--r-- 1 root root  94583 Sep 11  2013 /var/backups/dpkg.status.6.gz

Saya memeriksa cadangan terbaru ...

$ head /var/backups/dpkg.status.0

... tapi itu masih kosong. Jadi saya membuka ritsleting yang lebih tua ...

$ gunzip /var/backups/dpkg.status.1.gz
$ head /var/backups/dpkg.status.1

Kali ini ada konten. Jadi saya menyalinnya ...

$ cp /var/backups/dpkg.status.1 /var/lib/dpkg/status

Kemudian apt-get updateberlari tanpa masalah.

Kredit masuk ke pos ini.

Andrew
sumber
3

Saya memiliki masalah yang sama dan mencoba semua pemecahan masalah yang disebutkan dalam jawaban lain. Anehnya satu-satunya perbaikan adalah langkah yang berbeda:

  • Pergi ke Perangkat Lunak & pembaruan -> Perangkat Lunak Ubuntu -> Unduh Dari -> Lainnya-> Pilih Server Terbaik

  • Tunggu tesnya. Pada akhir tes, server terbaik akan dipilih, tidak harus yang terdekat atau server utama atau server untuk lokal Anda.

  • Sekarang Reload Repo data, Ini akan selesai dengan baik.

Muhammad Annaqeeb
sumber