it-swarm.dev

Jak mohu opravit chybu „Problém s MergeList“ nebo „stavový soubor nelze analyzovat“ při pokusu o aktualizaci?

Počítač mi dal tento výstup v okně:

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 to mohu opravit?

363
user12250

Tyto příkazy terminálu by měly vyřešit váš problém:

Nejprve odeberte seznam sloučení otevřením terminálu (Stiskněte Ctrl+Alt+T spusťte) a spusťte tento příkaz *:

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

Dále vygenerujte novou spuštěním jednoduché aktualizace:

Sudo apt-get update

Zde je hlášení o chybě (a jiné ) pro tento problém, který je nyní opraven, takže by neměl vytvářet nové chybně formátované soubory, pokud však již máte špatně formátované soubory, je třeba je odstranit, jak je vysvětleno v tomto příspěvku.


* Možnosti používané pro rm jsou -v podrobná

-v, - podrobně vysvětlit, co se děje

a -f platnost

-f, --force ignorovat neexistující soubory a argumenty, nikdy Prompt

Pokud si nejste jisti příkazovým řádkem nebo použitými možnostmi, vždy se podívejte na manuálovou stránku příkazu. K nim lze přistupovat na internetu hledáním člověka a příkazu, například man rm , nebo můžete získat stejné informace zadáním přesně stejného příkazu do terminál například man rm pokyny pro ukončení stránky budou v dolní části terminálu, jako je tento

picture of man page options

493
Allan

Otevřete terminál a spusťte postupně následující příkazy:

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

Viz také:

84
tommyk

Když jsi upravil /var/lib/dpkg/status. Obnovte ji ze zálohy, kterou jste vytvořili před úpravou. Samozřejmě jste vytvořili zálohu, že?

Protože jste zálohu neudělali, upravte ji znovu pečlivě. Snažte se nezpůsobit další škody.

Můžeš použít /var/lib/dpkg/status.old jako referenční bod. Toto je záloha souboru status z před posledním spuštěním dpkg. Běh

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

vidět rozdíly. Zrušit ručně provedené změny a zachovat změny, které byly provedeny při posledním běhu dpkg.

Pokud opravdu nemůžete soubor opravit, zkopírujte /var/lib/dpkg/status.old přes /var/lib/dpkg/status. Získáte přehlednou, ale zastaralou databázi balíčků.

Už nikdy nebudete muset upravovat /var/lib/dpkg/status v normálním provozu. I když se věci pokazí vážně, /var/lib/dpkg/status není něco, co by vyžadovalo zásah administrátora. Ať už byly vaše problémy s crossplatformui jakékoli, pravděpodobně existuje lepší způsob jejich řešení. Jediný čas, kdy jsem kdy potřeboval upravit /var/lib/dpkg/status bylo, když byl porušen předcházející Packages soubor.

Udělal jsem

Sudo apt-get clean
Sudo apt-get update

a fungovalo to.

19
psychok7

Následující kroky 2-5 v Postup řešení problémů správce balíků obvykle tento problém řeší.

Pro krok 2 deaktivujte všechny vaše PPA. Můžete zrušit zaškrtnutí všech z nich ve Softwarových zdrojích stejným způsobem, jako byste zrušili zaškrtnutí pouze jednoho; viz Jak zakázat konkrétní PPA? . Můžete je znovu povolit později.

Pro krok 3 zavřete všechny otevřené programy, které můžete. Pravděpodobně je bezpečné mít webový prohlížeč otevřený, takže máte před sebou své pokyny. Je však obzvláště důležité zajistit, aby všichni správci balíčků byli neběží. To zahrnuje Software Center, Software Updater (Update Manager ve starších verzích Ubuntu), Synaptic a Gdebi. Zahrnuje také obslužné programy pro správu balíků příkazového řádku, například apt-get, dpkg a aptitude.

Pokud jsou ostatní uživatelé přihlášeni současně, měli by se odhlásit, pokud je to možné.

Pro krok 4 otevřete okno terminálu. Jedním ze způsobů, jak toho dosáhnout, bez ohledu na to, jaké desktopové prostředí používáte, je stisknout Ctrl+Alt+T.

Pro krok 5 spusťte tyto příkazy v okně terminálu:

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

Zkopíroval jsem doslovně z PackageManagementTroubleshoootingProcedure dne 2. března 2014. Tyto příkazy se v minulosti vyvinuly a doporučené příkazy v tomto článku mohou být znovu změněny nebo rozšířeny v budoucnost . Možná budete chtít pracovat od tam krok 5 . (Tento článek, vytvořen/upraven autorem „Přispěvatelé do wiki dokumentace Ubuntu“ - zejména Mark Rijckenberg - je licencován CC-BY-SA 3. , což umožňuje zahrnutí sem se správným uvedením.)

Některé z těchto příkazů se pokouší problém vyřešit (a také mohou zobrazovat diagnostické informace); ostatní zobrazují cenné informace o problému, který můžete zahrnout do své otázky, nebo jinak poskytnout někomu, kdo vám pomůže. (Nebo, v závislosti na vašich schopnostech, můžete umožnit vy diagnostikovat a vyřešit to.

Často to opraví, ale pokud tomu tak není, často poskytuje dostatek informací k jejich opravě.

Tyto příkazy nemusíte psát ručně; můžete je zkopírovat a vložit. Doporučuji však vložit a spustit každý zvlášť. Tím je jasnější, jaký je výstup, ze kterých příkazů.

16
Eliah Kagan

Viděl jsem také, že k tomuto problému dochází, když máte ve svém repozitáři příliš mnoho zdrojů.

Vyzkoušejte výše uvedené řešení a/nebo možná i to, které se někdy doporučuje na launchpadu:

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

Dejte nám vědět, jak se vám daří.

11
andybleaden

Narazil jsem na podobnou chybu:

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.

Následoval jsem podobné návrhy ke zkopírování status-old.

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

Všechny mé stavové soubory byly z nějakého důvodu prázdné. Naštěstí jsem zjistil, že existují zálohy těchto souborů:

$ 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

Zkontroloval jsem poslední zálohu ...

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

... ale stále to bylo prázdné. Takže jsem rozbalil starší ...

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

Tentokrát byl obsah. Tak jsem to zkopíroval ...

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

Pak apt-get update běžel bez problémů.

K tomuto příspěvku jde kredit.

4
Andrew

Měl jsem stejný problém a vyzkoušel všechna řešení potíží uvedená v jiných odpovědích. Kupodivu jediná oprava byla jiný krok:

  • Přejděte na Software a aktualizace -> Ubuntu Software -> Stáhnout z -> Ostatní -> Vyberte nejlepší server

  • Počkejte na testy. Na konci testů bude vybrán nejlepší server, ne nutně nejbližší server ani hlavní server ani server pro vaše národní prostředí.

  • Nyní znovu načtěte data Repo, dokončí to správně.

3
Muhammad Annaqeeb