Hoofdstuk 7. Het rc.d systeem

Inhoudsopgave

7.1. De rc.d configuratie
7.2. De rc.d scripts
7.3. De rol van rcorder en de rc scripts
7.4. Meer informatie

Sinds NetBSD 1.5 zijn de initialisatiescripts van het systeem aangepast zodat er rc-scripts gebruikt worden voor het bedienen van diensten. Dit is vergelijkbaar met het initialisatiesysteem dat System V en Linux gebruiken, maar dan zonder runlevels. Dit hoofdstuk biedt een overzicht van het rc-systeem en het configureren van dit systeem op NetBSD.

7.1. De rc.d configuratie

De opstartbestanden voor het systeem zijn opgeslagen in /etc, dit zijn:

  • /etc/rc

  • /etc/rc.conf

  • /etc/rc.d/*

  • /etc/rc.lkm

  • /etc/rc.local

  • /etc/rc.shutdown

  • /etc/rc.subr

  • /etc/defaults/*

  • /etc/rc.conf.d/*

Laten we eerst kijken naar de scripts die de controle over de initialisatie hebben en scripts die hier ondersteuning bij geven. Deze scripts zijn ook gedocumenteerd in rc(8).

  • Nadat de kernel alle apparaten geïnitialiseerd heeft, start het gewoonlijk init(8), wat op zijn beurt weer /etc/rc start.

  • /etc/rc sorteert de scripts in /etc/rc.d met behulp van rcorder(8), en start ze in die volgorde. Lees de rcorder(8) handleiding voor meer informatie over hoe de volgorde van /etc/rc.d scripts worden bepaald.

  • /etc/rc.subr bevat een aantal functies die door veel /etc/rc.d/* scripts gebruikt worden.

  • Als het systeem afgesloten wordt met shutdown(8), wordt /etc/rc.shutdown gestart. Dit script start de scripts in /etc/rc.d in omgekeerde volgorde (zoals gedefinieerd door rcorder(8)).

Andere scripts buiten de rc.d directory:

  • /etc/rc.lkm laadt Loadable Kernel Modules in het geheugen of verwijdert ze. Zie voor meer informatie modload(8) en /etc/rc.d/lkm[123].

  • /etc/rc.local is bijna het laatste script dat aangeroepen wordt tijdens het starten van het systeem. Dit script kan bewerkt worden door de systeembeheerder om lokale daemons te starten die niet volgens het rc concept werken.

    Veel pakketten die geïnstalleerd zijn met pkgsrc voegen hun opstartbestanden bijvoorbeeld aan /usr/pkg/etc/rc.d toe, en de systeembeheerder kan beslissen of deze diensten aangeschakeld moeten worden, door ze te kopieeren/linken naar /etc/rc.d, of door ze aan /etc/rc.local toe te voegen. Het volgende voorbeeld laat zien hoe de Apache webserver aan /etc/rc.local toegevoegd kan worden:

    if [ -f /usr/pkg/etc/rc.d/apache ]; then
    	  /usr/pkg/etc/rc.d/apache start
    	fi

Er is een centraal configuratiebestand voor opstartscripts, rc.conf(5): /etc/rc.conf. /etc/rc.conf laadt de standaardinstellingen uit /etc/defaults/rc.conf. Dit laatste bestand dient niet gewijzigd te worden. U kunt een standaardinstelling door het aan /etc/rc.conf toe te voegen.

U kunt bijvoorbeeld de Secure Shell Daemon op de volgende wijze aanzetten:

# cd /etc; grep ssh defaults/rc.conf
sshd=NO                 sshd_flags=""
# echo "sshd=YES" >> rc.conf

Of bewerk /etc/rc.conf met uw favoriete editor. Hetzelfde kan gedaan worden met andere standaardinstellingen die veranderd moeten worden. Een veelvoorkomende stap na de installatie van NetBSD is:

# cat /etc/defaults/rc.conf >>/etc/rc.conf
# vi /etc/rc.conf

Las op dat u “>>” gebruikt, en niet “>”, anders vernietigd u de inhoud van /etc/rc.conf, die belangrijk is voor het functioneren van het systeem. Nadat u de standaardinstellingen op deze wijze heeft toegevoegd, kunt u uw wijzigingen aanbrengen in /etc/rc.conf. Lees de rc.conf(5) om alle instellingen in detail te leren begrijpen.

Tenslotte kan de /etc/rc.conf.d/ directory voor instelling gebruikt worden voor scripts die afkomstig zijn van derde partijen.

7.2. De rc.d scripts

De eigenlijke scripts die de diensten bedienen staan in /etc/rc.d. Als een dienst geactiveerd of gedeactiveerd is in /etc/rc.conf kan de staat van de dienst ook veranderd worden vanaf de commandoregel. De systeembeheerder kan bijvoorbeeld de secure shell deamon starten met:

# /etc/rc.d/sshd start
Starting sshd.

De rc scripts moeten één van de volgende argumenten ontvangen:

  • start

  • stop

  • restart

  • kill

Stel dat er een nieuw domein is toegevoegd aan de named database, dan kan named herstart worden:

# /etc/rc.d/named restart
Stopping named.
Starting named.

Het wordt complexer wanneer er een serie van instellingen veranderd zijn, bijvoorbeeld als de ipfilter regels van de firewall en de ipnat configuratie zijn aangepast, en de secure shell server een andere vorm van encryptie moet gebruiken:

# cd /etc/rc.d
# ./ipfilter restart; ./ipnat restart; ./sshd restart
# sh /etc/rc.d/ipfilter restart
# sh /etc/rc.d/ipnat restart
# sh /etc/rc.d/sshd restart 

7.3. De rol van rcorder en de rc scripts

Het initialisatiesysteem van elk UNIX systeem moet de volgorde van het starten van diensten bepalen. Op sommige UNIX systemen wordt dit gedaan door bestanden te nummeren en/of door ze in aparte runlevel directories te plaatsen (Solaris is bijvoorbeeld van wildcards als /etc/rc[23].d/S* afhankelijk, die numeriek gesorteerd worden bij het uitbreiden van de wildcard). Of de commando's die gestart moeten worden, worden geplaatst in een enkel monolithisch script (dit is wat oude BSD en NetBSD versies deden voor de introductie van het rc-systeem). Dit kan behoorlijk onoverzichtelijk zijn. Op NetBSD wordt de startvolgorde bepaald door de rc-scripts en hun inhoud. Let op dat NetBSD niet meerdere runlevels heeft als bijvoorbeeld System V systemen zoals Solaris, of Linux.

Aan het begin van elke rc script in /etc/rc.d/*, staan een aantal commentaarregels, die een van de volgende woorden bevat:

  • REQUIRE

  • PROVIDE

  • BEFORE

  • KEYWORD

Deze woorden bepalen de afhankelijkheden van een bepaald rc script en daardoor kan de rcorder naar “boven” of naar “beneden” afgewerkt worden, afhankelijk van de situatie. Dit is een voorbeeld uit het /etc/rc.d/nfsd script:

...
 PROVIDE: nfsd
 REQUIRE: mountd

. /etc/rc.subr
...

Hier zijn we dat het script de nfsd dienst biedt. Het vereist echter dat mountd reeds gestart is. Het rcorder(8) commando wordt gebruikt tijdens het starten van het systeem om alle rc scripts te lezen, en de correcte volgorde voor het starten van de scripts te bepalen (vandaar de naam van het commando).

7.4. Meer informatie

Er zijn andere informatiebronnen beschikbaar met betrekking tot het rc.d systeem:

  • Eén van de ontwerpers van rc.d, Luke Mewburn, heeft een presentatie van het systeem gegeven op USENIX 2001. Het is beschikbaar in PDF formaat.

  • Will Andrews heeft een Daemonnews artikel geschreven met de naam The NetBSD rc.d System.