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:
- http://www.linuxquestions.org/questions/linux-software-2/force-apt-get-to-redownload-and-reinstall-dependencies-as-well-873038/
- https://kura.io/2010/07/02/using-dpkg-selections-to-backup-and-install-packages/?ModPagespeed=noscript
-
man apt-get
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
- Role
dpkg --configure -a
je nakonfigurovat všechny rozbalené a nenakonfigurované balíčky. Podívejte se na manuálové stránkydpkg
adpkg-reconfigure
a také debian.org/doc/manuals /debian-faq/ch-pkg_basics.cs.html