Zabiłem przez pomyłkę 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 zainstalować je ponownie
dpkg --get-selections | grep -v deinstall | awk '{print $1}' > list.log
apt-get install --reinstall $(cat list.log)
Ale są wiadomości takie jak:
E: Couldn't configure pre-depend debconf:i386 for console-setup:i386, probably a dependency cycle.
Próbowałem apt-get -f install
bezskutecznie.
W ostateczności ponownie zainstalowałem wszystkie programy, które zawiodły w sumach kontrolnych:
dpkg -l | grep ^ii | awk '{ print $2 }' | xargs debsums -s -a
Co powinienem zrobić, aby wszystko ponownie zainstalować?
Edycja: problem rozwiązany. Problemem było coś innego (patrz komentarze). Rozumiem jednak, że należy tego unikać w Debianie.
debian
package-management
apt
alex_reader
źródło
źródło
Odpowiedzi:
Spróbuj tego, pamiętając, że go nie testowałem:
Źródła:
man apt-get
źródło
dpkg --get-selections
lista poleceń dezinstaluje również pakiety.Na wszelki wypadek spróbuj ponownie zainstalować każdy pakiet :
Możesz również dodać odpowiedź tak do wszystkich pytań.
źródło
dpkg --get-selections > list.log
pierwszy.list.log
pochodzi z pytania.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)
następnie możesz uruchomić skrypt i ponownie zainstalować wszystkie pakiety, ale system prawdopodobnie będzie miał pewne problemy. Lepiej najpierw przetestować na maszynie wirtualnej.
Oto wariant skryptu z linku powyżej:
Jeśli pojawi się błąd, że nie można ponownie zainstalować określonych pakietów, uruchom to polecenie, aby spróbować ponownie:
źródło
Spróbuj tego zamiast tego, ponieważ zajmie to wynik i sprawi, że będzie to jedna gigantyczna linia 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 oryginalnym poście jest dodanie drugiej instrukcji awk, która prawdopodobnie mogłaby zostać wykonana równolegle z pierwszą, aby utworzyć żądany plik.
Ta zmiana wymusi na apt-get poprawne ponowne pobranie pakietów i brakujących zależności, które nie zostały zainstalowane za pierwszym razem, i ponowne zainstalowanie ich w kolejności.
Jeśli zrobimy to inline, uważam, że wyglądałoby to tak:
dpkg --get-selections | grep -v deinstall | awk '{print $1}' | awk '$1=$1' ORS=' ' > list.log
A następnie upewnij się, że naprawdę masz system z poprawnymi pakietami (lub najnowszymi), wyczyść apt cache, zaktualizuj go, a następnie ponownie pobierz wszystkie pliki (możesz pominąć dwa pierwsze kroki, jeśli chcesz tylko to, co masz w pamięci podręcznej zainstalowany ponownie):
apt-get clean && apt-get update && apt-get install --reinstall $(cat list.log)
Miałem ponad 2k pakietów zainstalowanych w zaktualizowanym systemie z zawieszeniem się. Użycie dpkg --configure -a zakończyło instalację (była w końcowej fazie). Następnie uruchomiłem to, aby wszystko ponownie się poprawnie instalowało.
Lub jak podano na /superuser/298912/reinstall-debian-while-keeping-installed-packages-and-data :
sudo apt-get install --reinstall $(dpkg --get-selections | grep -w 'install$' | cut -f1)
Upewnij się, że najpierw uruchomisz program „init 2” przed ponowną instalacją, ponieważ niektóre składniki X lub ulubionego menedżera okien mogą nie lubić ponownej instalacji.
źródło
$(cat file)
niecytowany tokenizuje dowolne białe znaki i daje dokładnie taki sam wynik, niezależnie od tego, czy plik jest rozdzielany znakami nowej linii czy spacjami.--reinstall
może pomóc, ale już wcześniej otrzymał dwa razy.Podczas korzystania z Aptitude istnieje łatwy i szybki sposób:
sudo aptitude reinstall '~i'
która przeinstaluje wszystkie aktualnie zainstalowane pakiety.
źródło
Podczas korzystania z RPM, w przypadku spowodowania uszkodzenia bazy danych pakietu, istnieje możliwość odbudowania tej bazy danych, dzięki czemu nie trzeba przeprowadzać ponownej instalacji. Jak zauważył jeden użytkownik tutaj, odbywa się to w Debianie przez
dpkg --configure -a
.źródło
dpkg --configure -a
jest skonfigurowanie wszystkich rozpakowanych i nieskonfigurowanych pakietów. Patrz strony człowiekiemdpkg
idpkg-reconfigure
, a także debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html