Alle Debian-pakketten opnieuw installeren

Ik heb per ongeluk een dpkg-proces op de achtergrond omzeild en ik zou alle pakketten opnieuw willen installeren om er zeker van te zijn dat alles in orde is.

Eerst probeerde ik een lijst van alle pakketten te krijgen en ze opnieuw te installeren

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

Maar er zijn berichten zoals:

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

Ik heb apt-get -f install geprobeerd, maar zonder succes.

Als laatste redmiddel heb ik alle programmas opnieuw geïnstalleerd die de checksums:

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

Wat moet ik doen om alles opnieuw te installeren?

Bewerken: Probleem opgelost. Het probleem was iets anders (zie de opmerkingen). Ik begrijp echter dat het iets is dat moet worden vermeden met Debian.

Opmerkingen

  • Ik heb onlangs een crash gehad tijdens het installeren van een pakket. Toen ik opnieuw opstartte en probeerde dat pakket opnieuw te installeren, ik ontving het bericht ” E: dpkg werd onderbroken, je moet handmatig ‘ dpkg –configure uitvoeren -a ‘ om het probleem op te lossen. “. Door die opdracht uit te voeren, werden het genoemde pakket verwijderd en de configuratiebestanden. Ik kon toen het pakket helemaal opnieuw. Probeer dat commando eens.
  • Het heeft niets ‘ gedaan, dus ik denk dat er niets kapot is. Ik zal later proberen om te controleren of mijn stuurprogrammaproblemen zijn opgelost.
  • Het opnieuw installeren van alle pakketten == echt slecht idee. (a) Het ‘ is bijna altijd niet nodig (b) het zal waarschijnlijk mislukken ( c) Als je systeem echt zo erg in de war is, installeer het dan gewoon opnieuw. Los gewoon de problemen op die je daadwerkelijk ziet.

Antwoord

Probeer dit, denk eraan dat ik niet test het:

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

Bronnen:

Reacties

  • Mijn probleem was compleet anders: ik was niet de juiste kernel aan het opstarten (!). Ik accepteer je antwoord omdat het lijkt te doen wat ik wilde (maar ook niet getest).
  • Dit heeft ‘ t werk gewonnen en zal het systeem volledig breken. Regel 3 zal apt verwijderen, dus het is ‘ niet mogelijk om alles daarna opnieuw te installeren.
  • @rkjnsn: Ik heb het antwoord bijgewerkt, controleer of het werkt.
  • Als je dit probeert, wordt er niets opnieuw geïnstalleerd, hoewel het selectiebestand is gevuld: pi @ prodpi ~ $ sudo apt-get –reinstall dselect-upgrade Pakketlijsten lezen … Klaar Opbouw van dependency tree Leesstatus informatie … Klaar 0 geüpgraded, 0 nieuw geïnstalleerd, 0 om te verwijderen en 0 niet geüpgraded. enig idee?
  • Een reden waarom ik denk dat je code ‘ niet zal werken, is omdat het commando dpkg --get-selections list ook de-installeren pakketten.

Answer

Bij het gebruik van Aptitude is er een gemakkelijke en snelle manier om dit te doen:

sudo aptitude reinstall "~i"

die alle momenteel geïnstalleerde pakketten opnieuw zal installeren.

Reacties

  • Leuk en beknopt!

Antwoord

Voor het geval dat, probeer elke pakket :

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

Misschien wilt u ook het antwoord ja toevoegen aan alle vragen.

Antwoord

In een van de bronnen aangehaald door Lucas Malor vond ik een script met de naam populator dat lijkt te zijn dichtbij de oplossing. Als je de pakketkeuzevariabele instelt op de lijst van al je pakketten

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

kun je het script uitvoeren en alle pakketten opnieuw installeren maar het systeem zal waarschijnlijk enkele problemen hebben. Het zou beter zijn om het eerst in een virtuele machine te testen.

Hier is een variant van het script van de bovenstaande link:

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

Als er een fout wordt weergegeven dat specifieke pakketten “niet opnieuw kunnen worden geïnstalleerd, voer dan dit commando uit om het opnieuw te proberen:

sudo apt-get -y autoremove 

Antwoord

Probeer dit in plaats daarvan, aangezien het uw uitvoer zal nemen en er één gigantische regel van zal maken met spaties tussen de bestandsnamen.

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)

De enige wijziging aan je oorspronkelijke bericht is het toevoegen van de tweede awk-instructie, die waarschijnlijk inline met de eerste zou kunnen worden gedaan om het gewenste bestand te creëren.

Deze wijziging zal apt- de pakketten en eventuele ontbrekende afhankelijkheden die niet de eerste keer waren geïnstalleerd, correct opnieuw downloaden en ze in de juiste volgorde opnieuw installeren.

Als we het inline maken, denk ik dat het er dan zo uit zou zien:

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

En zorg er dan voor dat u echt zorgt dat het systeem de juiste pakketten heeft (of de laatste), maak de apt-cache schoon, werk deze bij en download vervolgens alle bestanden opnieuw (u kunt de eerste twee stappen overslaan als u alleen wilt wat u in de cache hebt opnieuw geïnstalleerd):

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

Ik had meer dan 2k pakketten geïnstalleerd op een systeem dat ik had opgewaardeerd en dat vastliep. Met behulp van dpkg –configure -a is de installatie voltooid (het was in de laatste fase). Ik heb dit vervolgens uitgevoerd om alles correct opnieuw te installeren.

Of zoals vermeld op 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)

Zorg ervoor dat u eerst een “init 2” uitvoert voordat u opnieuw installeert, aangezien sommige componenten van X of je favoriete windowmanager vindt het misschien niet leuk om opnieuw te worden geïnstalleerd.

Reacties

  • Tenzij je ‘ IFS hebt gewijzigd , unquoted $(cat file) tokeniseert op elke witruimte en geeft exact hetzelfde resultaat, of het bestand nu wordt gescheiden door nieuwe regels of spaties. --reinstall zou kunnen helpen, maar is al twee keer eerder gegeven.

Antwoord

Dit doen via apt is vrij eenvoudig:

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

De apt list --installed part doet precies wat men zou raden. Het | -teken leidt de standaarduitvoer van de apt -opdracht door naar de standaardinvoer van de cut commando. Het cut --delimiter=/ deel vertelt het cut commando om / als scheidingsteken te gebruiken, en --fields=1 vertelt cut om het eerste veld te gebruiken, dat wil zeggen de tekst vóór het eerste / dat verschijnt in de uitvoer van het apt list --installed commando. In dit geval is het resultaat van het cut commando een lijst van alle geïnstalleerde pakketten zonder alle aanvullende informatie die we “niet nodig hebben van de apt list --installed commando.

De volgende | leidt de standaarduitvoer van het cut commando, de lijst met alle geïnstalleerde pakketten, naar de standaardinvoer van het xargs commando, dat op zijn beurt apt reinstall -y aanroept voor elk van de pakketten die momenteel geïnstalleerd zijn .

Opmerking : afhankelijk van uw apt-configuratie, de apt reinstall -y part kan updates installeren voor uw bestaande pakketten in plaats van de exacte versies die u momenteel hebt geïnstalleerd.

Antwoord

Bij gebruik RPM, in het geval u een beschadiging in de pakketdatabase veroorzaakt, is er een optie om deze database opnieuw op te bouwen, zodat u niet door de b asically een herinstallatie. Zoals een gebruiker hier opmerkte, wordt dit in Debian gedaan door dpkg --configure -a.

Opmerkingen

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *