Dla FreeBSD rozwijany jest nowy menedżer systemowy rcd

Baptiste Daroussin, członek zespołu FreeBSD Core Team i autor menedżera pakietów pkg, rozwija nowy menedżer systemowy dla FreeBSD - rcd. Menedżer systemowy rcd jest wywoływany przez proces init zamiast /etc/rc, odczytuje pliki konfiguracyjne usług (/etc/rcd.d/*.ucl), buduje drzewo zależności i uruchamia usługi w miarę możliwości równolegle, a następnie monitoruje pracę usług i w razie potrzeby je restartuje.

Zarządzanie procesami w tle i operacje z usługami mogą być realizowane poprzez bezpośrednie przesyłanie poleceń do gniazda UNIX lub za pomocą narzędzia wiersza poleceń rctl. Pliki jednostek z parametrami usług są sformatowane w UCL, które przypomina format plików konfiguracyjnych nginx i bind, z elementami upraszczającymi automatyczne przetwarzanie, pożyczonymi z JSON. Istnieje możliwość tworzenia szablonów typowych plików jednostek oraz pisania wbudowanych procesorów w języku Lua. Przykład pliku jednostki do uruchamiania nginx: name = "nginx"; description = "Nginx HTTP Server"; type = "simple"; command = "/usr/local/sbin/nginx"; command_args = "-g 'daemon off;'"; provides = ["nginx", "http"]; requires = ["NETWORKING", "sshd"]; restart { policy = "always"; max_retries = 10; delay = 2000; backoff = "linear"; } process { user = "www"; group = "www"; cpuset = "0-3"; } rctl { memoryuse = { action = "deny"; amount = "2g"; }; pcpu = { action = "throttle"; amount = "80"; }; }

Zamiast pracy z plikami PID, monitorowanie aktywności uruchomionych procesów jest realizowane przy użyciu deskryptorów zwracanych przez wywołanie systemowe pdfork(). Wprowadzone zostało wsparcie dla aktywacji usług tylko na podstawie odwołania do gniazda sieciowego, a także możliwość ochrony ważnych usług przed wymuszeniem zakończenia w przypadku niedoboru pamięci w systemie. Możliwe jest zaktualizowanie wersji procesu w tle rcd w locie bez utraty stanu.

W celu ograniczenia dostępnych zasobów dla usługi stosuje się rctl, a dla pełnej izolacji usług wspierane jest ich uruchamianie w środowiskach jail. Możliwe jest skonfigurowanie dostępu do zarządzającego gniazda UNIX w powiązaniu z poszczególnymi usługami. Obsługiwane jest przejście w tryb uśpienia.

Menedżer systemu jest w pełni wstecznie zgodny z istniejącym systemem sekwencyjnego uruchamiania usług rc.d i może działać bez modyfikacji obecnych skryptów rc.d oraz plików konfiguracyjnych. Wystarczy zainstalować rcd na działającym systemie, a po ponownym uruchomieniu wszystko będzie działać jak dotąd, z tą różnicą, że czas startu skróci się dzięki równoległemu uruchamianiu usług. Taka zgodność uprości migrację systemów do rcd i pozwoli stopniowo przenosić istniejące skrypty rc.d do formatu plików unit.

Aby zachować zgodność z rc.d, obsługiwany jest specjalny typ unitów — „legacy”. Rcd skanuje zawartość /etc/rc.d/ oraz /usr/local/etc/rc.d/, analizuje nagłówki PROVIDE/REQUIRE/BEFORE/KEYWORD w skryptach, odczytuje ustawienia rc.conf i określa stan uruchamiania skryptów, po czym traktuje każdy skrypt jako wirtualny unit typu legacy. W przypadku użycia polecenia rcctl do zarządzania takimi wirtualnymi unitami operacje są tłumaczone na stary format, na przykład wykonanie „rcctl reload sshd” spowoduje uruchomienie „/etc/rc.d/sshd reload”.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster