Baptiste Daroussin, člen FreeBSD Core Team a autor balíkového manažéra pkg, vyvíja nový systémový manažér pre FreeBSD — rcd. Systémový manažér rcd je vyvolávaný init-procesom namiesto /etc/rc, číta konfiguračné súbory služieb (/etc/rcd.d/*.ucl), vytvára strom závislostí a spúšťa služby čo najviac paralelne, potom monitoruje činnosť služieb a v prípade potreby ich reštartuje.
Správa pozadia a operácie so službami sa môžu vykonávať prostredníctvom priamého prenosu príkazov do UNIX-soketu alebo pomocou príkazového nástroja rctl. Unit-súbory s parametrami služieb sú formátované v UCL, ktorý pripomína formát konfiguračných súborov nginx a bind s prvkami na zjednodušenie automatizovanej správy, prevzatými z JSON. Je tu možnosť vytvárania šablón typových unit-súborov a písania vstavaných spracovateľov v jazyku Lua. Príklad unit-súboru pre spustenie 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"; }; }
Namiesto práce s PID-súbormi sa sledovanie činnosti spustených procesov uskutočňuje pomocou descriptorov, ktoré sú vrátené systémovým volaním pdfork(). Podporuje sa aktivácia služieb len pri prístupe k sieťovému soketu a je možné chrániť dôležité služby pred núteným ukončením v prípade nedostatku pamäte v systéme. Možná je aktualizácia verzie pozadia procesu rcd za behu bez straty stavu.
Na obmedzenie dostupných zdrojov pre službu sa používa rctl, a na úplnú izoláciu služieb sa podporuje ich spúšťanie v jail-hozradeniach. Je možná konfigurácia prístupu k ovládaciemu UNIX-soketu v súvislosti s jednotlivými službami. Podporuje sa prechod do spiaceho režimu.
Systémový manažér je plne spätne kompatibilný so súčasným systémom postupného spúšťania služieb rc.d a môže fungovať bez zmeny existujúcich rc.d skriptov a konfiguračných súborov. Stačí nainštalovať rcd do fungujúceho systému a po reštarte všetko bude fungovať ako predtým, s výnimkou skrátenia časov spúšťania vďaka paralelizácii spúšťania služieb. Takáto kompatibilita uľahčí migráciu systémov na rcd a umožní postupne prevádzať existujúce rc.d skripty do formátu unit súborov.
Pre kompatibilitu s rc.d sa podporuje špeciálny typ unit-ov „legacy“. Rcd prehľadáva obsah /etc/rc.d/ a /usr/local/etc/rc.d/, analyzuje hlavičky PROVIDE/REQUIRE/BEFORE/KEYWORD v skriptoch, číta nastavenia rc.conf a určuje stav spúšťania skriptov, po čom spracováva každý skript ako virtuálny legacy unit. V prípade použitia príkazu rcctl na spravovanie týchto virtuálnych unit-ov sa operácie prekladajú do starého formátu, napríklad vykonanie „rcctl reload sshd“ spôsobí spustenie „/etc/rc.d/sshd reload“.
Zdroj: opennet.ru
