GNU/Linux >> Linux Esercitazione >  >> Linux

Apt rotto, dipendenze mancanti, e adesso?

Il problema che stai affrontando è il seguente. Hai provato a eseguire un aggiornamento regolare sulla tua macchina Linux, molto probabilmente un sistema basato su Ubuntu o Debian che utilizza apt come gestore di pacchetti. Dopo aver aggiornato il contenuto del repository, è stato eseguito il comando dist-upgrade e subito si è verificato un errore. Apt si lamentava di dipendenze mancanti o interrotte e ha suggerito di eseguire nuovamente il comando con --fix-broken o simili. Tuttavia, questo non sembra aiutare.

Ho riscontrato questo problema alcune settimane fa su KDE neon. Il problema mi ha davvero infastidito, perché senza una conoscenza esperta non c'è via d'uscita. Ti rimane un sistema inutilizzabile che non può essere aggiornato in modo affidabile. Questo è così fragile e siamo nel 2020, quando ci si aspetterebbe un certo livello di robustezza dal software. LELZ. Ho elogiato il neon in passato per la sua resilienza, ma poi è andato avanti e ha annullato il proprio lavoro. Ad ogni modo, lascia che ti mostri come puoi risolvere questo problema.

Problema in dettaglio

Questo è ciò che vedi sulla riga di comando:

dpkg:errore nell'elaborazione dell'archivio /var/cache/apt/archives/calligraplan_1%3a3.2.2+p18.04+
git20191212.1837-0_amd64.deb (--unpack):
tentando di sovrascrivere '/ usr/share/locale/ar/LC_MESSAGES/calligraplan.mo', anch'esso nel pacchetto calligra-data 1:3.1.0+p18.04+git20191222.0027-0
dpkg-deb:error:paste subprocess è stato interrotto dal segnale (pipe rotto)
Si sono verificati errori durante l'elaborazione:
/var/cache/apt/archives/calligraplan_1%3a3.2.2+p18.04+
git20191212.1837-0_amd64 .deb
E:Il sottoprocesso /usr/bin/dpkg ha restituito un codice di errore (1)

Nel mio caso, il pacchetto traballante era Calligra. Non sono sicuro del motivo per cui fosse lì in primo luogo, ma ehi, dobbiamo sistemare questo, giusto. Quindi la procedura standard è eseguire apt con l'opzione --fix-broken. O forse, potresti provare con --ignore-missing, un'altra opzione valida. A parte il fatto che colpisci un inferno di dipendenza ciclica e non c'è via d'uscita.

sudo apt --fix-broken install
Lettura degli elenchi di pacchetti... Fatto
Costruzione dell'albero delle dipendenze
Lettura delle informazioni sullo stato... Fatto
Potresti voler eseguire 'apt -- fix-broken install' per correggerli.
I seguenti pacchetti hanno dipendenze non soddisfatte:
calligra :Dipende da:calligraplan (>=1:3.1.0+p18.04+git20191222.0027-0) ma 1:3.1.0+p18.04+ git20191119.0027-0 è installato
calligraplan :Dipende:calligra-libs (=1:3.1.0+p18.04+git20191119.0027-0) ma 1:3.1.0+p18.04+git20191222.0027 -0 è installato
E:dipendenze non soddisfatte. Prova 'apt --fix-broken install' senza pacchetti (o specifica una soluzione).

A questo punto, non puoi davvero rimuovere Calligra, perché il gestore di pacchetti è già in uno stato instabile. Il passo logico sarebbe ignorare questo pacchetto specifico, o qualsiasi pacchetto danneggiato, usando l'opzione --ignore-missing o simili, ahimè, neanche questo sembra funzionare. Quindi il sistema è bloccato.

Soluzione

L'unico modo per aggirare questo problema è modificare effettivamente il file di stato del gestore pacchetti e rimuovere manualmente qualsiasi menzione dei pacchetti interessati e delle loro dipendenze, in modo che apt possa riprendere e installare la parte sana. Ora, questa non è una buona cosa, perché rimarrai con software senza patch - in alcuni casi, questo potrebbe essere materiale importante, rivolto a Internet, forse anche con una o due vulnerabilità reali, o forse software con bug che si manifestano quando lavoro (diciamo una delle librerie di sistema critiche). Ma ti consente di continuare a lavorare e magari di ricevere una buona serie di aggiornamenti in futuro.

Quello che ti serve a questo punto è aprire /var/lib/dpkg/status in un editor di testo come root. A questo punto, ho riscontrato un altro problema stupido, ed è il fatto che non puoi "presumibilmente" avviare Kate come root, a causa di potenziali vulnerabilità di sicurezza. Assurdità totale e totale.

sudo kate /var/lib/dpkg/status
Non è possibile eseguire Kate con sudo a causa di vulnerabilità di sicurezza non risolvibili.

Ma puoi sudo su - e quindi eseguire Kate come root, nessun problema. Questo è uno di quei casi "troviamo un problema per una soluzione", perché non ha alcun impatto effettivo sul lavoro reale e non fa alcuna differenza, se non per infastidire gli utenti. Come se non potessi semplicemente aprire una finestra di terminale ed eliminare cose con sudo, se lo desideri.

Apri il file. Questo è solo un lungo elenco di pacchetti che verranno installati. Ogni pacchetto viene fornito con una descrizione, versione ed eventuali dipendenze. Per me, la soluzione era cercare qualsiasi menzione della parola calligra, quindi eliminare semplicemente quei blocchi di pacchetto dal file di stato. In generale, questo file illustra abbastanza bene il pasticcio, con tutte le diverse sezioni di dipende, consigli, interruzioni e quant'altro.

Pacchetto:libzxingcore1
Stato:install ok installato
Priorità:opzionale
...
Versione:1.0.7-1+18.04+bionic+build2
Dipende:libc6 (>=2.14), libgcc1 (>=1:3.4), libstdc++6 (>=5.2)
...

Pacchetto:mokutil
Stato:install ok installato
Priorità:opzionale
...
Versione:0.3.0+1538710437.fb6250f-0ubuntu2~18.04.1
Dipende:libc6 (>=2.14), libefivar1 (> =34), libssl1.1 (>=1.1.0)
...

Pacchetto:libkf5itemviews-dev
Stato:install ok installato
Priorità:opzionale
...
Versione:5.65.0+p18.04+git20191222.0152-0
Sostituisce:libkf5itemviews-doc (<<5.61.90-0)
Dipende:libkf5itemviews5 (=5.65.0+p18.04+git20191222.0152-0), qtbase5-dev (>=5.8.0~)
Raccomanda:libkf5itemviews-doc (=5.65.0+p18.04+git20191222. 0152-0)
Pause:kio-dev (<<5.28), libkf5iconthemes-dev (<<5.51), libkf5kcmutils-dev (<<5.51), libkf5kio-dev (<<5.51), libkf5xmlgui-dev (<<5.51)
...

Ma il nostro obiettivo è semplice:eliminare le voci in conflitto e consentire al nostro sistema di funzionare. In effetti, una volta completato questo, sono stato in grado di eseguire nuovamente il gestore di pacchetti apt e completare gli aggiornamenti. Lavoro terminato.

Conclusione

Sono sorpreso e costernato dal fatto che siamo in uno stato in cui un componente mal imballato può rovinare completamente lo stato del sistema in Linux. E il fatto è che ci sono molti modi per impedirlo, se solo Linux fosse stato sviluppato come prodotto e non come una serie di funzioni frammentate da sviluppatori che non vedono il quadro più ampio dell'utilizzo effettivo. Ad esempio, controlla che tutti i pacchetti siano sani PRIMA di eseguire l'installazione. Rimuove automaticamente i pacchetti danneggiati se vengono identificati. Avvisa l'utente. Metti nella lista nera il componente difettoso. Qualcosa, qualcosa.

Ma questo era un problema nel 2000 ed è ancora un problema nel 2020, ed è per questo che uso principalmente Windows nella mia configurazione di produzione, perché la sofferenza non è il mio secondo nome. Se ti ritrovi ad agire sulla riga di comando e le cose vanno male, allora potresti voler guardare il file di stato. Ti aiuterà a aggirare le dipendenze interrotte o mancanti e ti consentirà di aggiornare la tua casella. Con una nota triste ma felice, abbiamo finito qui.


Linux
  1. Spiegazione di APT Package Manager su Linux

  2. Cosa è successo a /etc/apt/apt.conf?

  3. apt:comando non trovato

  4. Cosa sono build-essential e build-dep?

  5. reboot o shutdown -r now:quale comando di riavvio è più sicuro?

Gestione dei pacchetti Ubuntu con apt

Novità di Ubuntu 21.04 – Scarica ora!

MX Linux MX-19.2 KDE - Manca in azione

Errore del plug-in VPN Linux non riuscito - E adesso?

Plasma desktop kstart:impossibile connettersi al server X - E adesso?

Il comando apt:una guida pratica all'uso