Geninstallation af alle Debian-pakker

Jeg dræbte ved en fejltagelse en dpkg-proces, der kørte i baggrunden, og jeg vil gerne geninstallere alle pakker for at være sikker på, at alt er i orden.

Først forsøgte jeg at få en liste over alle pakker og geninstallere dem

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

Men der er beskeder som:

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

Jeg prøvede apt-get -f install uden succes.

Som en sidste udvej geninstallerede jeg alle programmer, der mislykkedes kontrolsummer:

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

Hvad skal jeg gøre for at geninstallere alt?

Rediger: Problem løst. Spørgsmålet var noget andet (se kommentarerne). Jeg forstår dog, at det er noget, der skal undgås med Debian.

Kommentarer

  • Jeg fik for nylig et nedbrud, da jeg prøvede at installere en pakke. Da jeg genstartede og forsøgte at geninstallere den pakke, jeg modtog beskeden ” E: dpkg blev afbrudt, du skal manuelt køre ‘ dpkg –configure -a ‘ for at rette op på problemet. “. Ved at køre kommandoen blev pakken og dens konfigurationsfiler fjernet. Jeg kunne derefter installere pakke fra bunden. Prøv at give kommandoen en chance.
  • Den gjorde ikke ‘ t gjorde noget, så jeg antager, at intet er brudt. Jeg vil senere prøve at kontrollere, om mine driverproblemer er løst.
  • Geninstallation af alle pakker == virkelig dårlig idé. (a) Det ‘ er næsten altid unødvendigt (b) det vil sandsynligvis mislykkes ( c) Hvis dit system virkelig er så rodet, skal du bare geninstallere det. Ret bare de problemer, du faktisk ser.

Svar

Prøv dette, husk at jeg gjorde ikke test det:

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

Kilder:

Kommentarer

  • Mit problem var helt anderledes: Jeg startede ikke den korrekte kerne (!). Jeg accepterer dit svar, da det ser ud til at gøre, hvad jeg ønskede (men også uprøvet).
  • Dette vil ikke fungere ‘ og vil helt bryde systemet. Linje 3 afinstallerer apt, så det vil ‘ ikke være muligt at geninstallere alt bagefter.
  • @rkjnsn: Jeg opdaterede svaret, kontroller om det fungerer.
  • Forsøg på at gøre dette geninstalleres intet, selvom markeringsfilen er befolket: pi @ prodpi ~ $ sudo apt-get – geninstaller dselect-upgrade Læse pakke lister … Udført Bygning afhængighed træ Læsestatus information … Udført 0 opgraderet, 0 nyinstalleret, 0 at fjerne og 0 ikke opgraderet. nogen idé?
  • En af grundene til at jeg tror, at din kode vandt ‘ t fungerer, er fordi kommandoen dpkg --get-selections listen også afinstalleres pakker.

Svar

Når du bruger Aptitude, er der en nem og hurtig måde at gøre det på:

sudo aptitude reinstall "~i"

som geninstallerer alle aktuelt installerede pakker.

Kommentarer

  • Dejligt og koncist!

Svar

Bare i tilfælde af, prøv at geninstallere hver pakke :

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

Du vil muligvis også tilføje svaret ja til alle spørgsmål.

Svar

I en af de ressourcer , der blev citeret af Lucas Malor, fandt jeg et script kaldet populator, som synes at være tæt på løsningen. Hvis du indstiller variablen til valg af pakker til listen over alle dine pakker

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

kan du derefter køre scriptet og geninstallere alle pakker men systemet vil sandsynligvis have nogle problemer. Det ville være bedre at teste det først på en virtuel maskine.

Her er en variant af scriptet fra ovenstående 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 

Hvis der vises en fejl, at specifikke pakker ikke kan geninstalleres, skal du køre denne kommando for at prøve igen:

sudo apt-get -y autoremove 

Svar

Prøv dette i stedet, da det tager din output og gør det til en kæmpe linje med mellemrum, der adskiller filnavnene.

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 eneste ændring af dit oprindelige indlæg tilføjes i den anden awk-sætning, hvilket sandsynligvis kan gøres inline med den første til at oprette den ønskede fil.

Denne ændring vil tvinge apt- kom til at genindlæse pakkerne korrekt og eventuelle manglende afhængigheder, der ikke blev installeret første gang, og geninstaller dem i rækkefølge.

Hvis vi gør det integreret, tror jeg, at det ville se sådan ud så:

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

Og sørg for, at du virkelig får systemet til at have korrekte pakker (eller nyeste), ryd apt-cachen, opdater den og download derefter alle filerne igen (du kan springe de to første trin over, hvis du kun vil have det, du har i cachen geninstalleret):

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

Jeg havde over 2k pakker installeret på et system, jeg opgraderede, der havde et hangup. Brug af dpkg –configure -a afsluttede installationen (det var i den sidste fase). Jeg kørte dette for at få alt til at geninstallere korrekt.

Eller som angivet over 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)

Bare sørg for at køre en “init 2” først inden geninstallation, da nogle af komponenterne i X eller din foretrukne vinduesadministrator kan muligvis ikke lide at blive geninstalleret.

Kommentarer

  • Medmindre du ‘ har ændret IFS , ikke-citeret $(cat file) symboliserer på et hvilket som helst hvidt område og giver nøjagtigt det samme resultat, uanset om filen er afgrænset af nye linjer eller mellemrum. --reinstall hjælper måske, men blev allerede givet to gange før dette.

Svar

At gøre dette via apt er ret simpelt:

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

apt list --installed del gør lige hvad man vil gætte. | -tegnet leder standardoutputtet fra apt -kommandoen til standardindgangen til cut kommando. cut --delimiter=/ -delen fortæller kommandoen cut om at bruge / som afgrænser og --fields=1 fortæller cut at bruge det første felt, det vil sige teksten før den første / vises i output fra kommandoen apt list --installed. I dette tilfælde er resultatet af cut kommandoen en liste over alle installerede pakker uden alle de yderligere oplysninger, vi ikke har brug for fra apt list --installed kommando.

Den næste | rør standardudgangen for cut kommandoen, listen over alle installerede pakker til standardindgangen til xargs -kommandoen, som igen påkalder apt reinstall -y for hver af de pakker, der aktuelt er installeret .

Bemærk : afhængigt af din apt-konfiguration er apt reinstall -y part installerer muligvis opdateringer til dine eksisterende pakker i stedet for de nøjagtige versioner, du aktuelt har installeret.

Svar

Når du bruger RPM, hvis du forårsager en korruption i pakkedatabasen, er der mulighed for at genopbygge denne database, hvilket forhindrer dig i at skulle gennemgå b asisk en geninstallation. Som en bruger her påpegede gøres dette i Debian af dpkg --configure -a.

Kommentarer

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *