Reinstalând toate pachetele Debian

Am omis din greșeală un proces dpkg care rulează în fundal și aș dori să reinstalez toate pachetele pentru a fi sigur că totul este în regulă.

Mai întâi, am încercat să obțin o listă cu toate pachetele și să le reinstalez

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

Dar există mesaje precum:

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

Am încercat apt-get -f install, fără succes.

În ultimă instanță, am reinstalat toate programele care nu au reușit sumele de verificare:

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

Ce ar trebui să fac pentru a reinstala totul?

Editați: Problema rezolvată. Problema era altceva (vezi comentariile). Înțeleg că este ceva de evitat cu Debian.

Comentarii

  • Am avut recent un accident în timp ce încercam să instalez un pachet. Când am repornit și am încercat să reinstalez acel pachet, am primit mesajul, ” E: dpkg a fost întrerupt, trebuie să rulați manual ‘ dpkg –configure -a ‘ pentru a corecta problema. „. Rularea acelei comenzi a eliminat pachetul menționat și fișierele de configurare. Apoi am putut instala pachet de la zero. Încercați să dați comanda respectivă.
  • Nu a făcut ‘ nimic, așa că cred că nimic nu este stricat. Voi încerca mai târziu să verific dacă problemele mele legate de driver sunt rezolvate.
  • Reinstalarea tuturor pachetelor == idee foarte proastă. (a) Este ‘ aproape întotdeauna inutilă (b) probabil că va eșua ( c) Dacă sistemul dvs. este într-adevăr atât de rău, pur și simplu reinstalați-l. Remediați doar problemele pe care le vedeți.

Răspuns

Încercați acest lucru, amintind că nu am nu testați-l:

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

Surse:

Comentarii

  • Problema mea a fost complet diferit: nu porneam nucleul corect (!). Voi accepta răspunsul dvs. deoarece pare să facă ceea ce am dorit (dar, de asemenea, netestat).
  • Acest lucru nu a funcționat și va sparge complet sistemul. Linia 3 va dezinstala apt, deci ‘ nu va mai fi posibil să reinstalați totul, după aceea.
  • @rkjnsn: Am actualizat răspunsul, verificați dacă funcționează.
  • Încercarea de a face acest lucru nu se reinstalează nimic, deși fișierul de selecții este completat: pi @ prodpi ~ $ sudo apt-get –reinstall dselect-upgrade Citirea listelor de pachete … Efectuat Construirea arborelui de dependență Starea de citire informații … Efectuat 0 actualizat, 0 nou instalat, 0 pentru eliminat și 0 nu actualizat. vreo idee?
  • Un motiv pentru care cred că codul dvs. nu a funcționat ‘ t funcționează deoarece lista de comenzi dpkg --get-selections de asemenea dezinstalează pachete.

Răspuns

Când utilizați Aptitude există o modalitate ușoară și rapidă de a face acest lucru:

sudo aptitude reinstall "~i"

care va reinstala toate pachetele instalate în prezent.

Comentarii

  • Frumos și concis!

Răspuns

Pentru orice eventualitate, încercați să reinstalați fiecare pachet :

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

Poate doriți să adăugați și răspunsul la opțiunea pentru toate întrebările.

Răspuns

În una dintre resursele citate de Lucas Malor am găsit un script numit populator care pare să fie lângă soluție. Dacă setați variabila de selecție a pachetelor la lista tuturor pachetelor dvs.

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

puteți rula scriptul și reinstala toate pachetele dar sistemul va avea probabil unele probleme. Ar fi mai bine să îl testați mai întâi într-o mașină virtuală.

Iată o variantă a scriptului din linkul de mai sus:

#!/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 

Dacă este afișată o eroare că anumite pachete nu pot fi reinstalate rulați această comandă pentru a încerca din nou:

sudo apt-get -y autoremove 

Răspuns

Încercați acest lucru, deoarece vă va prelua rezultatul și îl va transforma într-o linie uriașă cu spații care separă numele fișierelor.

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)

Singura modificare a postării inițiale este adăugarea în a doua instrucțiune awk, care probabil ar putea fi făcută în linie cu prima pentru a crea fișierul dorit.

Această modificare va forța apt- să descărcați corect pachetele și orice dependențe lipsă care nu au fost instalate prima dată și reinstalați-le în ordine.

Dacă o facem în linie, cred că ar arăta astfel:

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

Și apoi asigurați-vă că asigurați-vă că sistemul are pachete corecte (sau cele mai recente), curățați cache-ul apt, actualizați-l și apoi descărcați din nou toate fișierele (puteți sări peste primii doi pași dacă doriți doar ceea ce aveți în cache reinstalat):

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

Aveam peste 2k pachete instalate pe un sistem pe care l-am actualizat și care avea un hangup. Folosind dpkg –configure -a a terminat instalarea (era în faza finală). Apoi am executat acest lucru pentru ca totul să fie reinstalat corect.

Sau după cum sa menționat la 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)

Asigurați-vă că executați mai întâi un „init 2” înainte de orice reinstalare, deoarece unele dintre componentele X sau managerul de ferestre preferat ar putea să nu-i placă să fie reinstalat.

Comentarii

  • Cu excepția cazului în care ‘ ați modificat IFS , necotat $(cat file) tokenizează pe orice spațiu alb și dă exact același rezultat indiferent dacă fișierul este delimitat de linii noi sau spații. --reinstall ar putea ajuta, dar a fost dat deja de două ori înainte de aceasta.

Răspuns

A face acest lucru prin apt este destul de simplu:

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

apt list --installed parte face exact ceea ce s-ar putea ghici. Caracterul | canalizează ieșirea standard a comenzii apt la intrarea standard a cut comanda. Partea cut --delimiter=/ spune comenzii cut să utilizeze / ca delimitator și --fields=1 spune cut să folosească primul câmp, adică textul dinaintea primului / apare în ieșirea comenzii apt list --installed. În acest caz, rezultatul comenzii cut este o listă a tuturor pachetelor instalate fără toate informațiile suplimentare de care nu avem nevoie din apt list --installed.

Următoarea | conduce ieșirea standard a comenzii cut, lista tuturor instalatelor pachete, la intrarea standard a comenzii xargs, care, la rândul său, invocă apt reinstall -y pentru fiecare dintre pachetele care sunt instalate în prezent .

Notă : în funcție de configurația aptă, apt reinstall -y partea poate instala actualizări la pachetele dvs. existente în loc de versiunile exacte pe care le-ați instalat în prezent.

Răspuns

Când utilizați RPM, în cazul în care provocați o corupție în baza de date a pachetelor, există o opțiune de reconstruire a acestei baze de date, împiedicându-vă astfel să treceți prin b ca reinstalare. După cum a subliniat un utilizator aici, acest lucru este făcut în Debian de dpkg --configure -a.

Comentarii

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *