Přeinstalování všech balíků Debianu

Omylem jsem zabil proces dpkg běžící na pozadí a chtěl bych znovu nainstalovat všechny balíčky, abych se ujistil, že je vše v pořádku.

Nejprve jsem se pokusil získat seznam všech balíčků a znovu je nainstalovat

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

Existují však zprávy jako:

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

Zkoušel jsem apt-get -f install, ale bez úspěchu.

V krajním případě jsem přeinstaloval všechny programy, které selhaly kontrolní součty:

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

Co mám udělat, abych vše znovu nainstaloval?

Upravit: Problém vyřešen. Problém byl v něčem jiném (viz komentáře). Chápu, že v Debianu je něco, čemu je třeba se vyhnout.

Komentáře

  • Nedávno jsem selhal při pokusu o instalaci balíčku. Když jsem restartoval a pokusil jsem se přeinstalovat tento balíček, dostal jsem zprávu, “ E: dpkg byl přerušen, musíte ručně spustit ‚ dpkg –configure -a ‚ k vyřešení problému. „. Spuštěním tohoto příkazu byl odstraněn uvedený balíček a jeho konfigurační soubory. Poté jsem byl schopen nainstalovat balíček od nuly. Zkuste tento příkaz spustit.
  • Nedělal to ‚ nic, takže myslím, že nic není porušeno. Pokusím se později zkontrolovat, zda moje problémy s ovladači jsou vyřešeny.
  • Přeinstalování všech balíků == opravdu špatný nápad. (a) Je to ‚ téměř vždy zbytečné (b) pravděpodobně selže ( c) Pokud je váš systém opravdu tak špatně pokazený, jednoduše jej znovu nainstalujte. Opravte problémy, které skutečně vidíte.

Odpověď

Zkuste to, pamatujte, že jsem ne otestujte to:

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

Zdroje:

Komentáře

  • Můj problém bylo úplně jiné: nenabootoval jsem správné jádro (!). Přijmu vaši odpověď, protože se zdá, že dělá to, co jsem chtěl (ale také nevyzkoušené).
  • To nebude fungovat ‚ a systém to úplně rozbije. Řádek 3 odinstaluje apt, takže ‚ nebude možné vše znovu nainstalovat.
  • @rkjnsn: Aktualizoval jsem odpověď, zkontrolujte, zda funguje.
  • Při pokusu o to se nic neinstaluje znovu, i když je soubor výběru naplněn: pi @ prodpi ~ $ sudo apt-get –reinstall dselect-upgrade Čtení seznamů balíčků … Hotovo Budování stromu závislostí Stav čtení informace … Hotovo 0 upgradováno, 0 nově nainstalováno, 0 odebráno a 0 neaktualizováno. máte nějaký nápad?
  • Jedním z důvodů, proč si myslím, že váš kód ‚ nefunguje, je to proto, že příkaz dpkg --get-selections seznam také odinstaluje balíčky.

Odpověď

Při použití Aptitude existuje jednoduchý a rychlý způsob, jak to udělat:

sudo aptitude reinstall "~i"

Tím se znovu nainstalují všechny aktuálně nainstalované balíčky.

Komentáře

  • Pěkné a výstižné!

Odpovědět

V každém případě zkuste přeinstalovat každý balíček :

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

Možná budete chtít přidat odpověď ano také na všechny otázky.

Odpověď

V jednom ze zdrojů citovaném Lucasem Malorem jsem našel skript s názvem populator, který se zdá být blízko řešení. Pokud nastavíte proměnnou výběru balíčků na seznam všech vašich balíčků

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

můžete spustit skript a přeinstalovat všechny balíčky ale systém bude pravděpodobně mít nějaké problémy. Bylo by lepší nejprve otestovat na virtuálním stroji.

Zde je varianta skriptu z výše uvedeného odkazu:

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

Pokud se zobrazí chyba, že určité balíčky nelze přeinstalovat, spusťte tento příkaz a zkuste to znovu:

sudo apt-get -y autoremove 

Odpovědět

Zkuste to místo toho, protože to zabere váš výstup a vytvoří z něj jednu obrovskou linii s mezerami oddělujícími názvy souborů.

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)

Jedinou změnou původního příspěvku je přidání do druhého příkazu awk, což by pravděpodobně mohlo být provedeno inline s prvním vytvořením požadovaného souboru.

Tato změna vynutí apt- získejte správné opětovné stažení balíčků a všech chybějících závislostí, které nebyly nainstalovány poprvé, a znovu je nainstalujte.

Pokud to uděláme vložené, domnívám se, že by to vypadalo takto:

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

A pak se ujistěte, že systém skutečně obsahuje správné balíčky (nebo nejnovější), vyčistěte apt mezipaměť, aktualizujte ji a poté znovu stáhněte všechny soubory (první dva kroky můžete přeskočit, pokud chcete pouze to, co máte v mezipaměti přeinstalovat):

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

V systému, který jsem upgradoval a který měl zavěšení, jsem nainstaloval přes 2k balíčky. Pomocí dpkg –configure -a byla instalace dokončena (byla v závěrečné fázi). Pak jsem to spustil, abych vše přeinstaloval správně.

Nebo jak je uvedeno na 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)

Jen se ujistěte, že před každou přeinstalací nejprve spustíte „init 2“, protože některé komponenty X nebo váš oblíbený správce oken se nemusí líbit přeinstalování.

Komentáře

  • Pokud jste ‚ nezměnili IFS , unquoted $(cat file) tokenizuje na jakémkoli mezerách a dává přesně stejný výsledek, ať už je soubor ohraničen novými řádky nebo mezerami. --reinstall může pomoci, ale byl před tím již dvakrát uveden.

Odpovědět

Dělat to pomocí apt je docela jednoduché:

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

The apt list --installed část dělá přesně to, co by člověk hádal. Znak | směruje standardní výstup příkazu apt na standardní vstup cut příkaz. Část cut --delimiter=/ říká příkazu cut použít / jako oddělovač a --fields=1 říká cut použít první pole, tj. text před prvním / se objeví na výstupu příkazu apt list --installed. V tomto případě je výsledkem příkazu cut seznam všech nainstalovaných balíčků bez všech dalších informací, které od apt list --installed

Další | převezme standardní výstup příkazu cut, seznam všech nainstalovaných balíčky na standardní vstup příkazu xargs, který následně vyvolá apt reinstall -y pro každý z balíčků, které jsou aktuálně nainstalovány .

Poznámka : v závislosti na vaší výstižné konfiguraci se apt reinstall -y může instalovat aktualizace do vašich stávajících balíčků namísto přesných verzí, které jste aktuálně nainstalovali.

Odpovědět

Při použití RPM, v případě, že způsobíte poškození v databázi balíčků, existuje možnost tuto databázi znovu sestavit, což vám znemožňuje projít b Asically reinstall. Jak zde jeden uživatel zdůraznil, v Debianu to provádí dpkg --configure -a.

Komentáře

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *