Strona główna
» Jak
»
Bezpieczne zwolnienie blokady APT w systemie Ubuntu i zakończenie aktualizacji
Bezpieczne zwolnienie blokady APT w systemie Ubuntu i zakończenie aktualizacji
Błąd „Nie można uzyskać blokady /var/lib/dpkg/lock-frontend” zazwyczaj oznacza, że działa już inny proces zarządzania pakietami. Poczekaj na zakończenie tego zadania, zidentyfikuj proces, jeśli nie zostanie on usunięty, i dopiero wtedy napraw przerwaną konfigurację pakietu; usunięcie pliku blokady nie jest bezpiecznym rozwiązaniem.
APT to narzędzie do zarządzania pakietami Ubuntu, które dpkgwykonuje instalację i konfigurację pakietów niższego poziomu. Używa blokad, aby dwie operacje nie mogły zmienić stanu pakietu w tym samym czasie. Plik blokady może pozostać na dysku podczas normalnego działania, więc sama jego obecność nie oznacza, że jest nieaktualny.
1. Daj programowi aktualizującemu Ubuntu szansę na zakończenie działania
Najpierw zamknij wszystkie inne uruchomione zadania związane z pakietami, takie jak inne polecenie w terminalu, program do aktualizacji oprogramowania lub instalacja w sklepie z aplikacjami. Jeśli okno dialogowe aktualizacji jest otwarte, poczekaj na jego zakończenie, zamiast uruchamiać kolejne aptpolecenie. W systemie Ubuntu na komputerze stacjonarnym usługi aktualizacji w tle również mogą działać.
Sprawdź odpowiednie usługi systemd i poczekaj, jeśli któraś z nich jest aktywna:
systemctl status apt-daily.service apt-daily-upgrade.service
Te jednostki mogą być nieaktywne, nawet gdy inny frontend pakietu posiada blokadę, dlatego należy również sprawdzić proces, używając tej samej blokady. Nie uruchamiaj kolejnych poleceń instalacji ani aktualizacji, gdy bieżąca operacja jest aktywna.
Wiadomość blokady określa nazwę używanego zasobu i może zawierać identyfikator procesu, który należy zbadać.
Zastąp 2468rzeczywistym PID z wyników. Nazwa procesu, taka jak apt, apt-get, dpkglub usługa aktualizacji, wskazuje, że prace nad pakietem mogą być nadal w toku. Aby wyświetlić szerszą listę procesów, uruchom:
ps -eo pid,etime,cmd | grep -E '[a]pt|[d]pkg'
Nie zakładaj, że proces jest zawieszony tylko dlatego, że nie ma widocznego postępu. Pobieranie pakietów, skrypty konserwatora i ponowne uruchamianie usług mogą zająć trochę czasu. Jeśli jest to aktualizacja rozpoczęta w innym terminalu, wróć do niego i pozwól jej dokończyć. Jeśli jest ona zarządzana przez graficzny program aktualizujący, użyj tej aplikacji, aby anulować lub normalnie zamknąć operację.
Użyj podanego PID i nazwy polecenia, aby odróżnić aktywny program aktualizujący od polecenia, które próbujesz uruchomić.
3. Ostrożnie obchodź się z naprawdę zablokowaną operacją
Jeżeli proces jest aktualizacją automatyczną, przed interwencją sprawdź jego status i logi:
systemctl status apt-daily-upgrade.service
sudo journalctl -u apt-daily-upgrade.service -b --no-pager
Gdy usługa nadal działa, zostaw ją w spokoju. Jeśli rozpoznasz polecenie pakietu, które sam uruchomiłeś i które wyraźnie utkwiło w martwym punkcie, przerwij je raz z jego własnego terminala za pomocą Ctrl+Ci poczekaj, aż powróci do powłoki. Nie używaj kill -9, killall dpkgani nie usuwaj plików w /var/lib/dpkg; nagłe zatrzymanie skryptów pakietu może spowodować, że pakiety pozostaną rozpakowane, ale nieskonfigurowane.
Jeśli proces zakończył się, ale operacja pakietu została przerwana, ponowne uruchomienie jest rozsądnym sposobem na usunięcie osieroconych zadań w przestrzeni użytkownika. Po ponownym uruchomieniu upewnij się, że żaden program do aktualizacji oprogramowania ani zadanie instalacji nie jest uruchomione, zanim przejdziesz dalej. Jeśli usługa wielokrotnie się zawiesza, użyj danych z dziennika, aby zdiagnozować tę usługę, zamiast wielokrotnie usuwać pliki blokady.
Aktywna usługa apt-daily-upgrade jest powodem, aby poczekać i sprawdzić jej postęp, a nie zdejmować blokadę.
4. Napraw stan pakietu po usunięciu blokady
Gdy żaden menedżer pakietów nie będzie używał blokady, należy dokończyć konfigurację wszystkich oczekujących pakietów:
sudo dpkg --configure -a
Ta opcja konfiguruje pakiety, które zostały rozpakowane, ale nie zostały w pełni skonfigurowane. Jeśli zgłosi problemy z zależnościami, poproś APT o ich rozwiązanie:
sudo apt-get -f install
Przeczytaj proponowane zmiany przed potwierdzeniem. Nie dodawaj ich -ypodczas rozwiązywania problemów: monit pozwala sprawdzić, czy APT planuje nieoczekiwane usunięcie lub zmianę. Po zakończeniu naprawy odśwież listy pakietów i spróbuj ponownie wykonać pierwotne zadanie:
Zastąp PACKAGE_NAMEpakietem, który zamierzasz zainstalować. Dokumenty podręcznika APT-get-f Ubuntu stanowią próbę naprawy uszkodzonych zależności, a podręcznik dpkg wyjaśnia działanie konfiguracji pakietu. Jeśli APT nadal zgłasza blokadę, powtórz sprawdzanie procesu; w międzyczasie mogło zostać uruchomione drugie zadanie pakietu.
Po zwolnieniu blokady skonfiguruj oczekujące pakiety i sprawdź, czy APT jest w stanie odczytać spójny stan pakietu.
Potwierdź, że naprawa zadziałała
Naprawa jest zakończona, gdy oryginalne polecenie instalacji lub aktualizacji zostanie wykonane bez błędu blokady, sudo dpkg --configure -azakończy się bez błędu konfiguracji oczekującej i sudo apt-get checknie zgłosi żadnych uszkodzonych zależności. Jeśli blokada zostanie zwrócona, inny proces nadal ją przejmuje; zidentyfikuj ten proces przed podjęciem dalszych działań.
Aktualne podręczniki Noble dla Ubuntu opisują powyższe polecenia pakietów. Dokładny czas usługi i nazwy procesów różnią się w zależności od wersji Ubuntu i zainstalowanych narzędzi pakietu pulpitu, ale podstawowa zasada pozostaje ta sama: poczekaj na właściciela blokady, a następnie napraw dpkg, jeśli wcześniejsza operacja została przerwana.