Ponowna instalacja wszystkich pakietów Debiana

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:

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *