ABSTRACT: init, runlevel und startup scripts (sysv) werden erklaert AUDIENCE: junior admin SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt heute nochmals zurueck zum booten. nachdem der kernel fertig ist mit seiner initialierung startet er das programm /sbin/init (sofern man nicht mit dem init= parameter etwas anderes angegeben hat). init list das file /etc/inittab in dem steht was beim booten gemacht werden soll. init organisiert den bootvorgang mit sogenannten "runlevel". runlevel gibt ist entweder S oder eine ziffer von 0 bis 6. S steht fuer "singel user mode". runlevel 2 oder 3 verwendet man typischerweise fuer den normalbetrieb. 6 wird i.a. fuer einen shutdown verwendet. ruft man den befeh runlevel ohne parameter auf zeigt er den momentan und den vorherigen runlevel an (ein frisch gebootetes system hat als vorherigen runlevel "N") fuer jeden runlevel werden verschiedene scripts ausgefuehrt die bestimmte sachen starten. startup script werden heute von den meisten distributionen im (sysv) stil gestaltet. dazu legt man fuer jedes service dass man auf der maschine laufen lassen will ein file an dass man mit dem paramter start oder stop aufrufen kann. die files liegen meist unterhalb von /etc/init.d/ (auf manchen systemen auch /etc/rc.d/init.d/ oder /sbin/init.d/ o.ae.) fuer jeden runlevel hat man dann ein directory in dem man symlinks auf die scripts setzt. diese symlinks muessen per konvention Sxx oder Kxx beginnen . S steht fuer die script die gestartet werden wenn der runlevel betreten wird. K fuer die script die gestop werden wenn der runlevel verlassen wird. xx ist eine zahl mit der man die reihenfolge der ausfuehrung der scripts festlegt. diese scripts finden sich z.b. unter /etc/rc2.d/ oder /etc/rc.d/rc2.d/ o.ae. fuer den runlevel 2. anlog dazu /etc/rc3.d usw.. die symlinks koennten z.b. so aussen. S10sysklogd -> ../init.d/sysklogd S14ppp -> ../init.d/ppp usw.. das heisst in diesem runlevel wird zuerst sysklogd gestartet wird und dann ppp. usw.. will man eigene startup scripts machen so gibt es dazu meist ein script namens "skeleton" dass als vorlage dienen kann. im /etc/inittab ist dann nur noch ein script namens z.b: /etc/init.d/rc (kann von distribution zu distribution unterschiedlich heissen) dass genau das starten und stoppen der durch symlinks festgelegten scripts durchfuehrt. mit dem befehl "telinit" kann man dem init prozess mitteilen dass man den runlevel wechseln will. telinit 3 wuerde in den runlevel 3 wechseln. eine besonderheit ist: telinit Q das besagt dass init das file /etc/inittab neu lesen und auswerten soll. zusaetzlich zu den beim eintritt in einen runlevel zu startenden scripts gibt es im /etc/inittab auch eintraege die besagten was beim druecken von control-alt-del passieren soll und eintraege von programmen die in einem bestimmten runlevel immer am laufen gehalten werden (init wacht ueber diese programme und startet sie neu falls diese sich beenden). das sind z.b. "getty" prozesse die das einlogen auf den virtuellen consolen erlauben. man kann aber hier aber auch andere programme eintragen. T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 wuerde besagen dass ein getty auf einer seriellen leitung (/dev/ttyS1 ) mit eine baudrate von 9600 gestartet werden soll wenn man sich in den runlevels 2 oder 3 befindet. das respawn besagt dass init das getty programm neu starten soll wenn es sich beendet. (beendet sich das programm zu oft in kurzer zeit wird es allerdings fuer 5 minuten ausgesetzt.. ) traegt man also so eine zeile ein so muss man diese mit telinit Q aktivieren (damit init das /etc/inittab ) neu liest. EXERCISES: * schau dir deine /etc/inittab an * in welchem runlevel ist dein system gerade? * finde heraus wo sich auf deinem system die startup scripts befinden. sind diese im sysv format so dass sie mit start und stop als parameter aufgerufen werden muessen? wo sind die symlinks fuer die einzelnen runlevel? * mach ein eines start scripts namens mytest dass z.b. mittels echo eine /ausgabe auf dev/tty9 macht. (am besten das skeleton script als vorlage verwenden.). teste das scipt in dem du es zuerst haendisch aufrufst und trage dann einen symlink fuer einen runlevel ein bei dem es auferufen werden soll. * wo muesste man es eintragen wenn man die control-alt-del kombination nicht zum rebooten sondern fuer etwas anders verwenden will? REFERENCES: man inittab man init man telinit