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ć?


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


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ż:


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.


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,


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 nie są uruchomieni . 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ń.


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.