Przyszłość mechanizmu startowego w Debianie
Petter Reinholdtsen, Kel Modderman oraz Armin Berres przedstawili na liście dyskusyjnej debian-devel-announce plany względem procesu uruchamiania systemu. Poniżej znajduje się tłumaczenie ich wiadomości.W ciągu ostatnich kilku lat, mechanizm startowy w Debianie stopniowo ulegał pogorszeniu w wyniku zmian w jądrze Linuksa, które czyniły je coraz bardziej zależnym od zdarzeń. Dla przykładu jądro i jego sterowniki nie blokują już wszystkich operacji podczas wykrywania dysków, interfejsów sieciowych oraz innego sprzętu, przez co stary model uruchamiania systemu w Debianie — niegdyś niezawodny — stał się bardziej wrażliwy. Podczas obecnej sekwencji startowej, często brakuje plików urządzeń w /dev/
gdy fsck
lub mount
ich szuka, sieć jest nieosiągalna gdy mechanizm startowy usiłuje zamontować zasób NFS, ponieważ interfejsy sieciowe za późno się uruchomiły lub brakuje urządzeń dźwiękowych gdy ustawienia audio powinny być utworzone. Podstawą problemu jest obecny — sekwencyjny — mechanizm startowy Debiana, rozwiązanie musi tę podstawę obejść. Uważamy, że rozwiązaniem jest migracja na proces uruchamiania systemu oparty o zdarzenia.
Na dodatek istnieją długotrwale problemy z sekwencją startową istniejących skryptów init.d, w przypadku niektórych kombinacji pakietów. W tych przypadkach sekwencja startowa jest błędna, i aby ją naprawić należy pozmieniać numery sekwencyjne kolejnych i wcześniejszych bezpośrednich zależności każdego pojedynczego skryptu init.d, aż sekwencja startowa będzie poprawna. W niektórych przypadkach zmiana musiała nastąpić w tym samym czasie w kilku skryptach znajdujących się w różnych pakietach, co jest nieosiągalne starym sposobem porządkowania skryptów init.d. Poprzednio porządkowanie odbywało się poprzez proszenie opiekunów pakietów o aktualizowanie zgadywanych numerów sekwencyjnych, był to proces który powodował pojawianie się wielu nowych problemów, których rozwiązywanie zabierało dużo czasu. Rozwiązaniem tego problemu jest zmiana sposobu porządkowania skryptów startowych. Zamiana statycznych numerów sekwencyjnych na dynamicznie generowaną sekwencję startową wykorzystującą informacje zawarte w skryptach init.d. Od 27.07.2009 jest to domyślny sposób hierarchizowania skryptów startowych w niestabilnej gałęzi Debiana, tak również będzie w Squeeze. Przejście na start systemu oparty o zależności pozwoli na sprawdzenie jego poprawności, wykrycie i naprawienie pętli zależności oraz ogólną naprawę szeregu błędów w dystrybucji, które wcześniej były bardzo trudne do naprawy. Innymi rozwiązanymi problemami w nowym systemie są: nieprawidłowe sekwencje zatrzymywania (domyślnie powinny wynosić S20/K80, a nie S20/K20), oraz wprowadzające w błąd poziomy startowe 0 i 6, gdzie startowe dowiązania symboliczne wywoływane były z argumentem 'stop'. Wszystkie te problemy zostały rozwiązane wraz z przejściem Debiana na opartą o zależności sekwencję startową.
Naprawa fundamentalnego problemu zajmie więcej czasu. Wymagane jest do tego przepisanie metody przeprowadzania startu systemu, nie może zostać to wykonane poprzez prostą modyfikację szkieletu sekwencji startowej.
Zanim wytłumaczymy aktualny plan, trochę wstępnych informacji. Obecny mechanizm startowy może być postrzegany jako składający się z trzech etapów:
- Implementacja
/sbin/init
, który odczytuje/etc/inittab
i uruchamia skrypt wdrażający etap drugi (/etc/init.d/rc
). Standardowo zajmuje się tym pakietsysvini
t, jednak są dostępne zamienniki, np.initng
lubupstart
. - Implementacja
/etc.init.d/rc
, który jest odpowiedzialny za wykonywanie skryptów init.d we właściwej kolejności. Standardowo zajmuje się tym pakietsysv-rc
. Alternatywą jest pakietfile-rc
, który używa pliku/etc/runlevel.conf
zamiast linków symbolicznych w/etc/rc?.d/
do ustalania co wykonywać i w jakim porządku. - Poszczególne skrypty
init.d
, zajmujące się zadaniami, które powinny zostać wykonane podczas startu systemu. Podstawowy szkielet dostarczany jest w pakiecieinitscripts
, resztą zajmują się poszczególne pakiety, np.udev
,netbase
,ifupdown
,apache
, etc. :) W niestabilnym Debianie znajduje się około 850 pakietów zawierających skrypty iint.d.
Etap drugi (sysv-rc
) oraz trzeci zostały już dostosowane do procesu uruchamiania systemu opartego o zależności. Było to częścią planów względem wydania Lenny'ego, prace te są kontynuowane w Squeeze. Skrypty init.d były przeglądane pod kątem dostosowania do sekwencji startowej opartej o zależności przez ponad 3 lata. Nowe instalacje będą używały sekwencji startowej opartej o zależności. W przypadku aktualizacji, debconf będzie zadawał pytanie o krytycznym priorytecie czy użytkownik chce przejść na nowy model startu (jeśli nie zostaną wykryte żadne problemy, będzie to odpowiedź domyślna) lub tymczasowo pozostać przy starym sposobie porządkowania skryptów.
Aby rozwiązać podstawowy problem, planujemy zamienić /sbin/init
implementacją, która potrafi przetwarzać zdarzenia jądra. Pozwoli to nam na modyfikację mechanizmu startowego w początkowej fazie tak aby oparta była o zdarzenia i jednocześnie utrzymywała istniejący stan rzeczy w działającym stanie. Możemy przepisać sysvinit
aby był oparty o zdarzenia, albo rozejrzeć się po istniejących mechanizmach startowych, które obsługują zdarzenia jądra. Po sprawdzeniu powyższych możliwości oraz mechanizmów używanych w innych dystrybucjach, upstart
wydaje się najbardziej obiecującym kandydatem. Jest obecnie używany w Ubuntu oraz Fedorze i rozwiązuje problem, z zachowaniem wstecznej kompatybilności. Plan obejmuje dostosowanie upstartu do używania /etc/inittab
, aby ułatwić przejście pomiędzy sysvinit i upstartem. Ponadto zmienimy sposób przetwarzania skryptów init.d, aby traktować zadania upstartu jako skrypty init.d — pozwoli to na stworzenie alternatywy dla architektur nieobsługiwanych przez upstart. W wyniku tych zmian, powinno być dla użytkowników bez znaczenia, który pakiet dostarcza /sbin/init
, a co za tym idzie — powinno ułatwić migrację z sysvinit do upstartu.
Jak tylko /sbin/init
zostanie dostosowany do mechanizmu opartego o zdarzenia, następnym krokiem będzie przepisanie wczesnego mechanizmu startowego aby używał tychże zdarzeń gdy to możliwe oraz aby zachował się w sposób tradycyjny, gdy zdarzeń nie ma. Gdy ten etap zostanie zakończony, podstawowy problem zostanie rozwiązany, a proces uruchamiania będzie nie do zdarcia i powinien działać prawidłowo nawet w skrajnych przypadkach, takich jak wolne szyny urządzeń.
Planowana rama czasowa obejmuje podmianę /sbin/init przez upstart dla Squeeze'a, spróbujemy też zorganizować zmianę wczesnej fazy startowej na opartą o zdarzenia również dla Squeeze'a, naprawę najbardziej naglących aktualnych problemów (nieudane fsck
i mount
dla dysków USB). Dla wydania Squeeze+1 więcej elementów wczesnego mechanizmu startowego zostanie przekształcone, aby uporać się z większą ilością istniejących problemów.
Zgodnie ze specyfikacją Linux Standard Base, wszystkie zgodne z LSB dystrybucje muszą obsługiwać pakiety zawierające skrypty init.d. Ponieważ Debian planuje kontynuować stosowanie się do LSB, mechanizm startowy musi w dalszym ciągu skrypty init.d obsługiwać. Z tego powodu, w Debianie potrzebny jest mechanizm startowy, który zarówno oparty jest o zdarzenia w początkowej fazie, jak i wywołuje skrypty init.d w odpowiednim momencie.
Odnośniki:
Źródło: lists.debian.org/debian-devel-announce/2009/09/msg00003.html
Dodany: 05 wrz 2009 o 22:23
przez: azhag