Reinstallare tutti i pacchetti Debian

Ho ucciso per errore un processo dpkg in esecuzione in background e vorrei reinstallare tutti i pacchetti per essere sicuro che tutto fosse a posto.

Per prima cosa, ho provato a ottenere un elenco di tutti i pacchetti e reinstallarli

dpkg --get-selections | grep -v deinstall | awk "{print $1}" > list.log apt-get install --reinstall $(cat list.log) 

Ma ci sono messaggi come:

E: Couldn"t configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle. 

Ho provato apt-get -f install, senza successo.

Come ultima risorsa, ho reinstallato tutti i programmi che non riuscivano a checksum:

dpkg -l | grep ^ii | awk "{ print $2 }" | xargs debsums -s -a 

Cosa devo fare per reinstallare tutto?

Modifica: Problema risolto. Il problema era qualcosaltro (vedi i commenti). Capisco però che è qualcosa da evitare con Debian.

Commenti

  • Recentemente ho avuto un arresto anomalo durante il tentativo di installare un pacchetto. Al riavvio e ho provato a reinstallare il pacchetto, ho ricevuto il messaggio ” E: dpkg è stato interrotto, devi eseguire manualmente ‘ dpkg –configure -a ‘ per correggere il problema. “. Lesecuzione di quel comando ha rimosso il suddetto pacchetto ei suoi file di configurazione. Sono stato quindi in grado di installare il pacchetto da zero. Prova a dare a quel comando un tentativo.
  • Non ‘ ha fatto nulla, quindi immagino che nulla sia rotto. Proverò più tardi a controllare se i miei problemi con i driver sono risolti.
  • Reinstallare tutti i pacchetti == unidea davvero pessima. (a) ‘ è quasi sempre inutile (b) probabilmente fallirà ( c) Se il tuo sistema è davvero così gravemente incasinato, reinstallalo e risolvi i problemi che vedi.

Risposta

Prova questo, ricordando che ho non provalo:

dpkg --get-selections > selections sudo dpkg --clear-selections sudo dpkg --set-selections < selections sudo apt-get --reinstall dselect-upgrade 

Fonti:

Commenti

  • Il mio problema era completamente diverso: non stavo avviando il kernel corretto (!). Accetterò la tua risposta in quanto sembra fare quello che volevo (ma anche non testato).
  • Ciò non ‘ funzionerà e interromperà completamente il sistema. La riga 3 disinstallerà apt, quindi ‘ non sarà possibile reinstallare tutto, in seguito.
  • @rkjnsn: ho aggiornato la risposta, controlla se funziona.
  • Tentando di fare ciò non viene reinstallato nulla, sebbene il file delle selezioni sia popolato: pi @ prodpi ~ $ sudo apt-get –reinstall dselect-upgrade Lettura degli elenchi dei pacchetti … Fine Creazione dellalbero delle dipendenze Stato di lettura informazioni … Fatto 0 aggiornato, 0 appena installato, 0 da rimuovere e 0 non aggiornato. qualche idea?
  • Uno dei motivi per cui penso che il tuo codice non ha ‘ funzionato è perché anche il comando dpkg --get-selections viene disinstallato pacchetti.

Risposta

Quando si utilizza Aptitude cè un modo facile e veloce per farlo:

sudo aptitude reinstall "~i"

che reinstallerà tutti i pacchetti attualmente installati.

Commenti

  • Bello e conciso!

Rispondi

Per ogni evenienza, prova a reinstallare ciascuno pacchetto :

for i in $(cat list.log); do apt-get install --reinstall "$i"; done 

Potresti anche aggiungere lopzione risposta sì a tutte le domande.

Risposta

In una delle risorse citata da Lucas Malor ho trovato uno script chiamato populator che sembra essere vicino alla soluzione. Se imposti la variabile di selezione dei pacchetti sullelenco di tutti i tuoi pacchetti

PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)

puoi quindi eseguire lo script e reinstallare tutti i pacchetti ma probabilmente il sistema avrà dei problemi. Sarebbe meglio testarlo prima in una macchina virtuale.

Ecco una variante dello script dal collegamento sopra:

#!/bin/bash # # Script to pre-populate apt-get proxy for faster later downloads. # It uses apt-get and wget to pull all the specified packages. # # Make sure only root can run our script if [[ $EUID -ne 0 ]]; then echo "You"re not root, are you?" 1>&2 exit 1 fi # Specify wanted packages PKGLIST="exaile" # Clears out the local repository of retrieved package files apt-get clean # Resynchronize the package index files from their sources apt-get update # Re-install specified packages at the newest version. apt-get install --reinstall $PKGLIST 

Se viene visualizzato un errore che indica che pacchetti specifici non possono essere reinstallati, eseguire questo comando per riprovare:

sudo apt-get -y autoremove 

Risposta

Prova invece questo poiché prenderà il tuo output e lo renderà una riga gigante con spazi che separano i nomi dei file.

dpkg --get-selections | grep -v deinstall | awk "{print $1}" > list.log awk "$1=$1" ORS=" " list.log > newlist.log apt-get install --reinstall $(cat newlist.log)

Lunica modifica al tuo post originale è laggiunta della seconda istruzione awk, che probabilmente potrebbe essere eseguita in linea con la prima per creare il file che desideri.

Questa modifica forza apt- scaricare di nuovo correttamente i pacchetti e le eventuali dipendenze mancanti che non sono state installate la prima volta e reinstallarli in ordine.

Se lo facciamo in linea, credo che sarebbe simile a questo:

dpkg --get-selections | grep -v deinstall | awk "{print $1}" | awk "$1=$1" ORS=" " > list.log

E poi assicurati di fare in modo che il sistema abbia davvero i pacchetti corretti (o più recenti), pulisci la cache di apt, aggiornala e quindi scarica nuovamente tutti i file (puoi saltare i primi due passaggi se vuoi solo quello che hai nella cache reinstallato):

apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)

Avevo più di 2k pacchetti installati su un sistema che ho aggiornato che aveva un blocco. Luso di dpkg –configure -a ha terminato linstallazione (era nella fase finale). Lho quindi eseguito per reinstallare tutto correttamente.

O come indicato in https://superuser.com/questions/298912/reinstall-debian-while-keeping-installed-packages-and-data :

sudo apt-get install --reinstall $(dpkg --get-selections | grep -w "install$" | cut -f1)

Assicurati solo di eseguire un “init 2” prima di qualsiasi reinstallazione, poiché alcuni dei componenti di X o il tuo gestore di finestre preferito potrebbe non gradire essere reinstallato.

Commenti

  • A meno che tu ‘ non abbia modificato IFS , senza virgolette $(cat file) tokenizza qualsiasi spazio bianco e fornisce esattamente lo stesso risultato sia che il file sia delimitato da nuove righe o spazi. --reinstall potrebbe essere daiuto, ma prima era già stato dato due volte.

Risposta

Farlo tramite apt è piuttosto semplice:

apt list --installed | cut --delimiter=/ --fields=1 | xargs apt reinstall -y

Il apt list --installed part fa proprio quello che si potrebbe immaginare. Il carattere | convoglia lo standard output del comando apt allo standard input del cut comando. La parte cut --delimiter=/ indica al comando cut di utilizzare / come delimitatore e --fields=1 dice a cut di utilizzare il primo campo, ovvero il testo prima del primo / che viene visualizzato nelloutput del comando apt list --installed. In questo caso, il risultato del comando cut è un elenco di tutti i pacchetti installati senza tutte le informazioni aggiuntive di cui non abbiamo bisogno dal apt list --installed.

Il successivo | convoglia loutput standard del comando cut, lelenco di tutti i packages, allinput standard del comando xargs, che, a sua volta, richiama apt reinstall -y per ciascuno dei pacchetti attualmente installati .

Nota : a seconda della configurazione di apt, apt reinstall -y parte potrebbe installare aggiornamenti ai pacchetti esistenti invece delle esatte versioni attualmente installate.

Risposta

Quando si utilizza RPM, nel caso in cui causi un danneggiamento nel database del pacchetto, cè unopzione per ricostruire questo database, impedendoti così di dover passare attraverso b asically una reinstallazione. Come un utente ha sottolineato qui, questo viene fatto in Debian da dpkg --configure -a.

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *