GNU/Linux >> Znalost Linux >  >> Linux

Rozbitý apt, chybějící závislosti, co teď?

Problém, kterému čelíte, je následující. Pokusili jste se spustit běžnou aktualizaci na vašem linuxovém boxu, pravděpodobně na systému založeném na Ubuntu nebo Debianu, který používá apt jako správce balíčků. Po aktualizaci obsahu úložiště jste spustili příkaz dist-upgrade a brzy došlo k chybě. Apt si stěžoval na chybějící nebo poškozené závislosti a navrhl, abyste znovu spustili příkaz s --fix-broken nebo podobným. Zdá se však, že to nepomůže.

S tímto problémem jsem se setkal před několika týdny na KDE neon. Ten problém mě opravdu štval, protože bez určitých odborných znalostí není cesty ven. Zůstane vám nepoužitelný systém, který nelze spolehlivě aktualizovat. To je tak křehké a jsme v roce 2020, kdy by člověk očekával určitou úroveň robustnosti od softwaru. LELZ. V minulosti jsem neon chválil za jeho odolnost, ale pak pokračoval a odvedl svou vlastní práci. Dovolte mi, abych vám ukázal, jak můžete tento problém vyřešit.

Problém podrobněji

Toto je to, co vidíte na příkazovém řádku:

dpkg:chyba zpracování archivu /var/cache/apt/archives/calligraplan_1%3a3.2.2+p18.04+
git20191212.1837-0_amd64.deb (--unpack):
pokouším se přepsat '/ usr/share/locale/ar/LC_MESSAGES/calligraplan.mo', který je také v balíčku calligra-data 1:3.1.0+p18.04+git20191222.0027-0
dpkg-deb:error:paste subprocess bylo zabito signálem (Broken pipe)
Při zpracování došlo k chybám:
/var/cache/apt/archives/calligraplan_1%3a3.2.2+p18.04+
git20191212.1837-0_amd64 .deb
E:Podproces /usr/bin/dpkg vrátil kód chyby (1)

V mém případě byl nešťastný balíček Calligra. Nejsem si jistý, proč to tam vůbec bylo, ale hej, musíme to opravit, že jo. Standardní postup je tedy spustit apt s volbou --fix-broken. Nebo možná můžete zkusit s --ignore-missing, další platnou možností. Až na to, že narazíte na peklo cyklické závislosti a neexistuje žádná cesta ven.

sudo apt --fix-broken install
Čtení seznamů balíčků... Hotovo
Vytváření stromu závislostí
Čtení informací o stavu... Hotovo
Možná budete chtít spustit 'apt -- oprava-poškozená instalace', abyste je opravili.
Následující balíčky mají nesplněné závislosti:
calligra :Závisí:calligraplan (>=1:3.1.0+p18.04+git20191222.0027-0), ale 1:3.1.0+p18.04+ git20191119.0027-0 je nainstalován
calligraplan :Závisí:calligra-libs (=1:3.1.0+p18.04+git20191119.0027-0), ale 1:3.1.0+p18.04+git201912 -0 je nainstalováno
E:Nesplněné závislosti. Zkuste 'apt --fix-broken install' bez balíčků (nebo zadejte řešení).

V tuto chvíli nemůžete skutečně odstranit Calligra, protože správce balíčků je již v nestabilním stavu. Logickým krokem by bylo ignorovat tento konkrétní balíček nebo jakýkoli poškozený balíček pomocí volby --ignore-missing nebo podobně, bohužel, zdá se, že ani to nefunguje. Systém je tedy přerušen.

Řešení

Jediný způsob, jak tento problém vyřešit, je skutečně upravit stavový soubor správce balíčků a ručně vytáhnout jakoukoli zmínku o postižených balíčcích a jejich závislostech, aby apt mohl pokračovat a nainstalovat zdravou část. Nyní to není dobrá věc, protože vám zůstane neopravený software – v některých případech to může být důležité, internetově orientované věci, možná dokonce se skutečnou zranitelností nebo dvěma, nebo možná software s chybami, které se projeví, když práce (řekněme jedna z kritických systémových knihoven). Ale umožňuje vám to pokračovat v práci a možná někdy v budoucnu obdržet zdravou dávku aktualizací.

V tuto chvíli potřebujete otevřít /var/lib/dpkg/status v textovém editoru jako root. V tuto chvíli jsem narazil na další hloupý problém, a to na skutečnost, že nemůžete „údajně“ spustit Kate jako root, kvůli případným bezpečnostním chybám. Totální a naprostý nesmysl.

sudo kate /var/lib/dpkg/status
Spuštění Kate pomocí sudo není možné kvůli neopravitelným bezpečnostním chybám.

Ale můžete sudo su - a pak spustit Kate jako root, žádný problém. Toto je jeden z těch případů „najdeme problém k řešení“, protože nemá žádný skutečný vliv na skutečnou práci a nedělá žádný rozdíl, kromě obtěžování uživatelů. Jako byste nemohli jednoduše otevřít okno terminálu a odstranit věci pomocí sudo, pokud chcete.

Otevřete soubor. Toto je jen dlouhý seznam balíčků, které se budou instalovat. Každý balíček je dodáván s popisem, verzí a případnými závislostmi. Pro mě bylo řešením vyhledat jakoukoli zmínku o slovu calligra a pak jen odstranit tyto bloky balíčku ze stavového souboru. Obecně tento soubor docela dobře ilustruje nepořádek, se všemi různými sekcemi závislostí, doporučení, přestávek a čehokoli jiného.

Balíček:libzxingcore1
Stav:instalace v pořádku nainstalována
Priorita:volitelné
...
Verze:1.0.7-1+18.04+bionic+build2
Závisí:libc6 (>=2.14), libgcc1 (>=1:3.4), libstdc++6 (>=5.2)
...

Balík:mokutil
Stav:instalace v pořádku nainstalováno
Priorita:volitelné
...
Verze:0.3.0+1538710437.fb6250f-0ubuntu2~18.04.1
Závisí:libc6 (>=2.14), libefivar1 (> =34), libssl1.1 (>=1.1.0)
...

Balík:libkf5itemviews-dev
Stav:instalace je v pořádku nainstalována
Priorita:volitelné
...
Verze:5.65.0+p18.04+git20191222.0152-0
Nahrazuje:libkf5itemviews-doc (<<5.61.90-0)
Závisí:libkf5itemviews5 (=5.65.0+p18.04+git20191222.0152-0), qtbase5-dev (>=5.8.0~)
Doporučuje:libkf5itemviews-doc (=5.65.24+p180.9 0152-0)
Přestávky:kio-dev (<<5.28), libkf5iconthemes-dev (<<5.51), libkf5kcmutils-dev (<<5.51), libkf5kio-dev (<<5.51), libkf5xmlgui-dev (<<5.51)
...

Náš cíl je ale jednoduchý – smazat konfliktní záznamy a umožnit fungování našeho systému. Jakmile jsem to dokončil, mohl jsem znovu spustit správce balíčků apt a dokončit aktualizace. Práce hotová.

Závěr

Jsem překvapen a zděšen, že jsme ve stavu, kdy jedna špatně zabalená komponenta může úplně zničit stav systému v Linuxu. A věc se má tak, že existuje mnoho způsobů, jak tomu zabránit, pokud by byl Linux vyvíjen jako produkt a ne jako řada fragmentovaných funkcí vývojáři, kteří nevidí větší obrázek skutečného použití. Například PŘED spuštěním instalace zkontrolujte, zda jsou všechny balíčky v pořádku. Automaticky odstranit špatné balíčky, pokud jsou identifikovány. Vyzvěte uživatele. Zakázat špatnou součást. Cokoli, něco.

Ale to byl problém v roce 2000 a je to stále problém v roce 2020, a proto ve svém produkčním nastavení většinou používám Windows, protože utrpení není moje druhé jméno. Pokud zjistíte, že používáte příkazový řádek a věci jdou na jih, možná se budete chtít podívat na stavový soubor. Pomůže vám obejít přerušené nebo chybějící závislosti a umožní vám aktualizovat váš box. Je smutné, že jsme tu skončili.


Linux
  1. apt:příkaz nenalezen

  2. Co jsou základní a základní?

  3. restartovat nebo vypnout -r nyní:jaký příkaz restartu je bezpečnější?

  1. Správa balíků Linux pomocí apt

  2. Jaký je váš oblíbený správce balíčků pro Linux?

  3. Jak vypsat seznam závislostí balíčku v Linuxu

  1. Vysvětlení správce balíčků APT v systému Linux

  2. Jak nainstalovat soubor Deb pomocí Dpkg -i nebo Apt?

  3. Co se stalo s /etc/apt/apt.conf?