Aktualizacja jądra Linuksa, pozostawiając resztę systemu bez zmian


25

Jestem użytkownikiem OpenBSD. W FAQ OpenBSD napisano:

OpenBSD to kompletny system przeznaczony do synchronizacji. To nie jest jądro plus narzędzia, które można aktualizować niezależnie od siebie.

Kiedy aktualizujesz system, robisz to za jednym razem; jądro i system podstawowy zostaną zastąpione. Następnie przejdź i zaktualizuj swoje pakiety innych firm . Jeśli kompilujesz ze źródła , przekompiluj jądro i uruchom je. Następnie przebudowujesz system podstawowy, a następnie zainstalowane pakiety. Jeśli minęło więcej niż kilka tygodni / miesięcy od ostatniego przebudowania wszystkiego, najpierw zainstaluj migawkę i przebuduj stamtąd (jeśli korzystasz z najnowszej gałęzi CVS).

Posiadanie niezsynchronizowanego jądra, systemu podstawowego i / lub pakietów stron trzecich jest potencjalnym źródłem problemów i mniej lub bardziej dyskwalifikuje cię od uzyskania poważnej pomocy z oficjalnych list mailingowych.

Nie mam nic przeciwko temu. W rzeczywistości jest to jeden z powodów, dla których korzystam z OpenBSD. To sprawia, że ​​system jest spójną jednostką i ułatwia mi dokonanie jego mentalnego przeglądu.

Jak to jest w systemie Linux? Większość Linuksów, o których wiem, nie ma „systemu podstawowego” w tym samym sensie co BSD, a raczej zbiór pakietów zmontowanych przez dostawcę dystrybucji. Dalsze oprogramowanie jest następnie dodawane do tego przez lokalnego administratora w taki sposób, że granica między tym, co istniało od samego początku, a tym, co zostało dodane później, jest co najwyżej rozmyta.

Czy Linux (ogólnie) nie ma silnego jądra do sprzężenia przestrzeni użytkownika? Jądro jest aktualizowane, o ile wiem, jak każdy inny pakiet oprogramowania i nieco mnie dezorientuje, że jest to w ogóle możliwe. Dodaj do tego fakt, że niektóre nawet kompilują niestandardowe jądra (co jest odradzane w OpenBSD) i mają wiele różnych wersji jądra wymienionych w menu rozruchu.

Kto lub co gwarantuje, że różne podsystemy systemu Linux są w stanie współpracować ze sobą, nawet jeśli są aktualizowane niezależnie od siebie?

Pytam dlatego, że inny użytkownik na tej stronie zapytał mnie, czy zastąpienie jądra w jego systemie Linux nowszą wersją „byłoby wykonalne”. Jadąc od strony OpenBSD rzeczy, nie mogę powiedzieć, że tak, to byłoby zagwarantowane nie złamać system.


Używam „Linuksa” powyżej jako skrótu dla „dystrybucji Linuksa”, jądra + narzędzi.


Jest to inny sposób stwierdzenia, że ​​OpenBSD ma tylko jedną dystrybucję. Wiele pozycji menu grub w zwykłym systemie Linux służy do powrotu do wcześniejszego jądra na wypadek, gdyby (zwykle) najnowszy nie mógł uruchomić się z jakiegoś powodu.
Thorbjørn Ravn Andersen

Odpowiedzi:


29

Linus Torvalds ma bardzo silną opinię na temat zmian w jądrze powodujących regresję przestrzeni użytkownika (szczegółowe informacje zawiera pytanie „ Jądro Linux: łamanie przestrzeni użytkownika ”).

Interfejs między przestrzenią użytkownika a jądrem jest zapewniany przez wywołania systemowe. Nowsze jądra mogą mieć więcej wywołań systemowych i zmian w wyjściowych, gdy zmiany te nie psują istniejących aplikacji. Kiedy interfejs wywołania systemowego ma parametr flagi, nowe jądra często ujawniają nową funkcjonalność za pomocą nowej flagi bitowej. W ten sposób jądro zachowuje zgodność wsteczną ze starymi aplikacjami.

Gdy zmiana istniejącego interfejsu nie była możliwa bez naruszenia przestrzeni użytkownika, dodano dodatkowe wywołania systemowe zapewniające rozszerzoną funkcjonalność. Dlatego istnieją trzy wersje dupi dwie wersje umountwywołania systemowego.

Polityka posiadania stabilnej przestrzeni użytkownika jest przyczyną, dla której aktualizacje jądra rzadko powodują problemy w aplikacjach przestrzeni użytkownika i ogólnie nie oczekuje się problemów po aktualizacji jądra.

Jednak ta sama stabilność API nie jest gwarantowana dla interfejsów jądra i innych szczegółów implementacji . Sysfs (on /sys) i procsfs (on /proc/) ujawniają szczegóły implementacji jądra dotyczące konfiguracji środowiska uruchomieniowego, sprzętu, sieci, procesów itp., Które są używane przez aplikacje niskiego poziomu. Interfejsy mogą się zmieniać w niekompatybilny sposób między wersjami jądra, jeśli jest ku temu dobry powód. Zmiany nadal starają się zminimalizować niezgodności, jeśli to możliwe, i istnieją zasady, w jaki sposób aplikacje mogą korzystać z interfejsów w najmniej prawdopodobny sposób powodując problemy. Wpływ jest również ograniczony, ponieważ aplikacje niskiego poziomu nie powinny używać tych interfejsów.

@PeterCordes wskazał, że jeśli zmiana w procfs lub sysfs spowoduje uszkodzenie aplikacji używanej przez skrypty inicjujące dystrybucję, możesz mieć problem.

Zależy to nieco od tego, jak twoja dystrybucja aktualizuje jądro (wsparcie długoterminowe lub główna), a nawet wtedy problemy są stosunkowo rzadkie, ponieważ dystrybucje zwykle wysyłają zaktualizowane narzędzia w tym samym czasie.

@StephenKitt dodał, że zaktualizowana przestrzeń użytkownika może wymagać nowszej wersji jądra, w którym to przypadku system może nie być w stanie uruchomić się ze starym jądrem, a informacje o wydaniu dystrybucji wspominają o tym, gdy jest to właściwe.


1
W dłuższej perspektywie użyteczne byłoby rozszerzenie tego wyjaśnienia o podsumowanie interfejsu użytkownika jądra (zwanego także wywołaniami systemowymi), ponieważ wyjaśnia on mechanizm, za pomocą którego inaczej skonfigurowane jądra nie psują aplikacji.
wallyk

3
Nawet procfs ( /proc) i sysfs ( /sys) są utrzymywane tak stabilnie, jak to możliwe, zgodnie z tą samą polityką / filozofią „nie niszcz przestrzeni użytkownika”. Ponadto ioctl()kody w plikach urządzeń en.wikipedia.org/wiki/Ioctl . Wykracza to daleko poza prostą kompatybilność ABI z wywołaniem systemowym, ale jak mówisz, kiedy jest dobry powód, rzeczy się zmieniają w /proci /sys. Nie zepsuje większości programów bezpośrednio, ale jeśli zepsuje niskopoziomowy program przestrzeni użytkownika używany przez skrypty inicjujące dystrybucji, możesz mieć problem. Na szczęście jest to rzadkie.
Peter Cordes,

W rzeczywistości niektóre pliki, takie jak rfkillprzełącznik IIRC , zmieniły lokalizacje w niektórych aktualizacjach jądra. Tak /proci /syssą znacznie mniej stabilne niż syscall interfejsu. Na szczęście dystrybucje zwykle nie zawierają takich aktualizacji jądra, chyba że jest to ważna aktualizacja wersji dystrybucji.
Ruslan

3
Istnieją dwa aspekty do rozważenia tutaj: aktualizacja jądra i aktualizacja przestrzeni użytkownika. Dzięki stabilności ABI jądra, aktualizacja jądra jest całkiem bezpieczna (nawet przy zmianach /proci /syszwykle - usuwanie zajmuje lata). Jednak aktualizacja przestrzeni użytkownika może wymagać nowego jądra i możesz skończyć z systemem, którego nie można uruchomić, jeśli nie masz wystarczająco nowego jądra. Informacje o wydaniu Distro wspominają o tym, gdy jest to właściwe (więc nie aktualizuj dystrybucji na ślepo, przeczytaj informacje o wydaniu).
Stephen Kitt

1
Istnieją wytyczne dotyczące plików / proc i / sys oraz sposobu, w jaki przestrzeń użytkownika powinna je czytać, aby umożliwić dodanie większej liczby pól w nowszych jądrach. Na przykład / proc / stat lub / proc / meminfo. Oczekuje się, że przestrzeń użytkownika zignoruje dodane pola.
Zan Lynx,

11

Jądro Linux i przestrzeń użytkownika dystrybucji Linuksa, która w przeszłości była zdominowana przez narzędzia użytkownika opracowane w ramach projektu GNU, są luźno powiązane. Po części wynika to z projektu, a po części z konieczności.

W przeciwieństwie do BSD, w których jądro oraz podstawowa przestrzeń użytkownika są zaprojektowane i utrzymywane razem, jądro Linux i jego przestrzeń użytkownika zostały opracowane i są obsługiwane przez różne osoby. Utrzymanie ich w ścisłym powiązaniu byłoby trudne, nawet jeśli społeczność tego pragnie, co nie wydaje mi się.

@Sebasth podkreśla również doskonale, że główną zasadą projektu jądra Linux jest to, że nie może on naruszać przestrzeni użytkownika. Co oczywiście jest kolejnym czynnikiem wymuszającym luźne sprzęganie.

Jednak nadal istnieje pewien stopień sprzężenia. Wystarczająco stare jądro Linuksa nie będzie działać z nowoczesnymi dystrybucjami.


2
@Abigail jest to wybieranie nitów, ale można zapewnić kompatybilność do przodu , jeśli przestrzeń użytkownika implementuje odpowiednie rezerwy (nawet zdegradowane rezerwy) dla brakujących funkcji jądra. Trzeba przyznać, że często nie jest to pożądane ani nawet warte zachodu, ale niektóre programy to robią ( glibcna przykład). (Ale tak, to nie jest obietnica jądra, to obietnica przestrzeni użytkownika.)
Stephen Kitt

7

Rozumiem, że Linux jest jądrem, a wszystko inne jest pomocnicze. Zdecydowanie możesz zaktualizować jądro niezależnie od (wielu) zainstalowanych pakietów, ponieważ są one zazwyczaj powiązane z bibliotekami, a nie z samym jądrem. Takie sprzężenie zazwyczaj widać tylko między wersjami jądra a sterownikami sprzętowymi (np. Sterownikami GPU). Niektóre oprogramowanie jest kompatybilne tylko z niektórymi wersjami jądra, ale należy to określić w indywidualnej dokumentacji tych programów.

Dość powszechne jest posiadanie dwóch pakietów pakietów jądra w systemie - aktualnie używanego pakietu i wcześniej zainstalowanego pakietu. Podczas aktualizacji, po upewnieniu się, że nowa wersja działa poprawnie, najstarszą można usunąć i nadal masz znaną bezpieczną rezerwę. Na przykład Red Hat (i jego kuzyni) musi package-cleanup --oldkernels --count 2to robić automatycznie.


Nawet coś takiego jak kmod , które można by pomyśleć, że trzeba być przywiązane do wersji jądra, ma trochę swobody, w której wersji będzie pracować.
Ignacio Vazquez-Abrams

4

Oprócz wszystkich dobrych argumentów tutaj, mogę dodać kilka punktów, które pomogą.

Znamy już zasady zespołu jądra, a jako dystrybucje Linuksa staramy się zachować jak najczystszy kod źródłowy jądra. Oznacza to, że ilekroć pojawi się luka w zabezpieczeniach lub coś, co wymaga poprawki, informujemy zespół jądra i staramy się pomóc w załataniu poprawek, ale ostatecznie ostateczna decyzja należy do zespołu jądra.

Niektóre dystrybucje dodają dodatkowe łaty bardziej niż inne, ale pomysł polega na tym, aby zachować je tak, jak pochodzą od deweloperów. Oczywiście, niektóre programy wymagają specjalnej konfiguracji jądra, szczególnie wirtualizacji i sterowników innych firm i zwykle oba są używane do pracy z określoną wersją jądra lub przynajmniej niezbyt starą wersją ... powodem jest to, że próbują do pracy z najnowszymi funkcjami jądra iz tego powodu, jeśli spróbujesz uruchomić je ze starym jądrem, mogą one nie działać poprawnie.

Dodatkowym elementem, o którym należy pamiętać, jest to, że wszystkie dystrybucje Linuksa mają zespół opiekunów, ludzi, którzy zapewniają zgodność całego oprogramowania z systemem. Dlatego prawie każda dystrybucja ma wersję stabilną i niestabilną. Programiści pracują z „niestabilnym” oprogramowaniem, a gdy wszystko jest testowane, oznaczają je jako stabilne, dopiero potem normalny użytkownik może zaktualizować pakiet, więc jeśli osoba, która zapytała Cię, jest normalnym użytkownikiem, jest w 90% bezpieczna, że ​​oprogramowanie zostało dobrze przetestowane .

Więc kim jest, społeczność, a następnie jakie powinno być wspólne podejście, potrzebujemy oprogramowania współpracującego, a nie zepsucia systemu, dlatego staramy się przestrzegać niektórych standardów, takich jak Hierarchia Standardów Systemu Plików .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.