Jak naprawić błąd „Problem z MergeList” lub „Nie można przeanalizować pliku statusu” podczas próby aktualizacji?

355

Komputer dał mi ten wynik w oknie:

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.

Jak mogę to naprawić?

Braiam
źródło
7
Ciągle mnie zaskakuje, jak niezręcznie ten system operacyjny radzi sobie z aktualizacjami, nawet teraz, że ta i podobne rzeczy są wymagane po tym, jak użytkownik nie zastosuje specjalnego niewłaściwego użycia.
mat

Odpowiedzi:

485

Te polecenia terminala powinny rozwiązać problem:

Najpierw usuń listę scalania, otwierając terminal (naciśnij Ctrl+ Alt+, Taby uruchomić) i uruchom to polecenie *:

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

Następnie wygeneruj nowy, uruchamiając prostą aktualizację:

sudo apt-get update

Oto raport o błędzie (i inny ) dotyczący tego problemu, który został już naprawiony, więc nie powinien tworzyć nowych zniekształconych plików, jednak jeśli masz już zniekształcone pliki, musisz je usunąć, jak wyjaśniono w tym poście.


* Opcje używane dla rm są -vpełne

-v, --verbose wyjaśniają, co się dzieje

i -fsiła

-f, --force ignoruje nieistniejące pliki i argumenty, nigdy nie pytaj

Jeśli nie masz pewności co do wiersza polecenia lub używanych opcji, zawsze zapoznaj się z instrukcją na stronie polecenia. Można je uzyskać w Internecie, wyszukując man i polecenie, na przykład man rm, lub można uzyskać dostęp do tych samych informacji, wpisując dokładnie to samo polecenie w terminalu, na przykład man rminstrukcje opuszczania strony będą na dole terminala, takie jak to

obraz opcji strony podręcznika

Allan
źródło
8
Jedna osoba stwierdziła, że ​​musiał wykonać te dwa kroki wiele razy, ale w końcu zadziałało.
John S Gruber,
5
Dziwnie jest umieścić -vfna końcu rmpolecenia.
Keith Thompson,
6
Nie rozwiązało to dla mnie problemu. aktualizacja nadal pokazuje mi ten błąd.
marines
1
Jest to powtarzający się problem. Od czasu do czasu to się dzieje. Czy ktoś jest świadomy przyczyny tego problemu?
Rushil Paul
1
Zredagowałem odpowiedź dla zrozumienia zdolności @Jasser
Allan
82

Otwórz terminal i uruchom kolejno następujące polecenia:

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

Zobacz też:

Tommyk
źródło
1
co robi -vf?
speedox
5
@speedox, zgodnie z man rm, -voznacza „gadatliwy” i -foznacza „siłę”. Innymi słowy, usuń wszystkie wyznaczone pliki bez monitowania i powiedz użytkownikowi, co robi.
Fouric
W moim przypadku po prostu sudo apt-get updatenaprawiłem problem. Myślę, że Allan wspomniał o nowszych wersjach apt poprawiających to automatycznie, więc może najpierw wypróbuj aktualizację.
ThorSummoner,
23

Zepsułeś się podczas edytowania /var/lib/dpkg/status. Przywróć go z kopii zapasowej wykonanej przed edycją. Oczywiście zrobiłeś kopię zapasową, prawda?

Ponieważ nie utworzono kopii zapasowej, edytuj ją ponownie, ostrożnie . Staraj się nie powodować większych szkód.

Możesz użyć /var/lib/dpkg/status.oldjako punktu odniesienia. Jest to kopia zapasowa statuspliku sprzed ostatniego dpkguruchomienia. Biegać

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

zobaczyć różnice. Cofnij zmiany wprowadzone ręcznie i zachowaj zmiany wprowadzone podczas ostatniego dpkguruchomienia.

Jeśli naprawdę nie uda się naprawić plik, skopiuj /var/lib/dpkg/status.oldnad /var/lib/dpkg/status. Otrzymasz dobrze uformowaną, ale nieaktualną bazę danych pakietów.

Nigdy nie musisz edytować /var/lib/dpkg/statuspodczas normalnej pracy. Nawet jeśli coś pójdzie nie tak, /var/lib/dpkg/statusnie wymaga to interwencji administratora. Niezależnie od tego, jakie crossplatformuibyły Twoje problemy , prawdopodobnie istnieje lepszy sposób ich rozwiązania. Jedyną rzeczą, jakiej potrzebowałem do edycji , było uszkodzenie pliku /var/lib/dpkg/statusnadrzędnego Packages.

Gilles
źródło
Chciałbym również poznać lepszy sposób, o którym wspomniałeś, aby usunąć crossplatformui, jeśli możesz pomóc, bo próbowałem wszystkich możliwych sposobów, aby go usunąć i próbowałem znaleźć wiele rozwiązań, ale tylko jedno, o którym wspomniałem, zadziałało ...
Nirmik
1
@Nirmik Nie mam pojęcia crossplatformui. Zadaj to jako osobne pytanie. Mogę powiedzieć, że w ciągu ponad dekady używania dpkg, w tym wielu nieoficjalnych źródeł, bardzo rzadko potrzebowałem edytować statusplik i tylko wtedy, gdy było uszkodzone repozytorium innej firmy.
Gilles
Ok ... Jeszcze raz bardzo dziękuję .... jak sugerujesz, opublikuję to jako nowe pytanie :) również, ponieważ wydajesz się być bardzo zaawansowanym użytkownikiem, chciałbym cię zapytać, czy wiesz coś o tworzeniu niedziałającego GORĄCEGO -Klucze działają? (mój klucz bezprzewodowy nie działa)
Nirmik
Próbowałem umieścić stary w miejsce nowego, nie naprawiłem dla mnie. :-(
Stéphane Gourichon
1
re: {Zepsułeś się podczas edytowania / var / lib / dpkg / status} jak dla mnie - nie, nie jestem, nie dotknąłem tego pliku :) Jednak to tylko rozwiązanie, które rozwiązuje problem w moim walizka. Dziękuję Ci.
ruslo,
18

Zrobiłem

sudo apt-get clean
sudo apt-get update

i zadziałało.

psychok7
źródło
1
Nie naprawiono dla mnie. :-(
Stéphane Gourichon
16

Wykonanie kroków 2-5 w Procedurze rozwiązywania problemów z Menedżerem pakietów zwykle rozwiązuje ten problem.

W kroku 2 wyłącz wszystkie umowy PPA. Możesz odznaczyć je wszystkie w źródłach oprogramowania w taki sam sposób, jak odznaczysz tylko jedno; zobacz Jak wyłączyć określoną umowę PPA? . Możesz je ponownie włączyć później.

W kroku 3 zamknij wszystkie otwarte programy, które możesz. Zapewnienie bezpieczeństwa przeglądarki internetowej jest prawdopodobnie bezpieczne, więc masz przed sobą instrukcje. Ale szczególnie ważne jest, aby upewnić się, że menedżerowie pakietów nieuruchomieni . Należą do nich Centrum oprogramowania, Aktualizator oprogramowania (Menedżer aktualizacji w starszych wersjach Ubuntu), Synaptic i Gdebi. Zawiera także narzędzia do zarządzania pakietami wiersza poleceń apt-get, takie jak dpkg, i aptitude.

Pamiętaj, że jeśli inni użytkownicy są zalogowani jednocześnie, powinni się wylogować, jeśli to możliwe.

W kroku 4 otwórz okno terminala. Jednym ze sposobów, aby to zrobić, niezależnie od używanego środowiska pulpitu, jest naciśnięcie Ctrl+ Alt+ T.

W kroku 5 uruchom następujące polecenia w oknie terminala:

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"' _ '{}' \;

Skopiowałem to dosłownie z PackageManagementTroubleshoootingProcedure w dniu 2 marca 2014 r. Te polecenia ewoluowały w przeszłości, a polecenia zalecane w tym artykule mogą zostać zmienione lub rozszerzone w przyszłości . Więc możesz chcieć pracować od kroku 5 tam . (Ten artykuł, stworzony / zredagowany przez „Współtwórców wiki dokumentacji Ubuntu” - zwłaszcza Mark Rijckenberg - jest licencjonowany CC-BY-SA 3.0 , co pozwala na umieszczenie go tutaj z odpowiednim uznaniem ).

Niektóre z tych poleceń próbują rozwiązać problem (a także mogą wyświetlać informacje diagnostyczne); inni wyświetlają cenne informacje o problemie, które możesz uwzględnić w swoim pytaniu lub w inny sposób przekazać komuś, kto ci pomaga. (Lub, w zależności od twoich umiejętności, może umożliwić ci zdiagnozowanie i rozwiązanie.)

Często to naprawia, ale gdy nie, często daje wystarczającą ilość informacji, aby to naprawić.

Nie musisz ręcznie wpisywać tych poleceń; możesz je skopiować i wkleić. Jednak zalecam wklejanie i uruchamianie każdego z nich osobno. Dzięki temu wyraźniej jest, jakie dane wyjściowe są z których poleceń.

Eliah Kagan
źródło
Skopiowałem cały blok i wkleiłem zamiast uruchamiać jeden po drugim. Chociaż kilka poleceń w tym jest bezużytecznych, a niektóre zawiodły, ale w końcu to pomaga w moim przypadku
phuclv
11

Widziałem także, że ten problem występuje, gdy masz zbyt wiele źródeł w swoich repozytoriach.

Wypróbuj powyższe rozwiązanie i / lub być może to, które czasami jest zalecane na starterze:

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

Poinformuj nas, jak sobie radzisz.

andybleaden
źródło
Dziękuję Ci! Nie działało to również z DSL bez makedir.
Doug
4

Wystąpił podobny błąd:

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.

Skopiowałem podobne sugestie status-old.

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

Wszystkie moje pliki statusu były z jakiegoś powodu puste. Na szczęście dowiedziałem się, że istnieją kopie zapasowe tych plików:

$ 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

Sprawdziłem najnowszą kopię zapasową ...

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

... ale wciąż było puste. Więc rozpakowałem starszy ...

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

Tym razem była treść. Więc skopiowałem to ...

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

Potem apt-get updatebiegł bez problemów.

Kredyt trafia do tego postu.

Andrzej
źródło
3

Miałem ten sam problem i próbowałem rozwiązać wszystkie problemy wymienione w innych odpowiedziach. O dziwo jedyną poprawką był inny krok:

  • Przejdź do Oprogramowanie i aktualizacje -> Oprogramowanie Ubuntu -> Pobierz z -> Inne-> Wybierz najlepszy serwer

  • Poczekaj na testy. Na koniec testów zostanie wybrany najlepszy serwer, niekoniecznie najbliższy, główny serwer ani serwer dla twojego regionu.

  • Teraz ponownie załaduj dane repozytorium, zakończy się poprawnie.

Muhammad Annaqeeb
źródło