Oto bardziej szczegółowy opis procesu. Przepraszam, że tekst był tak długi.
Moje doświadczenie wynika z Debiana, dla którego pierwotnie wynaleziono cały system pakowania i aktualizacji używany w Ubuntu. Codzienne aktualizacje bezpieczeństwa Ubuntu odpowiadają działaniom, apt-get upgrade
które normalnie nie usuwają żadnego oprogramowania. Aktualizacje dużych wersji odpowiadają okresowi, apt-get dist-upgrade
w którym pakiety oprogramowania mogą być wymieniane całkowicie.
W rzeczywistości komponenty bardzo niskiego poziomu zwykle nie są wymieniane podczas aktualizacji wersji. Natychmiast po aktualizacji powinieneś znaleźć dwa obrazy jądra i initrd w katalogu / boot. Wynika to z faktu, że w przeciwieństwie do programów, komponenty jądra nie są tak dobrze wymienne. Jeśli zajdzie potrzeba załadowania nowych sterowników urządzeń podczas aktualizacji, muszą one być kompatybilne z działającym jądrem. Po uruchomieniu systemu za pomocą nowego jądra stary można usunąć. Ostatnim razem, gdy sprawdziłem, że to jedno trzeba było zrobić ręcznie, nie wiem, jak radzi sobie z tym obecny program aktualizujący. To jest BTW. główny powód, dla którego obraz jądra nosi swój numer wersji w nazwie pliku - dzięki czemu można jednocześnie instalować różne wersje jądra. To samo dla ścieżki modułu (/ lib / modules / ...)
Pakiety oprogramowania są uaktualniane jeden po drugim, zaczynając od najniższych pakietów w hierarchii zależności. Są to zwykle biblioteki programów, takie jak libc i inne. Kolejność aktualizacji pakietów nie jest jednak zakodowana na stałe, lecz dynamicznie obliczana w miarę rozwiązywania zależności między pakietami. W większości przypadków stare programy mogą działać z nowymi bibliotekami, więc nie jest to takie problematyczne, jeśli te biblioteki zostaną najpierw wymienione.
Musisz tutaj zrozumieć, że system rozróżnia między ręcznie zainstalowanymi pakietami (tj. Pakietami, których instalacji sam sobie zażądałeś, tj. Chromem) i automatycznie zainstalowanymi pakietami, które zostały zainstalowane tylko w celu spełnienia zależności ręcznie zainstalowanych pakietów (i zależności tych zależności ).
Dla każdego ręcznie zainstalowanego programu program aktualizujący po prostu szuka nowszej wersji. Często te programy to tylko meta-pakiety, takie jak „ubuntu-desktop”, który nie zawiera danych, a jedynie zależności. Zostaną pobrane nowe wersje bibliotek zależnych, ponieważ są one wymagane przez bezpośrednio aktualizowane (ręcznie żądane) programy. Aktualizator zawsze będzie próbował zainstalować najnowszą użyteczną wersję dowolnego pakietu zależnego (podczas każdego uaktualnienia nie tylko aktualizacji wydania).
Programy, które nie mogą działać z nowymi wersjami bibliotek, nie mogą zostać uruchomione w czasie po aktualizacji biblioteki, a także przed aktualizacją samego programu. Jeśli te programy powinny już działać przed aktualizacją biblioteki, będą nadal działać, ponieważ stara wersja biblioteki pozostaje w pamięci tak długo, jak długo jest używana. To samo dotyczy programów, które zostały uruchomione przed ich aktualizacją. Nie będą one oferować nowych funkcji, dopóki nie zostaną zakończone i ponownie uruchomione.
Po aktualizacji niektóre biblioteki (lub ogólnie zależności) zostaną osierocone. Są to biblioteki, które były wymagane przez stare wersje programów, ale nie są już wymagane przez nowe wersje. Ponieważ te pakiety są oznaczone jako zainstalowane automatycznie, a ponieważ nie ma już do nich żadnego ręcznego programu prgram, pakiety te można łatwo zlokalizować i usunąć. Możesz nawet zaobserwować to jako ostatni krok procesu aktualizacji (program aktualizujący mówi „usuwanie przestarzałych pakietów” lub coś podobnego).
Niektóre pakiety zostaną zainstalowane, które, jeśli nie były wcześniej instalowane, są po prostu nowymi zależnościami, które są oznaczone jako automatycznie zainstalowane i mogą zostać usunięte, jeśli wymagania dla nich znikną w przyszłości.
Ten mechanizm pozwala nawet na wymianę całych programów użytkownika. Jak na przykład przejście z Gnome2 na Unity. Ponieważ oba są tylko automatycznymi zależnościami od Ubuntu-Desktop, który jest jednym z niewielu pakietów, dla których w rzeczywistości w pierwszej kolejności są wymagane nowe wersje.
Programy zwykle nie zależą od konkretnej wersji jądra systemu operacyjnego, więc normalnie będą działać dobrze z działającym jądrem.
Podejrzewam, że oprócz tego wszystkiego aktualizator Ubuntu wprowadza pewne poprawki i obejścia, aby obejść sytuacje, w których teoria się psuje.
Jak widać podczas aktualizacji są bardzo dobre warunki, w których system nadaje się tylko do ograniczonej części. Jeżeli coś pójdzie nie tak podczas aktualizacji Państwo będzie najprawdopodobniej pozostanie ze złamanym systemem. Często nawet taki, którego nie można łatwo naprawić, ponieważ może to również wpłynąć na program aktualizacji. Pamiętaj, że programy z uszkodzonymi zależnościami mogą nadal działać, ale nie można ich ponownie uruchamiać, o ile zależności są zepsute, dotyczy to również programu aktualizującego.
Za pomocą programu wiersza polecenia apt-mark
można dowiedzieć się, które pakiety są oznaczone jako zainstalowane ręcznie, a które automatycznie. Możesz także przełączać te znaki za pomocą tego samego programu. Wpłynie to bezpośrednio na proces aktualizacji.
W bardziej złożonej konfiguracji oprogramowania Updater czasami prosi o ręczne rozwiązanie zależności. To znaczy, gdy jeden ręcznie zainstalowany program zostanie zaktualizowany i zażąda nowej wersji biblioteki, podczas gdy inny ręcznie zainstalowany program zależy od starej wersji tej samej biblioteki i nie może współpracować z nową. Będziesz musiał dokonać wyboru, albo zrezygnować z jednego z tych programów, albo powstrzymać się od aktualizacji obu. Ponieważ zależności są często skomplikowane, bardzo szybko mogą się one stać bardzo nieuporządkowane (być może słyszałeś o piekle zależności).
Teraz konkretne pytania:
- Kiedy zmienia się infrastruktura niskiego poziomu (niski poziom jak w jądrze, sterownikach, bibliotekach itp., Z czym użytkownik nie wchodzi w bezpośrednią interakcję), co dzieje się z przestarzałymi plikami binarnymi?
- Co dzieje się z aplikacją, która została całkowicie przestarzała? Na przykład Unity 2D (lub jakiekolwiek inne oprogramowanie porzucone / brak opiekunów, których pakiet nie znajduje się w nowym repozytorium).
- Jeśli aplikacja została raz zainstalowana ręcznie, pozostanie w systemie, często powodując zależność piekło, które opisałem.
- ubuntu-desktop to metapakiet, który pobiera domyślne aplikacje Ubuntu jako zależności. Jeśli usunę Firefoksa i zainstaluję Chrome, czy Firefox nadal będzie pobierany jako część aktualizacji?
- Tak długo, jak jest to standardowa przeglądarka nowej wersji. Chromium również zostanie zaktualizowane. Nie jestem pewien, czy możesz usunąć Firefoksa bez usuwania ubuntu-desktop. Zauważ, że oprócz ścisłych zależności, system pakietów zna również koncepcję rekomendacji, w których oprogramowanie będzie normalnie instalowane jak zależność, ale można je później odinstalować bez wpływu na nic poza własnymi zależnościami.
- Co więcej, co się stanie, jeśli pojedyncza aplikacja zależała od pakietu-x i nie robi tego już w nowej wersji; czy pakiet-x zostanie zaktualizowany wraz z resztą pakietów, mimo że zostanie osierocony?
Zapytaj mnie, czy nadal masz jakieś pytania.