Przez pomyłkę zabiłem proces dpkg działający w tle i chciałbym ponownie zainstalować wszystkie pakiety, aby upewnić się, że wszystko jest w porządku.
Najpierw próbowałem uzyskać listę wszystkich pakietów i ponownie je zainstalować.
dpkg --get-selections | grep -v deinstall | awk "{print $1}" > list.log apt-get install --reinstall $(cat list.log)
Ale są takie komunikaty:
E: Couldn"t configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle.
Próbowałem apt-get -f install
bez powodzenia.
W ostateczności ponownie zainstalowałem wszystkie programy, które nie powiodły się sumy kontrolne:
dpkg -l | grep ^ii | awk "{ print $2 }" | xargs debsums -s -a
Co mam zrobić, aby ponownie zainstalować wszystko?
Edytuj: Problem rozwiązany. Problem był inny (patrz komentarze). Rozumiem, że w Debianie jest to coś, czego należy unikać.
Komentarze
- Niedawno miałem awarię podczas próby zainstalowania pakietu. Po ponownym uruchomieniu i próbowałem ponownie zainstalować ten pakiet, otrzymałem wiadomość, ” E: dpkg został przerwany, musisz ręcznie uruchomić ' dpkg –configure -a ', aby rozwiązać problem. „. Uruchomienie tego polecenia spowodowało usunięcie wspomnianego pakietu i jego plików konfiguracyjnych. Następnie mogłem zainstalować pakiet od zera. Spróbuj wykonać to polecenie.
- Nie ' nic nie zrobiło, więc chyba nic nie jest zepsute. Spróbuję później sprawdzić, czy moje problemy ze sterownikami zostały rozwiązane.
- Ponowna instalacja wszystkich pakietów == naprawdę zły pomysł. (a) To ' jest prawie zawsze niepotrzebne (b) prawdopodobnie zakończy się niepowodzeniem ( c) Jeśli twój system jest naprawdę popsuty, po prostu zainstaluj go ponownie. Po prostu napraw problemy, które faktycznie widzisz.
Odpowiedź
Spróbuj tego, pamiętając, że nie przetestuj:
dpkg --get-selections > selections sudo dpkg --clear-selections sudo dpkg --set-selections < selections sudo apt-get --reinstall dselect-upgrade
Źródła:
- 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
Komentarze
- Mój problem było zupełnie inaczej: nie ładowałem właściwego jądra (!). Przyjmę twoją odpowiedź, ponieważ wydaje mi się, że robię to, co chciałem (ale również niesprawdzone).
- To nie działa ' i całkowicie zepsuje system. Linia 3 odinstaluje apt, więc nie ' nie będzie można później ponownie zainstalować wszystkiego.
- @rkjnsn: Zaktualizowałem odpowiedź, sprawdź, czy działa.
- Próbuję tego dokonać, nic nie jest ponownie instalowane, chociaż plik selekcji jest zapełniony: pi @ prodpi ~ $ sudo apt-get –reinstall dselect-upgrade Czytanie list pakietów … Gotowe Budowanie drzewa zależności Stan odczytu informacje … Gotowe 0 zaktualizowane, 0 nowo zainstalowane, 0 do usunięcia i 0 nie zaktualizowane. masz jakiś pomysł?
- Jednym z powodów, dla których myślę, że Twój kod wygrał ' t działa, jest to, że polecenie
dpkg --get-selections
list również odinstalowuje pakiety.
Odpowiedź
Korzystając z Aptitude, można to zrobić w łatwy i szybki sposób:
sudo aptitude reinstall "~i"
który ponownie zainstaluje wszystkie aktualnie zainstalowane pakiety.
Komentarze
- Ładnie i zwięźle!
Odpowiedź
Na wszelki wypadek spróbuj ponownie zainstalować każdą pakiet :
for i in $(cat list.log); do apt-get install --reinstall "$i"; done
Możesz również chcieć dodać odpowiedź tak na wszystkie pytania.
Odpowiedź
W jednym z zasobów cytowanych przez Lucasa Malora znalazłem skrypt o nazwie populator, który wydaje się być blisko rozwiązania. Jeśli ustawisz zmienną wyboru pakietów na listę wszystkich swoich pakietów
PKGLIST=$(dpkg --get-selections | grep -v deinstall| cut -f1)
możesz następnie uruchomić skrypt i ponownie zainstalować wszystkie pakiety ale system prawdopodobnie będzie miał problemy. Byłoby lepiej najpierw przetestować go na maszynie wirtualnej.
Oto wariant skryptu z powyższego linku:
#!/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
Jeśli pojawi się błąd, że określonych pakietów nie można ponownie zainstalować, uruchom to polecenie, aby spróbować ponownie:
sudo apt-get -y autoremove
Odpowiedź
Spróbuj tego zamiast tego, ponieważ zajmie to wyjście i utworzy jedną wielką linię ze spacjami oddzielającymi nazwy plików.
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)
Jedyną zmianą w Twoim oryginalnym poście jest dodanie drugiej instrukcji awk, co prawdopodobnie można by zrobić w linii z pierwszą, aby utworzyć żądany plik.
Ta zmiana wymusi apt- uzyskać poprawne ponowne pobranie pakietów i wszelkich brakujących zależności, które nie zostały zainstalowane za pierwszym razem, i ponownie je po kolei.
Jeśli zrobimy to w tekście, myślę, że wyglądałoby to tak:
dpkg --get-selections | grep -v deinstall | awk "{print $1}" | awk "$1=$1" ORS=" " > list.log
Następnie upewnij się, że system naprawdę ma poprawne pakiety (lub najnowsze), wyczyść pamięć podręczną apt, zaktualizuj ją i ponownie pobierz wszystkie pliki (możesz pominąć pierwsze dwa kroki, jeśli chcesz tylko to, co masz w pamięci podręcznej reinstalacja):
apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)
Miałem ponad 2k pakietów zainstalowanych w systemie, który zaktualizowałem i który się zawiesił. Użycie dpkg –configure -a zakończyło instalację (była w końcowej fazie). Następnie uruchomiłem to, aby wszystko było poprawnie ponownie zainstalowane.
Lub jak podano w 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)
Po prostu upewnij się, że uruchomiłeś „init 2” przed jakąkolwiek ponowną instalacją, ponieważ niektóre składniki X lub Twój ulubiony menedżer okien może nie lubić ponownej instalacji.
Komentarze
- Chyba że ' zmodyfikowałeś IFS , bez cudzysłowu
$(cat file)
tokenizuje dowolne białe znaki i daje dokładnie ten sam wynik, niezależnie od tego, czy plik jest rozdzielany znakami nowej linii czy spacjami.--reinstall
może pomóc, ale już wcześniej podano go dwukrotnie.
Odpowiedź
Wykonanie tego za pomocą apt
jest dość proste:
apt list --installed | cut --delimiter=/ --fields=1 | xargs apt reinstall -y
apt list --installed
part robi dokładnie to, co można by się spodziewać. Znak |
przesuwa standardowe wyjście polecenia apt
na standardowe wejście cut
polecenie. Część cut --delimiter=/
informuje polecenie cut
, aby użyć /
jako separatora, a --fields=1
mówi cut
, aby użył pierwszego pola, czyli tekstu przed pierwszym /
, że pojawia się w danych wyjściowych polecenia apt list --installed
. W tym przypadku wynikiem polecenia cut
jest lista wszystkich zainstalowanych pakietów bez wszystkich dodatkowych informacji, których nie potrzebujemy z apt list --installed
polecenie.
Następne |
potokuje standardowe wyjście polecenia cut
, czyli listę wszystkich zainstalowanych pakiety, na standardowe wejście polecenia xargs
, które z kolei wywołuje apt reinstall -y
dla każdego z aktualnie zainstalowanych pakietów .
Uwaga : w zależności od konfiguracji apt apt reinstall -y
part może zainstalować aktualizacje do istniejących pakietów zamiast dokładnych wersji, które są aktualnie zainstalowane.
Odpowiedź
Gdy używasz RPM, w przypadku uszkodzenia bazy danych pakietów, istnieje opcja odbudowania tej bazy danych, dzięki czemu nie będziesz musiał przechodzić przez b asically reinstalacja. Jak zauważył tu jeden użytkownik, w Debianie jest to wykonywane przez dpkg --configure -a
.
Komentarze
- Rola z
dpkg --configure -a
jest skonfigurowanie wszystkich rozpakowanych i nieskonfigurowanych pakietów. Zobacz strony podręcznikadpkg
idpkg-reconfigure
, a także debian.org/doc/manuals /debian-faq/ch-pkg_basics.en.html