Baptiste Daroussin, FreeBSD Core Teami liige ja paketihalduri pkg autor, arendab FreeBSD jaoks uut süsteemihaldurit — rcd. Süsteemihaldur rcd käivitatakse init-protsessi poolt /etc/rc asemel, loeb teenuste seadistusfaile (/etc/rcd.d/*.ucl), koostab sõltuvuspuu ja käivitab teenused võimaluse korral üksteisega paralleelselt, seejärel jälgib teenuste tööd ning vajaduse korral taaskäivitab need.
Taustaprotsessi haldust ja teenustega seotud toiminguid saab teha käske otse UNIX-soklisse edastades või käsurea utiliidi rctl abil. Teenuste parameetritega unit-failid on vormistatud UCL-formaadis, mis meenutab nginx-i ja bind-i seadistusfailide vormingut ning sisaldab JSON-ist laenatud elemente automaattöötluse lihtsustamiseks. Võimalik on luua tüüpiliste unit-failide malle ja kirjutada sisseehitatud töötlejaid Lua keeles. Näide unit-failist nginx-i käivitamiseks: 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»; }; }
PID-failidega töötamise asemel toimub käivitatud protsesside aktiivsuse jälgimine süsteemikutse pdfork() tagastatud deskriptorite abil. Toetatud on teenuste aktiveerimine ainult võrgusokli poole pöördumisel ning võimalus kaitsta olulisi teenuseid sunnitud lõpetamise eest olukorras, kus süsteemis napib mälu. Taustaprotsessi rcd versiooni saab jooksvalt uuendada ilma olekut kaotamata.
Teenusele kättesaadavate ressursside piiramiseks kasutatakse rctl-i ning teenuste täielikuks isoleerimiseks on toetatud nende käivitamine jail-keskkondades. Võimalik on seadistada juurdepääsu juhtivale UNIX-soklile üksikute teenuste kaupa. Toetatud on unerežiimile üleminek.
Süsteemihaldur on täielikult tagasiühilduv olemasoleva rc.d teenuste järjestikuse käivitamise süsteemiga ja suudab töötada ilma olemasolevaid rc.d skripte ning konfiguratsioonifaile muutmata. Piisab, kui paigaldada rcd töötavasse süsteemi, ning pärast taaskäivitust jätkub kõik nagu varem, välja arvatud see, et teenuste paralleelse käivitamise tõttu lüheneb alglaadimisaeg. Selline ühilduvus lihtsustab süsteemide üleviimist rcd-le ja võimaldab olemasolevad rc.d skriptid järk-järgult unit-failide vormingusse viia.
Rc.d-ga ühilduvuse tagamiseks toetatakse spetsiaalset unit-tüüpi „legacy“. Rcd skannib kataloogide /etc/rc.d/ ja /usr/local/etc/rc.d/ sisu, analüüsib skriptide päiseid PROVIDE/REQUIRE/BEFORE/KEYWORD, loeb rc.conf seadeid ja määrab skriptide käivitusoleku, seejärel käsitleb iga skripti virtuaalse legacy unit'ina. Kui selliste virtuaalsete unit'ite haldamiseks kasutatakse käsku rcctl, teisendatakse toimingud vanasse vormingusse, näiteks käsu „rcctl reload sshd“ täitmine käivitab „/etc/rc.d/sshd reload“.
Allikas: opennet.ru
