Kapitel 2. En kort beskrivelse af System V Init

Indholdsfortegnelse

Hvorfor alle disse køreniveauer?

Følgende forklaring er “lånt” fra tksysv (en inspiration for KSysV):

System V init er hurtigt ved at blive til standarden i Linux®-verdenen for at kontrollere opstart af software på boot-tidspunktet. Det er fordi man kan argumentere for at den er nemmere at bruge og mere kraftig og fleksibel end den traditionelle BSD init.

Jeg vil ikke gå ind på historien her (hovedsageligt fordi jeg ikke kender den :-).

Den init binære fil er placeret i /sbin og ikke /etc. Dette er vigtigt idet man kunne prøve at opgradere en maskine til System V init uden at geninstallere og reformatere. Linux®-kernen kigger i /etc for dets init først, så du må sørge for at slette din gamle init derfra hvis der er en.

SysV init er også forskellig fra BSD-init idet config-filerne er i et underkatalog til /etc i stedet for at være direkte i /etc. Dette katalog hedder rc.d. Deri vil du finde rc.sysinit og følgende kataloger:

init.d indeholder en masse scripter. Basalt set har du brug for et script for hver service du måske vil start på boot-tidspunktet eller når du går ind i et andet køreniveau. Servicer inkluderer ting som netværk, NFS, sendmail®, httpd,osv. Servicer inkluderer ikke sådanne ting som setserial der kun skal køres én gang og så afsluttes. Sådanne ting skal indgå i filen rc.local.

rc.local skal være i /etc/rc.d hvis du vil have én. De fleste systemer inkluderer én selvom den ikke gør meget. Du kan også inkludere en rc.serial i /etc/rc.d hvis du har behov for at gøre specifikke ting med den serielle port på boot-tidspunktet.

Kæden af begivenheder er følgende:

  1. Kernen kigger adskillige steder efter init og kører den første den finder.

  2. init kører /etc/rc.d/rc.sysinit.

  3. rc.sysinit gør en masse nødvendige ting og kører så rc.serial (hvis den eksisterer)

  4. init kører rc.local

  5. init kører alle scripterne på standard-køreniveauet

Standard-køreniveauet afgøres i /etc/inittab. Du skulle have en linje tæt ved toppen sådan her:

id:3:initdefault:

Herfra skal du kigge i anden søjle og se at standard-køreniveauet er 3, som skulle være tilfældet for de fleste systemer. Hvis du ønsker at ændre det, kan du redigere /etc/inittab i hånden og ændre 3-tallet. Vær meget forsigtig når du roder med inittab. Hvis du laver kludder, kan du komme ind for at ordne det ved at reboote og gøre:

LILO boot: linux single

Dette skulle tillade dig at boote til enkeltbruger-tilstand så du kan ordne det.

Nå, hvordan kører den alle de rigtige scripter? Hvis du kører en ls -l i rc3.d, vil du se noget i retning af:

lrwxrwxrwx 1 root root 13 13:11 S10network -> ../init.d/network 
lrwxrwxrwx 1 root root 16 13:11 S30syslog -> ../init.d/syslog 
lrwxrwxrwx 1 root root 14 13:32 S40cron -> ../init.d/cron
lrwxrwxrwx 1 root root 14 13:11 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 13 13:11 S60nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 15 13:11 S70nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 18 13:11 S75keytable -> ../init.d/keytable
lrwxrwxrwx 1 root root 23 13:11 S80sendmail -> ../init.d/sendmail.init
lrwxrwxrwx 1 root root 18 13:11 S90lpd -> ../init.d/lpd.init
lrwxrwxrwx 1 root root 11 13:11 S99local -> ../rc.local

Hvad du vil bemærke er at der ingen rigtige filer er i kataloget. Alting er et link til et af scripterne i init.d-kataloget.

Linkene har også et S og et tal i begyndelsen. S betyder at dette specielle script skal startes og et K ville betyde at det skulle standse. Tallet lige før er blot af hensyn til rækkefølgen. Init vil starte alle de servicer der er baseret på den rækkefølge de kommer i. Du kan duplikere tallene, men det vil kun være forvirrende. Du skal blot bruge et to-ciffer tal, sammen med et stort S eller K til at start eller stop de servicer du behøver.

Hvordan starter og stopper den servicer? Simpelt. Hvert af scripterne er skrevet til at acceptere et argument som kan være start og stop. Du kan køre disse scripter manuelt rent faktisk med en kommando som:

/etc/rc.d/init.d/httpd.init stop

for at stoppe httpd-serveren. Init læser blot navnet, og hvis det har et K, kaldes scriptet med stop-argumentet. Hvis den har et S kaldes scriptet med et start-argument.

Hvorfor alle disse køreniveauer?

Nogle mennesker ønsker en nem måde at sætte en maskine op til flere formål. Jeg kunne have et “server”-køreniveau der kun kører httpd, sendmail, netværk, osv. Så kunne jeg have et “bruger”-køreniveau der kører kdm, netværk, osv.