Installera om alla Debian-paket

Jag dödade av misstag en dpkg-process som kördes i bakgrunden och jag skulle vilja installera om alla paket för att vara säker på att allt är okej.

Först försökte jag få en lista över alla paket och installera om dem

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

Men det finns meddelanden som:

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

Jag försökte apt-get -f install, utan framgång.

Som en sista utväg installerade jag om alla program som misslyckades med kontrollsumma:

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

Vad ska jag göra för att installera om allt?

Redigera: Problem löst. Frågan var något annat (se kommentarerna). Jag förstår dock att det är något att undvika med Debian.

Kommentarer

  • Jag kraschade nyligen när jag försökte installera ett paket. När jag startade om och försökte installera om paketet igen, jag fick meddelandet ” E: dpkg avbröts, du måste köra ’ dpkg –configure manuellt -a ’ för att rätta till problemet. ”. Att köra det kommandot tog bort paketet och konfigurationsfilerna. Jag kunde sedan installera paket från grunden. Försök ge det kommandot en chans.
  • Det gjorde inte ’ t gjorde någonting, så jag antar att inget är trasigt. Jag kommer att försöka senare för att kontrollera om mina drivrutinsproblem är lösta.
  • Ominstallera alla paket == riktigt dålig idé. (a) Det ’ är nästan alltid onödigt (b) det kommer troligen att misslyckas ( c) Om ditt system verkligen är så trassligt är det bara att installera om det. Lös bara de problem du faktiskt ser.

Svar

Prova detta, kom ihåg att jag gjorde inte testa det:

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

Källor:

Kommentarer

  • Mitt problem var helt annorlunda: Jag startade inte rätt kärna (!). Jag kommer att acceptera ditt svar eftersom det verkar göra vad jag ville (men inte testat också).
  • Detta kommer inte att fungera ’ och kommer att bryta systemet helt. Rad 3 avinstallerar apt, så det kommer ’ att inte vara möjligt att installera om allt efteråt.
  • @rkjnsn: Jag uppdaterade svaret, kolla om det fungerar.
  • Att försöka göra det installeras ingenting om, även om markeringsfilen är fylld: pi @ prodpi ~ $ sudo apt-get –installera dselect-upgrade Läsningspaketlistor … Klar Byggnadsberoende träd Läsningstillstånd information … Klar 0 uppgraderad, 0 nyligen installerad, 0 att ta bort och 0 inte uppgraderad. någon idé?
  • En anledning till att jag tror att din kod vann ’ t fungerar är att kommandot dpkg --get-selections listan också avinstalleras paket.

Svar

När du använder Aptitude finns det ett enkelt och snabbt sätt att göra det:

sudo aptitude reinstall "~i"

som kommer att installera om alla för närvarande installerade paket.

Kommentarer

  • Snyggt och kortfattat!

Svar

Försök bara installera varje paket :

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

Du kanske också vill lägga till svar ja på alla frågor.

Svar

I en av de resurser som Lucas Malor citerade hittade jag ett manus som heter populator som verkar vara nära lösningen. Om du ställer in paketets valvariabel till listan över alla dina paket

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

kan du sedan köra skriptet och installera om alla paket men systemet kommer förmodligen att ha några problem. Det skulle vara bättre att testa det i en virtuell maskin först.

Här är en variant av skriptet från länken ovan:

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

Om fel visas att specifika paket inte kan installeras om kör du det här kommandot för att försöka igen:

sudo apt-get -y autoremove 

Svar

Prova istället eftersom det tar din produktion och gör den till en jätte rad med mellanslag som skiljer filnamnen.

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)

Den enda ändringen av ditt ursprungliga inlägg är att lägga till i det andra awk-uttalandet, vilket antagligen kan göras inbyggt med den första som skapar den fil du vill ha.

Denna ändring tvingar apt- få korrekt nedladdning av paketen och eventuella beroenden som inte installerades första gången och installera om dem i ordning.

Om vi gör det inbyggt tror jag att det skulle se ut så här:

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

Och se till att du verkligen gör att systemet har rätt paket (eller senaste), rengör apt-cachen, uppdaterar den och laddar sedan ner alla filer igen (du kan hoppa över de två första stegen om du bara vill ha det du har i cachen reinstalled):

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

Jag hade över 2 000 paket installerade på ett system som jag uppgraderade och som hade ett hangup. Med hjälp av dpkg –configure -a avslutade installationen (det var i slutfasen). Jag körde sedan detta för att få allt att installera om korrekt.

Eller som sagt på 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)

Se bara till att du kör en ”init 2” innan du installerar om, eftersom några av komponenterna i X eller din favoritfönsterhanterare kanske inte gillar att installeras om.

Kommentarer

  • Om du inte ’ har ändrat IFS , ociterad $(cat file) tokeniserar på valfri blanksteg och ger exakt samma resultat oavsett om filen avgränsas av nya rader eller mellanslag. --reinstall kan hjälpa men gavs redan två gånger före detta.

Svar

Att göra detta via apt är ganska enkelt:

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

apt list --installed del gör precis vad man skulle gissa. | -tecknet rör standardutgången för apt -kommandot till standardingången för cut kommando. cut --delimiter=/ -delen säger till kommandot cut att använda / som avgränsare och --fields=1 säger till cut att använda det första fältet, det vill säga texten före den första / visas i utgången från kommandot apt list --installed. I det här fallet är resultatet av kommandot cut en lista över alla installerade paket utan all ytterligare information vi inte behöver från apt list --installed kommando.

Nästa | rör standardutgången för cut kommandot, listan över alla installerade paket till standardingången för xargs -kommandot, som i sin tur åberopar apt reinstall -y för var och en av de paket som för närvarande är installerade .

Obs : beroende på din apt-konfiguration är apt reinstall -y part kan installera uppdateringar av dina befintliga paket istället för de exakta versionerna du har installerat.

Svar

När du använder RPM, om du orsakar en korruption i paketdatabasen finns det ett alternativ att bygga om denna databas, vilket förhindrar att du måste gå igenom b asically en ominstallation. Som en användare här påpekade görs detta i Debian av dpkg --configure -a.

Kommentarer

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *