Jak usunąć przestarzałe pakiety po nieudanej aktualizacji wydania za pomocą aktualizacji do-release na Ubuntu?

14

Czasami, gdy aktualizuję system za pośrednictwem do-release-upgrade, proces aktualizacji kończy się niepowodzeniem, a skrypt mówi mi, aby zakończyć proces ręcznie za pośrednictwem dpkg --configure -a. Nie jest to poważny problem - po ręcznym rozwiązaniu problemu zależności i zakończeniu procesu aktualizacji wszystko działa dobrze.

Ale do-release-upgradeskrypt ma proces czyszczenia po zakończeniu aktualizacji:

Remove obsolete packages?  
XXX packages are going to be removed.  
Continue [yN]  Details [d]y

który usuwa niektóre przestarzałe pakiety ze starej wersji systemu.

Wydaje się, że ten proces nie jest wykonywany, gdy automatyczne uaktualnienie kończy się niepowodzeniem i kończę aktualizację ręcznie, więc przestarzałe pakiety ze starej wersji pozostają zainstalowane w systemie.

Jak mogę ręcznie uruchomić proces „Usuń przestarzałe pakiety” po ręcznym zakończeniu aktualizacji?

Murz
źródło

Odpowiedzi:

16

Sprawdź to:

Otwórz terminal,

Naciśnij Ctrl+ Alt+T

Uruchom:

sudo -i

apt-get update

apt-get autoremove

apt-get clean

UNUSCONF=$(dpkg -l|grep "^rc"|awk '{print $2}')

apt-get remove --purge $UNUSCONF

NEWKERNEL=$(uname -r|sed 's/-*[a-z]//g'|sed 's/-386//g')

ADDKERNEL="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAKERNEL="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

UNUSKERNELS=$(dpkg -l|awk '{print $2}'|grep -E $ADDKERNEL |grep -vE $METAKERNEL|grep -v $NEWKERNEL)

apt-get remove --purge $UNUSKERNELS

update-grub
Kyodake
źródło
1
Dzięki, te polecenia są dokładnie tym, czego chcę, a głównym z nich jest dpkg -l|grep "^rc"|awk '{print $2}'wyświetlanie pakietów do usunięcia. To dziwne, że apt-get lub aptitude nie chcą tego widzieć do usunięcia.
Murz
2
Jedna linia poleceń CLI dla usunięcia nieaktualnych pakietów po nieudanej do-release-upgrade oparty na przykład to: sudo dpkg -l|grep "^rc"|awk '{print $2}' | xargs sudo apt-get remove -y --purge. Uwaga, to polecenie usuwa pakiety bez potwierdzenia, ale jest przydatne do automatyzacji systemów szybkiego czyszczenia.
Murz
W moim systemie '^rc'oznaczone pakiety nie zostały nawet zainstalowane, ale aktualizacja nie powiodła się tuż przed wyszukiwaniem przestarzałych pakietów. Ta odpowiedź wydaje się niepełna. To nie usunie wszystkich pakietów, które byłyby do-release-upgrade, gdyby się udało.
Ruslan
2

Wierzę, że „Usuń przestarzałe pakiety” faktycznie po prostu uruchamia sudo apt-get autoremove. Spróbuj, sprawdź, czy to pomoże.

Dan Johansen
źródło
2
sudo apt-get autoremoveusuwa tylko niewielką część pakietów, która usuwa do-release-upgrade, na przykład do-release-upgradew tym samym systemie usuwa około 150 pakietów, ale apt-get autoremove- usuwa tylko około 5-10 pakietów.
Murz
1

Uważam, że ta odpowiedź na niezwiązane pytanie może dostarczyć narzędzia i polecenia, które wydają się usuwać więcej nieużywanych rzeczy:

  1. Zainstaluj pakiet „deborphan”.
  2. sudo deborphan | xargs sudo apt-get -y remove --purge
DustWolf
źródło