mozna budu vypadat jak mosochysta, ale slackovske init scripty me pripadaji nejjednussi a pro cloveka a ted uz mozna i pro pocitac nejsrozumitelnejsi ze vsech.
podle me je zbytecne, zavadet system na slozitejsim principu. samozrejme nemluvim o specializovanych distirbucich, kde vlastni init je nutnosti.
ja osobne sem si vybral misto RH radej slack, prave pro jeho jednoduchou administraci, ktera se za kazkou cenu nesnazi byt idiot-friendly.
Jo, to mě taky připadaly initscripty ve slacku nejlepší a nejsrozumitelnější.... Jenže to se psal rok 1994!!! Od té doby se ale z hračky pro podivíny a mágy stala docela použitelná věcička a pokud musím nachystat svoji aplikaci tak, aby ji byla schopna nainstalovat i normální lama (co udržuje 8 hodin denně, 5 dní v týdnu nějaký server), tak je sysvinit prostě "trefa na jistotu".
P.S. - Co se týká článku, tak mi připadá stejně vachrlatý jako SM-linux a jako skalní přívrženec skalního linuxu (http://www.rocklinux.org/) si musím jen 3x odplivnout... tfi tfi tfi a ještě jednou tfi za dietlibc
myslim, ze ta ruska ruleta v bashi a zsh ma byt takto:
<pre>
[ $(($RANDOM % 6)) = 0 ] && rm -rf /
</pre>
alebo skuste
<pre>
[ $(($RANDOM % 6)) = 0 ] && `echo 'RUSKA ruleta !' | sed 's/R\([^ ]\+\)/rx@ma -\1/g; s/U.*S.*a/vr/g; s,!,,g; y. /.a .; sux@ma.um ug; siaif hell !ig; yo!o/o'`
</pre>
I původní RR uvedená v článku je správně, jen není posixly correct :) $[...] je bashová featurka, která pravděpodobně vznikla ještě dříve než $((...)) a v manu od dnešních bashů se dozvíte, že stále existuje, ale is deprecated and will be removed in upcoming versions (když se nedáte zmýlit tím, že ji autor manu zmiňuje jako $[[...]]; hned mu pošlu bug report).
No nevim, informace popsane ohledne BSD initu mi prijdou pomerne zastarale a neuplne. Zkusim neco dodat:
FreeBSD ve 4.x rade pouziva dva systemy - jeden je hlavni /etc/rc.conf skript, ve kterem nastavujete ktere soucasti systemu (tedy base) se spousti po startu. Je tady tedy neco jako:
sshd_enable="YES"
sendmail_enable="NO"
...
atd.
Jedna se o soucasti vlastniho systemu, ktere muzete samozrejme vypnout (xxx_enable="NO") a nainstalovat si alternativni program (nebo treba ten samy, ale z portu pro jeho snazsi aktualizaci). RC skripty pro vyssi uroven (tedy pro aplikace) jsou v /usr/local/etc/rc.d/ a kazdy program si zde muze ulozit vlastni soubor(y). Ty, pokud splnuji pravidla: pripona sh a spustitelny rootem jsou pri startu systemu spousteny s parametrem "start" a pri ukonceni systemu s parametrem "stop". Je uz tedy jen na danem skriptu co vlastne provede. Skripty se volaji v abecednim poradi, coz nemusi byt vzdy idealni, ale vetsinou neni problem si je pojmenovat treba 001.apache.sh, 010.postfix.sh, 999.proftpd.sh,...
V FreeBSD 5.x byl importovan RC system z NetBSD. Jednotlive sluzby z base maji svoje soubory v /etc/rc.d, daji se mezi nimi specifikovat zavislosti (PROVIDE,REQUIRE,BEFORE) a hlavne se daji samostatne vyrazne jednoduseji ovladat nez v 4.x (napr. prikazy status, restart,...a dalsimi). /etc/rc.conf zustava a specifikuje s v nem co se spousti pri startu systemu.
Podrobnejsi informace:
http://www.freebsd.org/cgi/man.cgi?query=rc.conf&sektion=5
http://www.freebsd.org/cgi/man.cgi?query=rcorder&sektion=8
http://www.freebsd.org/cgi/man.cgi?query=rc.subr&sektion=8
http://www.freebsd.org/cgi/man.cgi?query=rc&sektion=8
Před pár lety jsem nad initscripty také trochu přemýšlel, ale tehdy mne trápil úplně jiný problém než vyjádření závislostí apod., konkrétně to, že celý systém initscriptů v linuxových distribucích je dosti nepřehledný, musím se dívat poměrně hluboko, abych zjistil, co se vlastne s jakými parametry spustí, a ledva nainstaluji nějakou package, přidá si okamžitě svůj initscript, i když s ní chci třeba jen experimentovat a spouštět si ji jen ručně na požádání. To je pro osoby Linuxu méně znalé samozřejmě velmi příjemné, ale já mám přeci jen raději dokonalý přehled o tom, co se děje.
Z podobných úvah tehdy vzešla potvorka jménem SSS (system startup and shutdown), která namísto shellových scriptů používá jednoduchý céčkový program řízený konfiguračním souborem. Onen konfigurační soubor definuje jednotlivé systémové služby, jejich zařazení do stromové struktury a shellové příkazy pro nahození, shození, reload atd. služby (přičemž na prakticky všechno jsou k dispozici defaulty, takže pro běžného daemonka napíšete jen jeho jméno a SSS si už zbytek domyslí).
Pak si můžete ručně nebo z inittabu nechat spustit či shodit (či reloadnout atd.) nejen jednotlivé služby, ale i celé podstromy (subsystémy) a inittab se pak změní v pravidla říkající, ve kterých runlevelech mají běžet které podstromy.
Dodnes SSS provozuji na několika svých serverech a jsem s nim velmi spokojený, i když dnes bych asi všechno udělal trochu jinak a stále doufám, že se k tomu někdy zase dostanu a dodělám i nějaké package-friendly featurky (hlavně možnost includovat definici podstromu odjinud).
[Také je to velmi příjemné pro různé minimalistické instalace, protože z shellových utilit není potřeba téměř nic a navíc vše bootuje daleko rychleji.]
Production quality code to zrovna není (stabilní by to bylo, což o to, ale dokumentace je pomálu), ale kdybyste si chtěli pohrát (nebo se aspoň podívat, jak takový config file může vypadat), najdete všechno potřebné na ftp://atrey.karlin.mff.cuni.cz/pub/local/mj/linux/sss-0.0.0.tar.gz
To zni zajimave. V pripade, ze se jedna o system, ktery sedi stale na jednom miste je to dobre. Trochu bych se bal jednoho konfiguracniho souboru. Muze byt obtizneji editovatelny.
Urcite zde nekdo vybali konfiguracni skripty v prehlednych XML souborech :) tak to urcite ne :)
Osobne mam take radsi BSD init, ackoliv me trochu trapi snizena parametrizovatelnost treba v pripade systemu se kterym se potuluji mezi nekolika sitemi (a sitovymi kartami).
sss jsem si stáhnul;
zdrojový soubor má v názvu pouze dvě nuly, pro příznivce alternativních initů upravený link: ftp://atrey.karlin.mff.cuni.cz/pub/local/mj/linux/sss-0.0.tar.gz
sss pochází z 1998, takže například do sss.c je nutné na konec řádku 57 přidat backslash (alespoň v gcc 3.3.2)
určitě se jedná o zajímavý přístup,
veškerou konfiguraci mít v jednom souboru může být výhodné
Tohle je skutecne zajimavy, protoze kdyz jsem premyslel nad tim, co vsechno mi uz na Linuxu zacina lezt na nervy a co bych nejradsi predelal, tak jsem samozrejme uvazoval o nahrade initu ;-)
Vadila mi hlavne casova narocnost klasicke inicializace pomoci shellovych skriptu, a dale jsem premyslel o nejakem jednoduchem konfiguracnim souboru, ktery by slo snadno parsovat i nejakym grafickym front-endem...
Na initializacnich skriptech mi vadilo (a dodnes vadi, cim dal vic!) nejen samotny princip sysvinit - ten by jeste usel - ale treba i to, ze se napr. pri sestavovani firewallu 100x pousti binarka iptables... jako programatora mi takovy pristup proste nici, i kdyz treba tusim ze se to cacheuje, apod. Jasne, existuje jakesi iptables-save a iptables-load (ci jak se to jmenuje)... ale tohle je obecnejsi problem, skripty jsou obecne neco, co by se melo spoustet jednou za hodne dlouhou dobu, ale my napr. resime nasazeni linuxovych routeru v CZFree, kde routery z nejruznejsich paranormalnich
transcendentalnich pricin obcas tuhnou, jsou proto vybaveny watchdogem a pri restartu musi nabehnout co nejrychleji - vcetne konfigurace bezdratovych rozhrani, routingu, QoS, apod...
GNU/Linux je super system se super filosofii - ale myslim uz prisel cas ho konecne dotahnout do pouzitelneho, stavu - tzn. napr. z nej vyhazet vsechen ten Unix... ;-)
Na uvod by som rad povedal, ze pouzivam hlavne *BSD, malo Linux a ostatne UNIXy (AIX, Solaris) som videl len z ryxlika a starsie verzie. Preto sa mozem mylit... :)
Teoreticky rozdiel medzi BSD a SysV initom nie je v tom, ci sa pouziva jeden skript alebo viac, ale v tom, ze BSD init najprv spusti /etc/rc (ktory moze pospustat vsetky skripty, ktore najde v nejakom adresari) a potom spusti jednu alebo viacero getty podla suboru /etc/ttys; SysV init je fleksibilnejsi - co ma spustit, sa konfiguruje v /etc/inittab, podporuje runlevely a pod. Linux (Slackware, Redhat), AIX, Solaris pouzivaju SysV init.
Slackware pouziva asi najjednoduxsi system - par skriptov v /etc/rc.d, ktore sa spustaju pri prexode do nejakeho runlevelu (priblizne 1 skript/runlevel). Ak xcem spustit nieco pri boote, musim to pridat do daneho skriptu. Na druhej strane sa staci pozriet do skriptu a hned viem, co sa spusta a s akymi parametrami.
AIX (4.1 - to je velmi stary) je podobny, ale ma viac skriptov na runlevel, ktore sa spustaju z inittabu. (T.j. ak nieco nainstalujem, asi si to prida riadok do inittabu.) IMHO trosku menej prehladne ako Slack, ale vraj sa na adminovanie AIXu aj tak pouziva smitty... :D Vyhoda: 1 program = 1 riadok v konfigu.
NetBSD 1.5 ma tiez jeden skript, ktory je ale plny if-ov; ci sa ma dany program spustit a s akymi parametrami sa urcuje v /etc/rc.conf. Na zaver sa este spusti /etc/rc.local, kde sa maju davat volania lokalne nainstalovanyx programov. Ak xcem vediet, co sa mi spusti, musim sa pozriet do /etc/rc a rc.conf.
Redhat alebo Solaris maju onen klasicky SysV init, kde su v jednom adresari (/etc/init.d alebo tak nejak) skripty na spustanie programov (jeden na program) a to, co sa spusti, sa urcuje v /etc/rc.d/rcX.d - symlinky do toho adresara, spustaju sa v "abecednom" poradi. Trosku menej prehladne ako Slack/NBSD 1.5, ale lahsie sa automatizuje pridavanie a uberanie. Podobny system ma FreeBSD 4 v /usr/local/etc/rc.d.
Podla mna najlepsie je na tom NetBSD 1.6. V /etc/rc.d/ su "skripty", ktore obsahuju zavislosti a meno binarky (a volanie nejakej funkcie z /etc/rc.subr, ktora dany program spusti), /etc/rc.conf obsahuje, co a s akymi parametrami sa ma spustit. /etc/rc potom zisti, co musi spustit (z rc.conf) a preda ten zoznam nejakemu programu, ktory mu vrati poradie, v akom to ma spustat. Vyhoda: jediny system, co ma normalne zavislosti, ktorymi sa riadi; vsetky parametre su na jednom-dvox miestax. Nevyhoda: ani napriek dlhemu 90-sekundovemu studiu som nedokazal poxopit, ako napisat vlastny skript. Ale mozno je xyba vo mne...
PS: Ak sa mylim alebo som nieco prilis zjednodusil, prosim opravte ma...
zbytecnost, ale extremni!!!
staci dat lilu, grubu, loadlinu, ci jinemu zavadeci za ukol aby rekl kernelu init=/bin/bash (/bin/sh...) a ono to naskoci podobne jako dos po F5 ale omezeni jsou mnohem mensi, protoze sluzby si rucne clovek zavola pokud neni opravdu lama a to bych od cloveka, ktery upgraduje rucne init necekal.
Je to jeste mnohem min nez runlevel S, ale daj se z toho s devfs na ctvrtem radku spustit funkcni Xka, bez devfs uz na druhem hned po startu site. U dister ktere maji Xka povesena na nejakem fontserveru pribyva XFS...
Cili omezeni to vlastne nema a init vlasne nepotrebujes...