| 1 |
<?xml version='1.0' encoding='UTF-8'?>
|
| 2 |
<!DOCTYPE sections SYSTEM "/dtd/book.dtd">
|
| 3 |
|
| 4 |
<!-- The content of this document is licensed under the CC-BY-SA license -->
|
| 5 |
<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
|
| 6 |
|
| 7 |
<!-- $Header: $ -->
|
| 8 |
|
| 9 |
<!-- Sync: 1.25 -->
|
| 10 |
|
| 11 |
<sections>
|
| 12 |
|
| 13 |
<version>1.21</version>
|
| 14 |
<date>2005-05-29</date>
|
| 15 |
|
| 16 |
<section>
|
| 17 |
<title>Runlevels</title>
|
| 18 |
<subsection>
|
| 19 |
<title>Het starten van het Systeem</title>
|
| 20 |
<body>
|
| 21 |
|
| 22 |
<p>
|
| 23 |
Als uw systeem opstart, ziet u steeds regels tekst voorbij schieten.
|
| 24 |
Wanneer u heel goed kijkt, zult u zien dat deze tekst steeds dezelfde zijn.
|
| 25 |
De volgorde waarin alles voorbij komt wordt de <e>boot sequence</e> genoemd,
|
| 26 |
is ligt (min of meer) vast.
|
| 27 |
</p>
|
| 28 |
|
| 29 |
<p>
|
| 30 |
Allereerst laadt uw bootloader de kernel image die u hebt aangegeven in het
|
| 31 |
configuratie bestand in het geheugen. Daarna vertelt het de processor om de
|
| 32 |
kernel uit te voeren. Wanneer de kernel is geladen en uitgevoerd, worden alle
|
| 33 |
kernel specifieke onderdelen en taken geïnitialiseerd en wordt het <c>init</c>
|
| 34 |
proces gestart.
|
| 35 |
</p>
|
| 36 |
|
| 37 |
<p>
|
| 38 |
Dit proces zorgt ervoor dat alle bestandssystemen (als gedefinieerd in
|
| 39 |
<path>/etc/fstab</path>) aangekoppeld en klaar gemaakt worden. Daarna
|
| 40 |
voert het verschillende scripts uit die terug te vinden zijn in
|
| 41 |
<path>/etc/init.d</path>. Deze scripts starten de hulpmiddelen die nodig
|
| 42 |
zijn om uw systeem volledig te starten.
|
| 43 |
</p>
|
| 44 |
|
| 45 |
<p>
|
| 46 |
Als alle scripts zijn uitgevoerd, activeert <c>init</c> de terminals
|
| 47 |
(in de meeste gevallen alleen de consoles die achter <c>Alt-F1</c>,
|
| 48 |
<c>Alt-F2</c>, etc zijn verborgen) met <c>agetty</c> dat als toepassing
|
| 49 |
wordt mee gestart, zodat u kunt inloggen via <c>login</c>.
|
| 50 |
</p>
|
| 51 |
|
| 52 |
</body>
|
| 53 |
</subsection>
|
| 54 |
<subsection>
|
| 55 |
<title>Init Scripts</title>
|
| 56 |
<body>
|
| 57 |
|
| 58 |
<p>
|
| 59 |
Echter, <c>init</c> voert de scripts in <path>/etc/init.d</path> niet in
|
| 60 |
willekeurige volgorde uit. Sterker nog, het voert alleen de scripts in
|
| 61 |
<path>/etc/init.d</path> uit die uitgevoerd moeten worden. Het bepaalt welke
|
| 62 |
scripts dat zijn door te kijken naar <path>/etc/runlevels</path>.
|
| 63 |
</p>
|
| 64 |
|
| 65 |
<p>
|
| 66 |
Als eerste voert <c>init</c> de scripts uit in <path>/etc/init.d</path> met
|
| 67 |
een symlink naar <path>/etc/runlevels/boo</path>. Meestal worden de scripts
|
| 68 |
in alfabetische volgorde gestart, maar sommige scripts hebben informatie
|
| 69 |
bijgevoegd waarin staat dat een ander script gestart moet zijn voordat
|
| 70 |
zijzelf kunnen starten.
|
| 71 |
</p>
|
| 72 |
|
| 73 |
<p>
|
| 74 |
Wanneer alles met een link naar <path>/etc/runlevels/boot</path> is gestart,
|
| 75 |
gaat <c>init</c> verder met de scripts met een symlink naar
|
| 76 |
<path>/etc/runlevels/default</path>. Ook deze worden in alfabetische volgorde
|
| 77 |
gestart, tenzij een script vraagt om een ander script eerder te starten, waarna
|
| 78 |
de volgorde wordt verandert.
|
| 79 |
</p>
|
| 80 |
|
| 81 |
</body>
|
| 82 |
</subsection>
|
| 83 |
<subsection>
|
| 84 |
<title>Hoe Init Werkt</title>
|
| 85 |
<body>
|
| 86 |
|
| 87 |
<p>
|
| 88 |
Natuurlijk kan <c>init</c> dit niet allemaal zelf. Het heeft een configuratie
|
| 89 |
bestand nodig waarin staat wat er moet gebeuren. Dit configuratie bestand is
|
| 90 |
<path>/etc/inittab</path>.
|
| 91 |
</p>
|
| 92 |
|
| 93 |
<p>
|
| 94 |
Als u zich de boot volgorde nog kunt herinneren, dan weet u dat <c>init</c>
|
| 95 |
eerst alle bestandssystemen aankoppelt. Dit wordt bepaald door de volgende
|
| 96 |
regel in <path>/etc/inittab</path>:
|
| 97 |
</p>
|
| 98 |
|
| 99 |
<pre caption="De initialisatie regel in /etc/inittab">
|
| 100 |
si::sysinit:/sbin/rc sysinit
|
| 101 |
</pre>
|
| 102 |
|
| 103 |
<p>
|
| 104 |
Deze regel laat <c>init</c> <c>sbin/rc sysinit</c> draaien om het systeem te
|
| 105 |
initialiseren. Het <path>/sbin/rc</path> script zorgt voor de initialisatie,
|
| 106 |
dus eigenlijk doet <c>init</c> zelf niet zo veel -- het besteed de taak
|
| 107 |
van het initialiseren uit aan een andere toepassing.
|
| 108 |
</p>
|
| 109 |
|
| 110 |
<p>
|
| 111 |
Hierna voert <c>init</c> dus de scripts met symlinks naar
|
| 112 |
<path>/etc/runlevels/boot</path> uit. Dit wordt bepaald door de volgende regel:
|
| 113 |
</p>
|
| 114 |
|
| 115 |
<pre caption="Verder met het systeem initialiseren">
|
| 116 |
rc::bootwait:/sbin/rc boot
|
| 117 |
</pre>
|
| 118 |
|
| 119 |
<p>
|
| 120 |
Hier voert eigenlijk <c>rc</c> de benodigde taken uit. Het valt misschien op
|
| 121 |
dat de optie bij <c>rc</c> (<e>boot</e>) hetzelfde is als de submap van
|
| 122 |
<path>/etc/runlevels</path>.
|
| 123 |
</p>
|
| 124 |
|
| 125 |
<p>
|
| 126 |
Nu checkt <c>init</c> het configuratie bestand om te bepalen welke
|
| 127 |
<e>runlevel</e> het moet draaien. Hiervoor lijst het de volgende regel in
|
| 128 |
<path>/etc/inittab</path>:
|
| 129 |
</p>
|
| 130 |
|
| 131 |
<pre caption="De initdefault regel">
|
| 132 |
id:3:initdefault:
|
| 133 |
</pre>
|
| 134 |
|
| 135 |
<p>
|
| 136 |
In de meeste gevallen (dus voor het overgrote deel van de Gentoo gebruikers) zal
|
| 137 |
het <e>runlevel</e> hier het nummer 3 zijn. Daarom zal <c>init</c> nu
|
| 138 |
kijken wat er gestart moet worden in <e>runlevel 3</e>:
|
| 139 |
</p>
|
| 140 |
|
| 141 |
<pre caption="De definities voor de runlevels">
|
| 142 |
l0:0:wait:/sbin/rc shutdown
|
| 143 |
l1:S1:wait:/sbin/rc single
|
| 144 |
l2:2:wait:/sbin/rc nonetwork
|
| 145 |
l3:3:wait:/sbin/rc default
|
| 146 |
l4:4:wait:/sbin/rc default
|
| 147 |
l5:5:wait:/sbin/rc default
|
| 148 |
l6:6:wait:/sbin/rc reboot
|
| 149 |
</pre>
|
| 150 |
|
| 151 |
<p>
|
| 152 |
De regel die runlevel 3 definieert, roept opnieuw het <c>rc</c> script aan om
|
| 153 |
toepassingen te starten (nu met het argument <e>default</e>). Ook hier is het
|
| 154 |
argument bij <c>rc</c> gelijk aan de naam van de submap van
|
| 155 |
<path>/etc/runlevels</path>.
|
| 156 |
</p>
|
| 157 |
|
| 158 |
<p>
|
| 159 |
Wanneer <c>rc</c> klaar is, bepaalt <c>init</c> welke consoles geactiveerd
|
| 160 |
worden en welke commando's gegeven moeten worden in die consoles:
|
| 161 |
</p>
|
| 162 |
|
| 163 |
<pre caption="De definities voor de consoles">
|
| 164 |
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
|
| 165 |
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
|
| 166 |
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
|
| 167 |
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
|
| 168 |
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
|
| 169 |
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
|
| 170 |
</pre>
|
| 171 |
|
| 172 |
|
| 173 |
</body>
|
| 174 |
</subsection>
|
| 175 |
<subsection>
|
| 176 |
<title>Wat is een runlevel?</title>
|
| 177 |
<body>
|
| 178 |
|
| 179 |
<p>
|
| 180 |
U hebt nu kunnen zien dat <c>init</c> een genummerde lijst gebruikt om te
|
| 181 |
bepalen welk <e>runlevel</e> als eerste wordt geactiveerd. Een <e>runlevel</e>
|
| 182 |
is een vooraf ingestelde staat waarin uw systeem draait en bevat enkele scripts
|
| 183 |
(runlevel scripts of <e>initscripts</e>) die moeten worden uitgevoerd wanneer
|
| 184 |
u het runlevel start of beëindigt.
|
| 185 |
</p>
|
| 186 |
|
| 187 |
<p>
|
| 188 |
Binnen Gentoo zijn zeven runlevels gedefinieerd: drie interne runlevels, en
|
| 189 |
vier gebruikersrunlevels. De interne runlevels zijn <e>sysinit</e>,
|
| 190 |
<e>shutdown</e> en <e>reboot</e> en doen wat hun name impliceert:
|
| 191 |
respectievelijk het systeem initialiseren, afsluiten en herstarten.
|
| 192 |
</p>
|
| 193 |
|
| 194 |
<p>
|
| 195 |
De gebruikersrunlevels hebben een <path>/etc/runlevels</path> submap:
|
| 196 |
<path>boot</path>, <path>default</path>, <path>nonetwork</path> en
|
| 197 |
<path>single</path>. Het <path>boot</path> runlevel start alle systeem
|
| 198 |
toepassingen, die door de andere runlevels gebruikt worden. De drie andere
|
| 199 |
runlevels verschillen door welke toepassingen ze starten: <path>default</path>
|
| 200 |
wordt gebruikt voor dagelijkse toepassingen, <path>nonetwork</path> indien
|
| 201 |
er geen netwerk wordt gebruikt, en <path>single</path> wanneer het systeem
|
| 202 |
gerepareerd moet worden.
|
| 203 |
</p>
|
| 204 |
|
| 205 |
</body>
|
| 206 |
</subsection>
|
| 207 |
<subsection>
|
| 208 |
<title>Werken met de Init Scripts</title>
|
| 209 |
<body>
|
| 210 |
|
| 211 |
<p>
|
| 212 |
De scripts die door <c>rc</c> worden gestart noemen we <e>init scripts</e>.
|
| 213 |
Elk script in <path>/etc/init.d</path> kan worden uitgevoerd met de argumenten
|
| 214 |
<e>start</e>, <e>stop</e>, <e>restart</e>, <e>pause</e>, <e>zap</e>,
|
| 215 |
<e>status</e>, <e>ineed</e>, <e>iuse</e>, <e>needsme</e>, <e>usesme</e> of
|
| 216 |
<e>broken</e>.
|
| 217 |
</p>
|
| 218 |
|
| 219 |
<p>
|
| 220 |
Om een toepassing te starten, stoppen or herstarten (inclusief afhankelijke
|
| 221 |
toepassingen), kunt u <c>start</c>, <c>stop</c> en <c>restart</c> gebruiken:
|
| 222 |
</p>
|
| 223 |
|
| 224 |
<pre caption="Start Postfix">
|
| 225 |
# <i>/etc/init.d/postfix start</i>
|
| 226 |
</pre>
|
| 227 |
|
| 228 |
<note>
|
| 229 |
Alleen wanneer een toepassing een andere toepassing <e>nodig</e> heeft, wordt
|
| 230 |
deze opnieuw gestart of gestopt. Toepassingen die een andere toepassing blijven
|
| 231 |
gewoon draaien.
|
| 232 |
</note>
|
| 233 |
|
| 234 |
<p>
|
| 235 |
Wanneer u een toepassing wilt stoppen, maar de toepassingen die er op steunen
|
| 236 |
niet, dan kunt u het <c>pause</c> argument gebruiken:
|
| 237 |
</p>
|
| 238 |
|
| 239 |
<pre caption="Postfix stoppen, maar de afhankelijke toepassingen laten door draaien">
|
| 240 |
# <i>/etc/init.d/postfix pause</i>
|
| 241 |
</pre>
|
| 242 |
|
| 243 |
<p>
|
| 244 |
Wanneer u wilt zien wat de status van een toepassing is (gestart, gestopt,
|
| 245 |
gepauzeerd, ...), kunt u <c>status</c> gebruiken:
|
| 246 |
</p>
|
| 247 |
|
| 248 |
<pre caption="Status van postfix opvragen">
|
| 249 |
# <i>/etc/init.d/postfix status</i>
|
| 250 |
</pre>
|
| 251 |
|
| 252 |
<p>
|
| 253 |
Als de informatie aangeeft dat de toepassing draait, maar u weet zeker dat het
|
| 254 |
niet zo is, dan kunt u de status informatie resetten met behulp van het
|
| 255 |
<c>zap</c> argument:
|
| 256 |
</p>
|
| 257 |
|
| 258 |
<pre caption="Resetten van de status voor postfix">
|
| 259 |
# <i>/etc/init.d/postfix zap</i>
|
| 260 |
</pre>
|
| 261 |
|
| 262 |
<p>
|
| 263 |
Om te kunnen zien welke afhankelijkheden een toepassing heeft, kunt u
|
| 264 |
<c>iuse</c> of <c>ineed</c> gebruiken. Met <c>ineed</c> kunt u zien welke
|
| 265 |
toepassing nodig zijn om correct te kunnen functioneren. <c>iuse</c> geeft
|
| 266 |
aan welke toepassing gebruikt kunnen worden, maar niet nodig zijn voor
|
| 267 |
het correct functioneren.
|
| 268 |
</p>
|
| 269 |
|
| 270 |
<pre caption="Een lijst met benodigde toepassing opvragen voor postfix">
|
| 271 |
# <i>/etc/init.d/postfix ineed</i>
|
| 272 |
</pre>
|
| 273 |
|
| 274 |
<p>
|
| 275 |
Op dezelfde manier kunt u opvragen welke toepassing een bepaalde toepassing
|
| 276 |
gebruiken (<c>needsme</c>) of kunnen gebruiken (<c>usesme</c>):
|
| 277 |
</p>
|
| 278 |
|
| 279 |
<pre caption="Een lijst met toepassing opvragen die postfix nodig hebben">
|
| 280 |
# <i>/etc/init.d/postfix needsme</i>
|
| 281 |
</pre>
|
| 282 |
|
| 283 |
<p>
|
| 284 |
Als laatste kunt u opvragen welke afhankelijkheden een toepassing nodig heeft
|
| 285 |
en mist:
|
| 286 |
</p>
|
| 287 |
|
| 288 |
<pre caption="Een lijst met missende afhankelijkheden opvragen voor postfix">
|
| 289 |
# <i>/etc/init.d/postfix broken</i>
|
| 290 |
</pre>
|
| 291 |
|
| 292 |
</body>
|
| 293 |
</subsection>
|
| 294 |
</section>
|
| 295 |
<section>
|
| 296 |
<title>Werken met rc-update</title>
|
| 297 |
<subsection>
|
| 298 |
<title>Wat is rc-update?</title>
|
| 299 |
<body>
|
| 300 |
|
| 301 |
<p>
|
| 302 |
Gentoo's init systeem gebruikt een lijst met afhankelijkheden om te bepalen
|
| 303 |
welke toepassing als eerste moet worden gestart. Aangezien dit een
|
| 304 |
arbeidsintensieve taak is, willen we u als gebruiker dit niet handmatig laten
|
| 305 |
doen. Daarom hebben we hulpprogramma's ontwikkeld die het beheer van runlevels
|
| 306 |
en init scripts vergemakkelijken.
|
| 307 |
</p>
|
| 308 |
|
| 309 |
<p>
|
| 310 |
Met <c>rc-update</c> kunt u init scripts toevoegen en verwijderen bij een
|
| 311 |
runlevel. Het <c>rc-update</c> programma zal steeds automatisch het
|
| 312 |
<c>depscan.sh</c> script de lijst met afhankelijkheden laten updaten.
|
| 313 |
</p>
|
| 314 |
|
| 315 |
</body>
|
| 316 |
</subsection>
|
| 317 |
<subsection>
|
| 318 |
<title>Het toevoegen en verwijderen van toepassingen</title>
|
| 319 |
<body>
|
| 320 |
|
| 321 |
<p>
|
| 322 |
Tijdens de installatie hebt u al init scripts toegevoegd aan het "default"
|
| 323 |
runlevel. Toen wist u misschien nog niet waar "default" voor stond, maar dat
|
| 324 |
zou u nu moeten weten. Het <c>rc-update</c> script heeft een tweede argument
|
| 325 |
nodig, dat de actie definieert: <e>add</e>, <e>del</e> of <e>show</e>.
|
| 326 |
</p>
|
| 327 |
|
| 328 |
<p>
|
| 329 |
Om een init script toe te voegen of te verwijderen, voegt u gewoon <c>add</c>
|
| 330 |
of <c>del</c> als optie toe aan <c>rc-update</c>. Dit wordt gevolgd door het
|
| 331 |
te gebruike init script en het aan te passen runlevel. Bijvoorbeeld:
|
| 332 |
</p>
|
| 333 |
|
| 334 |
<pre caption="Postfix verwijderen uit het default runlevel">
|
| 335 |
# <i>rc-update del postfix default</i>
|
| 336 |
</pre>
|
| 337 |
|
| 338 |
<p>
|
| 339 |
Het <c>rc-update show</c> commando geeft u alle beschikbare init scripts en een
|
| 340 |
lijst van de runlevels waarin zij draaien:
|
| 341 |
</p>
|
| 342 |
|
| 343 |
<pre caption="Init script informatie opvragen">
|
| 344 |
# <i>rc-update show</i>
|
| 345 |
</pre>
|
| 346 |
|
| 347 |
</body>
|
| 348 |
</subsection>
|
| 349 |
</section>
|
| 350 |
<section>
|
| 351 |
<title>Toepassingen configureren</title>
|
| 352 |
<subsection>
|
| 353 |
<title>Waarom extra configuraties?</title>
|
| 354 |
<body>
|
| 355 |
|
| 356 |
<p>
|
| 357 |
Init scripts kunnen redelijk complex zijn. Daarom is het niet echt wenselijk
|
| 358 |
dat gebruikers de scripts direct moeten aanpassen, de kans op fouten is
|
| 359 |
gewoonweg te groot. Het is echter wel belangrijk om een toepassing te kunnen
|
| 360 |
configureren. U kunt bijvoorbeeld extra opties aan een toepassing willen
|
| 361 |
toevoegen.
|
| 362 |
</p>
|
| 363 |
|
| 364 |
<p>
|
| 365 |
Een tweede reden voor configuratie buiten het init script om, is om de
|
| 366 |
mogelijkheid te hebben init scripts te updaten zonder uw configuratie
|
| 367 |
kwijt te raken.
|
| 368 |
</p>
|
| 369 |
|
| 370 |
</body>
|
| 371 |
</subsection>
|
| 372 |
<subsection>
|
| 373 |
<title>De /etc/conf.d map</title>
|
| 374 |
<body>
|
| 375 |
|
| 376 |
<p>
|
| 377 |
Gentoo heeft een simpele manier om toepassingen te configureren: elk init script
|
| 378 |
heeft een configuratiebestand in <path>/etc/conf.d</path>. Het apache2 init
|
| 379 |
script (<path>/etc/init.d/apach2</path> heeft bijvoorbeeld een
|
| 380 |
configuratiebestand <path>/etc/conf.d/apache2</path>, waarmee u verschillende
|
| 381 |
opties aan de Apache2 server kunt meegeven, als deze wordt gestart:
|
| 382 |
</p>
|
| 383 |
|
| 384 |
<pre caption="Variabele in /etc/conf.d/apache2">
|
| 385 |
APACHE2_OPTS="-D PHP4"
|
| 386 |
</pre>
|
| 387 |
|
| 388 |
<p>
|
| 389 |
Deze configuratiebestanden bevatten alleen variabelen (net als
|
| 390 |
<path>/etc/make.conf</path>, waardoor het gemakkelijk is om toepassingen te
|
| 391 |
configureren. Het geeft ons ook de mogelijkheid om meer informatie te geven
|
| 392 |
over de variabelen (als commentaar).
|
| 393 |
</p>
|
| 394 |
|
| 395 |
</body>
|
| 396 |
</subsection>
|
| 397 |
</section>
|
| 398 |
<section>
|
| 399 |
<title>Init Scripts scrhijven</title>
|
| 400 |
<subsection>
|
| 401 |
<title>Moet ik dat doen?</title>
|
| 402 |
<body>
|
| 403 |
|
| 404 |
<p>
|
| 405 |
Nee, het schrijven van een init script is normaal niet nodig, omdat Gentoo
|
| 406 |
voor alle toepassingen init scripts mee levert. Wanneer u echter een toepassing
|
| 407 |
installeert zonder Portage te gebruiken, is het heel goed waarschijnlijk dat u
|
| 408 |
wel zelf een init script moet schrijven.
|
| 409 |
</p>
|
| 410 |
|
| 411 |
<p>
|
| 412 |
Let op dat u niet het init script gebruikt dat door een toepassing zelf wordt
|
| 413 |
meegeleverd, indien dit niet speciaal voor Gentoo is geschreven: Gentoo's init
|
| 414 |
scripts zijn namelijk niet compatible met init scripts voor andere linux
|
| 415 |
distributies.
|
| 416 |
</p>
|
| 417 |
|
| 418 |
</body>
|
| 419 |
</subsection>
|
| 420 |
<subsection>
|
| 421 |
<title>Indeling</title>
|
| 422 |
<body>
|
| 423 |
|
| 424 |
<p>
|
| 425 |
De basis indeling van een init script wordt hieronder gegeven.
|
| 426 |
</p>
|
| 427 |
|
| 428 |
<pre caption="Basis indeling van een init script">
|
| 429 |
#!/sbin/runscript
|
| 430 |
|
| 431 |
depend() {
|
| 432 |
<comment>(informatie over afhankelijkheden)</comment>
|
| 433 |
}
|
| 434 |
|
| 435 |
start() {
|
| 436 |
<comment>(Commando's voor het starten van de toepassing)</comment>
|
| 437 |
}
|
| 438 |
|
| 439 |
stop() {
|
| 440 |
<comment>(Commando's voor het stoppen van de toepassing)</comment>
|
| 441 |
}
|
| 442 |
|
| 443 |
restart() {
|
| 444 |
<comment>(Commando's voor het herstarten van de toepassing)</comment>
|
| 445 |
}
|
| 446 |
</pre>
|
| 447 |
|
| 448 |
<p>
|
| 449 |
Elk init script <e>moet</e> een <c>start()</c> functie hebben. De andere delen
|
| 450 |
zijn niet verplicht.
|
| 451 |
</p>
|
| 452 |
|
| 453 |
</body>
|
| 454 |
</subsection>
|
| 455 |
<subsection>
|
| 456 |
<title>Afhankelijkheden</title>
|
| 457 |
<body>
|
| 458 |
|
| 459 |
<p>
|
| 460 |
Er zijn twee soorten afhankelijkheden die u kunt definiëren: <c>use</c> en
|
| 461 |
<c>need</c>. Zoals eerder uitgelegd, <c>need</c> is stricter dan <c>use</c>.
|
| 462 |
Met behulp van deze afhankelijkheden voert u de toepassing toe waar u van
|
| 463 |
afhankelijk bent, of de <e>virtuele</e> afhankelijkheid.
|
| 464 |
</p>
|
| 465 |
|
| 466 |
<p>
|
| 467 |
Een <e>virtuele</e> afhankelijkheid is een afhankelijkheid die door
|
| 468 |
verschillende toepassingen kan worden geleverd. Uw init script kan bijvoorbeeld
|
| 469 |
een systeem logger nodig hebben, maar er zijn meerdere systeem loggers
|
| 470 |
beschikbaar (metalogd, syslog-ng, sysklogd, ...). Aangezien u niet elke logger
|
| 471 |
afzonderlijk <e>moet</e> hebben (het is niet echt logisch om drie systeem
|
| 472 |
loggers te installeren), zorgen we er voor dat deze toepassingen een virtuele
|
| 473 |
afhankelijkheid leveren (<c>provide</c>).
|
| 474 |
</p>
|
| 475 |
|
| 476 |
<p>
|
| 477 |
We kijken naar de afhankelijkheden voor de postfix toepassing.
|
| 478 |
</p>
|
| 479 |
|
| 480 |
<pre caption="Afhankelijkheden voor Postfix">
|
| 481 |
depend() {
|
| 482 |
need net
|
| 483 |
use logger dns
|
| 484 |
provide mta
|
| 485 |
}
|
| 486 |
</pre>
|
| 487 |
|
| 488 |
<p>
|
| 489 |
Zoals u kunt zien, geldt dat postfix:
|
| 490 |
</p>
|
| 491 |
|
| 492 |
<ul>
|
| 493 |
<li>
|
| 494 |
de (virtuele) <c>net</c> afhankelijkheid nodig heeft (bijvoorbeeld
|
| 495 |
geleverd door <path>/etc/init.d/net.eth0</path>
|
| 496 |
</li>
|
| 497 |
<li>
|
| 498 |
de (virtuele) <c>logger</c> gebruikt (bijvoorbeeld geleverd door
|
| 499 |
<path>/etc/init.d/syslog-ng</path>)
|
| 500 |
</li>
|
| 501 |
<li>
|
| 502 |
de (virtuele) <c>dns</c> afhankelijkheid gebruikt (bijvoorbeeld geleverd
|
| 503 |
door <path>/etc/init.d/named</path>)
|
| 504 |
</li>
|
| 505 |
<li>
|
| 506 |
een (virtuele) <c>mta</c> afhankelijkheid levert (wat alle mail servers
|
| 507 |
doen)
|
| 508 |
</li>
|
| 509 |
</ul>
|
| 510 |
|
| 511 |
</body>
|
| 512 |
</subsection>
|
| 513 |
<subsection>
|
| 514 |
<title>De volgorde instellen</title>
|
| 515 |
<body>
|
| 516 |
|
| 517 |
<p>
|
| 518 |
In sommige gevallen hebt u een toepassing niet direct nodig, maar wilt u de
|
| 519 |
toepassing starten <c>voor</c> (of <c>na</c>) een andere toepassing
|
| 520 |
<e>indien</e> de toepassing op het systeem aanwezig is (let op de voorwaarde
|
| 521 |
- dit is geen afhankelijkheid meer) <e>en</e> laten draaien in dezelfde
|
| 522 |
runlevel (let weer op de voorwaarde - er zijn alleen toepassingen in hetzelfde
|
| 523 |
runlevel bij betrokken). U kunt dit doen met <c>before</c> en <c>after</c>.
|
| 524 |
</p>
|
| 525 |
|
| 526 |
<p>
|
| 527 |
Als voorbeeld kijken we naar de instellingen van portmap:
|
| 528 |
</p>
|
| 529 |
|
| 530 |
<pre caption="De depend() functie in de Portmap toepassing">
|
| 531 |
depend() {
|
| 532 |
need net
|
| 533 |
before inetd
|
| 534 |
before xinetd
|
| 535 |
}
|
| 536 |
</pre>
|
| 537 |
|
| 538 |
<p>
|
| 539 |
U kunt ook het sterretje "*" gebruiken om uw toepassing voor alle andere
|
| 540 |
toepassingen in hetzelfde runlevel te plaatsen, maar dit is niet aan te raden.
|
| 541 |
</p>
|
| 542 |
|
| 543 |
<pre caption="Het draaien van een init script als eerste in een runlevel">
|
| 544 |
depend() {
|
| 545 |
before *
|
| 546 |
}
|
| 547 |
</pre>
|
| 548 |
|
| 549 |
</body>
|
| 550 |
</subsection>
|
| 551 |
<subsection>
|
| 552 |
<title>Standaard functies</title>
|
| 553 |
<body>
|
| 554 |
|
| 555 |
<p>
|
| 556 |
Naast de <c>depend</c> functie moet u ook de <c>start</c> functie definiëren.
|
| 557 |
Deze functie bevat alle commando's die nodig zijn om de toepassing te starten.
|
| 558 |
Het is verder aan te raden om de <c>ebegin</c> en <c>eend</c> functies te
|
| 559 |
gebruiken om te laten weten wat er gebeurt tijdens het uitvoeren van de
|
| 560 |
toepassing.
|
| 561 |
</p>
|
| 562 |
|
| 563 |
<pre caption="Voorbeeld start() functie">
|
| 564 |
start() {
|
| 565 |
ebegin "Starting my_service"
|
| 566 |
start-stop-daemon --start --quiet --exec /path/to/my_service
|
| 567 |
eend $?
|
| 568 |
}
|
| 569 |
</pre>
|
| 570 |
|
| 571 |
<p>
|
| 572 |
Indien u meer voorbeelden nodig hebt van de <c>start()</c> functie, kunt u de
|
| 573 |
init scripts uit de map <path>/etc/init.d</path> er op na slaan. En voor de
|
| 574 |
<c>start-stop-daemon</c> is een goede handleiding beschikbaar, die u op elk
|
| 575 |
moment kunt bekijken voor meer informatie:
|
| 576 |
</p>
|
| 577 |
|
| 578 |
<pre caption="De handleiding voor de start-stop-daemon bekijken">
|
| 579 |
# <i>man start-stop-daemon</i>
|
| 580 |
</pre>
|
| 581 |
|
| 582 |
<p>
|
| 583 |
Andere functies die u kunt gebruiken zijn: <c>stop()</c> en <c>restart()</c>.
|
| 584 |
U bent echter niet verplicht deze functies aan te roepen! Het init systeem kan
|
| 585 |
zelf deze functies aanvullen wanneer u de <c>start-stop-daemon</c> gebruikt.
|
| 586 |
</p>
|
| 587 |
|
| 588 |
<p>
|
| 589 |
De Gentoo init script programmeertaal is gebaseerd op de Bourne Again Shell
|
| 590 |
(bash). U kunt daarom zonder meer bash commando's gebruiken in uw init script.
|
| 591 |
</p>
|
| 592 |
|
| 593 |
</body>
|
| 594 |
</subsection>
|
| 595 |
<subsection>
|
| 596 |
<title>Eigen functies toevoegen</title>
|
| 597 |
<body>
|
| 598 |
|
| 599 |
<p>
|
| 600 |
Wanneer u in uw init script andere functies wilt gebruiken dan de eerder
|
| 601 |
genoemde, kunt u die functie toevoegen via de variabele <c>opts</c>. U kunt
|
| 602 |
dan een functie maken met dezelfde naam, bijvoorbeeld om een functie
|
| 603 |
<c>restartdelay</c> te gebruiken:
|
| 604 |
</p>
|
| 605 |
|
| 606 |
<pre caption="De restartdelay functie aanmaken">
|
| 607 |
opts="${opts} restartdelay"
|
| 608 |
|
| 609 |
restartdelay() {
|
| 610 |
stop
|
| 611 |
sleep 3 <comment># Wacht drie seconden voor opnieuw te starten</comment>
|
| 612 |
start
|
| 613 |
}
|
| 614 |
</pre>
|
| 615 |
|
| 616 |
</body>
|
| 617 |
</subsection>
|
| 618 |
<subsection>
|
| 619 |
<title>Configuratie variabelen voor uw toepassing</title>
|
| 620 |
<body>
|
| 621 |
|
| 622 |
<p>
|
| 623 |
U hoeft niets extra te doen om een configuratie bestand in de map
|
| 624 |
<path>/etc/conf.d</path> te kunnen gebruiken: wanneer uw init script wordt
|
| 625 |
gestart worden de volgende bestanden automatisch ingelezen:
|
| 626 |
</p>
|
| 627 |
|
| 628 |
<ul>
|
| 629 |
<li><path>/etc/conf.d/<Uw init script></path></li>
|
| 630 |
<li><path>/etc/conf.d/basic</path></li>
|
| 631 |
<li><path>/etc/rc.conf</path></li>
|
| 632 |
</ul>
|
| 633 |
|
| 634 |
<p>
|
| 635 |
Wanneer uw init script een virtuele afhankelijkheid bevat (zoals <c>net</c>)
|
| 636 |
zal het bestand dat hierbij hoort (in dit geval <path>/etc/conf.d/net</path>)
|
| 637 |
ook ingelezen worden.
|
| 638 |
</p>
|
| 639 |
|
| 640 |
</body>
|
| 641 |
</subsection>
|
| 642 |
</section>
|
| 643 |
<section>
|
| 644 |
<title>Het gedrag van het runlevel veranderen</title>
|
| 645 |
<subsection>
|
| 646 |
<title>Wie hebben hier iets aan?</title>
|
| 647 |
<body>
|
| 648 |
|
| 649 |
<p>
|
| 650 |
Veel laptop gebruikers zullen de volgende situatie herkennen: thuis wilt u
|
| 651 |
<c>net.eth0</c> starten, maar onderweg wilt u het netwerk juist niet starten
|
| 652 |
(omdat er toch geen netwerk beschikbaar is). Binnen Gentoo kunt u het gedrag
|
| 653 |
van het runlevel daarom aanpassen naar uw eigen wensen.
|
| 654 |
</p>
|
| 655 |
|
| 656 |
<p>
|
| 657 |
U kunt bijvoorbeeld een tweede "default" runlevel aanmaken, met daarin andere
|
| 658 |
init scripts. U kunt dan tijdens het opstarten kiezen welk default runlevel u
|
| 659 |
wilt gebruiken.
|
| 660 |
</p>
|
| 661 |
|
| 662 |
</body>
|
| 663 |
</subsection>
|
| 664 |
<subsection>
|
| 665 |
<title>Softlevel gebruiken</title>
|
| 666 |
<body>
|
| 667 |
|
| 668 |
<p>
|
| 669 |
Allereerst maakt u een map aan voor uw tweede "default" runlevel. Hier maken
|
| 670 |
we als voorbeeld het runlevel <path>offline</path> aan:
|
| 671 |
</p>
|
| 672 |
|
| 673 |
<pre caption="Een map maken voor een runlevel">
|
| 674 |
# <i>mkdir /etc/runlevels/offline</i>
|
| 675 |
</pre>
|
| 676 |
|
| 677 |
<p>
|
| 678 |
Nu kunt u de init scripts toevoegen die u wilt gebruiken in het nieuwe
|
| 679 |
runlevel. Een exacte kopie van uw huidige <c>default</c> runlevel, maar dan
|
| 680 |
zonder <c>net.eth0</c> maakt u zo:
|
| 681 |
</p>
|
| 682 |
|
| 683 |
<pre caption="Het toevoegen van de juiste init scripts">
|
| 684 |
<comment>(Kopieer alle toepassing van "default" naar "offline")</comment>
|
| 685 |
# <i>cd /etc/runlevels/default</i>
|
| 686 |
# <i>for service in *; do rc-update add $service offline; done</i>
|
| 687 |
<comment>(Verwijder de toepassingen die u niet wilt gebruiken in "offline")</comment>
|
| 688 |
# <i>rc-update del net.eth0 offline</i>
|
| 689 |
<comment>(Laat de toepassingen voor "offline" zien)</comment>
|
| 690 |
# <i>rc-update show offline</i>
|
| 691 |
<comment>(Een gedeelte van de resultaten)</comment>
|
| 692 |
acpid | offline
|
| 693 |
domainname | offline
|
| 694 |
local | offline
|
| 695 |
net.eth0 |
|
| 696 |
</pre>
|
| 697 |
|
| 698 |
<p>
|
| 699 |
Nu kunt u het configuratie bestand van uw bootloader aanpassen en het runlevel
|
| 700 |
<c>offline</c> toevoegen. Voor Grub past u <path>/boot/grub/grub.conf</path>
|
| 701 |
aan:
|
| 702 |
</p>
|
| 703 |
|
| 704 |
<pre caption="Het runlevel offline toevoegen voor Grub">
|
| 705 |
title Gentoo Linux Offline Usage
|
| 706 |
root (hd0,0)
|
| 707 |
kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 <i>softlevel=offline</i>
|
| 708 |
</pre>
|
| 709 |
|
| 710 |
<p>
|
| 711 |
En voilà, u bent klaar. U kunt nu tijdens het opstarten kiezen voor uw nieuwe
|
| 712 |
<c>offline</c> runlevel. Dit wordt dan gestart in plaats van <c>default</c>.
|
| 713 |
</p>
|
| 714 |
|
| 715 |
</body>
|
| 716 |
</subsection>
|
| 717 |
<subsection>
|
| 718 |
<title>Bootlevel gebruiken</title>
|
| 719 |
<body>
|
| 720 |
|
| 721 |
<p>
|
| 722 |
Het gebruik van <c>bootlevel</c> is gelijk aan <c>softlevel</c>. Het enige
|
| 723 |
verschil is dat u nu geen tweede runlevel "default" aanmaakt, maar een tweede
|
| 724 |
runlevel "boot".
|
| 725 |
</p>
|
| 726 |
|
| 727 |
</body>
|
| 728 |
</subsection>
|
| 729 |
</section>
|
| 730 |
</sections>
|