upstart

Jakoś nikt z ubuntowców się tym nie ekscytuje a moim zdaniem ekscytować się powinniśmy. Jedynie linuxnews.pl zamieścił krótką notkę na ten temat a to zdecydowanie za mało[1]. Idzie nowe, panie i panowie.

Jak zapewne większość z Was wie, matką i ojcem wszystkich procesów w Linuksie jest init. Nieumarły ten demon [2] w większości dystrybucji oparty jest na rozwiązaniach wywodzących się hen, z wczesnych lat osiemdziesiątych, czyli na wielopoziomowym sysvinit. Rozwiązanie to towarzyszy Linuksowi od lat, wielokrotnie też było „łatane” aby sprostać nowym czasom. Bo czasy, drodzy moi, mają to do siebie, że się zmieniają. W czasach nam współczesnych stary init daje sobie radę średnio. Sprawdza się świetnie jeżeli tylko wszystkie urządzenia, które inicjuje są w momencie startu systemu dostępne - problemy zaczynają się, gdy któregoś z nich zabraknie a init przeczyta sobie w skrypcie, że być powinno. Coraz większa ilość najprzeróżniejszych urządzeń jest dziś wpinana poprzez porty USB, nadszedł więc czas na nowe rozwiązania w kwestii zarządzania startem systemu.

Takie rozwiązania oczywiście istnieją. Istnieje przede wszystkim Initng[3], istnieje też pochodzący od Apple launchd. Rozwijany pod skrzydłami Canonical upstart jest w pewnym sensie połączeniem zalet obu tych rozwiązań, ale również wprowadza własne usprawnienia. Przede wszystkim, podobnie jak launchd, upstart bazuje na koncepcji zdarzeń. W odróżnieniu od zwykłego inita, który wykonuje po kolei wszystkie skrypty zawarte w /etc/init.d/rc N[4], upstart reaguje na komunikaty wysyłane przez procesy potomne i na tej podstawie zarządza skryptami uruchomieniowymi. Zdarzeń tych może być praktycznie nieograniczona ilość, każdy proces może bowiem wysyłać do niego własny komunikat. Przykłady:

  • system został uruchomiony,
  • do systemu dodano nowe urządzenie blokowe,
  • zamontowano system plików,
  • upłynął określony termin lub okres czasu,
  • plik uległ modyfikacji,
  • wykryto urządzenie sieciowe.

… i tak dalej, i tak dalej. Znacząco odróżnia to upstart od launchd, który przyjmuje jedynie cztery rodzaje zdarzeń.

Każde zdarzenie ma prosty „cykl życia”:

Stany ujęte w czerwonych ramkach to tzw. „stany spoczynkowe”. W każdym z tych stanów zadanie oczekuje na nadejście zdarzenia, z każdego z nich przejść ono może w inny stan. Trzy pozostałe stany ochrzczono mianem „tymczasowych”. Pozwalają one na uruchomienie przez zadanie skryptu, który powinien wystartować przed rozpoczęciem zadania („uruchamianie”) albo po jego zakończeniu („zatrzymywanie”). Ostatni stan - „ponowny start” - zarezerwowany jest dla usług, które zakończyły pracę przed nastąpieniem zdarzenia, które miało je zatrzymać i pozwala na uruchomienie skryptu poprzedzającego ponowne, automatyczne uruchomienie.

Zdarzenia uruchamiające poszczególne zadania mogą być generowane przez samego demona upstart, wysyłane przez inne procesy oraz przekazywane ręcznie. Komunikacja jest zresztą dwukierunkowa: demon nie tylko odbiera sygnały, ale wysyła również procesom komunikaty stanu.

Upstart ma docelowo zastąpić wszystkie inne demony zarządzające jakimikolwiek zdarzeniami w systemie, zniknąć więc ma cron ale również i inetd. Więcej nawet - ostatecznie upstart ma przejąć obowiązki uruchamiania zadań od wszystkich demonów. Demony w rodzaju acpid czy apmd zamiast samodzielnie uruchamiać skrypty (każdy na swój sposób oczywiście, powodowany odrębną konfiguracją) będą po prostu wysyłały do niego[5] odpowiednie zdarzenia. Cała konfiguracja w jednym miejscu - /etc/event.d/.

Jako się rzekło, upstart rozwijany jest pod skrzydłami Canonical, więc poligonem doświadczalnym stanie się dla niego Ubuntu. Nowy mechanizm zadebiutuje już w kolejnej odsłonie tej dystrybucji - 6.10 Edgy Eft - choć nie będzie jeszcze w pełni funkcjonalny, przede wszystkim zaś nie będzie jeszcze wymagał od pozostałych procesów nowych metod komunikacji. Wersja Edgy+1 (kwiecień 2007) nie będzie już używała crona, anacrona oraz inetd, do wersji Edgy+2 (październik 2007) nie trafi już żaden nowy pakiet, który nie będzie potrafił współpracować z upstart. Ambitnie. Jeżeli ktoś bardzo chce pobawić się nim już teraz, proszę bardzo: pakiet „upstart” leży w repozytorium Universe Edgy’ego.


Przypisy:

  1. o, pardąsik, dobreprogramy.pl też coś opublikowały []
  2. nie można go ubić poprzez SIGKILL []
  3. którego możecie sobie w bardzo prosty sposób zainstalować w Ubuntu []
  4. gdzie N jest numerem poziomu uruchomienia systemu []
  5. poprzez D-BUS, choć w tej chwili upstart wykorzystuje własny mechanizm IPC []