[Risolto] Forzare reinstallazione pacchetto corrotto

Domande inerenti al gestore dei pacchetti di Arch Linux
Rispondi
GTP
Newbie
Messaggi: 10
Iscritto il: 16 marzo 2016, 22:31
Architettura: x86_64 (64bit)

[Risolto] Forzare reinstallazione pacchetto corrotto

Messaggio da GTP » 1 novembre 2016, 12:04

Salve a tutti,

sul mio pc desktop uso Netrunner rolling, che è basato su Arch Linux. Ieri a causa di un crash durante un aggiornamento ho spento il sistema tramite il comando poweroff (se serve posso spiegare i dettagli, ma non credo siano rilevanti). Stamattina quando ho avviato il pc si è bloccato prima di avviare KDE, ma credo fosse riuscito ad avviare Xorg: è comparsa una finestra d'errore che mi diceva che non è riuscito a caricare dbus e mi chiedeva se potevo caricare qtbus ( qualcosa di simile). In ogni caso sono passato ad un terminale con la combinazione ctrl-alt-F2 dal quale ho eliminato il file di lock di pacman e lanciato da root pacman -Syu che mi ha ridato il controllo dell'interfaccia grafica e il grosso sembra adesso funzionare, tuttavia rimane ancora qualche pacchetto corrotto. Ispirandomi ad un'altra discussione ho trovato il modo di ottenere un elenco dei pacchetti con problemi usando

Codice: Seleziona tutto

pacman -Qqq | pacman -Qkk > /dev/null
ma non sono riuscito a sfruttarlo per una reinstallazione automatica. Allora ho provato a seguire la procedura della wiki ufficiale di Arch Linux per reinstallare tutti i pacchetti e qui viene il problema: sia lanciando il comando della wiki che provando a (re)installarlo o rimuoverlo singolarmente il pacchetto libreoffice (ho provato anche a specificarlo come libreoffice-fresh) mi dà il seguente errore:

Codice: Seleziona tutto

sudo pacman -S libreoffice
[sudo] password di giacomo: 
attenzione: libreoffice-fresh-5.2.2-2 è aggiornato ma sarà reinstallato
risoluzione delle dipendenze in corso...
ricerca dei pacchetti in conflitto in corso...
errore: impossibile aprire il file /var/lib/pacman/local/libreoffice-fresh-5.2.2-2/desc: File o directory non esistente
attenzione: impossibile caricare tutti i metadata del pacchetto libreoffice-fresh-5.2.2-2
errore: impossibile eseguire l'operazione richiesta (il pacchetto non è valido oppure è corrotto)
creare la cartella desc nella posizione indicata o usare l'opzione --force non aiuta. L'unica differenza l'ho trovata con

Codice: Seleziona tutto

sudo pacman -R libreoffice-fresh
errore: impossibile aprire il file /var/lib/pacman/local/libreoffice-fresh-5.2.2-2/desc: File o directory non esistente
attenzione: impossibile caricare tutti i metadata del pacchetto libreoffice-fresh-5.2.2-2
controllo delle dipendenze in corso...
errore: impossibile eseguire l'operazione richiesta (impossibile soddisfare le dipendenze)
:: libreoffice-fresh-it: la rimozione di libreoffice-fresh interrompe la dipendenza 'libreoffice-fresh'
Sono riuscito a rimuovere libreoffice-fresh-it ma poi non riesco comunque a disinstallare libreoffice-fresh (stesso errore). Per ora ho reinstallato libreoffice-fresh-it. Qualcuno sa dirmi come fare a forzare la rimozione di libreoffice-fresh? Eventualmente (ma ovviamente meno importante) sapreste dirmi come reinstallare solo i pacchetti corrotti?
Ultima modifica di GTP il 1 novembre 2016, 17:28, modificato 1 volta in totale.

Avatar utente
Dusty
Little John
Messaggi: 899
Iscritto il: 12 agosto 2011, 13:15
Località: Firenze

Re: Forzare reinstallazione pacchetto corrotto

Messaggio da Dusty » 1 novembre 2016, 13:09

Io in una situazione analoga ho risolto cancellando tutta la directory del pacchetto.
Nel tuo caso:
/var/lib/pacman/local/libreoffice-fresh-5.2.2-2
Per precauzione ti suggerirei però prima di toglierla dalla visibilità di pacman cambiandole nome, e solo alla fine se tutto va bene di cancellarla definitivamente.

GTP
Newbie
Messaggi: 10
Iscritto il: 16 marzo 2016, 22:31
Architettura: x86_64 (64bit)

Re: Forzare reinstallazione pacchetto corrotto

Messaggio da GTP » 1 novembre 2016, 14:03

Grazie per il consiglio ma ho ancora un dubbio: dopo aver rinominato la cartella non dovrei anche aggiornare in qualche modo il database dei pacchetti installati? Se sì, come? Perché, almeno per quanto ne so, se rinomino la cartella e la cancello subito dopo pacman non ha modo di accorgersi di cosa ho fatto e quindi non sarebbe diverso dall'eliminarla direttamente.

Avatar utente
Dusty
Little John
Messaggi: 899
Iscritto il: 12 agosto 2011, 13:15
Località: Firenze

Re: Forzare reinstallazione pacchetto corrotto

Messaggio da Dusty » 1 novembre 2016, 15:24

E' quello il database dei pacchetti installati: la cioè directory /var/lib/pacman/local/.
Pacman non deve accorgersi di cosa hai fatto: deve credere che il pacchetto non sia installato e lo deve tirare dentro come se fosse nuovo.
Poichè la versione del pacchetto è la stessa, tutti i moduli sono rimpiazzati da altri perfettamente identici, e in pratica l'installazione si concretizza nella sola ricostruzione della parte di database persa.
Quando rinomini la directory, usa l'accortezza di dare un nome compatibile con la struttura.
Per esempio: libreoffice-fresh-invalid-5.2.2-2
La differenza tra rinominare e cancellare sta nella possibilità di tornare indietro se qualcosa va storto; ovviamente devi cancellare la directory danneggiata solo quando e se la reinstallazione è stata completata con successo.

GTP
Newbie
Messaggi: 10
Iscritto il: 16 marzo 2016, 22:31
Architettura: x86_64 (64bit)

Re: Forzare reinstallazione pacchetto corrotto

Messaggio da GTP » 1 novembre 2016, 15:34

Grazie! Adesso provo.

GTP
Newbie
Messaggi: 10
Iscritto il: 16 marzo 2016, 22:31
Architettura: x86_64 (64bit)

Re: Forzare reinstallazione pacchetto corrotto

Messaggio da GTP » 1 novembre 2016, 17:15

Grazie, ho dovuto usare l'opzione --force perché naturalmente trovava su disco alcuni dei file del pacchetto ma poi ha funzionato. Purtroppo anche reinstallando tutti i pacchetti ufficiali è rimasto un piccolo problema con KDE ma se mai aprirò un nuovo thread.

EDIT: ho risolto anche il problema di KDE modificando un file, quindi sembra che finalmente sia tornato tutto normale! Grazie!

Rispondi