aboutsummaryrefslogtreecommitdiff
path: root/nl_NL.ISO8859-1/books/handbook/config/chapter.xml
blob: 0177adbc88ec623a6ee463dd3861504e63444f80 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
<!--
     The FreeBSD Dutch Documentation Project

     $FreeBSD$

     %SOURCE%	en_US.ISO8859-1/books/handbook/config/chapter.sgml
     %SRCID%	39544
-->

<chapter id="config-tuning">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Chern</firstname>
	<surname>Lee</surname>
	<contrib>Geschreven door </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Mike</firstname>
	<surname>Smith</surname>
	<contrib>Naar een tutorial van </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Matt</firstname>
	<surname>Dillon</surname>
	<contrib>Tevens gebaseerd op tuning(7) door </contrib>
      </author>
    </authorgroup>
    <authorgroup>
      <author>
	<firstname>Danny</firstname>
	<surname>Pansters</surname>
	<contrib>Vertaald door </contrib>
      </author>
      <author>
	<firstname>René</firstname>
	<surname>Ladan</surname>
      </author>
    </authorgroup>
  </chapterinfo>

  <title>Instellingen en optimalisatie</title>

  <sect1 id="config-synopsis">
    <title>Overzicht</title>

    <indexterm><primary>systeeminstellingen</primary></indexterm>

    <indexterm><primary>systeemoptimalisatie</primary></indexterm>

    <para>Systeeminstellingen zijn een belangrijk aspect van &os;.
      Correcte instellingen helpen moeilijkheden bij toekomstige
      upgrades te voorkomen.  In dit hoofdstuk wordt het instellen van
      &os; beschreven, alsmede een aantal prestatiebevorderende
      maatregelen waarmee een &os; systeem geoptimaliseerd kan
      worden.</para>

    <para>Na het lezen van dit hoofdstuk weet de lezer:</para>

    <itemizedlist>
      <listitem>
	<para>Hoe efficiënt om te gaan met bestandssystemen en
	  wisselpartities;</para>
      </listitem>

      <listitem>
	<para>De grondbeginselen van het <filename>rc.conf</filename>
	  instellingensysteem en van het opstarten van toepassingen
	  (diensten) met
	  <filename class="directory">/usr/local/etc/rc.d</filename>;</para>
      </listitem>

      <listitem>
	<para>Hoe een netwerkkaart ingesteld en getest wordt;</para>
      </listitem>

      <listitem>
	<para>Hoe virtuele hosts op netwerkapparatuur ingesteld
	  worden;</para>
      </listitem>

      <listitem>
	<para>Hoe de instellingenbestanden in <filename
	    class="directory">/etc</filename> gebruikt worden;</para>
      </listitem>

      <listitem>
	<para>Hoe &os; geoptimaliseerd kan worden met
	  <command>sysctl</command>-variabelen;</para>
      </listitem>

      <listitem>
	<para>Hoe schijfprestaties te verbeteren en hoe
	  kernelbeperkingen gewijzigd kunnen worden.</para>
      </listitem>
    </itemizedlist>

    <para>Veronderstelde voorkennis:</para>

    <itemizedlist>
      <listitem>
	<para>De grondbeginselen van &unix; en &os; (<xref
	    linkend="basics"/>) begrijpen;</para>
      </listitem>

      <listitem>
	<para>Bekend zijn met de grondbeginselen van kernelinstellingen
	  en compilatie (<xref linkend="kernelconfig"/>).</para>
      </listitem>
    </itemizedlist>
  </sect1>

  <sect1 id="configtuning-initial">
    <title>Initiële instellingen</title>

    <sect2>
      <title>Partitioneren</title>

      <indexterm><primary>partitioneren</primary></indexterm>

      <indexterm><primary><filename
	    class="directory">/etc</filename></primary></indexterm>

      <indexterm><primary><filename
	    class="directory">/var</filename></primary></indexterm>

      <indexterm><primary><filename
	    class="directory">/usr</filename></primary></indexterm>

      <sect3>
	<title>Basispartities</title>

	<para>Bij het aanmaken van bestandssystemen met &man.bsdlabel.8;
	  of &man.sysinstall.8; is het van belang dat op een harde
	  schijf de gegevensoverdracht het snelst is aan de buitenste
	  sporen en het langzaamst aan de binnenste.  Kleinere en
	  veelgebruikte bestandssystemen kunnen daarom het beste aan de
	  buitenkant van de schijf geplaatst worden, terwijl grotere
	  partities als <filename class="directory">/usr</filename> meer naar de
	  binnenkant van de schijf geplaatst kunnen worden.  Het is een
	  goed idee om partities aan te maken in deze of gelijksoortige
	  volgorde: root, swap, <filename class="directory">/var</filename>,
	  <filename class="directory">/usr</filename>.</para>

	<para>De grootte van de partitie <filename
	    class="directory">/var</filename> hangt
	  af van de wijze waarop de machine gebruikt gaat worden.  Het
	  bestandssysteem <filename class="directory">/var</filename> wordt
	  gebruikt voor onder meer postbussen, logbestanden en printergegevens
	  en -wachtrijen.  Postbussen en logbestanden kunnen onverwacht
	  groot worden, afhankelijk van het aantal systeemgebruikers en
	  de bewaarduur van logbestanden.  De meeste gebruikers zullen
	  zelden meer dan ongeveer een gigabyte aan vrije schijfruimte
	  op <filename class="directory">/var</filename> nodig hebben.</para>

	<note>
	  <para>Er zijn een aantal gevallen waar een grote hoeveelheid
	    ruimte in <filename class="directory">/var/tmp</filename> nodig is.
	    Wanneer er nieuwe software wordt geïnstalleerd met
	    &man.pkg.add.1; pakken de pakketprogramma's een tijdelijke
	    kopie van de pakketten uit in <filename
	      class="directory">/var/tmp</filename>.  Grote softwarepakketten,
	    zoals <application>Firefox</application>,
	    <application>OpenOffice</application> of
	    <application>LibreOffice</application> kunnen lastig zijn om
	    te installeren wanneer er onvoldoende vrije schijfruimte
	    beschikbaar is onder <filename
	      class="directory">/var/tmp</filename>.</para>
	</note>

	<para>De partitie <filename class="directory">/usr</filename> bevat veel
	  van de benodigde systeembestanden, waaronder de &man.ports.7;
	  collectie (aanbevolen) en de broncode (optioneel).  Beide zijn
	  optioneel tijdens de installatie, maar we raden voor deze
	  partitie tenminste 2 gigabyte aan.</para>

	<para>Het is verstandig rekening te houden met de vereiste
	  schijfruimte bij het kiezen van partitiegroottes.  Als in een
	  partitie onvoldoende vrije schijfruimte is, terwijl een andere
	  vrijwel niet gebruikt wordt, is dat een vervelend en niet
	  optimaal oplosbaar probleem.</para>

	<note>
	  <para>&man.sysinstall.8;'s <literal>Auto-defaults</literal>
	    partitiekeuze kan in de ervaring van sommige gebruikers
	    mogelijk te kleine <filename class="directory">/var</filename> en
	    <filename class="directory">/</filename> partities opleveren.
	    Partitioneren moet verstandig en niet te zuinig gebeuren.</para>
	</note>
      </sect3>

      <sect3 id="swap-design">
	<title>Wisselpartities (swap)</title>

	<indexterm><primary>swap grootte</primary></indexterm>

	<indexterm><primary>wisselpartitie</primary></indexterm>

	<indexterm><primary>wisselpartitiegrootte</primary></indexterm>

	<para>De vuistregel is dat het wisselbestand ongeveer het
	  dubbele van de grootte van het systeemgeheugen (RAM) moet
	  zijn.  Als de machine bijvoorbeeld 128&nbsp;megabytes geheugen
	  heeft, kan het beste een wisselbestand van (tenminste)
	  256&nbsp;megabytes gebruikt worden.  Minder dan
	  256&nbsp;megabytes swap is in dit geval af te raden.  Systemen
	  met weinig geheugen kunnen overigens beter functioneren met
	  meer swap.  Ook is het verstandig rekening te houden met
	  eventuele geheugenuitbreiding in de toekomst.  Bovendien zijn
	  de VM paging-algoritmen van de kernel zo afgestemd dat ze het
	  beste presteren bij een wisselbestand van tenminste tweemaal
	  de grootte van het geheugen.  Een te kleine swap kan dus
	  inefficiënties in de VM-code tot gevolg hebben en
	  mogelijk problemen veroorzaken als het systeemgeheugen
	  uitgebreid wordt.</para>

	<para>Op grotere systemen met meerdere SCSI-schijven (of
	  meerdere IDE-schijven op verschillende controllers) is het aan
	  te raden om op elke schijf een wisselpartitie in te stellen
	  (dit kan tot en met vier schijven), elk met ongeveer dezelfde
	  grootte.  De kernel kan met arbitraire groottes werken, maar
	  interne datastructuren schalen tot viermaal de grootste
	  swappartitie.  De kernel kan de beschikbare ruimte voor het
	  wisselbestand het meest optimaal indelen als de partities
	  ongeveer even groot zijn.  Een grote swap is prima, ook als ze
	  zelden gebruikt wordt.  Zo kan het gemakkelijker zijn om een
	  (uit de hand gelopen) proces dat het systeem grotendeels bezet
	  houdt te beëindigen, voordat er opnieuw opgestart moet
	  worden.</para>
      </sect3>

      <sect3>
	<title>Waarom partitioneren?</title>

	<para>Waarom niet één enkele grote partitie
	  gebruiken?  Er zijn verscheidene redenen waarom dit niet zo'n
	  goed idee is.  De verschillende partities hebben hun eigen
	  karakteristieke operationele gedrag en vereisten.  Door ze te
	  scheiden zijn er betere mogelijkheden om het systeem te
	  optimaliseren.  Vanaf de <filename class="directory">/</filename> en
	  <filename class="directory">/usr</filename> partities wordt
	  bijvoorbeeld vooral gelezen en er wordt weinig naar geschreven,
	  terwijl er in <filename class="directory">/var</filename> en
	  <filename class="directory">/var/tmp</filename> zowel veel gelezen
	  als geschreven wordt.</para>

	<para>Door een systeem goed te partitioneren wordt vermeden dat
	  fragmentatie die optreedt in de kleinere partities met veel
	  schrijfactiviteit doorsijpelt naar partities die vooral
	  lees-intensief zijn.  Door schrijf-intensieve partities aan
	  het begin van de schijf te plaatsen, zijn de prestaties wat
	  betreft invoer/uitvoer het beste daar waar het het meest
	  nodig is.  Ofschoon er natuurlijk ook de best mogelijke
	  in/uit prestaties wenselijk zijn in de grotere partities,
	  weegt het plaatsen van deze bestandssystemen aan het begin van
	  de schijf niet tegen de voordelen van het plaatsen van
	  <filename class="directory">/var</filename> aan het begin van de
	  schijf (na root en swap) voor de totale snelheid van het systeem.
	  Tenslotte zijn er veiligheidsoverwegingen.  Een compacte en nette
	  rootpartitie die vrijwel alleen-lezen is, heeft een betere
	  kans om een nare crash te overleven.</para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="configtuning-core-configuration">
    <title>Hoofdinstellingen</title>

    <indexterm>
      <primary>rc bestanden</primary>

      <secondary><filename>rc.conf</filename></secondary>
    </indexterm>

    <para>De voornaamste lokatie voor systeeminstellingen is
      <filename>/etc/rc.conf</filename>.  Dit bestand bevat een scala
      aan instellingen, die gebruikt wordt om het systeem in te stellen
      bij het opstarten.  De naam impliceert dit al.  Het is informatie
      voor de <filename>rc*</filename> bestanden (rc staat voor
      <quote>resource configuration</quote> of broninstellingen).</para>

    <para>De systeembeheerder wordt geacht regels toe te voegen aan
      <filename>rc.conf</filename> om de standaardinstellingen uit
      <filename>/etc/defaults/rc.conf</filename> aan te passen.  Het
      standaardbestand moet niet letterlijk gekopiëerd worden naar
      <filename class="directory">/etc</filename>.  Het bevat standaardwaardes
      en is niet bedoeld als voorbeeld.  Alle wijzigingen die specifiek zijn
      voor een systeem horen in <filename>/etc/rc.conf</filename>
      thuis.</para>

    <para>In een clusterscenario is het nuttig om systeemspecifieke
      instellingen te scheiden van algemene instellingen die voor het
      hele cluster gelden.  Hiervoor kunnen een aantal strategieën
      worden gebruikt.  De aanbevolen benadering is om systeem-specifieke
      instellingen in het bestand <filename>/etc/rc.conf.local</filename> te
      plaatsen.  Een voorbeeld:</para>

    <itemizedlist>
      <listitem>
	<para><filename>/etc/rc.conf</filename>:</para>

	<programlisting>sshd_enable="YES"
keyrate="fast"
defaultrouter="10.1.1.254"</programlisting>
      </listitem>

      <listitem>
	<para><filename>/etc/rc.conf.local</filename>:</para>

	<programlisting>hostname="node1.voorbeeld.org"
ifconfig_fxp0="inet 10.1.1.1/8"</programlisting></listitem>
    </itemizedlist>

    <para><filename>rc.conf</filename> kan naar elk systeem
      gedistribueerd worden met <command>rsync</command> of een
      gelijksoortig programma, terwijl <filename>rc.conf.local</filename>
      uniek blijft.</para>

    <para>Het actualiseren van het systeem met &man.sysinstall.8; of
      <command>make world</command> overschrijft
      <filename>rc.conf</filename> niet, zodat de bestaande
      systeeminstellingen niet verloren gaan.</para>

    <tip>
      <para>Het instellingenbestand <filename>/etc/rc.conf</filename> wordt
	gelezen door &man.sh.1;.  Dit stelt systeembeheerders in staat om een
	zekere hoeveelheid logica aan dit bestand toe te voegen, dat kan helpen
	in het creëren van zeer ingewikkelde configuratiescenario's.
	Bekijk &man.rc.conf.5; voor meer informatie over dit onderwerp.</para>
    </tip>
  </sect1>

  <sect1 id="configtuning-appconfig">
    <title>Toepassingen instellen</title>

    <para>Geïnstalleerde toepassingen hebben meestal hun eigen
      instellingenbestanden, met hun eigen syntaxis, etc.  Het is van
      belang deze bestanden apart te houden van het basissysteem, zodat
      ze makkelijk gelokaliseerd kunnen worden en beheerd kunnen worden
      met de hulpmiddelen voor pakketbeheer.</para>

    <indexterm><primary>/usr/local/etc</primary></indexterm>

    <para>Deze bestanden worden meestal geïnstalleerd in
      <filename class="directory">/usr/local/etc</filename>.  Als een toepassing
      een uitgebreide verzameling bestanden voor instellingen heeft, wordt
      er een submap voor aangemaakt.</para>

    <para>Bij de installatie van een port of pakket, worden normaliter
      ook voorbeeldbestanden met instellingen geïnstalleerd.  Deze
      zijn doorgaans te herkennen aan een toevoegsel
      <filename>.default</filename>.  Als er geen bestaande
      instellingenbestanden voor de toepassing zijn, kunnen ze gemaakt
      worden door de <filename>.default</filename>-bestanden te
      kopiëren.</para>

    <para>Een voorbeeld is de map
      <filename class="directory">/usr/local/etc/apache</filename>:</para>

<literallayout class="monospaced">-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf
-rw-r--r--  1 root  wheel   2184 May 20  1998 access.conf.default
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf
-rw-r--r--  1 root  wheel   9555 May 20  1998 httpd.conf.default
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic
-rw-r--r--  1 root  wheel  12205 May 20  1998 magic.default
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types
-rw-r--r--  1 root  wheel   2700 May 20  1998 mime.types.default
-rw-r--r--  1 root  wheel   7980 May 20  1998 srm.conf
-rw-r--r--  1 root  wheel   7933 May 20  1998 srm.conf.default</literallayout>

    <para>Aan de grootte van de bestanden is te zien dat alleen
      <filename>srm.conf</filename> gewijzigd is.  Als later de port
      <application>Apache</application> wordt vernieuwd, wordt dit
      bestand niet overschreven.</para>
  </sect1>

  <sect1 id="configtuning-starting-services">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	  <contrib>Bijgedragen door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Diensten starten</title>

    <indexterm><primary>diensten</primary></indexterm>

    <para>Veel gebruikers kiezen ervoor om software van derden te
      installeren op &os; vanuit de Portscollectie.  In veel gevallen
      is het noodzakelijk om de software dusdanig in te stellen dat
      het opstart tijdens het opstarten van de computer.  Diensten
      zoals <filename role="package">mail/postfix</filename> of
      <filename role="package">www/apache22</filename> zijn slechts
      twee voorbeelden van softwarepakketten die gestart kunnen worden
      tijdens de systeemstart.  In deze paragraaf wordt toegelicht hoe
      software van derde partijen kan worden gestart.</para>

    <para>In &os; worden de meeste diensten, zoals &man.cron.8;, door
      de opstartscripts van het systeem gestart.  Deze scripts kunnen
      verschillen tussen &os; en leverancierversies, echter het meest
      belangrijke aspect om in gedachten te houden is dat hun
      opstartinstellingen verwerkt kunnen worden door simpele
      opstartscripts.</para>

    <sect2>
      <title>Uitgebreide applicatieinstellingen</title>

      <para>Nu &os; <filename>rc.d</filename> heeft, zijn de
	instellingen van applicaties die mee moeten opstarten
	versimpeld en rijker aan mogelijkheden.  Door gebruik te maken
	van de sleutelwoorden die in de paragraaf <link
	  linkend="configtuning-rcd"><filename>rc.d</filename></link>
	behandeld worden, kunnen applicaties nu starten na andere
	diensten.  <acronym>DNS</acronym> kan bijvoorbeeld extra
	opties meekrijgen van <filename>/etc/rc.conf</filename> in
	plaats van hard ingestelde opties in het opstartscript.  Een
	basisscript ziet er ongeveer als volgt uit:</para>

      <programlisting>#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: DAEMON
# KEYWORD: shutdown

. /etc/rc.subr

name=utility
rcvar=utility_enable

command="/usr/local/sbin/utility"

load_rc_config $name

#
# VERANDER DE STANDAARDWAARDEN HIER NIET
# STEL ZE IN HET BESTAND /etc/rc.conf IN
#
utility_enable=${utility_enable-"NO"}
pidfile=${utility_pidfile-"/var/run/utility.pid"}

run_rc_command "$1"</programlisting>

      <para>Dit script zorgt ervoor dat
	<application>utility</application> wordt gestart na de pseudodienst
	<literal>DAEMON</literal>.  Het biedt ook de mogelijkheid voor
	het instellingen en volgen van het <acronym>PID</acronym> of
	het proces-<acronym>ID</acronym> bestand.</para>

      <para>Voor deze applicatie kan dan de volgende regel in
	<filename>/etc/rc.conf</filename> geplaatst worden:</para>

      <programlisting>utility_enable="YES"</programlisting>

      <para>Deze methode maakt het volgende mogelijk: makkelijker
	commandoregelopties manipuleren, importeren van
	standaardfuncties uit <filename>/etc/rc.subr</filename>,
	compatibiliteit met het gereedschap &man.rcorder.8; en het
	levert makkelijkere configuratie via het bestand
	<filename>rc.conf</filename>.</para>
    </sect2>

    <sect2>
      <title>Diensten met diensten starten</title>

      <para>Andere diensten, zoals <acronym>POP</acronym>3-server
	daemons, <acronym>IMAP</acronym>, enzovoort, kunnen gestart
	worden door gebruik te maken van &man.inetd.8;.  Daaraan is
	voorafgegaan dat die dienst uit de Portscollectie is
	geïstalleerd en dat er een regel met instellingen is
	toegevoegd aan <filename>/etc/inetd.conf</filename> of
	één van de bestaande niet-actieve regels is
	geactiveerd.  Werken met <application>inetd</application> en
	zijn instellingen wordt uitgebreid toegelicht in de paragraaf
	over <link linkend="network-inetd">inetd</link>.</para>

      <para>In sommige gevallen is het handiger om &man.cron.8; te
	gebruiken om diensten te starten.  Deze aanpak heeft een aantal
	voordelen omdat <command>cron</command> start als de eigenaar
	van <filename>crontab</filename>.  Dit stelt reguliere
	gebruikers in staat om sommige applicaties te starten en te
	onderhouden.</para>

      <para><command>cron</command> levert een unieke optie: in plaats
	van een tijdsspecificatie kan <literal>@reboot</literal>
	gebruikt worden.  Dit zorgt ervoor dat de taak gestart wordt als
	&man.cron.8; gestart wordt, meestal tijdens een
	systeemstart.</para>
    </sect2>
  </sect1>

  <sect1 id="configtuning-cron">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title><command>cron</command> instellen</title>

    <indexterm>
      <primary>cron</primary>

      <secondary>instellen</secondary>
    </indexterm>

    <para>Een zeer nuttig hulpprogramma in &os; is &man.cron.8;.  De
      daemon <command>cron</command> draait op de achtergrond en
      controleert voortdurend <filename>/etc/crontab</filename>.  Ook
      controleert <command>cron</command> de map
      <filename class="directory">/var/cron/tabs</filename>, op zoek naar nieuwe
      <filename>crontab</filename> bestanden.  Deze
      <filename>crontab</filename> bestanden bevatten informatie over
      specifieke taken die <command>cron</command> moet verrichten op
      gezette tijden.</para>

    <para><command>cron</command> gebruikt twee verschillende soorten
      instellingenbestanden: de systeemcrontab en gebruikerscrontabs.  Deze
      formaten verschillen alleen in het zesde en verdere velden.  In de
      systeemcrontab zal <command>cron</command> het commando draaien als de
      gebruiker die in het zesde veld is opgegeven.  In een gebruikerscrontab
      draaien alle commando's onder de gebruiker die de crontab heeft
      aangemaakt, dus is het zesde veld het laatste veld; dit is een belangrijk
      beveiligingsaspect.  Het laatste veld is altijd het commando dat gedraaid
      wordt.</para>

    <note>
      <para>Gebruikerscrontabs geven individuele gebruikers de
	mogelijkheid om bepaalde terugkerende taken automatisch te laten
	uitvoeren zonder dat <username>root</username>-rechten noodig
	zijn.  Commando's in de crontab van een gebruiker worden
	uitgevoerd met de rechten van de eigenaar.</para>

      <para><username>root</username> kan ook een gebruikerscrontab
	aanleggen net als elke andere gebruiker.  Dit is niet dezelfde als
	<filename>/etc/crontab</filename> (de systeemcrontab).  Omdat de
	systeemcrontab in de praktijk de commando's als root uitvoert, is het
	doorgaans niet nodig om een gebruikerscrontab voor
	<username>root</username> te maken.</para>
    </note>

    <para><filename>/etc/crontab</filename> (de systeemcrontab) ziet er
      uit als volgt:</para>

    <programlisting># /etc/crontab - root's crontab for &os;
#
# &dollar;&os;: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp &dollar;
# <co id="co-comments"/>
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin <co id="co-env"/>
HOME=/var/log
#
#
#minuut uur     mdag    maand   wdag    wie     commando <co id="co-field-descr"/>
#
#
*/5     *       *       *       *       root    /usr/libexec/atrun <co id="co-main"/></programlisting>

    <calloutlist>
      <callout arearefs="co-comments">
	<para>Zoals in de meeste &os; instellingenbestanden gaat het
	  karakter <literal>#</literal> vooraf aan commentaar.
	  Commentaar wordt gebruikt als uitleg en geheugensteun.
	  Commentaar dient niet vermengd te worden met commando's,
	  anders wordt het commentaar opgevat als deel van het commando.
	  Blanco regels worden genegeerd.</para>
      </callout>

      <callout arearefs="co-env">
	<para>Eerst worden omgevingsvariabelen gedefiniëerd.
	  Hoervoor wordt het is-gelijk karakter (<literal>=</literal>)
	  gebruikt.  In het bovenstaande voorbeeld wordt het gebruikt
	  voor de variabelen <envar>SHELL</envar>, <envar>PATH</envar>
	  en <envar>HOME</envar>.  Als de regel <envar>SHELL</envar>
	  ontbreekt, gebruikt <command>cron</command> standaard
	  <command>sh</command> als shell.  Voor de omgevingsvariabele
	  <envar>PATH</envar> bestaat geen standaardwaarde.  Als
	  <envar>PATH</envar> ontbreekt moeten absolute paden gebruikt
	  worden.  Als <envar>HOME</envar> ontbreekt, gebruikt
	  <command>cron</command> de thuismap van de gebruiker die
	  <command>cron</command> aanroept.</para>
      </callout>

      <callout arearefs="co-field-descr">
	<para>In deze commentaarregel staan de zeven velden van een
	  crontabdefinitie.  Dit zijn <literal>minuut</literal>,
	  <literal>uur</literal>, <literal>mdag</literal>,
	  <literal>maand</literal>, <literal>wdag</literal>,
	  <literal>wie</literal> en <literal>commando</literal>.  De
	  betekenissen liggen voor de hand: <literal>minuut</literal>
	  is het aantal minuten van het tijdstip waarop het commando
	  moet worden uitgevoerd; <literal>uur</literal> geeft het uur
	  aan; <literal>mdag</literal> staat voor de dag van de maand;
	  <literal>maand</literal> staat voor het maandnummer en
	  <literal>wdag</literal> geeft de dag van de week aan.  Het
	  veld <literal>wie</literal> is bijzonder en bestaat alleen in
	  <filename>/etc/crontab</filename>.  Het geeft aan als welke
	  gebruiker het commando uitgevoerd moet worden.  Het laatste veld
	  bevat het uit te voeren commando.</para>
      </callout>

      <callout arearefs="co-main">
	<para>In deze regel worden aan de hierboven besproken opties
	  waarden toegekend.  Er wordt gebruik gemaakt van
	  <literal>*/5</literal> en <literal>*</literal> karakters.
	  Deze betekenen <quote>eerst-laatst</quote> en kunnen gezien
	  worden als <emphasis>telkens</emphasis>.  In deze regel staat
	  dus dat het commando <command>atrun</command> elke vijf
	  minuten moet worden uitgevoerd door <username>root</username>,
	  ongeacht welke dag of maand het is.  Meer informatie over
	  <command>atrun</command> staat in &man.atrun.8;.</para>

	<para>Commando's kunnen een willekeurig aantal opties of
	  argumenten meekrijgen.  Als commando's echter meerdere regels
	  nodig hebben moeten deze regels afgebroken worden met een
	  backslash <quote>\</quote> karakter, om aan te geven dat ze op
	  de volgende regel vervolgd worden.</para>
      </callout>
    </calloutlist>

    <para>Dit is de basisopzet voor elk <filename>crontab</filename>
      bestand.  De enige uitzondering is de aanwezigheid van veld zes,
      waar de gebruikersnaam wordt aangegeven.  Dit veld bestaat alleen
      in het systeembestand <filename>/etc/crontab</filename>.  Voor
      <filename>crontab</filename>bestanden van individuele gebruikers
      moet dit veld worden weggelaten.</para>

    <sect2 id="configtuning-installcrontab">
      <title>Een crontab installeren</title>

      <important>
	<para>De onderstaande procedure moet niet gebruikt worden om de
	  systeemcrontab <filename>/etc/crontab</filename> te wijzigen of te
	  installeren.  Er kan een gewone editor gebruikt worden.
	  <command>cron</command> ziet dat het bestand veranderd is en begint
	  direct met het gebruiken van de nieuwe versie.  <ulink
	    url="&url.books.faq;/admin.html#ROOT-NOT-FOUND-CRON-ERRORS">Deze
	    FAQ vraag</ulink> geeft verdere uitleg.</para>
      </important>

      <para>Om een nieuwe <filename>crontab</filename> te installeren
	moet eerst een bestand in het juiste formaat gemaakt worden en
	daarna moet het geiuml;nstalleerd worden met commando
	<command>crontab</command>:</para>

      <screen>&prompt.root; <userinput>crontab crontabbestand</userinput></screen>

      <para>In dit voorbeeld is <filename>crontabbestand</filename> de
	naam van een eerder gemaakt
	<filename>crontab</filename>-bestand.</para>

      <para>Er bestaat ook een optie om een lijst van
	geïnstalleerde <filename>crontab</filename>-bestanden op te
	vragen, namelijk de optie <option>-l</option> van
	<command>crontab</command>.</para>

      <para>Gebruikers die hun eigen crontabbestand willen schrijven
	zonder het gebruik van een sjabloon, kunnen gebruik maken van
	<command>crontab -e</command>.  Dit opent de
	<envar>EDITOR</envar> met een leeg bestand.  Als het bestand
	wordt opgeslagen en de editor wordt afgesloten, wordt het
	bestand automatisch als <filename>crontab</filename>
	geïnstalleerd.</para>

      <para>Een gebruikers<filename>crontab</filename> kan verwijderd
	worden door de met <command>crontab</command> de optie
	<option>-r</option> te gebruiken.</para>
    </sect2>
  </sect1>

  <sect1 id="configtuning-rcd">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Gebruik van rc met &os;</title>

    <indexterm><primary>rc.d</primary></indexterm>

    <para>Sinds 2002 gebruikt &os; het NetBSD <filename>rc.d</filename>
      systeem bij het opstarten van het systeem.  Veel van de bestanden
      in <filename class="directory">/etc/rc.d</filename> zijn scripts voor
      basisdiensten die werken met de opties <option>start</option>,
      <option>stop</option> en <option>restart</option>, analoog aan
      hoe diensten die via een port of pakket zijn geïnstalleerd
      gestart worden met de scripts in
      <filename>/usr/local/etc/rc.d</filename>.  &man.sshd.8; kan
      bijvoorbeeld als volgt herstart worden:</para>

    <screen>&prompt.root; <userinput>/etc/rc.d/sshd restart</userinput></screen>

    <para>Deze procedure is vrijwel gelijk voor andere diensten.
      Uiteraard worden diensten meestal automatisch tijdens het
      opstarten van de computer gestart zoals in &man.rc.conf.5; staat.
      Om de Network Address Translation daemon bij het opstarten te
      laten starten is de volgende regel in
      <filename>/etc/rc.conf</filename> bijvoorbeeld voldoende:</para>

    <programlisting>natd_enable="YES"</programlisting>

    <para>Als er reeds een <literal>natd_enable="NO"</literal> regel is,
      kan <literal>NO</literal> gewoon in <literal>YES</literal>
      veranderd worden.  De rc scripts starten, voor zover nodig,
      automatisch andere afhankelijke diensten.</para>

    <para>Omdat het <filename>rc.d</filename> systeem in eerste
      instantie bedoeld is om diensten te starten en stoppen bij het
      opstarten en afsluiten van het systeem, werken de standaardopties
      <option>start</option>, <option>stop</option> en
      <option>restart</option> alleen als de juiste variabelen in
      <filename>/etc/rc.conf</filename> zijn ingesteld.  Het commando
      <command>sshd restart</command> alleen dan als
      <varname>sshd_enable</varname> de waarde <literal>YES</literal>
      heeft in <filename>/etc/rc.conf</filename>.  Als er een dienst
      gestart, gestopt of herstart moet worden, ongeacht de definities
      in <filename>/etc/rc.conf</filename>, moet het commando
      voorafgegaan worden door <quote>one</quote>.  Dus om
      <command>sshd</command> te herstarten ongeacht
      de instellingen in <filename>/etc/rc.conf</filename>, voldoet het
      volgende commando:</para>

    <screen>&prompt.root; <userinput>/etc/rc.d/sshd onerestart</userinput></screen>

    <para>Het is eenvoudig te controleren of een dienst is ingeschakeld
      is in <filename>/etc/rc.conf</filename> door het bijpassende
      <filename>rc.d</filename>-script uit te voeren met de optie
      <option>rcvar</option>.  Voor <command>sshd</command>:</para>

    <screen>&prompt.root; <userinput>/etc/rc.d/sshd rcvar</userinput>
# sshd
$sshd_enable=YES</screen>

    <note>
      <para>De tweede regel (<literal># sshd</literal>) is de
	uitvoer van <command>sshd</command>, geen
	<username>root</username>-console.</para>
    </note>

    <para>De optie <option>status</option> wordt gebruikt om vast te
      stellen of een dienst gestart is.  Om bijvoorbeeld te controleren
      of <command>sshd</command> gestart is:</para>

    <screen>&prompt.root; <userinput>/etc/rc.d/sshd status</userinput>
sshd is running as pid 433.</screen>

    <para>In sommige gevallen is het ook mogelijk om een dienst te
      herstarten met de optie <option>reload</option>.  Dan wordt er
      getracht een signaal te sturen aan een individuele dienst, waarbij
      de dienst de bestanden met instellingen opnieuw in moet lezen.
      Meestal komt dit neer op het verzenden van het signaal
      <literal>SIGHUP</literal>.  Deze optie wordt niet door alle
      diensten ondersteund.</para>

    <para>Het <application>rc.d</application>-systeem wordt niet alleen
      gebruikt voor netwerkdiensten, maar ook voor het merendeel van de
      systeemstart.  In dit kader is bijvoorbeeld het bestand
      <filename>bgfsck</filename> interessant.  Als dit script wordt
      uitgevoerd, wordt de volgende boodschap getoond:</para>

    <screen>Starting background file system checks in 60 seconds.</screen>

    <para>Dit script wordt dus gebruikt voor bestandssysteemcontrole in
      de achtergrond, hetgeen alleen tijdens de systeemstart
      gebeurt.</para>

    <para>Veel systeemdiensten zijn afhankelijk van andere diensten om
      correct te kunnen functioneren.  Zo starten NIS en andere
      RPC-gebaseerde diensten niet als de dienst
      <command>rpcbind</command> (portmapper) nog niet draait.  Om dit
      te stroomlijnen wordt informatie over afhankelijkheden en andere
      metagegevens ingevoegd in het commentaar bovenaan het
      opstartscript.  Deze commentaarregels worden vervolgens tijdens de
      systeemstart met &man.rcorder.8; verwerkt om zo vast te stellen in
      welke volgorde de systeemdiensten gestart moeten worden.</para>

    <para>De volgende woorden moeten in alle opstartscripts staan (ze
      zijn benodigd door &man.rc.subr.8; om het opstartscript te
      activeren):</para>

    <itemizedlist>
      <listitem>
	<para><literal>PROVIDE</literal>: geeft aan in welke diensten
	  dit bestand voorziet.</para>
      </listitem>

      <listitem>
	<para><literal>REQUIRE</literal>: geeft aan welke andere
	  diensten vereist zijn voor deze dienst.  Dit script wordt
	  uitgevoerd <emphasis>na</emphasis> de aangegeven
	  diensten.</para>
      </listitem>

      <listitem>
	<para><literal>BEFORE</literal>: geeft diensten aan die
	  afhankelijk zijn van deze dienst.  Dit bestand wordt
	  uitgevoerd <emphasis>vóór</emphasis> de
	  aangegeven diensten.</para>
      </listitem>
    </itemizedlist>

    <para>Met deze methode kan een systeembeheerder gemakkelijk
      systeemdiensten besturen, zonder gedoe met
      <quote>runlevels</quote> zoals bij sommige andere &unix;
      systemen.</para>

    <para>Meer informatie over het <filename>rc.d</filename>-systeem
      staat in &man.rc.8; en &man.rc.subr.8;.  Als u geïnteresseerd
      bent in het schrijven van uw eigen
      <filename>rc.d</filename>-script of om de huidige scripts te
      verbeteren is wellicht <ulink url="&url.articles.rc-scripting">dit
	artikel</ulink> interessant.</para>
  </sect1>

  <sect1 id="config-network-setup">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Marc</firstname>
	  <surname>Fonvieille</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>Netwerkkaarten instellen</title>

    <indexterm>
      <primary>netwerkkaarten</primary>

      <secondary>instellen</secondary>
    </indexterm>

    <para>Het is tegenwoordig nauwelijks voorstelbaar dat een computer
      geen netwerkverbinding heeft.  Het toevoegen en instellen van een
      netwerkkaart is een gebruikelijke taak voor een
      &os;-beheerder.</para>

    <sect2>
      <title>Het juiste stuurprogramma vinden</title>

      <indexterm>
	<primary>netwerkkaarten</primary>

	<secondary>stuurprogramma</secondary>
      </indexterm>

      <para>Voor het zoeken begint, moet duidelijk zijn om welke kaart
	het gaat, welke chip erop zit en of het een PCI- of ISA-kaart
	is.  &os; ondersteunt vele kaarten.  Op de Hardware
	Compatibiliteitslijst voor de betreffende uitgave staan de
	kaarten die ondersteund worden.</para>

      <para>Als duidelijk is dat een kaart ondersteund wordt, moet
	vastgesteld worden wat het geschikte stuurprogramma is.  In het
	bestand <filename>/usr/src/sys/conf/NOTES</filename> staat een
	lijst van stuurprogramma's voor netwerkinterfaces met wat
	informatie over de ondersteunde chipsets of kaarten.  In geval
	van twijfel biedt de hulppagina voor het stuurprogramma
	(<command>man</command>) vaak uitkomst.  In het algemeen bevat
	deze meer informatie over de ondersteunde hardware en mogelijke
	problemen die kunnen optreden.</para>

      <para>Als een veelgebruikte kaart gebruikt wordt, hoeft meestal
	niet ver gezocht te worden.  Stuurprogramma's voor
	veelvoorkomende netwerkinterfaces zijn al aanwezig in de
	algemene kernel <filename>GENERIC</filename>.  In dat geval
	wordt zo'n kaart al gevonden bij het opstarten, bijvoorbeeld met
	het volgende bericht:</para>

<screen>dc0: &lt;82c169 PNIC 10/100BaseTX&gt; port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
miibus0: &lt;MII bus&gt; on dc0
bmtphy0: &lt;BCM5201 10/100baseTX PHY&gt; PHY 1 on miibus0
bmtphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc0: Ethernet address: 00:a0:cc:da:da:da
dc0: [ITHREAD]
dc1: &lt;82c169 PNIC 10/100BaseTX&gt; port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
miibus1: &lt;MII bus&gt; on dc1
bmtphy1: &lt;BCM5201 10/100baseTX PHY&gt; PHY 1 on miibus1
bmtphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: Ethernet address: 00:a0:cc:da:da:db
dc1: [ITHREAD]</screen>

      <para>In dit voorbeeld zitten er twee kaarten in het systeem die
	het stuurprogramma &man.dc.4; gebruiken.</para>

      <para>Als het stuurprogramma voor een NIC geen onderdeel is van de
	kernel <filename>GENERIC</filename>, dan dient het juiste
	stuurprogramma voor die NIC geladen te worden.  Dit kan op twee
	manieren:</para>

      <itemizedlist>
	<listitem>
	  <para>De meest eenvoudige manier is het laden van een
	    kernelmodule voor een netwerkkaart met &man.kldload.8; of
	    automatisch tijdens het opstarten van het systeem door de
	    benodigde regel toe te voegen aan
	    <filename>/boot/loader.conf</filename>.  Niet alle
	    NIC-stuurprogramma's zijn als module beschikbaar.  Zo zijn
	    er bijvoorbeeld geen modules beschikbaar voor
	    ISA-kaarten.</para>
	</listitem>

	<listitem>
	  <para>Ondersteuning voor een kaart kan ook in de kernel
	    gecompileerd worden.  In
	    <filename>/usr/src/sys/conf/NOTES</filename>,
	    <filename>/usr/src/sys/<replaceable>arch</replaceable>/conf/NOTES</filename>
	    en de hulppagina van het stuurprogramma is na te lezen wat
	    er in het kernelinstellingenbestand moet staan.  In <xref
	      linkend="kernelconfig"/> staat meer informatie over het
	    compileren van een eigen kernel.  Als een netwerkkaart al
	    bij het opstarten wordt herkend door de kernel
	    <filename>GENERIC</filename>, is er geen reden om een andere
	    kernel te bouwen.</para>
	</listitem>
      </itemizedlist>

      <sect3 id="config-network-ndis">
	<title>Gebruik maken van &windows;
	  NDIS-stuurprogramma's</title>

	<indexterm><primary>NDIS</primary></indexterm>

	<indexterm><primary>NDISulator</primary></indexterm>

	<indexterm><primary>&windows; drivers</primary></indexterm>

	<indexterm><primary>Microsoft Windows</primary></indexterm>

	<indexterm>
	  <primary>Microsoft Windows</primary>

	  <secondary>device drivers</secondary></indexterm>

	<indexterm><primary>KLD (kernel loadable object)</primary></indexterm>

	<para>Helaas zijn er nog steeds veel leveranciers die geen
	  schema's leveren voor stuurprogramma's aan de open-source
	  gemeenschap, omdat ze deze informatie beschouwen als
	  handelsgeheimen.  Als gevolg daarvan hebben de ontwikkelaars
	  van &os; en andere projecten twee keuzes: zelf de
	  stuurprogramma's ontwikkelen door een langdurig en pijnlijk
	  proces van de huidige stuurprogramma's te ontcijferen, of door
	  gebruik te maken van de huidige binaire bestanden voor het
	  &microsoft.windows; platform.  De meeste ontwikkelaars,
	  inclusief diegeen die gekoppeld zijn aan &os;, hebben voor het
	  laatste gekozen.</para>

	<para>Dankzij de bijdragen van Bill Paul (wpaul) is er
	  <quote>native</quote> ondersteuning
	  voor de Network Driver Interface Specification (NDIS).  De
	  &os; NDISulator (ook wel bekend als Project Evil) neemt een
	  binair &windows; stuurprogramma en doet net alsof deze in een
	  &windows; systeem draait.  Omdat het stuurprogramma
	  &man.ndis.4; een &windows; binary gebruikt; draait het alleen
	  op &i386;- en amd64-systemen.  PCI, CardBus, PCMCIA (PC-Card) en
	  USB-apparaten worden ondersteund.</para>

	<para>Om de NDISulator te gebruiken zijn drie dingen nodig:</para>

	<orderedlist>
	  <listitem>
	    <para>De bronbestanden van de kernel</para>
	  </listitem>

	  <listitem>
	    <para>Een &windowsxp; stuurprogramma (met de extensie
	      <filename>.SYS</filename>)</para>
	  </listitem>

	  <listitem>
	    <para>Een instellingenbestand van het &windowsxp;
	      stuurprogramma (met de extensie
	      <filename>.INF</filename>)</para>
	  </listitem>
	</orderedlist>

	<para>Lokaliseer de bestanden voor uw specifieke kaart.  Over
	  het algemeen kunnen deze gevonden worden op de bijgeleverde
	  CD's of op de website van de leverancier.  In de volgende
	  voorbeelden maken we gebruik van
	  <filename>W32DRIVER.SYS</filename> en
	  <filename>W32DRIVER.INF</filename>.</para>

	<para>De bit-breedte van het stuurprogramma moet overeenkomen met die
	  van het stuurprogramma.  Gebruik voor &os;/i386 een 32-bits &windows;
	  stuurprogramma.  Voor &os;/amd64 is een 64-bits &windows;
	  stuurprogramma nodig.</para>

	<para>De volgende stap is het compileren van het binaire
	  stuurprogramma in een laadbare kernelmodule.  Gebruik &man.ndisgen.8;
	  als <username>root</username>:</para>

	<screen>&prompt.root; <userinput>ndisgen <replaceable>/pad/naar/W32DRIVER.INF</replaceable>
<replaceable>/pad/naar/W32DRIVER.SYS</replaceable></userinput></screen>

	<para>&man.ndisgen.8; is interactief en vraagt om extra informatie als
	  het dat nodig heeft.  Een nieuwe kernel-module wordt in de huidige map
	  geschreven.  Gebruik &man.kldload.8; om de nieuwe module te
	  laden:</para>

	<screen>&prompt.root; <userinput>kldload <replaceable>./W32DRIVER_SYS.ko</replaceable></userinput></screen>

	<para>Naast de gegenereerde kernelmodule, moeten ook de modules
	  <filename>ndis.ko</filename> en
	  <filename>if_ndis.ko</filename> geladen worden.  Dit zou
	  automatisch moeten gebeuren als er een module geladen wordt
	  dit afhankelijk is van &man.ndis.4;.  Als ze handmatig
	  ingeladen moeten worden gebruik dan de volgende
	  commando's:</para>

	<screen>&prompt.root; <userinput>kldload ndis</userinput>
&prompt.root; <userinput>kldload if_ndis</userinput></screen>

	<para>Het eerste commando laadt de stuurprogrammawrapper voor de
	  NDIS miniport, de tweede laadt de daadwerkelijke
	  netwerkinterface.</para>

	<para>Controleer nu &man.dmesg.8; om te zien of er ergens fouten
	  voorkomen.  Als alles goed gegaan is ziet u ongeveer het
	  volgende:</para>

	<screen>ndis0: &lt;Wireless-G PCI Adapter&gt; mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps</screen>

	<para>Vanaf dit moment kan de <devicename>ndis0</devicename>
	  net zo gebruikt worden als elke andere netwerkkaart (bv.
	  <devicename>dc0</devicename>).</para>

	<para>Het systeem kan geconfigureerd worden zodat de
	  NDIS-modules automatisch gestart worden tijdens het opstarten
	  van het systeem, net zoals bij andere modules.  Kopieer eerst
	  de gegenereerde module <filename>W32DRIVER_SYS.ko</filename> naar
	  de map <filename class="directory">/boot/modules</filename>.
	  Voeg daarna de volgende regel toe aan
	  <filename>/boot/loader.conf</filename>:</para>

	<programlisting>W32DRIVER_SYS_load="YES"</programlisting>
      </sect3>
    </sect2>

    <sect2>
      <title>De netwerkkaart instellen</title>

      <indexterm>
	<primary>netwerkkaarten</primary>

	<secondary>instellen</secondary>
      </indexterm>

      <para>Nadat een geschikt stuurprogramma geladen is, moet de kaart
	nog ingesteld worden.  Mogelijk is dit al gebeurd door
	<application>sysinstall</application> tijdens de
	installatie.</para>

      <para>Om de instellen van de netwerkkaarten weer te geven:</para>

<screen>&prompt.user; <userinput>ifconfig</userinput>
dc0: flags=8843&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
        options=80008&lt;VLAN_MTU,LINKSTATE&gt;
        ether 00:a0:cc:da:da:da
        inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX &lt;full-duplex&gt;)
        status: active
dc1: flags=8802&lt;UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
        options=80008&lt;VLAN_MTU,LINKSTATE&gt;
        ether 00:a0:cc:da:da:db
        inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
        media: Ethernet 10baseT/UTP
        status: no carrier
plip0: flags=8810&lt;POINTOPOINT,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
lo0: flags=8049&lt;UP,LOOPBACK,RUNNING,MULTICAST&gt; metric 0 mtu 16384
        options=3&lt;RXCSUM,TXCSUM&gt;
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
        inet6 ::1 prefixlen 128
        nd6 options=3&lt;PERFORMNUD,ACCEPT_RTADV&gt;</screen>

      <para>In dit voorbeeld werden de volgende apparaten
	weergegeven:</para>

      <itemizedlist>
	<listitem>
	  <para><devicename>dc0</devicename>: de eerste
	    Ethernet-interface;</para>
	</listitem>

	<listitem>
	  <para><devicename>dc1</devicename>: de tweede
	    Ethernet-interface;</para>
	</listitem>

	<listitem>
	  <para><devicename>plip0</devicename>: De parallele poort-interface
	    (mits er een parallele poort aanwezig is op de machine)</para>
	</listitem>

	<listitem>
	  <para><devicename>lo0</devicename>: het
	    loopback-apparaat;</para>
	</listitem>
      </itemizedlist>

      <para>&os; gebruikt de naam van het stuurprogramma gevolgd door
	een nummer voor de volgorde waarop de kaarten gedetecteerd zijn
	bij het opstarten.  <devicename>sis2</devicename> is de derde
	netwerkkaart in het systeem die het stuurprogramma &man.sis.4;
	gebruikt.</para>

      <para>In het vorige voorbeeld is het apparaat
	<devicename>dc0</devicename> volledig operationeel.  Dit blijkt
	uit de volgende indicatoren:</para>

      <orderedlist>
	<listitem>
	  <para><literal>UP</literal> betekent dat de kaart ingesteld is
	    en klaar is voor gebruik;</para>
	</listitem>

	<listitem>
	  <para>De kaart heeft een Internet (<literal>inet</literal>)
	    adres (in dit geval <hostid
	      role="ipaddr">192.168.1.3</hostid>);</para>
	</listitem>

	<listitem>
	  <para>Het heeft een geldig subnetmasker
	    (<literal>netmask</literal>; <hostid
	      role="netmask">0xffffff00</hostid> is hetzelfde als
	    <hostid role="netmask">255.255.255.0</hostid>);</para>
	</listitem>

	<listitem>
	  <para>Het heeft een geldig broadcastadres (in dit geval
	    <hostid role="ipaddr">192.168.1.255</hostid>);</para>
	</listitem>

	<listitem>
	  <para>Het MAC-adres van de kaart (<literal>ether</literal>) is
	    <hostid role="mac">00:a0:cc:da:da:da</hostid>;</para>
	</listitem>

	<listitem>
	  <para>De fysieke mediaselectie staat in autoselectiemodus
	    (<literal>media: Ethernet autoselect (100baseTX
	      &lt;full-duplex&gt;)</literal>).
	    <devicename>dc1</devicename> is ingesteld om met
	    <literal>10baseT/UTP</literal>-media te werken.  Meer
	    informatie over de mogelijke mediatypes staan in de
	    hulppagina's voor het betreffende stuurprogramma.</para>
	</listitem>

	<listitem>
	  <para>De status van de verbinding (<literal>status</literal>)
	    is <literal>active</literal>, dat wil zeggen dat de drager
	    is gevonden.  Bij <devicename>dc1</devicename>staat echter
	    <literal>status: no carrier</literal>.  Dit is normaal als
	    er geen Ethernetkabel in de kaart gestoken is.</para>
	</listitem>
      </orderedlist>

      <para>Als de uitvoer &man.ifconfig.8; er ongeveer zoals hieronder
	uitziet, dan is de netwerkkaart nog niet ingesteld:</para>

<screen>dc0: flags=8843&lt;BROADCAST,SIMPLEX,MULTICAST&gt; metric 0 mtu 1500
        options=80008&lt;VLAN_MTU,LINKSTATE&gt;
        ether 00:a0:cc:da:da:da
        media: Ethernet autoselect (100baseTX &lt;full-duplex&gt;)
        status: active</screen>

      <para>Om de kaart in te stellen zijn
	<username>root</username>-rechten nodig.  De netwerkkaart kan
	vanaf de console worden ingesteld met &man.ifconfig.8;, maar dan
	moet dat na elke herstart herhaald worden.  Daarom wordt het
	vrijwel altijd in <filename>/etc/rc.conf</filename>
	gezet.</para>

      <para>In <filename>/etc/rc.conf</filename> moet voor elke
	netwerkkaart in een systeem een regel toegevoegd worden.  In het
	huidige voorbeeld zou dat het volgende kunnen zijn:</para>

      <programlisting>ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"</programlisting>

      <para><devicename>dc0</devicename>, <devicename>dc1</devicename>,
	enzovoort, moeten vervangen worden door de correcte
	stuurprogramma's voor de netwerkkaarten, zo ook de
	<acronym>IP</acronym>-adressen.  In de handleiding van het
	stuurprogramma en van &man.ifconfig.8; staan meer details over
	de mogelijke opties en in &man.rc.conf.5; staat meer informatie
	over <filename>/etc/rc.conf</filename>.</para>

      <para>Als het netwerk al is ingesteld tijdens het installeren van
	&os; staan er al enkele regels met betrekking tot de
	netwerkkaart(en) in <filename>/etc/rc.conf</filename>.  Het is
	dus handig <filename>/etc/rc.conf</filename> te controleren
	voordat er regels toegevoegd worden.</para>

      <para>Ook <filename>/etc/hosts</filename> moet worden gewijzigd om
	de namen en <acronym>IP</acronym> adressen van verschillende
	machines op het lokale netwerk, als ze er nog niet in staan.
	Meer informatie staat in &man.hosts.5; en
	<filename>/usr/share/examples/etc/hosts</filename>.</para>

      <note>
	<para>Als internettoegang nodig is met dit apparaat, kan
	  het zijn dat de default gateway en de naamserver handmatig
	  moeten worden ingesteld:</para>

	<screen>&prompt.root; <userinput>echo 'defaultrouter="<replaceable>your_default_router</replaceable>"' &gt;&gt; /etc/rc.conf</userinput>
&prompt.root; <userinput>echo 'nameserver <replaceable>your_DNS_server</replaceable>' &gt;&gt; /etc/resolv.conf</userinput></screen>
      </note>
    </sect2>

    <sect2>
      <title>Testen en problemen oplossen</title>

      <para>Als de veranderingen in <filename>/etc/rc.conf</filename>
	zijn gemaakt, moet het systeem opnieuw gestarten worden (of
	moeten nauwkeurig alle daemons gestart of herstart worden).
	Veranderingen aan de interface(s) worden dan toegepast en dan
	kan er controleerd worden of herstarten goed werkt zonder
	foutmeldingen.  Als alternatief kan ook het netwerk systeem
	herstart worden:</para>

      <screen>&prompt.root; <userinput>/etc/rc.d/netif restart</userinput></screen>

      <note>
	<para>Als er ook een default gateway ingesteld is in het
	  <filename>/etc/rc.conf</filename> bestand, moet ook onderstaand
	  command worden gegeven:</para>

	<screen>&prompt.root; <userinput>/etc/rc.d/routing restart</userinput></screen>
      </note>

      <para>Zodra het netwerk systeem is herstart, moeten de netwerk
	interfaces opnieuw getest worden.</para>

      <sect3>
	<title>Testen van de netwerkkaart</title>

	<indexterm>
	  <primary>netwerk kaarten</primary>
	  <secondary>testen</secondary>
	</indexterm>

	<para>Om te controleren of een ethernet kaart goed geconfigureerd
	  is, moeten er twee dingen gedaan worden.  Allereerst, ping de
	  interface zelf, en daarna een andere machine op het LAN.</para>

	<para>Test eerst de lokale interface:</para>

	<screen>&prompt.user; <userinput>ping -c5 192.168.1.3</userinput>
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms

--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms</screen>

	<para>Nu kan er een andere machine op het LAN gepinged worden:</para>

	<screen>&prompt.user; <userinput>ping -c5 192.168.1.2</userinput>
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms</screen>

	<para>Dit kan ook worden geprobeerd met de machine naam in plaats
	  van met <hostid role="ipaddr">192.168.1.2</hostid> als dit
	  geconfigureerd is in het <filename>/etc/hosts</filename>
	  bestand.</para>
      </sect3>

      <sect3>
	<title>Problemen oplossen</title>

	<indexterm>
	  <primary>netwerk kaarten</primary>
	  <secondary>probleem oplossing</secondary>
	</indexterm>

	<para>Het testen en zoeken van problemen is altijd een
	  pijnpunt, welke verminderd kan worden door een aantal
	  simpele dingen eerst te controleren.  Is de netwerkkabel
	  ingestoken?  Zijn de netwerk instellingen correct opgegeven?
	  Is de firewall goed geconfigureerd?  Is de netwerkkaart
	  ondersteund door &os;?  Controleer altijd de hardware notities
	  voordat er een probleem rapport wordt verstuurd.  Update naar
	  de laatste -STABLE versie, en controleer de mailing lijsten en
	  misschien zelfs het internet.</para>

	<para>Als de kaart werkt, maar de prestaties zijn slecht, dan kan
	  het de moeite waard zijn om &man.tuning.7; door te nemen.
	  Incorrecte netwerkinstellingen kunnen ook tot langzame
	  verbindingen leiden.</para>

	<para>Soms kunnen enkele <errorname>device timeouts</errorname>
	  optreden.  Met sommige kaarten is dit normaal gedrag.  Maar als
	  dit continu gebeurt of storend is, is het verstandig uit te
	  zoeken of er geen sprake is van een hardwareconfict tussen de
	  netwerkkaart en een ander apparaat.  Ook dient nogmaals de
	  bekabeling gecontroleerd te worden.  Misschien zit er niets
	  anders op dan een andere netwerkkaart te gebruiken.</para>

	<para>Het is ook mogelijk dat er <errorname>watchdog
	    timeout</errorname> foutmeldingen optreden.  Als eerste moet
	  dan de netwerkkabel gecontroleerd worden.  Veel kaarten hebben
	  een PCI-slot nodig dat Bus Mastering ondersteunt.  Sommige
	  oudere moederborden hebben maar één PCI-slot
	  waarmee dit kan (meestal slot 0).  In de documentatie van de
	  netwerkkaart en het moederbord is na te gaan of dit het
	  probleem is.</para>

	<para><errorname>No route to host</errorname> meldingen treden op
	  als het systeem niet in staat is om een pakket naar de
	  eindbestemming te routeren.  Dit kan gebeuren als er geen
	  standaardroute aangegeven is of als er een kabel niet verbonden
	  is.  De uitvoer van <command>netstat -rn</command> moet
	  gecontroleerd worden of er een geldige route is naar de
	  bestemming.  Mocht dit niet het geval zijn, dan staat er meer
	  informatie in <xref linkend="advanced-networking"/>.</para>

	<para><errorname>ping: sendto: Permission denied</errorname>
	  foutmeldingen worden vaak veroorzaakt door een verkeerd
	  ingestelde firewall.  Als de kernel <command>ipfw</command>
	  activeert bij het opstarten zonder dat er firewallregels zijn
	  gedefiniëerd, is het standaardbeleid om alle verkeer te
	  weigeren, zelfs pings!  In <xref linkend="firewalls"/> staat meer
	  informatie.</para>

	<para>Er kan ook sprake zijn van onvoldoende prestaties doordat de
	  instelling van de mediaselectie niet optimaal is.  In dergelijke
	  gevallen is het mogelijk om de mediaselectie niet als
	  <literal>autoselect</literal> in te stellen, maar expliciet aan
	  te geven wat de mediaselectie moet zijn, bijvoorbeeld
	  10baseT/UTP voor twisted pair.  Hoewel dit voor de meeste
	  hardware helpt, kan het zijn dat de problemen blijven.  Dan
	  moeten nogmaals de netwerkinstellingen gecontroleerd worden en
	  geeft de &man.tuning.7; handleiding wellicht meer
	  informatie.</para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="configtuning-virtual-hosts">
    <title>Virtuele hosts</title>

    <indexterm><primary>virtuele hosts</primary></indexterm>

    <indexterm><primary>IP-aliassen</primary></indexterm>

    <para>&os; wordt veel gebruikt voor virtuele sitehosting, waarbij
      één fysieke server er op het netwerk uitziet alsof
      het meerdere servers zijn.  Dit kan bereikt worden door meerdere
      <acronym>IP</acronym>-adressen toe te kennen aan dezelfde
      interface.</para>

    <para>Een bepaalde netwerkinterface heeft een <quote>echt</quote>
      adres en kan daarnaast een willekeurig aantal
      <quote>alias</quote>-adressen hebben.  Normaliter worden
      dergelijke aliassen toegevoegd door aliasregels toe te voegen aan
      <filename>/etc/rc.conf</filename>.</para>

    <para>Een aliasregel voor de interface
      <devicename>fxp0</devicename> ziet er zo uit:</para>

<programlisting>ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx"</programlisting>

    <para>De aliasregels moeten beginnen met <literal>alias0</literal>
      en moete elkaar dan opvolgen (bijvoorbeeld
      <literal>_alias1,</literal>, <literal>_alias2</literal>,
      enzovoort).  Het instelproces stopt als er een nummer
      ontbreekt.</para>

    <para>Het is belangrijk dat aliassen het juiste netmasker hebben.
      Dit is eenvoudig: Een bepaalde interface moet altijd
      één adres hebben dat het netmasker van het netwerk
      correct representeert.  Elk ander adres binnen dit netwerk op deze
      interface (alias) moet een netmasker van allemaal
      <literal>1</literal>'en (bits) hebben (getoond als <hostid
	role="netmask">255.255.255.255</hostid> of <hostid
	role="netmask">0xffffffff</hostid>).</para>

    <para>Een voorbeeld.  Stel de interface
      <devicename>fxp0</devicename> is verbonden met twee netwerken, het
      netwerk <hostid role="ipaddr">10.1.1.0</hostid> met masker
      <hostid role="netmask">255.255.255.0</hostid> en het netwerk
      <hostid role="ipaddr">202.0.75.16</hostid> met netmasker
      <hostid role="netmask">255.255.255.240</hostid>.  Het systeem
      moet ook de adressen <hostid role="ipaddr">10.1.1.1</hostid> tot
      en met <hostid role="ipaddr">10.1.1.5</hostid> en <hostid
	role="ipaddr">202.0.75.17</hostid> tot en met <hostid
	role="ipaddr">202.0.75.20</hostid> krijgen.  Zoals hierboven
      vermeld, heeft alleen het eerste adres in een netwerkreeks (in dit
      geval <hostid role="ipaddr">10.0.1.1</hostid> en <hostid
	role="ipaddr">202.0.75.17</hostid>) een geldig netmasker.  Alle
      overige (<hostid role="ipaddr">10.1.1.2</hostid> tot en met
      <hostid role="ipaddr">10.1.1.5</hostid> en <hostid
	role="ipaddr">202.0.75.18</hostid> tot en met <hostid
	role="ipaddr">202.0.75.20</hostid>) moeten ingesteld worden met
      het netmasker <hostid
	role="netmask">255.255.255.255</hostid>.</para>

    <para>De volgende regels voor <filename>/etc/rc.conf</filename>
      stellen een adapter in voor het bovenstaande scenario:</para>

<programlisting>ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"</programlisting>
  </sect1>

  <sect1 id="configtuning-syslog">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Niclas</firstname>
	  <surname>Zeising</surname>
	  <contrib>Bijgedragen door </contrib>
	</author>
      </authorgroup>
    </sect1info>

    <title>De systeemlogger <application>syslogd</application>
      configureren</title>

    <indexterm><primary>systeemlogging</primary></indexterm>

    <indexterm><primary>syslog</primary></indexterm>

    <indexterm><primary>syslogd</primary></indexterm>

    <para>Systeemlogging is een belangrijk aspect van systeembeheer.  Het wordt
     zowel gebruikt voor het opsporen van hardware-problemen als voor
     software-problemen in het systeem.  Het speelt ook zeer belangrijke rol bij
     het controleren van de beveiliging en het reageren op incidenten.
     Systeem-daemons die niet in een terminal beheerd worden, loggen gewoonlijk
     informatie naar een systeemlogfaciliteit of een ander logbestand.</para>

    <para>Deze sectie beschrijft hoe de &os; systeemlogger, &man.syslogd.8;, te
      configureren en te gebruiken, en behandelt logrotatie en logbeheer met
      &man.newsyslog.8;.  De focus ligt bij het opzetten en gebruiken van
      <command>syslogd</command> op een lokale machine.  Meer geavanceerdere
      opstellingen die een aparte loghost gebruiken staan in <xref
	linkend="network-syslogd"/>.</para>

    <sect2>
      <title><application>syslogd</application> gebruiken</title>

      <para>In de standaardconfiguratie van &os; wordt &man.syslogd.8; gestart
	tijdens het opstarten.  Dit wordt bepaald door de variabele
	<literal>syslogd_enable</literal> in <filename>/etc/rc.conf</filename>.
	Er zijn vele toepassingsargumenten die het gedrag van &man.syslogd.8;
	beïnvloeden.  Gebruik <literal>syslogd_flags</literal> in
	<filename>/etc/rc.conf</filename> om ze te veranderen.  Bekijk
	&man.syslogd.8; voor meer informatie over de argumenten, en
	&man.rc.conf.5;, <xref linkend="configtuning-core-configuration"/> en
	<xref linkend="configtuning-rcd"/> voor meer informatie over
	<filename>/etc/rc.conf</filename> en het deelsysteem &man.rc.8;.</para>
    </sect2>

    <sect2>
      <title><application>syslogd</application> configureren</title>

      <indexterm><primary>syslog.conf</primary></indexterm>

      <para>Het configuratiebestand, standaard
	<filename>/etc/syslog.conf</filename>, bepaalt wat &man.syslogd.8; doet
	met de logregels nadat ze eenmaal ontvangen zijn.  Er zijn verschillende
	parameters om de afhandeling van binnenkomende gebeurtenissen te
	beheren, waarvan de twee basaalste <firstterm>faciliteit</firstterm> en
	<firstterm>niveau</firstterm> zijn.  De faciliteit beschrijft welk
	deelsysteem het bericht genereerde, zoals de kernel of een daemon, het
	niveau beschrijft de ernst van de opgetreden gebeurtenis.  Dit maakt het
	mogelijk om het bericht naar verschillende logbestanden te loggen, of
	het weg te gooien, afhankelijk van de faciliteit en het niveau.  Het is
	ook mogelijk om actie te nemen afhankelijk van de toepassing dat het
	bericht verstuurde, en in het geval van loggen op afstand, ook de
	hostnaam van de machine dat het logbericht genereerde.</para>

      <para>Het configureren van &man.syslogd.8; is vrij rechttoe-rechtaan.  Het
	configuratiebestand bevat één regel per actie, de syntaxis
	van elke regel is een selecteerderveld gevolgd door een actieveld.  De
	syntaxis van het selecteerderveld is
	<replaceable>faciliteit.niveau</replaceable> dat overeenkomt met
	logberichten van <replaceable>faciliteit</replaceable> op niveau
	<replaceable>niveau</replaceable> of hoger.  Het is ook mogelijk om een
	optionele vergelijkingsvlag voor het niveau toe te voegen om meer
	precies te specificeren wat er gelogd wordt.  Er kunnen meerdere
	selecteerdervelden worden gebruikt voor dezelfde actie, ze worden
	gescheiden door een puntkomma (<literal>;</literal>).  Het gebruik van
	<literal>*</literal> zal met alles overeenkomen.  Het actieveld bepaalt
	waar het logbericht naar toe wordt gezonden, zoals een bestand of een
	loghost op afstand.  Als voorbeeld is hier de standaard
	<filename>syslog.conf</filename> van &os;:</para>

      <programlisting># &dollar;&os;&dollar;
#
#       Spaces ARE valid field separators in this file. However,
#       other *nix-like systems still insist on using tabs as field
#       separators. If you are sharing this file between systems, you
#       may want to use only tabs as field separators here.
#       Consult the &man.syslog.conf.5; manpage.
*.err;kern.warning;auth.notice;mail.crit                /dev/console <co id="co-syslog-many-match"/>
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err   /var/log/messages
security.*                                      /var/log/security
auth.info;authpriv.info                         /var/log/auth.log
mail.info                                       /var/log/maillog <co id="co-syslog-one-match"/>
lpr.info                                        /var/log/lpd-errs
ftp.info                                        /var/log/xferlog
cron.*                                          /var/log/cron
*.=debug                                        /var/log/debug.log <co id="co-syslog-comparison"/>
*.emerg                                         *
# uncomment this to log all writes to /dev/console to /var/log/console.log
#console.info                                   /var/log/console.log
# uncomment this to enable logging of all log messages to /var/log/all.log
# touch /var/log/all.log and chmod it to mode 600 before it will work
#*.*                                            /var/log/all.log
# uncomment this to enable logging to a remote loghost named loghost
#*.*                                            @loghost
# uncomment these if you're running inn
# news.crit                                     /var/log/news/news.crit
# news.err                                      /var/log/news/news.err
# news.notice                                   /var/log/news/news.notice
!ppp <co id="co-syslog-prog-spec"/>
*.*                                             /var/log/ppp.log
!*</programlisting>

      <calloutlist>
	<callout arearefs="co-syslog-many-match">
	  <para>Komt overeen met alle berichten met een <literal>err</literal>
	    of hoger, alsook met <literal>kern.warning</literal>,
	    <literal>auth.notice</literal> en <literal>mail.crit</literal>, en
	    stuur deze logberichten naar de console (
	   <filename>/dev/console</filename>).</para>
	</callout>

	<callout arearefs="co-syslog-one-match">
	  <para>Komt overeen met alle berichten van de faciliteit
	    <literal>mail</literal> op niveau <literal>info</literal> of hoger,
	    en logt de berichten in
	    <filename>/var/log/maillog</filename>.</para>
	</callout>

	<callout arearefs="co-syslog-comparison">
	  <para>Deze regel gebruikt een vergelijkingsvlag, <literal>=</literal>
	    om alleen met de berichten op niveau <literal>debug</literal>
	    overeen te komen en ze op te slaan in
	    <filename>/var/log/debug.log</filename>.</para>
	</callout>

	<callout arearefs="co-syslog-prog-spec">
	  <para>Hier volgt een gebruiksvoorbeeld van een
	    <emphasis>programmaspecificatie</emphasis>.  Dit zorgt ervoor dat de
	    regels alleen geldig zijn voor het programma in de
	    programmaspecificatie.  In dit geval zorgen deze en de volgende
	    regel ervoor dat alle berichten van <command>ppp</command>, maar
	    niet van andere programma's, in
	    <filename>/var/log/ppp.log</filename> terechtkomen.</para>
	</callout>
      </calloutlist>

      <para>Dit voorbeeld toont dat er vele niveaus en deelsystemen zijn.  De
	niveaus zijn, in volgorde van meest naar minst kritisch:
	<literal>emerg</literal>, <literal>alert</literal>,
	<literal>crit</literal>, <literal>err</literal>,
	<literal>warning</literal>, <literal>notice</literal>,
	<literal>info</literal> en <literal>debug</literal>.</para>

      <para>De faciliteiten zijn, in geen specifieke volgorde:
	<literal>auth</literal>, <literal>authpriv</literal>,
	<literal>console</literal>, <literal>cron</literal>,
	<literal>daemon</literal>, <literal>ftp</literal>,
	<literal>kern</literal>, <literal>lpr</literal>,
	<literal>mail</literal>, <literal>mark</literal>,
	<literal>news</literal>, <literal>security</literal>,
	<literal>syslog</literal>, <literal>user</literal>,
	<literal>uucp</literal> en <literal>local0</literal> tot en met
	<literal>local7</literal>.  Let erop dat andere besturingssystemen
	andere faciliteiten kunnen hebben.</para>

      <para>Met deze kennis is het eenvoudig om een nieuwe regel aan
	<filename>/etc/syslog.conf</filename> toe te voegen om alles van de
	verschillende daemons op niveau <literal>notice</literal> en hoger naar
	<filename>/var/log/daemon.log</filename> te loggen:</para>

      <programlisting>daemon.notice                                        /var/log/daemon.log</programlisting>

      <para>Bekijk &man.syslog.3; en &man.syslogd.8; voor meer informatie over
	de verschillende niveaus en faciliteiten. Zie &man.syslog.conf.5; en
	<xref linkend="network-syslogd"/> voor meer informatie over
	<filename>syslog.conf</filename>, de syntaxis, en geavanceerdere
	gebruiksvoorbeelden.</para>
    </sect2>

    <sect2>
      <title>Logbeheer en -rotatie met
	<application>newsyslog</application></title>

      <indexterm><primary>newsyslog</primary></indexterm>

      <indexterm><primary>newsyslog.conf</primary></indexterm>

      <indexterm><primary>logrotatie</primary></indexterm>

      <indexterm><primary>logbeheer</primary></indexterm>

      <para>Logbestanden hebben de neiging om snel te groeien en gestadig
	 opgehoopt te raken.  Dit leidt tot bestanden die vol zitten met minder
	 direct bruikbare informatie en de harde schijf volmaken.  Logbeheer
	 kan gebruikt worden om dit te beheersen.  In &os; wordt
	 &man.newsyslog.8; gebruikt om logbestanden te beheren.  Dit programma
	 wordt gebruikt om periodiek logbestanden te roteren en te comprimeren
	 en om optioneel ontbrekende logbestanden aan te maken en programma's
	 te signaleren dat logbestanden zijn verplaatst.  De logbestanden hoeven
	 niet per sé van syslog afkomstig te zijn; &man.newsyslog.8;
	 werkt met elke log van elk programma.  Het is belangrijk om op te
	 merken dat <command>newsyslog</command> normaliter vanuit &man.cron.8;
	 wordt gedraaid en niet een systeem-daemon is.  In de
	 standaardconfiguratie wordt het elk uur gedraaid.</para>

      <sect3>
	<title><application>newsyslog</application> configureren</title>

	<para>Om te weten wat het moet doen leest &man.newsyslog.8; zijn
	  configuratiebestand, standaard is dit
	  <filename>/etc/newsyslog.conf</filename>.  Dit configuratiebestand
	  bevat één regel voor elk bestand dat &man.newsyslog.8;
	  beheert.  Elke regel noemt de eigenaar van het bestand, rechten, en
	  wanneer dat bestand te roteren, alsook optionele vlaggen die de
	  logrotatie beïnvloeden (zoals compressie) en naar welke
	  programma's een signaal te sturen wanner de log is geroteerd.  Als
	  voorbeeld is hier de standaard configuratie in &os;:</para>

	<programlisting># configuration file for newsyslog
# &dollar;&os;&dollar;
#
# Entries which do not specify the '/pid_file' field will cause the
# syslogd process to be signalled when that log file is rotated.  This
# action is only appropriate for log files which are written to by the
# syslogd process (ie, files listed in /etc/syslog.conf).  If there
# is no process which needs to be signalled when a given log file is
# rotated, then the entry for that file should include the 'N' flag.
#
# The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'.
#
# Note: some sites will want to select more restrictive protections than the
# defaults.  In particular, it may be desirable to switch many of the 644
# entries to 640 or 600.  For example, some sites will consider the
# contents of maillog, messages, and lpd-errs to be confidential.  In the
# future, these defaults may change to more conservative ones.
#
# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/all.log                        600  7     *    @T00  J
/var/log/amd.log                        644  7     100  *     J
/var/log/auth.log                       600  7     100  @0101T JC
/var/log/console.log                    600  5     100  *     J
/var/log/cron                           600  3     100  *     JC
/var/log/daily.log                      640  7     *    @T00  JN
/var/log/debug.log                      600  7     100  *     JC
/var/log/init.log                       644  3     100  *     J
/var/log/kerberos.log                   600  7     100  *     J
/var/log/lpd-errs                       644  7     100  *     JC
/var/log/maillog                        640  7     *    @T00  JC
/var/log/messages                       644  5     100  @0101T JC
/var/log/monthly.log                    640  12    *    $M1D0 JN
/var/log/pflog                          600  3     100  *     JB    /var/run/pflogd.pid
/var/log/ppp.log        root:network    640  3     100  *     JC
/var/log/security                       600  10    100  *     JC
/var/log/sendmail.st                    640  10    *    168   B
/var/log/utx.log                        644  3     *    @01T05 B
/var/log/weekly.log                     640  5     1    $W6D0 JN
/var/log/xferlog                        600  7     100  *     JC</programlisting>

	<para>Elke regel begint met de naam van het bestand dat geroteerd moet
	  worden, optioneel gevolgd door een eigenaar en groep voor zowel de
	  geroteerde als nieuw aangemaakte bestanden.  Het volgende veld,
	  <literal>mode</literal> is de modus van de bestanden en
	  <literal>count</literal> geeft aan hoeveel geroteerde logbestanden
	  bewaard moeten worden.  De velden <literal>size</literal> en
	  <literal>when</literal> vertellen <command>newyslog</command> wanneer
	  het bestand geroteerd moet worden.  Een logbestand wordt geroteerd
	  wanneer òfwel de grootte meer is dan de waarde in het veld
	  <literal>size</literal>, òfwel wanneer de tijd in het veld
	  <literal>when</literal> is verstreken.  <literal>*</literal> geeft aan
	  dat dit veld genegeerd wordt.  Het veld
	  <replaceable>flags</replaceable> geeft &man.newsyslog.8; verdere
	  instructies, zoals hoe het geroteerde bestand te comprimeren of om het
	  logbestand aan te maken als het ontbreekt.  De laatste twee velden
	  zijn optioneel en specificeren het <acronym
	    role="Process Identifier">PID</acronym>-bestand van een proces en
	  een naar dat proces te verzenden signaalnummer wanneer het bestand
	  wordt geroteerd.  Raadpleeg &man.newsyslog.conf.5; voor meer
	  informatie over alle velden, geldige vlaggen en hoe de rotatietijd te
	  specificeren.  Herinner dat <command>newsyslog</command> wordt
	  gedraaid vanuit <command>cron</command> en niet vaker bestanden kan
	  roteren dan dat het gedraaid wordt vanuit &man.cron.8;.</para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="configtuning-configfiles">
    <title>Instellingenbestanden</title>

    <sect2>
      <title><filename class="directory">/etc</filename> layout</title>

      <para>Instellingengegevens wordt in een aantal mappen bewaard.
	Daar zijn onder andere:</para>

      <informaltable frame="none" pgwide="1">
	<tgroup cols="2">
	  <colspec colwidth="1*"/>

	  <colspec colwidth="2*"/>

	  <tbody>
	    <row>
	      <entry><filename class="directory">/etc</filename></entry>

	      <entry>Generieke systeeminstellingenbestanden, specifiek
		voor het systeem.</entry>
	    </row>

	    <row>
	      <entry><filename
		  class="directory">/etc/defaults</filename></entry>

	      <entry>De standaardversies van
		systeeminstellingenbestanden.</entry>
	    </row>

	    <row>
	      <entry><filename class="directory">/etc/mail</filename></entry>

	      <entry>Extra &man.sendmail.8; instellingenbestanden of
		instellingenbestanden voor andere MTAs.</entry>
	    </row>

	    <row>
	      <entry><filename class="directory">/etc/ppp</filename></entry>

	      <entry>Instellingen voor zowel gebruiker- als kernel-ppp
		programma's.</entry>
	    </row>

	    <row>
	      <entry><filename class="directory">/etc/namedb</filename></entry>

	      <entry>Standaardlocatie voor &man.named.8; gegevens.
		Normaal gesproken bevinden zich hier
		<filename>named.conf</filename> en zonebestanden.</entry>
	    </row>

	    <row>
	      <entry><filename
		  class="directory">/usr/local/etc</filename></entry>

	      <entry>Instellingenbestanden voor geïnstalleerde
		software.  Kan submappen hebben waarin bij elkaar
		horende instellingengegevens van een applicatie
		gegroepeerd zijn.</entry>
	    </row>

	    <row>
	      <entry><filename
		  class="directory">/usr/local/etc/rc.d</filename></entry>

	      <entry>Start- en stopscripts voor geïnstalleerde
		diensten.</entry>
	    </row>

	    <row>
	      <entry><filename class="directory">/var/db</filename></entry>

	      <entry>Automatisch gemaakte systeemspecifieke
		databasebestanden, zoals de pakketdatabase, de
		&man.locate.1; database, enzovoort.</entry>
	    </row>
	  </tbody>
	</tgroup>
      </informaltable>
    </sect2>

    <sect2>
      <title>Hostnamen</title>

      <indexterm><primary>hostnaam</primary></indexterm>

      <indexterm><primary>DNS</primary></indexterm>

      <sect3>
	<title><filename>/etc/resolv.conf</filename></title>

	<indexterm><primary><filename>resolv.conf</filename></primary></indexterm>

	<para>In <filename>/etc/resolv.conf</filename> wordt
	  voorgeschreven op welke wijze &os; het Domain Name System
	  (DNS) moet gebruiken.</para>

	<para>De meest voorkomende termen in
	  <filename>resolv.conf</filename> zijn:</para>

	<informaltable frame="none" pgwide="1">
	  <tgroup cols="2">
	    <colspec colwidth="1*"/>

	    <colspec colwidth="2*"/>

	    <tbody>
	      <row>
		<entry><literal>nameserver</literal></entry>

		<entry>Het <acronym>IP</acronym>-adres van een
		  naamserver die ondervraagd moet worden voor
		  naam/<acronym>IP</acronym>-conversie.  De servers
		  worden in volgorde geprobeerd en het maximale aantal
		  is drie.</entry>
	      </row>

	      <row>
		<entry><literal>search</literal></entry>

		<entry>Zoeklijst voor het opzoeken van hostnamen.
		  Meestal wordt deze bepaald door het domein waarop de
		  lokale hostnaam zich bevindt.</entry>
	      </row>

	      <row>
		<entry><literal>domain</literal></entry>

		<entry>De lokale domeinnaam.</entry>
	      </row>
	    </tbody>
	  </tgroup>
	</informaltable>

	<para>Een typisch <filename>resolv.conf</filename>
	  bestand:</para>

	<programlisting>search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30</programlisting>

	<note>
	  <para><literal>search</literal> en <literal>domain</literal>
	    dienen niet tegelijk gebruikt te worden.</para>
	</note>

	<para>Als DHCP wordt gebruikt: &man.dhclient.8; overschrijft
	  meestal <filename>resolv.conf</filename> met informatie
	  ontvangen van de DHCP-server.</para>
      </sect3>

      <sect3>
	<title><filename>/etc/hosts</filename></title>

	<indexterm><primary>hosts</primary></indexterm>

	<para><filename>/etc/hosts</filename> is een eenvoudige
	  tekstdatabase uit de dagen van het oude Internet.  Het werkt
	  samen met DNS en NIS om namen en <acronym>IP</acronym>
	  adressen over en weer te vertalen.  Lokale computers,
	  verbonden via een LAN, kunnen hier het beste in opgenomen
	  worden om zo op simpele wijze naam/<acronym>IP</acronym>
	  conversie voor een LAN te hebben, zonder noodzaak voor een
	  &man.named.8; server.  Ook kunnen naamaliassen toegekend
	  worden (vergelijkbaar met CNAMES bij DNS).  Op soortgelijke
	  wijze kan <filename>/etc/hosts</filename> gebruikt worden als
	  een (zeer beperkte) lokale DNS cache.</para>

	<programlisting># &dollar;&os;&dollar;
#
# Host Database
# Dit bestand hoort de adressen en aliassen te bevatten
# voor de lokale hosts die dit bestand gebruiken.
# Bij gebruik van DNS of NIS hoeft dit bestand helemaal niet gebruikt
# te worden.  Zie /etc/nsswitch.conf voor de volgorde van resolutie.
#
#
::1                      localhost localhost.my.domain myname.my.domain
127.0.0.1                localhost localhost.my.domain myname.my.domain

#
# Verzonnen netwerk.
#10.0.0.2                myname.my.domain myname
#10.0.0.3                myfriend.my.domain myfriend
#
# Volgens RFC 1918 mogen de volgende IP netwerken gebruikt worden
# als private netwerken die niet met Internet verbonden zijn:
#
#        10.0.0.0        -   10.255.255.255
#        172.16.0.0      -   172.31.255.255
#        192.168.0.0     -   192.168.255.255
#
# Als er toch verbinding moet zijn met Internet, zijn echte
# officieel toegewezen nummers nodig.  Probeer ECHT GEEN eigen
# netwerknummers te verzinnen, maar vraag ze op bij de provider
# (als die er is) of bij de Internet Registry (ftp naar
# rs.internic.net, map `/templates').
#</programlisting>

	<para><filename>/etc/hosts</filename> heeft als formaat:</para>

	<programlisting>[Internet address] [official hostname] [alias1] [alias2] ...</programlisting>

	<para>Bijvoorbeeld:</para>

	<programlisting>10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2</programlisting>

	<para>In &man.hosts.5; staat meer informatie.</para>
      </sect3>
    </sect2>

    <sect2 id="configtuning-sysctlconf">
      <title><filename>sysctl.conf</filename></title>

      <indexterm><primary>sysctl.conf</primary></indexterm>

      <indexterm><primary>sysctl</primary></indexterm>

      <para><filename>sysctl.conf</filename> lijkt veel op
	<filename>rc.conf</filename>.  Waardetoekenning heeft weer de
	vorm <literal>variable=value</literal>.  De ingestelde
	&man.sysctl.8;-waarden worden doorgevoerd op het moment dat het
	systeem naar multi-user modus gaat.  Niet alle variabelen kunnen
	in deze modus gewijzigd worden.</para>

      <para>Om te voorkomen dat er logregels geplaatst worden als
	processen crashen en om te voorkomen dat andere gebruikers
	kunnen zien welke processen er gestart zijn door een andere
	gebruiker, kunnen de volgende instellingen worden gezet in
	<filename>sysctl.conf</filename>:</para>

      <programlisting>#Log exits met fatale signalen niet (bv. sig 11)
kern.logsigexit=0

# Voorkom dat gebruikers informatie zien over processen die
# worden gedraaid onder een ander UID.
security.bsd.see_other_uids=0</programlisting>
    </sect2>
  </sect1>

  <sect1 id="configtuning-sysctl">
    <title>Optimaliseren met sysctl</title>

    <indexterm><primary>sysctl</primary></indexterm>

    <indexterm>
      <primary>optimalisering</primary>

      <secondary>met sysctl</secondary>
    </indexterm>

    <para>&man.sysctl.8; is een interface waarmee veranderingen gemaakt
      kunnen worden aan een draaiend &os;-systeem.  Er zijn onder meer
      vele geavanceerde opties voor de TCP/<acronym>IP</acronym>-stack
      en het virtuele geheugensysteem, waarmee een ervaren
      systeembeheerder de systeemprestaties drastisch kan verbeteren.
      Met &man.sysctl.8; kunnen meer dan vijfhonderd systeemvariabelen
      opgevraagd en ingesteld worden.</para>

    <para>In essentie heeft &man.sysctl.8; twee functies: het lezen en
      wijzigen van systeeminstellingen.</para>

    <para>Om alle leesbare variabelen te tonen:</para>

    <screen>&prompt.user; <userinput>sysctl -a</userinput></screen>

    <para>Om een bepaalde variabele op te vragen, bijvoorbeeld
      <varname>kern.maxproc</varname>:</para>

    <screen>&prompt.user; <userinput>sysctl kern.maxproc</userinput>
kern.maxproc: 1044</screen>

    <para>Om een bepaalde variabele toe te kennen (te wijzigen), is de
      syntaxis
      <replaceable>variable</replaceable>=<replaceable>value</replaceable>:</para>

    <screen>&prompt.root; <userinput>sysctl kern.maxfiles=5000</userinput>
kern.maxfiles: 2088 -&gt; 5000</screen>

    <para>Waarden van sysctl-variabelen zijn doorgaans strings (tekst),
      getallen of booleans (<literal>1</literal> als waar,
      <literal>0</literal> als onwaar).</para>

    <para>Om automatisch variabelen in te stellen als de machine start,
      kunnen ze toegevoegd worden aan
      <filename>/etc/sysctl.conf</filename>.  Meer informatie staat in
      &man.sysctl.conf.5; en <xref
	linkend="configtuning-sysctlconf"/>.</para>

    <sect2 id="sysctl-readonly">
      <sect2info>
	<authorgroup>
	  <author>
	    <firstname>Tom</firstname>
	    <surname>Rhodes</surname>
	    <contrib>Geschreven door </contrib>
	  </author>
	</authorgroup>
      </sect2info>

      <title>&man.sysctl.8; alleen-lezen</title>

      <para>In sommige gevallen is het wenselijk om &man.sysctl.8;-waarden
	die alleen-lezen zijn toch te wijzigen.  Hoewel dit soms
	onontkoombaar is, kan het alleen bij een (her)start gedaan
	worden.</para>

      <para>Op sommige laptops is bijvoorbeeld het apparaat
	&man.cardbus.4; niet in staat om geheugenregio's af te tasten, met
	als gevolg foutmeldingen als:</para>

      <screen>cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12</screen>

      <para>In dergelijke gevallen moeten er meestal enkele
	&man.sysctl.8;-instellingen gewijzigd worden die alleen-lezen zijn
	en een standaardwaarde hebben.  Dit kan bereikt worden door
	&man.sysctl.8; <quote>OIDs</quote> in de lokale
	<filename>/boot/loader.conf</filename> te zetten.
	Standaardinstellingen staan in
	<filename>/boot/defaults/loader.conf</filename>.</para>

      <para>Om het bovenstaande probleem op te lossen moet in
	<filename>/boot/loader.conf</filename>
	<literal>hw.pci.allow_unsupported_io_range=1</literal> ingesteld
	worden.  Dan werkt &man.cardbus.4; wel goed.</para>
    </sect2>
  </sect1>

  <sect1 id="configtuning-disk">
    <title>Harde schijven optimaliseren</title>

    <sect2>
      <title>Sysctl-variabelen</title>

      <sect3>
	<title><varname>vfs.vmiodirenable</varname></title>

	<indexterm><primary><varname>vfs.vmiodirenable</varname></primary></indexterm>

	<para>De sysctl-variabele <varname>vfs.vmiodirenable</varname>
	  kan de waarde 0 (uit) of 1 (aan) hebben.  De standaardwaarde
	  is 1.  Deze variabele bepaalt hoe mappen door het systeem in
	  een cache bewaard worden.  De meeste mappen zijn klein en
	  gebruiken slechts een klein fragment (typisch 1&nbsp;K) in het
	  bestandssysteem en nog minder (typisch 512&nbsp;bytes) in de
	  buffercache.  Als deze variabele uit staat (op 0) bewaart de
	  buffercache slechts een bepaald aantal mappen in de cache, ook
	  al is er een overvloed aan geheugen beschikbaar.  Wanneer deze
	  aan staat (op 1), wordt de VM paginacache gebruikt, waardoor
	  voor het cachen van mappen al het geheugen kan worden
	  gebruikt.  Het is echter wel zo dat het minimale in-core
	  geheugen dat gebruikt wordt om een map te cachen in dat geval
	  de fysieke paginagrootte is (typisch 4&nbsp;K) in plaats van
	  512&nbsp; bytes.  Het is aan te raden deze optie aan te laten
	  staan als gebruik gemaakt wordt van diensten die met grote
	  aantallen bestanden werken, zoals webcaches, grote
	  mailsystemen en newsservers.  Als deze optie aan blijft staan,
	  verlaagt die de prestaties niet, ook al kost het meer
	  geheugen.  Door experimenteren is dit voor een systeem na te
	  gaan.</para>
      </sect3>

      <sect3>
	<title><varname>vfs.write_behind</varname></title>

	<indexterm><primary><varname>vfs.write_behind</varname></primary></indexterm>

	<para>De sysctl-variabele <varname>vfs.write_behind</varname>
	  staat standaard aan (<literal>1</literal>).  Dit betekent dat
	  het bestandssysteem gegevens naar het medium gaat schrijven op
	  het moment dat er een volledig cluster aan gegevens verzameld
	  is.  Dit is meestal het geval bij het schrijven van grote
	  sequentiële bestanden.  Het idee is om te voorkomen dat
	  de buffercache verzadigd raakt met vuile buffers zonder dat
	  dit bijdraagt aan de I/O-prestaties.  Dit kan echter processen
	  ophouden en onder sommige omstandigheden is het wellicht beter
	  deze sysctl uit te zetten.</para>
      </sect3>

      <sect3>
	<title><varname>vfs.hirunningspace</varname></title>

	<indexterm><primary><varname>vfs.hirunningspace</varname></primary></indexterm>

	<para>De sysctl-variabele <varname>vfs.hirunningspace</varname>
	  bepaalt hoeveel nog te schrijven gegevens er in het complete
	  systeem op elk moment in de wachtrij naar schijfcontrollers
	  mag staan.  De standaardwaarde is meestal voldoende, maar op
	  machines met veel schijven, is het beter deze te verhogen naar
	  vier of vijf <emphasis>megabyte</emphasis>.  Het instellen van
	  een te hoge waarde (groter dan de schrijfdrempel van de
	  buffercache) kan leiden tot zeer slechte prestaties bij
	  clustering.  Stel deze waarde niet arbitrair hoog in!  Hogere
	  schrijfwaarden kunnen vertraging veroorzaken in het lezen, als
	  dit tegelijk plaatsvindt.</para>

	<para>Er zijn verscheidene andere sysctl's voor buffercache en
	  VM-pagecache.  Het wordt afgeraden deze te wijzigen.  Het
	  VM-systeem is zeer goed in staat zichzelf automatisch te
	  optimaliseren.</para>
      </sect3>

      <sect3>
	<title><varname>vm.swap_idle_enabled</varname></title>

	<indexterm><primary><varname>vm.swap_idle_enabled</varname></primary></indexterm>

	<para>De sysctl-variabele
	  <varname>vm.swap_idle_enabled</varname> is nuttig in grote
	  meergebruikersystemen met veel gebruikers die af- en aanmelden
	  en veel onbenutte processen.  Dergelijke systemen hebben de
	  neiging om voortdurend de vrije geheugenreserves onder druk
	  te zetten.  Het is mogelijk om de prioriteit van
	  geheugenpagina's die verband houden met onbenutte processen
	  sneller te laten dalen dan met het normale pageout-algoritme,
	  door deze sysctl aan te zetten en via
	  <varname>vm.swap_idle_threshold1</varname> en
	  <varname>vm.swap_idle_threshold2</varname> de swapout
	  hysterese (in seconden onbenut) af te stemmen.  Deze optie
	  dient alleen gebruikt te worden als ze echt nodig is, want de
	  andere kant van de medaille is dat dit eerder pre-page
	  geheugen inhoudt in plaats van later, waardoor het meer
	  wisselbestand- en schijfbandbreedte kost.  In een klein
	  systeem heeft deze optie een voorspelbaar effect, maar in
	  grote systemen waar al sprake is van een matige paging kan
	  deze optie het mogelijk maken voor het VM-systeem om hele
	  processen gemakkelijk in en uit het geheugen te halen.</para>
      </sect3>

      <sect3>
	<title><varname>hw.ata.wc</varname></title>

	<indexterm><primary><varname>hw.ata.wc</varname></primary></indexterm>

	<para>Ten tijde van &os;&nbsp;4.3 is er geflirt met het
	  uitzetten van IDE-schrijfcaching.  Hierdoor neemt de
	  bandbraadte naar IDE-schijven af, maar het werd als
	  noodzakelijk beschouwd vanwege ernstige problemen met
	  gegevensinconsistentie die door harde schijfproducenten
	  geëintroduceerd waren.  Het probleem is dat IDE-schijven
	  niet de waarheid vertellen over wanneer een schrijfactie
	  klaar is.  Door IDE-schrijfcaching wordt data niet alleen
	  ongeordend geschreven, maar soms kan zelfs het schrijven van
	  sommige blokken voortdurend uitgesteld worden als er sprake is
	  van een hoge schijfbelasting.  Een crash of stroomstoring kan
	  dan ernstige corruptie aan het bestandssysteem veroorzaken.
	  Daarom werd de standaardinstelling van &os; voor alle
	  zekerheid gewijzigd.  Helaas was het resultaat een groot
	  verlies aan prestaties en na die uitgave is de
	  standaardwaarde weer terug veranderd.  Met de sysctl-variabele
	  <varname>hw.ata.wc</varname> kan gecontroleerd worden of
	  schrijfcaching aan of uit staat.  Als schrijfcaching uit
	  staat, kan het die weer aangezet worden door
	  <varname>hw.ata.wc</varname> op 1 te zetten.  Aangezien dit
	  een kernelvariabele is, moet deze ingesteld worden vanuit de
	  bootloader tijdens het opstarten.  Nadat de kernel eenmaal
	  opgestart is, heeft het wijzigen van deze sysctl geen
	  effect.</para>

	<para>Meer informatie staat in &man.ata.4;.</para>
      </sect3>

      <sect3>
	<title><literal>SCSI_DELAY</literal>
	  (<varname>kern.cam.scsi_delay</varname>)</title>

	<indexterm><primary><varname>kern.cam.scsi.delay</varname></primary></indexterm>

	<indexterm>
	  <primary>kernelopties</primary>

	  <secondary><literal>SCSI_DELAY</literal></secondary>
	</indexterm>

	<para>De kernelinstelling <literal>SCSI_DELAY</literal> kan
	  gebruikt worden om de opstarttijd te versnellen.  De
	  standaardwaarde is nogal hoog en kan <literal>15</literal>
	  seconden vertraging veroorzaken.  Met modernere SCSI-systemen
	  is <literal>5</literal> seconden al voldoende (zeker met
	  moderne schijven).  De <varname>kern.cam.scsi_delay</varname>
	  opstart variabele moet hier gebruikt worden.  De variabele
	  en kernelconfiguratie-optie accepteren waarden uitgedrukt
	  in <emphasis>milliseconden</emphasis> en
	  <emphasis>niet</emphasis> in
	  <emphasis>seconden</emphasis>.</para>
      </sect3>
    </sect2>

    <sect2 id="soft-updates">
      <title>Softupdates</title>

      <indexterm><primary>Softupdates</primary></indexterm>

      <indexterm><primary>tunefs</primary></indexterm>

      <para>&man.tunefs.8; kan gebruikt worden om een bestandsysteem
	nauwkeurig af te stellen.  Het heeft veel opties, maar nu wordt
	alleen het aan- en uitzetten van softupdates besproken.  Dat
	gaat als volgt:</para>

      <screen>&prompt.root; <userinput>tunefs -n enable /filesystem</userinput>
&prompt.root; <userinput>tunefs -n disable /filesystem</userinput></screen>

      <para>Een bestandssysteem kan niet met &man.tunefs.8; gewijzigd
	worden als het aangekoppeld is.  Softupdates aanzetten wordt dus
	in het algemeen gedaan vanuit enkelegebruikermodus, voordat
	partities aangekoppeld zijn.</para>

      <para>Softupdates zorgen voor een drastische verbetering van de
	prestaties met betrekking tot metagegevens, met name het
	aanmaken en verwijderen van bestanden, door gebruik van een
	geheugencache.  Het wordt dan ook aangeraden om op alle
	bestandssystemen softupdates te gebruiken.  Er zijn twee nadelen
	aan softupdates: softupdates garanderen een consistent
	bestandssysteem in geval van een crash, maar het kan makkelijk
	enkele seconden (zelfs een minuut) achter liggen met het
	daadwerkelijk bijwerken op de fysieke harde schijf.  Als een
	systeem crasht gaat wellicht meer werk verloren dan anders het
	geval zou zijn.  Daarnaast vertragen softupdates het vrijgeven
	van bestandssysteemblokken.  Als een bestandssysteem (zoals de
	rootpartitie) bijna vol is, dan kan het verrichten van een grote
	update, zoals <command>make installworld</command>, ertoe leiden
	dat het bestandssysteem ruimtegebrek krijgt en dat daardoor de
	operatie mislukt.</para>

      <sect3>
	<title>Meer over softupdates</title>

	<indexterm>
	  <primary>Softupdates</primary>

	  <secondary>details</secondary>
	</indexterm>

	<para>Er zijn traditioneel twee methodes om de metagegevens van
	  een bestandssysteem terug naar de schijf te schrijven.  Het
	  bijwerken van metagegevens houdt het bijwerken van van
	  niet-inhoudelijke gegevens zoals inodes of mappen in.</para>

	<para>Historisch gezien was het gebruikelijk om updates aan
	  metagegevens synchroon weg te schrijven.  Als een map
	  bijvoorbeeld gewijzigd was, wachtte het systeem totdat de
	  verandering daadwerkelijk naar de schijf geschreven was.  De
	  gegevensbuffers (de inhoud van een bestand) werden
	  doorgeschoven naar de buffercache en op een later moment
	  asynchroon op de schijf opgeslagen.  Het voordeel van deze
	  benadering is dat ze altijd veilig is.  Als het systeem faalt
	  tijdens het bijwerken, zijn de metagegevens nog altijd
	  consistent.  Een bestand kan volledig gecreëerd zijn of
	  helemaal niet.  Als de gegevensblokken van een bestand nog
	  niet van de buffercache naar de schijf geschreven zijn ten
	  tijde van de crash, is &man.fsck.8; in staat om dit te
	  herkennen en het bestandssysteem te repareren door de lengte
	  van het bestand nul te maken.  Deze implementatie is ook
	  helder en eenvoudig.  Het nadeel is echter dat het wijzigen
	  van metagegevens een traag proces is.  Een
	  <command>rm -r</command> benadert bijvoorbeeld alle bestanden
	  in een map sequentiëel, maar elke mapverandering
	  (verwijderen van een bestand) wordt synchroon naar de schijf
	  geschreven.  Dit omvat ook het bijwerken van de map zelf, van
	  de inodetabel en mogelijk ook van indirecte blokken die voor
	  het bestand in kwestie zijn gealloceerd.  Gelijksoortige
	  processen spelen zich af bij een commando als
	  <command>tar -x</command>, waarbij een grote
	  bestandshiëearchie wordt uitgepakt.</para>

	<para>De tweede mogelijkheid is om het bijwerken van
	  metagegevens asynchroon weg te schrijven.  Dit is standaard in
	  &linux;/ext2fs en als een *BSD UFS-bestandssysteem met
	  <command>mount -o async</command> aangekoppeld is, is de
	  werking hetzelfde.  Alle bijwerkingen aan metagegevens worden
	  eenvoudigweg doorgegeven aan de buffercache en vermengd met
	  inhoudelijke updates van de bestandsgegevens.  Het voordeel
	  is een grote winst aan snelheid, omdat er niet telkens gewacht
	  hoeft te worden op het bijwerken van metagegevens tot deze
	  daadwerkelijk naar de schijf geschreven zijn.  De
	  implementatie is ook in dit geval helder en eenvoudig.  Het
	  grote nadeel is uiteraard dat er geen enkele garantie is voor
	  de consistentie van het bestandssysteem.  Als het systeem
	  faalt tijdens een operatie waarbij veel metagegevens worden
	  bijgewerkt (bijvoorbeeld door een stroomstoring of iemand
	  drukt op de resetknop), blijft het bestandssysteem in een
	  onvoorspelbare toestand achter.  Er is geen mogelijkheid om de
	  toestand van het bestandssysteem te onderzoeken als het
	  systeem weer opstart, want de gegevensblokken van een bestand
	  kunnen al weggeschreven zijn geweest terwijl het wegschrijven
	  van bijwerkingen aan de inodetabel of de bijhorende map nog
	  niet plaats heeft gevonden.  Het is zelfs onmogelijk om een
	  <command>fsck</command> te implementeren die de overgebleven
	  chaos kan opruimen: de benodigde informatie is gewoon niet
	  volledig aanwezig op de schijf.  Als een bestandssysteem op
	  deze manier onherstelbaar beschadigd is, is de enige optie
	  &man.newfs.8; te gebruiken en vervolgens te herstellen van
	  een back-up.</para>

	<para>De gebruikelijke oplossing voor dit probleem is het
	  implementeren van <emphasis>dirty region logging</emphasis>,
	  ook wel <emphasis>journaling</emphasis> genoemd, hoewel deze
	  term niet consistent gebruikt wordt en soms ook wordt gebruikt
	  voor andere vormen van transactielogging.  Het bijwerken van
	  metagegevens wordt nog steeds synchroon geschreven, maar
	  slechts naar een klein gebied van de schijf.  Later worden ze
	  dan naar de juiste locatie verplaatst.  Omdat het loggebied
	  klein is, hoeven de koppen van de schijf zelfs tijdens
	  schrijfintensieve operaties nog maar over een kleine fysieke
	  afstand te bewegen en door deze snellere respons zijn dit
	  soort operaties sneller dan op de traditionele manier.  De
	  extra complexiteit van de implementatie is nogal beperkt, dus
	  het risico van introductie van extra bugs valt mee.  Een
	  nadeel is dat alle metagegevens tweemaal geschreven worden
	  (eerst naar het loggebied en later nog eens naar de
	  definitieve locatie).  Dus bij normaal gebruik kan er sprake
	  zijn van wat men wel noemt een <quote>performance
	    pessimization</quote>.  Anderzijds kunnen in geval van een
	  crash alle nog uitstaande metagegevensoperaties snel worden
	  teruggedraaid of vanuit het loggebied alsnog worden afgemaakt
	  wanneer de machine weer opstart.  Het bestandssysteem start
	  dan snel op.</para>

	<para>Kirk McKusick, de vader van het Berkeley FFS, loste dit
	  probleem op met softupdates, wat betekent dat alle uitstaande
	  acties voor het bijwerken van metagegevens in het geheugen
	  bewaard worden en dan geordend naar de schijf geschreven
	  worden.  Dit heeft het gevolg dat in geval van intensieve
	  operaties met betrekking tot metagegevens, latere bijwerkingen
	  aan een item eerdere bewerkingen opvangen
	  (<quote>catch</quote>) als deze nog in het geheugen zitten en
	  nog niet weggeschreven waren.  Dus alle operaties, op
	  bijvoorbeeld een map, worden in het algemeen eerst in het
	  geheugen uitgevoerd voordat er wordt bijgewerkt naar schijf.
	  De gegevensblokken worden geordend conform hun positie, zodat
	  ze nooit weggeschreven worden voordat hun metagegevens
	  geschreven zijn.  Als het systeem een crash ondervindt,
	  veroorzaakt dat impliciet het terugdraaien van uitstaande
	  operaties (<quote>log rewind</quote>): alle operaties die nog
	  niet weggeschreven waren lijken nooit gebeurd te zijn.  Zo
	  wordt een consistent bestandssysteem in stand gehouden dat
	  eruit ziet alsof het 30 tot 60 seconden eerder was.  Het
	  gebruikte algoritme garandeert dat alle bronnen die in gebruik
	  zijn als zodanig gemarkeerd worden in hun daarvoor geschikte
	  bitmaps: blokken en inodes.  Na een crash is de enige
	  allocatiefout die kan optreden dat bronnen gemarkeerd kunnen
	  zijn als in gebruik (<quote>used</quote>), terwijl ze
	  feitelijk alweer beschikbaar (<quote>free</quote>) zijn.
	  &man.fsck.8; herkent deze situatie en stelt dergelijke vrij
	  te maken bronnen opnieuw beschikbaar.  Het is volkomen veilig
	  om na een crash te negeren dat het bestandssysteem niet schoon
	  is en het tot aankoppelen te dwingen met
	  <command>mount&nbsp;-f</command>.  Om niet langer gebruikte
	  bronnen vrij te maken moet later &man.fsck.8; uitgevoerd
	  worden.  Dit is dan ook het idee achter <emphasis>background
	    fsck</emphasis>: op het moment dat het systeem aan het
	  opstarten is, wordt er alleen een
	  <emphasis>snapshot</emphasis> van het systeem bewaard.
	  <command>fsck</command> kan later uitgevoerd worden.  Alle
	  bestandssystemen kunnen <quote>dirty</quote> aangekoppeld
	  worden en het systeem kan gewoon verder opstarten naar
	  meergebruikermodus.  Vervolgens zijn er
	  <command>fsck</command>s gepland die in de achtergrond draaien
	  voor elk bestandssysteem dat niet schoon is en waarmee
	  bezette bronnen vrijgegeven worden.  Bestandssystemen die geen
	  gebruik maken van softupdates moeten echter nog steeds gebruik
	  maken van de normale <command>fsck</command> in de
	  voorgrond.</para>

	<para>Het voordeel van softupdates is dat operaties op
	  metagegevens bijna net zo snel zijn als asynchrone updates
	  (dat wil zeggen sneller dan met <emphasis>logging</emphasis>,
	  waarbij de metagegevens keer op keer geschreven worden).
	  Nadelen zijn de complexiteit van de code (wat een groter
	  risico op bugs impliceert in een gebied dat bijzonder
	  gevoelig is voor verlies van gebruikersgegevens) en een
	  groter geheugenverbruik.  Tevens moet de gebruiker wennen aan
	  enkele eigenaardigheden.  Na een crash lijkt de toestand van
	  het bestandssysteem wat <quote>ouder</quote>.  In situaties
	  waar de standaard synchrone benadering een aantal lege
	  bestanden zou hebben achtergelaten na
	  <command>fsck</command>, is het met softupdates juist zo dat
	  dergelijke bestanden er helemaal niet zijn, omdat de
	  metagegevens of de bestandsinhoud nooit naar de schijf zijn
	  geschreven.  Schijfruimte wordt pas vrijgegeven als de
	  bijwerkingen aan metagegevens en inhoudelijke
	  bestandsgegevens weggeschreven zijn, wat mogelijk pas enige
	  tijd na het uitvoeren van <command>rm</command> plaatsvindt.
	  Dit kan problemen veroorzaken als er grote hoeveelheden
	  gegevens naar een bestandssysteem geschreven worden dat
	  onvoldoende vrije ruimte heeft om alle bestanden twee keer te
	  kunnen bevatten (bijvoorbeeld in <filename>/tmp</filename>).</para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="configtuning-kernel-limits">
    <title>Fijnafstemming van kernellimieten</title>

    <indexterm>
      <primary>fijnafstemming</primary>

      <secondary>kernellimieten</secondary>
    </indexterm>

    <sect2 id="file-process-limits">
      <title>Bestandsproceslimieten</title>

      <sect3 id="kern-maxfiles">
	<title><varname>kern.maxfiles</varname></title>

	<indexterm><primary><varname>kern.maxfiles</varname></primary></indexterm>

	<para><varname>kern.maxfiles</varname> kan worden verhoogd of
	  verlaagd, afhankelijk van de systeembehoeften.  Deze variabele
	  geeft het maximale aantal bestandsdescriptors op een systeem.
	  Als de bestandsdescriptortabel vol is, toont de systeembuffer
	  meerdere malen <errorname>file: table is full</errorname>, hetgeen
	  achteraf te zien is met <command>dmesg</command>.</para>

	<para>Elk geopend bestand, socket of fifo heeft een
	  bestandsdescriptor.  Een grote produktieserver kan makkelijk
	  enige duizenden bestandsdescriptors nodig hebben, afhankelijk
	  van het soort en aantal diensten die tegelijk draaien.</para>

	<para>In oudere versies van &os; werd de standaard waarde van
	  <varname>kern.maxfiles</varname> afgeleid van de optie
	  <option>maxusers</option> in het kernelconfiguratiebestand.
	  <varname>kern.maxfiles</varname> groeit evenredig met de
	  waarde van <literal>maxusers</literal>.  Als een aangepaste
	  kernel wordt gebouwd, is het een goed idee om deze kerneloptie
	  in te stellen afhankelijk van het gebruikt van een systeem
	  (maar niet te laag).  Hoewel een produktieserver misschien
	  niet 256 gelijktijdige gebruikers heeft, kunnen de benodigde
	  systeembronnen het beste vergeleken worden met een
	  grootschalige webserver.</para>

	<para>De optie <literal>maxusers</literal> stelt de grootte van
	  een aantal belangrijke systeemtabellen in.  Dit aantal moet
	  ruwweg gelijk zijn aan het aantal gebruikers dat verwacht
	  wordt gelijktijdig van de machine gebruik te maken.</para>

	<para>Vanaf &os;&nbsp;4.5 wordt <varname>kern.maxusers</varname>
	  automatisch ingesteld tijdens het opstarten gebaseerd op de
	  hoeveelheid beschikbare geheugen in het systeem en kan worden
	  vastgesteld tijdens het draaien door te kijken naar de
	  alleen-lezen sysctl <varname>kern.maxusers</varname>.  Sommige
	  configuraties hebben grotere of kleinere waarden nodig van
	  <varname>kern.maxusers</varname>, deze kunnen worden gezet
	  als een opstartvariabele.  Waardes van 64, 128 en 256 zijn
	  daarin niet ongewoon.  We raden aan om niet boven de 256 te
	  gaan tenzij er heel veel bestandsdescriptors benodigd zijn;
	  veel van de aanpasbaare waarden die standaard worden bepaald
	  door <varname>kern.maxusers</varname> kunnen individueel
	  worden overschreven tijdens het opstarten en/of tijdens het
	  draaien van het systeem in
	  <filename>/boot/loader.conf</filename> (zie de handleiding
	  &man.loader.conf.5; of het bestand
	  <filename>/boot/defaults/loader.conf</filename> voor een paar
	  aanwijzingen) of zoals elders beschreven in dit document.
	  <!--(rene) kill next sentence-->
	  Systemen die ouder zijn dan &os;&nbsp;4.4 moeten deze waarden
	  instellen via de kerneloptie &man.config.8;
	  <option>maxusers</option>.</para>

	<para>Voor oudere versies stelt het systeem deze waarde zelf in
	  als deze uitdrukkelijk op <literal>0</literal> is gezet.

	  <footnote>
	    <para>Het auto-tuning-algoritme stelt
	      <literal>maxusers</literal> in afhankelijk van de
	      hoeveelheid geheugen in het systeem, met een minimum van
	      32 en een maximum van 384.</para></footnote>

	  Als het gewenst is om deze waarde zelf aan te geven, wordt
	  aangeraden om <literal>maxusers</literal> minstens op 4 te
	  zetten, met name als het X Window systeem in gebruik is of als
	  er software gecompileerd wordt.  De reden hiervoor is dat de
	  belangrijkste tabel die door <literal>maxusers</literal>
	  ingesteld wordt, het maximum aantal processen is, dat
	  ingesteld wordt op <literal>20 + 16 * maxusers</literal>, dus
	  als <literal>maxusers</literal> op 1 ingesteld wordt, zijn er
	  maar 36 gelijktijdige processen mogelijk, inclusief de
	  ongeveer achttien processen die door het systeem tijdens het
	  opstarten start en de ongeveer vijftien processen die
	  waarschijnlijk aangemaakt worden door het opstarten van het X
	  Window systeem.  Zelfs een eenvoudige taak als het afbeelden
	  van een hulppagina start negen processen op om de pagina te
	  filteren, te decomprimeren en af te beelden.  Als
	  <literal>maxusers</literal> op 64 ingesteld wordt, zijn er
	  1044 gelijktijdige processen mogelijk, wat genoeg moet zijn
	  voor bijna alle soorten gebruik.  Als echter de gevreesde
	  fout <errortype>proc table full</errortype> verschijnt als er
	  geprobeerd wordt om een programma op te starten of als er een
	  server gedraaid wordt met een groot aantal gelijktijdige
	  gebruikers, zoals <hostid
	    role="fqdn">ftp.FreeBSD.org</hostid>, kan het getal altijd
	  verhoogd worden en kan de kernel opnieuw gebouwd
	  worden.</para>

	<note>
	  <para><literal>maxusers</literal> stelt
	    <emphasis>geen</emphasis> grens aan het aantal gebruikers
	    dat zich op de machine kan aanmelden.  Het stelt gewoon
	    verschillende tabelgroottes in op redelijke waardes,
	    uitgaande van het maximum aantal gebruikers dat
	    waarschijnlijk de machine gebruikt en van het aantal
	    processen dat elk van deze gebruikers zal draaien.  Een
	    sleutelwoord dat <emphasis>wel</emphasis> het aantal
	    gelijktijdige aanmeldingen op afstand en X-terminalvensters
	    begrensd is <link
	      linkend="kernelconfig-ptys"><literal>pseudo-device pty
		16</literal></link>.  In &os;&nbsp;5.X kan dit getal
	    genegeerd worden omdat daar het stuurprogramma &man.pty.4;
	    <quote>auto-cloning</quote> is.  Er kan eenvoudig gebruik
	    worden gemaakt van de regel <literal>device pty</literal>
	    in het instellingenbestand.</para>
	</note>
      </sect3>

      <sect3>
	<title><varname>kern.ipc.somaxconn</varname></title>

	<indexterm><primary><varname>kern.ipc.somaxconn</varname></primary></indexterm>

	<para>De sysctl-variabele <varname>kern.ipc.somaxconn</varname>
	  beparkt de grootte van de luisterwachtrij voor het accepteren
	  van nieuwe TCP-verbindingen.  De standaardwaarde van
	  <literal>128</literal> is meestal te laag voor robuuste
	  behandeling van nieuwe verbindingen in een zwaarbeladen
	  webserveromgeving.  Voor zulke omgevingen wordt aangeraden
	  deze waarde te verhogen tot <literal>1024</literal> of hoger.
	  De dienstdaemon beperkt misschien zelf de luisterwachtrij
	  (bijvoorbeeld &man.sendmail.8; of
	  <application>Apache</application>), maar heeft vaak een
	  mogelijkheid in een configuratiebestand de wachtrijgrootte
	  aan te passen.  Grote luisterwachtrijen zijn ook beter in het
	  ontwijken van Ontzegging van Dienst (<abbrev>DoS</abbrev>)
	  aanvallen.</para>
      </sect3>
    </sect2>

    <sect2 id="nmbclusters">
      <title>Netwerkbeperkingen</title>

      <para>De kerneloptie <literal>NMBCLUSTERS</literal> bepaalt het
	aantal netwerk-Mbufs dat beschikbaar is voor een systeem.  Een
	veel bezochte server met een laag aantal Mbufs beperkt de
	mogelijkheden van &os;.  Elk cluster staat voor ongeveer
	2&nbsp;K geheugen, dus een waarde van 1024 stelt 2 megabyte
	aan kernelgeheugen voor, dat is gereserveerd voor
	netwerkbuffers.  Een simpele berekening geeft aan hoeveel er
	nodig is.  Stel dat een webserver met een maximum van 1000
	simultane verbindingen voor elke verbinding 16&nbsp;K aan
	ontvangstnetwerkbuffers en 16&nbsp;K aan zendbuffers kost, dan
	is ongeveer 32&nbsp;MB aan netbuffers nodig voor de webserver.
	Een goede vuistregel is te vermeniguldigen met twee, dus
	2x32&nbsp;MB&nbsp;/ 2&nbsp;KB&nbsp;= 64&nbsp;MB&nbsp;/
	2&nbsp;kB&nbsp;= 32768.  Voor machines met veel geheugen wordt
	4096 tot 32768 aangeraden.  Er moet in geen geval een arbitrair
	hoge waarde voor deze sysctl opgegeven worden, want dat kan
	leiden tot een crash tijdens het opstarten.  Met de optie
	<option>-m</option> van &man.netstat.1; kan het clustergebruik
	van het netwerk bekeken worden.</para>

      <para>De loaderparameter <varname>kern.ipc.nmbclusters</varname>
	moet gebruikt worden om dit tijdens het opstarten toe te passen.
	Alleen voor oudere versies van &os; is het nodig om de
	kerneloptie <literal>NMBCLUSTERS</literal> te gebruiken.</para>

      <para>Voor drukke servers die extensief gebruik maken van de
	systeemaanroep &man.sendfile.2;, kan het nodig zijn het aantal
	&man.sendfile.2;-buffers te verhogen via de kerneloptie
	<literal>NSFBUFS</literal> of door de waarde in te stellen in
	<filename>/boot/loader.conf</filename> (in &man.loader.8; staan
	details).  Als er in de procestabel processen staan met een
	status <literal>sfbufa</literal> is dat een algemene indicator
	dat deze parameter aangepast moet worden.  De sysctl-variabele
	<varname>kern.ipc.nsfbufs</varname> is alleen-lezen en laat zien
	op welke waarde deze kernelvariabele is ingesteld.  Deze
	parameter schaalt engiszins met de variabele
	<varname>kern.maxusers</varname>, maar het kan nodig zijn om
	deze bij te stellen.</para>

      <important>
	<para>Zelfs als een socket als non-blocking gemarkeerd is, dan
	  nog kan het aanroepen van &man.sendfile.2; op de non-blocking
	  socket ertoe leiden dat er toch blokkade optreedt totdat er
	  voldoende <literal>struct sf_buf</literal>'s vrijgemaakt
	  zijn.</para>
      </important>

      <sect3>
	<title><varname>net.inet.ip.portrange.*</varname></title>

	<indexterm><primary>net.inet.ip.portrange.*</primary></indexterm>

	<para>De sysctl-variabelen
	  <varname>net.inet.ip.portrange.*</varname> bepalen welke reeks
	  poortnummers automatisch gebonden wordt aan TCP- en
	  UDP-sockets.  Er zijn drie gebieden: een laag gebied, een
	  (standaard) middengebied en een hoog gebied.  De meeste
	  netwerkprogramma's gebruiken het standaardbereik, wat
	  begrensd wordt door
	  <varname>net.inet.ip.portrange.first</varname> en
	  <varname>net.inet.ip.portrange.last</varname> met
	  standaardwaarden van respectievelijk 1024 en 5000.  Gebonden
	  poortreeksen worden gebruikt voor uitgaande verbindingen en
	  het is onder bepaalde omstandigheden mogelijk dat poorten op
	  raken.  Dit gebeurt meestal in het geval van een zwaar belaste
	  webproxy.  Poortbereik is niet van belang als vooral diensten
	  draaien die zich bezighouden met inkomende verbindingen, zoals
	  een normale webserver, of als het aantal uitgaande
	  verbindingen beperkt is, zoals bij een mailrelay.  Voor
	  situaties waarin een tekort aan poorten dreigt, wordt
	  aangeraden om <varname>net.inet.ip.portrange.last</varname>
	  bescheiden op te hogen.  Een waarde van
	  <literal>10000</literal>, <literal>20000</literal> of
	  <literal>30000</literal> is redelijk.  Er moet ook rekening
	  met effecten op firewalls gehouden worden als de poortreeks
	  gewijzigd wordt.  Sommige firewalls kunnen grote poortreeksen
	  blokkeren, meestal de lagere poorten, en verwachten dat andere
	  systemen hogere poorten gebruiken voor uitgaande verbindingen.
	  Om deze reden wordt het niet aanbevolen om
	  <varname>net.inet.ip.portrange.first</varname> te
	  verlagen.</para>
      </sect3>

      <sect3>
	<title>TCP Bandbreedtevertragingsproduct (TCP Bandwidth Delay
	  Product)</title>

	<indexterm>
	  <primary>TCP bandbreedtevertragingsproduct</primary>

	  <secondary><varname>net.inet.tcp.inflight.enable</varname></secondary>
	</indexterm>

	<para>De TCP-bandbreedtevertragingsproductlimitatie lijkt op
	  TCP/Vegas in NetBSD.  Het kan aangezet worden door de
	  sysctl-variabele
	  <varname>net.inet.tcp.inflight.enable</varname> de waarde
	  <literal>1</literal> te geven.  Het systeem tracht dan het
	  bandbreedtevertragingssprodukt te berekenen voor elke
	  verbinding en beperkt dan de hoeveelheid gegevens in de
	  wachtrij naar het netwerk tot de hoeveelheid die vereist is om
	  maximale doorvoer te kunnen handhaven.</para>

	<para>Dit is nuttig bij gebruik van modems, Gigabit Ethernet of
	  zelfs bij WAN-verbindingen met hoge snelheid (of elke andere
	  verbinding met een groot bandbreedtevertragingsprodukt), in
	  het bijzonder als ook windowschaling of een groot
	  verzendwindow gebruikt wordt.  Als deze optie aangezet wordt,
	  dient ook <varname>net.inet.tcp.inflight.debug</varname> de
	  waarde <literal>0</literal> te krijgen (geen debugging) en
	  voor produktiegebruik kan het instellen van
	  <varname>net.inet.tcp.inflight.min</varname> naar minstens
	  <literal>6144</literal> voordeel opleveren.  Het instellen van
	  hoge minima kan effectief het beperken van bandbreedte
	  ondermijnen, afhankelijk van de verbinding.  De mogelijkheid
	  tot limitering zorgt ervoor dat de hoeveelheid gegevens die
	  opgebouwd wordt, in tussentijdse route- en switchwachtrijen
	  verlaagd kan worden en tevens kan de hoeveelheid gegevens die
	  opgebouwd wordt in de interfacewachtrij van de lokale host
	  verlaagd worden.  Met minder pakketten in wachtrijen kunnen
	  interactieve verbindingen opereren met lagere
	  <emphasis>Round Trip</emphasis> tijden, met name over langzame
	  modems.  Deze optie gaat alleen over datatransmissie (upload /
	  serverkant) en heeft geen effect gegevensontvangst (download /
	  cliëntkant).</para>

	<para>Aanpassen van
	  <varname>net.inet.tcp.inflight.stab</varname> wordt
	  <emphasis>niet</emphasis> aangeraden.  Deze parameter krijgt
	  standaard een waarde van 20, wat 2 maximale pakketten opgeteld
	  bij de bandbreedtevensterberekening representeert.  Het extra
	  venster is nodig om het algoritme stabiel te houden en om de
	  reactietijd bij veranderende omstandigheden te verbeteren,
	  maar het kan ook leiden tot langere pingtijden over langzame
	  verbindingen (zonder het inflight-algoritme kan dit echter nog
	  erger zijn).  In dergelijke gevallen kan deze parameter
	  misschien verlaagd worden naar 15, 10 of 5 en misschien moet
	  voor het gewenste effect ook
	  <varname>net.inet.tcp.inflight.min</varname> verlaagd worden
	  (bijvoorbeeld naar 3500).  Het verlagen van deze parameters
	  moet pas in laatste instantie overwogen worden.</para>
      </sect3>
    </sect2>

    <sect2>
      <title>Virtueel Geheugen</title>

      <sect3>
	<title><varname>kern.maxvnodes</varname></title>

	<para>Een vnode is de interne representatie van een bestand of
	  een map.  Het verlagen van het aantal beschikbare vnodes voor
	  het besturingssysteem leidt dus tot een daling van schijf-I/O.
	  Normaliter wordt dit door het besturingssysteem afgehandeld en
	  hoeft de instelling niet gewijzigd te worden.  Im sommige
	  gevallen kan schijf-I/O de beperkende factor zijn en kan het
	  systeem alle beschikbare vnodes in gebruik hebben.  Dan dient
	  deze instelling gewijzigd te worden.  De hoeveelheid inactief
	  en beschikbaar RAM dient meegenomen te worden in de
	  beslissing.</para>

	<para>Het huidige aantal gebruikte vnodes kan als volgt bekeken
	  worden:</para>

	<screen>&prompt.root; <userinput>sysctl vfs.numvnodes</userinput>
vfs.numvnodes: 91349</screen>

	<para>Om het maximale aantal vnodes weer te geven:</para>

	<screen>&prompt.root; <userinput>sysctl kern.maxvnodes</userinput>
kern.maxvnodes: 100000</screen>

	<para>Als het huidige aantal gebruikte vnodes dicht bij het
	  maximale aantal ligt, is het verstandig om
	  <varname>kern.maxvnodes</varname> op te hogen met 1.000.
	  Ook <varname>vfs.numvnodes</varname> dient in de gaten
	  gehouden te worden.  Als de waarde weer tot aan het maximum
	  stijgt, dan moet <varname>kern.maxvnodes</varname> verder
	  opgehoogd worden.  Er dient een verschuiving op te treden in
	  het door &man.top.1; gerapporteerde geheugengebruik.  Er hoort
	  meer geheugen actief te zijn.</para>
      </sect3>
    </sect2>
  </sect1>

  <sect1 id="adding-swap-space">
    <title>Wisselbestandruimte toevoegen</title>

    <para>Hoe goed er ook gepland wordt, soms draait een systeem gewoon
      niet zoals verwacht.  Een oorzaak hiervoor kan een tekort aan
      wisselbestandruimte zijn.  Als blijkt dat er meer
      wisselbestandruimte nodig is, kan dat eenvoudig.  Er zijn drie
      manieren om de totale ruimte beschikbaar als wisselbestand te
      vergroten: een nieuwe harde schijf toevoegen, swappen over NFS of
      een wisselbestand maken op een bestaande (UFS of andere)
      partitie.</para>

    <para>Kijk voor informatie over het beveiligen van het
      wisselbestand, welke opties hiervoor bestaan, en waarom dit gedaan
      zou moeten worden in <xref linkend="swap-encrypting"/> van het
      handboek.</para>

    <sect2 id="new-drive-swap">
      <title>Swap op een nieuwe of bestaande harde schijf</title>

      <para>Een nieuwe harde schijf voor swap toevoegen geeft betere prestaties
	dan een partitie aan een bestaande schijf toevoegen.  Het aanmaken van
	partities en harde schijven wordt uitgelegd in <xref
	  linkend="disks-adding"/>. <xref linkend="configtuning-initial"/>
	bespreekt de overwegingen van partitie-indelingen en de grootte van
	swap-partities.</para>

      <para>Gebruik &man.swapon.8; om een swap-partitie aan het systeem toe te
	voegen, bijvoorbeeld:</para>

      <screen>&prompt.root; <userinput>swapon <replaceable>/dev/ada1s1b</replaceable></userinput></screen>

      <warning>
	<para>Het is mogelijk om elke partitie te gebruiken die momenteel niet
	  aangekoppeld is, zelfs als deze al gegevens bevat.  Het gebruik van
	  &man.swapon.8; op een partitie die gegevens bevat zal deze gegevens
	  overschrijven en vernietigen.  Zorg ervoor dat de partitie die als
	  swap toegevoegd wordt echt de bedoelde partitie is voordat
	  &man.swapon.8; gebruikt wordt.</para>
      </warning>

      <para>Voeg een regel toe aan <filename>/etc/fstab</filename> voor de
	partitie om deze swap-partitie automatisch toe te voegen tijdens het
	opstarten:</para>

      <programlisting><replaceable>/dev/ada1s1b</replaceable>	none	swap	sw	0	0</programlisting>

      <para>Raadpleeg &man.fstab.5; voor een uitleg over de regels in
	<filename>/etc/fstab</filename>.</para>
    </sect2>

    <sect2 id="nfs-swap">
      <title>Swappen over NFS</title>

      <para>In het algemeen wordt swappen over NFS niet aangeraden
	behalve als het onmogelijk is om naar een lokale schijf te
	swappen.  NFS-swappen wordt gelimiteerd door de hoeveelheid
	beschikbare bandbreedte en belast het de NFS-server.</para>
    </sect2>

    <sect2 id="create-swapfile">
      <title>Wisselbestanden</title>

      <para>Het is mogelijk om een bestand aan te maken van een bepaalde
	grootte en dit als swap te gebruiken.  In dit voorbeeld wordt
	een bestand van 64&nbsp;MB gebruikt,
	<filename>/usr/swap0</filename>.  Uiteraard kan een willekeurige
	naam gebruikt worden.</para>

      <example>
	<title>Een wisselbestand aanmaken op &os;</title>

	<orderedlist>
	  <listitem>
	    <para>De kernel <filename>GENERIC</filename> bevat reeds het
	      stuurprogramma voor geheugenschijven (&man.md.4;) dat nodig is
	      voor deze bewerking.  Zorg ervoor dat tijdens het bouwen van een
	      eigen kernel de volgende regel in uw configuratiebestand
	      zit:</para>

	    <programlisting>device md</programlisting>

	    <para>Kijk voor meer informatie over het bouwen van een eigen kernel
	      in <xref linkend="kernelconfig"/>.</para>
	  </listitem>

	  <listitem>
	    <para>Het wisselbestand <filename>/usr/swap0</filename>
	      aanmaken:</para>

	    <screen>&prompt.root; <userinput>dd if=/dev/zero of=/usr/swap0 bs=1024k count=64</userinput></screen>
	  </listitem>

	  <listitem>
	    <para>De correcte rechten op <filename>/usr/swap0</filename>
	      instellen:</para>

	    <screen>&prompt.root; <userinput>chmod 0600 /usr/swap0</userinput></screen>
	  </listitem>

	  <listitem>
	    <para>Het wisselbestand opnemen in
	      <filename>/etc/rc.conf</filename>:</para>

	    <programlisting>swapfile="/usr/swap0"   # Instellen op naam van wisselbestand als hulpwisselbestand gewenst is</programlisting>
	  </listitem>

	  <listitem>
	    <para>De machine moet herstart worden of om het
	      wisselbestand direct in te schakelen:</para>

	    <screen>&prompt.root; <userinput>mdconfig -a -t vnode -f /usr/swap0 -u 0 &amp;&amp; swapon /dev/md0</userinput></screen>
	  </listitem>
	</orderedlist>
      </example>
    </sect2>
  </sect1>

  <sect1 id="acpi-overview">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Hiten</firstname>
	  <surname>Pandya</surname>
	  <contrib>Geschreven door </contrib>
	</author>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	</author>
      </authorgroup>
    </sect1info>

    <title>Energie- en bronnenbeheer</title>

    <para>Het is belangrijk om hardwarebronnen op een efficiënte
      wijze te benutten.  Voordat <acronym>ACPI</acronym>
      geïntroduceerd werd was het lastig en onflexibel om het
      energieverbruik en de thermische eigenschappen van een systeem te
      beheersen.  De hardware werd beheerst de <acronym>BIOS</acronym>
      en dus had de gebruiker minder controle en zichtbaarheid in de
      energiebeheerinstellingen.  Enige gelimiteerde configuratie was
      mogelijk via <emphasis>Advanced Power Management (APM)</emphasis>.
      Energie- en bronnenbeheer is een belangrijk onderdeel van moderne
      machines.  Het besturingssysteem moet bijvoorbeeld systeemlimieten
      in de gaten houdt (en mogelijk een SMS sturen of iets dergelijks)
      als de systeemtemperatuur onverwacht toeneemt.</para>

    <para>In dit deel van het &os; handboek wordt uitgebreide informatie
      verschaft over <acronym>ACPI</acronym>.  Aan het einde worden
      referenties geleverd naar meer leesmateriaal.</para>

    <sect2 id="acpi-intro">
      <title>Wat is ACPI?</title>

      <indexterm><primary>ACPI</primary></indexterm>

      <indexterm><primary>APM</primary></indexterm>

      <para>Advanced Configuration and Power Interface
	(<acronym>ACPI</acronym>) is een standaard die door een
	alliantie van producenten geschreven is, met als doel te
	voorzien in een standaardinterface voor hardwarebronnen- en
	energiebeheer.  Een belangrijk element is dat het meer
	flexibiliteit en beheersmogelijkheden biedt aan het
	besturingssysteem (<acronym>OS</acronym>).  Moderne systemen
	hebben de limieten van de huidige PNP-interfaces verder opgerekt
	dan wenselijk en misschien wel mogelijk was.
	<acronym>ACPI</acronym> is de directe opvolger van
	<acronym>APM</acronym> (Advanced Power Management).  Centraal is
	het verleggen van hardwarebeheer en -monitoring naar de OS-laag
	in plaats van de zeer beperkte BIOS-laag.</para>
    </sect2>

    <sect2 id="acpi-old-spec">
      <title>Tekortkomingen van APM</title>

      <para>Met de <emphasis>Advanced Power Management (APM)</emphasis>
	faciliteit kan het energieverbruik van een systeem geregeld
	worden op basis van de systeemactiviteit.  Het APM-BIOS wordt
	geleverd door de systeemproducent of -verkoper en het is
	specifiek voor dat betreffende hardwareplatform.  Een
	APM-stuurprogramma in het besturingssysteem regelt vervolgens de
	toegang tot de <emphasis>APM Software Interface</emphasis>, die
	het besturen van vermogensniveau mogelijk maakt.  APM dient nog
	steeds gebruikt te worden met systemen die gefabriceerd zijn
	voor het jaar 2000.</para>

      <para>Er zijn vier hoofdproblemen met APM te onderscheiden: ten
	eerste wordt het energiebeheer verricht door een BIOS
	(afhankelijk van producent) en het besturingssysteem heeft daar
	geen kennis van.  De gebruiker die idle-time waarden instelt
	voor een harde schijf in het APM-BIOS is hier een voorbeeld van.
	Dan zal het BIOS de harde schijf langzamer kunnen laten draaien
	zonder dat het besturingssysteem de noodzaak ziet of het
	goedkeurt.  Ten tweede: de APM-logica is ingebed in de BIOS,
	waardoor het buiten het besturingssysteem om opereert.  Dit
	houdt in dat gebruikers problemen met hun APM-BIOS alleen kunnen
	verhelpen door een nieuw BIOS in het ROM te flashen, wat een
	gevaarlijke en mogelijk onherstelbare operatie is.  Ten derde is
	APM een producent-specifieke technologie, in de zin dat er
	altijd een hoge mate van duplicatie zal zijn van al dan niet
	geslaagde pogingen om het wiel opnieuw uit te vinden en
	uiteraard ook van bugs.  Er is geen enkele garantie dat het
	wegnemen van een bug door een producent ook een zelfde bug
	wegneemt bij een concurrent.  Tenslotte is het van belang te
	weten dat de APM-BIOS in het algemeen gewoon te weing geheugen
	kon gebruiken om een ingewikkeld energiebeheer te kunnen
	implementeren.  Laat staan dat deze goed aanpasbaar was aan
	veranderlijke doelstellingen voor de betreffende machine.</para>

      <para><emphasis>Plug-n-play BIOS (PNPBIOS)</emphasis> was in veel
	situaties onbetrouwbaar.  PNPBIOS is 16-bitstechnologie, dus het
	besturingssysteem moet 16-bit emulatie gebruiken om met
	PNPBIOS-methoden te kunnen samenwerken.</para>

      <para>Het &os;-stuurprogramma <acronym>APM</acronym> is
	gedocumenteerd in &man.apm.4;.</para>
    </sect2>

    <sect2 id="acpi-config">
      <title><acronym>ACPI</acronym> instellen</title>

      <para>Het stuurprogramma <filename>acpi.ko</filename> wordt
	standaard geladen bij het opstarten door de &man.loader.8; en
	hoeft <emphasis>niet</emphasis> gecompileerd te worden.  De
	redenatie is dat er met modules gemakkelijker gewerkt kan
	worden, bijvoorbeeld een andere <filename>acpi.ko</filename>
	gebruiken zonder dat er een nieuwe kernel gebouwd moet worden.
	Dit heeft het voordeel dat testen eenvoudiger is.  Een andere
	reden is dat het opstarten van <acronym>ACPI</acronym> nadat
	een systeem eenmaal volledig opgestart is meestal niet goed
	werkt.  Mocht er hinder ondervonden worden, dan kan
	<acronym>ACPI</acronym> beter uitgeschakeld worden.  Dit
	stuurprogramma kan niet gestopt worden als het eenmaal geladen
	is, omdat de systeembus het gebruikt voor allerlei interacties
	met hardware.  <acronym>ACPI</acronym> kan uitgezet worden door
	het instellen van <literal>hint.acpi.0.disabled="1"</literal> in
	<filename>/boot/loader.conf</filename> of in de &man.loader.8;
	prompt.</para>

      <note>
	<para><acronym>ACPI</acronym> en <acronym>APM</acronym>
	  kunnen niet samenleven en moeten afzonderlijk en exclusief
	  gebruikt worden.  De laatste die gestart wordt bepaalt of het
	  stuurprogramma de ander wel of niet ziet.</para>
      </note>

      <para>In haar eenvoudigste vorm kan <acronym>ACPI</acronym>
	gebruikt worden om het systeem in slaapmodus te zetten met
	&man.acpiconf.8; met de vlag <option>-s</option> en een optie
	<literal>1-5</literal>.  De meeste gebruikers hebben alleen
	<literal>1</literal> of <literal>3</literal> nodig.  De optie
	<literal>5</literal> verricht een <quote>soft-off</quote>, wat
	hetzelfde is als:</para>

      <screen>&prompt.root; <userinput>halt -p</userinput></screen>

      <para>Andere opties zijn mogelijk via &man.sysctl.8;.  Zie de
	handleidingen van &man.acpi.4; en &man.acpiconf.8; voor meer
	informatie.</para>
    </sect2>
  </sect1>

  <sect1 id="ACPI-debug">
    <sect1info>
      <authorgroup>
	<author>
	  <firstname>Nate</firstname>
	  <surname>Lawson</surname>
	  <contrib>Geschreven door </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Peter</firstname>
	  <surname>Schultz</surname>
	  <contrib>Met medewerking van </contrib>
	</author>
      </authorgroup>
      <authorgroup>
	<author>
	  <firstname>Tom</firstname>
	  <surname>Rhodes</surname>
	</author>
      </authorgroup>
    </sect1info>

    <title>&os; <acronym>ACPI</acronym> gebruiken en debuggen</title>

    <para><acronym>ACPI</acronym> is een totaal nieuwe manier om
      apparaten te ontdekken, om energieverbruik te beheren en om een
      gestandaardiseerde toegang te bieden tot allerlei apparaten die
      eerder via het <acronym>BIOS</acronym> beheerd werden.  Er wordt
      voortdurend vooruitgang geboekt om <acronym>ACPI</acronym> op alle
      systemen te laten werken, maar bugs in de
      <firstterm><acronym>ACPI</acronym>Machine Language</firstterm>
      (<acronym>AML</acronym>) bytecode van sommige moederborden,
      onvolledigheden in de subsystemen van de kernel van &os; en bugs
      in de &intel; <acronym>ACPI-CA</acronym> interpreter blijven
      opduiken.</para>

    <para>Deze tekst is bedoeld om u te helpen met het bijstaan van de
      &os; <acronym>ACPI</acronym> beheerders met het vinden van de
      hoofdoorzaken van problemen die u opmerkt en met het debuggen en
      het vinden van een oplossing.</para>

    <sect2 id="ACPI-submitdebug">
      <title>Debuginformatie aanleveren</title>

      <note>
	<para>Voordat een probleem wordt gemeld, moet het zeker zijn dat
	  de laatste <acronym>BIOS</acronym> versie draait en indien
	  beschikbaar de geïntregeerde controller firmware
	  versie.</para>
      </note>

      <para>Diegenen die meteen een probleem willen indienen, sturen de
	volgende informatie naar <ulink
	  url="mailto:freebsd-acpi@FreeBSD.org">
	  freebsd-acpi@FreeBSD.org</ulink>:</para>

      <itemizedlist>
	<listitem>
	  <para>Omschrijving van het foutieve gedrag, inclusief
	    systeemtype en -model en alles wat de fout kan veroorzaken.
	    Als het een nieuw fenomeen is, dan dient ook zo accuraat
	    mogelijk aangegeven te worden wanneer de fout het eerst
	    optrad.</para>
	</listitem>

	<listitem>
	  <para>De uitvoer van &man.dmesg.8; van <command>boot
	      -v</command>, inclusief foutmeldingen die gegenereerd
	    worden als de fout optreedt.</para>
	</listitem>

	<listitem>
	  <para>De uitvoer van &man.dmesg.8; van <command>boot
	      -v</command> met <acronym>ACPI</acronym> uitgeschakeld,
	    indien het uitzetten van <acronym>ACPI</acronym> het
	    probleem oplost.</para>
	</listitem>

	<listitem>
	  <para>Uitvoer van <command>sysctl hw.acpi</command>.  Dit is
	    tevens een goede manier om uit te vinden welke
	    <acronym>ACPI</acronym>-mogelijkheden een systeem
	    heeft.</para>
	</listitem>

	<listitem>
	  <para>Een <acronym>URL</acronym> waar de
	    <firstterm><acronym>ACPI</acronym>Source
	      Language</firstterm> (<acronym>ASL</acronym>) gevonden
	    kan worden.  De <acronym>ASL</acronym> dient
	    <emphasis>niet</emphasis> rechtstreeks naar de lijst
	    gezonden te worden, omdat deze nogal groot kan zijn.  Een
	    kopie van een ASL kan gemaakt worden met het volgende
	    commando:</para>

	  <screen>&prompt.root; <userinput>acpidump -dt &gt; <replaceable>naam</replaceable>-<replaceable>systeem</replaceable>.asl</userinput></screen>

	  <para>(Vervang uw aanmeldnaam door
	    <filename>$NAME</filename> en producent/model door
	    <filename>$SYSTEM</filename>.  Bijvoorbeeld:
	    <filename>njl-FooCo6000.asl</filename>)</para>
	</listitem>
      </itemizedlist>

      <para>De meeste &os;-programmeurs lezen de &a.current;, maar
	problemen gaan bij voorkeur ook naar &a.acpi.name; zodat ze
	zeker gezien worden.  Het kan enige tijd duren voordat er
	antwoord komt, omdat deze mensen elders ook nog volledige banen
	hebben.  Als de bug niet meteen duidelijk is, komt er
	waarschijnlijk en verzoek om een <acronym>PR</acronym> in te
	dienen via &man.send-pr.1;.  Als er een <acronym>PR</acronym>
	moet worden opgesteld, dan dient alle hierboven gevraagde
	informatie vermeld te worden.  Dit helpt om het probleem te
	kunnen volgen en oplossen.  Het sturen van een
	<acronym>PR</acronym> zonder eerst &a.acpi.name; te mailen is
	niet wenselijk, aangezien men <acronym>PR</acronym>s gebruikt
	als herinnering van bestaande problemen, niet als
	rapportagesysteem.  Mogelijk is een probleem al eens door iemand
	anders gemeld.</para>
    </sect2>

    <sect2 id="ACPI-background">
      <title>Achtergrond</title>

      <para><acronym>ACPI</acronym> is aanwezig op alle moderne
	computers die voldoen aan de ia32 (x86), ia64 (Itanium) of amd64
	(AMD) architecturen.  De volledige standaard heeft vele
	mogelijkheden zoals <acronym>CPU</acronym>-prestatiebeheer,
	energiebeheer, thermische zones, diverse batterijsystemen,
	ingebedde controllers en busnummering.  De meeste systemen
	implementeren minder dan de volledige standaard.  Een
	desktopsysteem implementeert bijvoorbeeld meestal alleen
	busnummering, terwijl laptops mogelijk ook koeling- en
	batterijbeheer ondersteunen.  Laptops hebben ook suspend en
	resume (slapen en wakker worden) met hun eigen aanverwante
	comlexiteit.</para>

      <para>Een <acronym>ACPI</acronym>-compliant systeem heeft
	verscheidene componenten.  Het <acronym>BIOS</acronym>- en
	chipsetverkopers bieden verscheidene vaste tabellen aan zoals
	<acronym>FADT</acronym> in het geheugen die zaken als de
	<acronym>APIC</acronym>-afbeelding (gebruikt voor
	<acronym>SMP</acronym>), configuratieregisters, en eenvoudige
	configuratiewaarden specificeren.  Ook wordt er een tabel van
	bytecode (de <firstterm>Differentiated System
	  Description Table</firstterm> of <acronym>DSDT</acronym>)
	geleverd die een op een boomstructuur lijkende namespace biedt
	voor apparaten en methoden.</para>

      <para>Het stuurprogramma <acronym>ACPI</acronym> moet de
	voorgedefinieerde tabellen verwerken, een interpreter voor de
	bytecode implementeren en apparaatstuurprogramma's en de kernel
	aanpassen om informatie van het
	<acronym>ACPI</acronym>-subsysteem te accepteren.  &intel; heeft
	een interpreter beschikbaar gesteld (<acronym>ACPI-CA</acronym>)
	die door &os; en ook door &linux; en NetBSD gebruikt wordt.  De
	<acronym>ACPI-CA</acronym>-broncode staat in <filename
	  class="directory">src/sys/contrib/dev/acpica</filename>.  De
	lijmcode die <acronym>ACPI-CA</acronym> laat werken met &os;
	staat in <filename class="directory">src/sys/dev/acpica/Osd</filename>.
	Stuurprogramma's die verscheidene
	<acronym>ACPI</acronym>-apparaten implementeren staan in
	<filename class="directory">src/sys/dev/acpica</filename>.</para>
    </sect2>

    <sect2 id="ACPI-comprob">
      <title>Algemene problemen</title>

      <para>Wil <acronym>ACPI</acronym> goed werken, dan moeten alle
	onderdelen goed werken.  Hieronder staan enkele algemene
	problemen in volgorde van hoe vaak ze optreden en enkele
	mogelijke oplossingen of manieren om de problemen te
	vermijden.</para>

      <sect3>
	<title>Muisproblemen</title>

	<para>Soms doet een muis het niet bij het opstarten uit de
	  slaapstand.  Een bekend lapmiddel is het toevoegen van
	  <literal>hint.psm.0.flags="0x3000"</literal> aan het bestand
	  <filename>/boot/loader.conf</filename>.  Als dat niet werkt,
	  dan wordt aangeraden een bugrapport in te sturen, zoals
	  eerder is beschreven.</para>
      </sect3>

      <sect3>
	<title>Suspend/resume</title>

	<para><acronym>ACPI</acronym> heeft drie slaapstanden waarbij
	  het geheugen (<acronym>RAM</acronym>) wordt ingezet.  Dit
	  zijn de <acronym>STR</acronym>-toestanden
	  <literal>S1</literal>-<literal>S3</literal>, en nog een
	  slaap-met-gebruik-van-harde-schijf toestand
	  (<literal>STD</literal>) die <literal>S4</literal> heet.
	  <literal>S5</literal> is <quote>zacht uit</quote> en is de
	  normale status van een systeem als het is aangesloten maar
	  niet is aangezet.  <literal>S4</literal> kan feitelijk op twee
	  manieren geïmplementeerd worden:
	  <literal>S4</literal><acronym>BIOS</acronym> is een slaapstand
	  naar schijf met behulp van het <acronym>BIOS</acronym> en
	  <literal>S4</literal><acronym>OS</acronym> wordt volledig door
	  het besturingssysteem geïmplenteerd.</para>

	<para>als eerste dienen de <command>sysctl hw.acpi</command>
	  items die iets met de slaapstand te maken hebben gecontroleerd
	  te worden.  Hieronder staan de resultaten voor een
	  Thinkpad:</para>

	<screen>hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0</screen>

	<para>Dit betekent dat hier <command>acpiconf -s</command>
	  gebruikt kan worden om <literal>S3</literal>,
	  <literal>S4</literal><acronym>OS</acronym> en
	  <literal>S5</literal> te testen.  Als <option>s4bios</option>
	  gelijk was aan (<literal>1</literal>), dan zou er
	  <literal>S4</literal><acronym>BIOS</acronym> ondersteuning
	  zijn in plaats van <literal>S4</literal>
	  <acronym>OS</acronym>.</para>

	<para>Als suspend/resume getest moet worden, dient, indien
	  ondersteund, bij <literal>S1</literal> begonnen te worden.
	  Deze toestand heeft de grootste kans om te werken, omdat deze
	  niet veel stuurprogrammaondersteuning vereist.  Niemand heeft
	  nog <literal>S2</literal> geïmplementeerd, maar het is
	  ongeveer hetzelfde als <literal>S1</literal>.  Daarna wordt
	  <literal>S3</literal> getest.  Dit is het diepste
	  <acronym>STR</acronym>-niveau en heeft uitgebreide
	  ondersteuning van stuurprogramma's nodig om hardware goed
	  opnieuw te kunnen starten.  Mochten er blokkades optreden,
	  dan kan naar de &a.acpi.name; lijst gemaild worden.  Er kan
	  echter geen snelle oplossing verwacht worden, omdat er nog de
	  nodige stuurprogramma's/hardware liggen om getest en bewerkt
	  te worden.</para>

	<para>Een veelvoorkomend probleem met suspend/resume is dat veel
	  apparaatstuurprogramma's hun firmware, registers of apparaatgeheugen
	  niet fatsoenlijk opslaan, herstellen, of herinitialiseren.  Een
	  eerste poging om het probleem te vinden omvat:</para>

	<screen>&prompt.root; <userinput>sysctl debug.bootverbose=1</userinput>
&prompt.root; <userinput>sysctl debug.acpi.suspend_bounce=1</userinput>
&prompt.root; <userinput>acpiconf -s 3</userinput></screen>

	<para>Deze test emuleert de suspend/resume-cyclus van alle
	  apparaten zonder daadwerkelijk naar de toestand <literal>S3</literal>
	  te gaan.  In sommige gevallen kunt u zo eenvoudig problemen
	  vaststellen (bijvoorbeeld het verliezen van de firmware-toestand,
	  timeout van de apparaatwaakhond, en steeds opnieuw iets proberen).
	  Merk op dat het systeem niet werkelijk naar de toestand
	  <literal>S3</literal> gaat, wat inhoudt dat apparaten geen spanning
	  verliezen waardoor velen prima zullen werken zelfs als de
	  suspend/resume-methoden geheel ontbreken, dit in tegenstelling tot de
	  echte toestand <literal>S3</literal>.</para>

	<para>Moeilijkere gevallen vereisen aanvullende hardware, dat is een
	  serieële poort/kabel voor de serieële console of een
	  Firewire poort/kabel voor &man.dcons.4;, en vaardigheden in het
	  debuggen van de kernel.</para>

	<para>Om een probleem te kunnen isoleren helpt het om zoveel
	  mogelijk stuurprogramma's uit de kernel te halen.  Als dit
	  werkt, kan er teruggewerkt worden naar het stuurprogramma dat
	  schuldig is aan het falen.  Meestal vertonen binaire
	  stuurprogramma's als <filename>nvidia.ko</filename>, X11
	  beeldschermstuurprogramma's en <acronym>USB</acronym> de
	  meeste problemen, terwijl bijvoorbeeld Ethernet-interfaces
	  meestal meteen goed werken.  Als de stuurprogramma's zonder
	  problemen geladen en verwijderd kunnen worden, dan is dit te
	  automatiseren door de juiste commando's in
	  <filename>/etc/rc.suspend</filename> en
	  <filename>/etc/rc.resume</filename> te zetten.  Er staat een
	  voorbeeld (achter commentaartekens) voor het laden en
	  verwijderen van een stuurprogramma.  Als het beeldscherm er na
	  wakker worden vreemd uitziet, kan geprobeerd worden
	  <option>hw.acpi.reset_video</option> op nul te zetten.  Met
	  langere of kortere waarden voor
	  <option>hw.acpi.sleep_delay</option> kan bekeken worden of dat
	  helpt.</para>

	<para>In geval van problemen is het ook een optie om een recente
	  &linux; distibutie met ondersteuning voor
	  <acronym>ACPI</acronym> support te starten en daarvan de
	  suspend/resume ondersteuning op dezelfde hardware uit te
	  proberen.  Als het werkt met &linux;, dan is het
	  waarschijnlijk een &os; stuurprogrammaprobleem en als het
	  mogelijk is uit te vinden over welk stuurprogramma het gaat,
	  kan dat bijdragen aan het oplossen van het probleem.
	  <acronym>ACPI</acronym> houdt zich in het algemeen niet bezig
	  met andere stuurprogramma's zoals geluid,
	  <acronym>ATA</acronym>, enzovoort.  Als er dus een echt
	  probleem met een stuurprogramma is, dan is waarchijnlijk
	  uiteindelijk ook nodig naar de &a.current.name; lijst te
	  posten en naar de beheerder van het stuurprogramma.  Voor
	  degenen met moed is het vooral aan te raden een paar
	  &man.printf.3;s in problematische stukken van een
	  stuurprogramma te plaatsen voor debugging om na te gaan waar
	  de resumefunctie precies hangt.</para>

	<para>Tot slot kan geprobeerd worden om <acronym>ACPI</acronym>
	  uit te zetten en in plaats daarvan <acronym>APM</acronym> aan
	  te zetten.  Als suspend/resume werkt met
	  <acronym>APM</acronym>, is het wellicht verstandig het daarbij
	  te houden, vooral met wat oudere apparatuur (voor 2000).
	  Producenten hebben nogal wat tijd nodig gehad om
	  <acronym>ACPI</acronym> ondersteuning goed te krijgen en voor
	  oudere hardware is het waarschijnlijker dat er
	  <acronym>BIOS</acronym>-problemen zijn met
	  <acronym>ACPI</acronym>.</para>
      </sect3>

      <sect3>
	<title>Systeem hangt (tijdelijk of permanent)</title>

	<para>Meestal is het hangen van het systeem het gevolg van
	  verloren interrupts of een interruptstorm.  Chipsets kunnen
	  een heleboel problemen hebben, afhankelijk van hoe het
	  <acronym>BIOS</acronym> interrupts instelt voor het opstarten,
	  of de <acronym>APIC</acronym> (<acronym>MADT</acronym>) tabel
	  correct is en de routering van het <firstterm>System Control
	    Interrupt</firstterm> (<acronym>SCI</acronym>).</para>

	<indexterm><primary>interruptstorms</primary></indexterm>

	<para>Interruptstorms kunnen onderscheiden worden van verloren
	  geraakte interrupts door de uitvoer van <command>vmstat
	    -i</command> te controleren en de regel met
	  <literal>acpi0</literal> goed te lezen.  Als de teller in
	  toenemende mate hoger staat dan enkele per seconde, dan is
	  sprake van een interruptstorm.  Als het systeem lijkt te
	  hangen, is het wellicht nog mogelijk door te dringen tot
	  de <acronym>DDB</acronym> (<keycombo
	    action="simul"><keycap>CTRL</keycap>
	    <keycap>ALT</keycap><keycap>ESC</keycap></keycombo>) en
	  <literal>show interrupts</literal> uit te voeren.</para>

	<indexterm>
	  <primary>APIC</primary>

	  <secondary>uitschakelen</secondary>
	</indexterm>

	<para>De beste hoop in geval van interruptproblemen is om
	  <acronym>APIC</acronym>-ondersteuning uit te zetten met
	  <literal>hint.apic.0.disabled="1"</literal> in
	  <filename>loader.conf</filename>.</para>
      </sect3>

      <sect3>
	<title>Panics</title>

	<para>Panics zijn relatief zeldzaam met <acronym>ACPI</acronym>
	  en krijgen de hoogste prioriteit bij het oplossen.  Eerst
	  moeten de verschillende gebeurtenissen waarmee de panic (als
	  mogelijk) te reproduceren is geïsoleerd worden en moet
	  een backtrace gemaakt worden.  <literal>options DDB</literal>
	  dient aangezet te worden en er dient een seriële
	  console (<xref linkend="serialconsole-ddb"/>) of een
	  &man.dump.8; partitie te komen.  In <acronym>DDB</acronym> is
	  een backtrace te maken met <literal>tr</literal>.  Als de
	  backtrace handmatig opgeschreven moet worden, is het
	  belangrijk dat in ieder geval de bovenste en onderste vijf (5)
	  regels van de backtrace genoteerd worden.</para>

	<para>Daarna dient getracht te worden het systeem te starten
	  zonder <acronym>ACPI</acronym>.  Als dat werkt, is het
	  <acronym>ACPI</acronym>-subsysteem geïsoleerd en kunnen
	  de verschillende <option>debug.acpi.disable</option>-waarden
	  uitgeprobeerd worden.  In &man.acpi.4; staan enkele
	  voorbeelden.</para>
      </sect3>

      <sect3>
	<title>Systeem slaat aan na slaapstand of stop</title>

	<para><literal>hw.acpi.disable_on_poweroff="0"</literal> kan
	  uitgezet worden in &man.loader.conf.5;.  Hierdoor schakelt
	  <acronym>ACPI</acronym> bepaalde gebeurtenissen tijdens het
	  afsluitproces niet uit.  Om dezelfde redenen moeten sommige
	  systemen deze waarde altijd op <literal>1</literal>
	  (standaard) hebben staan.  In het algemeen lost dit een
	  probleem op waarbij een systeem spontaan weer opkomt nadat het
	  in slaapstand is gezet of geheel gestopt is.</para>
      </sect3>

      <sect3>
	<title>Overige problemen</title>

	<para>Als er nog andere problemen zijn met
	  <acronym>ACPI</acronym> (met een docking station of
	  apparaten niet gedetecteerd, enzovoort), dan kan een mail met
	  beschijving naar de mailinglijst gezonden worden.  Sommige
	  zaken kunnen echter gerelateerd zijn aan delen van het
	  <acronym>ACPI</acronym>-subsysteem die nog niet af zijn,
	  dus het kan in sommige gevallen een tijd duren.  Gebruikers
	  moeten soms geduld en de bereidheid om eventuele
	  patches uit te proberen hebben.</para>
      </sect3>
    </sect2>

    <sect2 id="ACPI-aslanddump">
      <title><acronym>ASL</acronym>, <command>acpidump</command> en
	<acronym>IASL</acronym></title>

      <indexterm>
	<primary>ACPI</primary>

	<secondary>ASL</secondary>
      </indexterm>

      <para>Het grootste probleem is dat
	<acronym>BIOS</acronym>-producenten vaak incorrecte (of gewoon
	foutieve) bytecode leveren.  Dit blijkt doorgaans uit
	kernelboodschappen als:</para>

      <screen>ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\
(Node 0xc3f6d160), AE_NOT_FOUND</screen>

      <para>Vaak kunnen dergelijke problemen geoplost worden door de
	<acronym>BIOS</acronym> bij te werken tot de laatste revisie.
	De meeste consoleberichten zijn onschuldig, maar als er andere
	problemen zijn, zoals batterijstatus die niet werkt, dan ligt
	het voor de hand te zoeken naar problemen in de
	<acronym>AML</acronym>-code.  De bytecode die
	<acronym>AML</acronym> genoemd wordt, wordt gecompileerd van een
	broncodetaal <acronym>ASL</acronym>.  Deze staat weer in een
	tabel <acronym>DSDT</acronym>.  Met &man.acpidump.8; kan een
	kopie van de <acronym>ASL</acronym> gemaakt worden.  Dan moeten
	zowel de opties <option>-t</option> (laat inhoud van vaste
	tabellen zien) als <option>-d</option> (disassembleer
	<acronym>AML</acronym> naar <acronym>ASL</acronym>) gebruikt
	worden.  In <link linkend="ACPI-submitdebug">Debuginformatie
	  aanleveren</link> staat een voorbeeld.</para>

      <para>De eenvoudigste eerste controle is de
	<acronym>ASL</acronym>-code opnieuw compileren en kijken of er
	foutmeldingen optreden.  Waarschuwingen kunnen doorgaans
	genegeerd worden, maar fouten zijn bugs die er meestal toe
	leiden dat <acronym>ACPI</acronym> niet correct werkt.  Om
	<acronym>ASL</acronym> te hercompileren:</para>

      <screen>&prompt.root; <userinput>iasl eigen.asl</userinput></screen>
    </sect2>

    <sect2 id="ACPI-fixasl">
      <title><acronym>ASL</acronym> repareren</title>

      <indexterm>
	<primary>ACPI</primary>

	<secondary>ASL</secondary>
      </indexterm>

      <para>Op langere termijn is het de bedoeling dat voor vrijwel elke
	machine <acronym>ACPI</acronym> werkt zonder enig ingrijpen van
	de gebruiker.  Op dit moment wordt er echter nog gewerkt aan
	oplossingen voor veel voorkomende vergissingen die
	<acronym>BIOS</acronym>-producenten maken.  De &microsoft;
	interpreter (<filename>acpi.sys</filename> en
	<filename>acpiec.sys</filename>) controleert niet strikt of het
	<acronym>BIOS</acronym> volledig aan de standaard voldoet,
	waardoor het voorkomt dat <acronym>BIOS</acronym>-makers die
	alleen testen onder &windows; bepaalde fouten in hun
	<acronym>ASL</acronym> nooit correct repareren.  &os; hoopt door
	te gaan met de identificatie en documentatie van welk
	niet-standaard gedrag precies wordt toegelaten door
	&microsoft;'s interpreter en te dit te repliceren zodat &os;
	kan werken zonder dat gebruikers zich gedwongen zien om de
	<acronym>ASL</acronym> te repareren.  Als een tijdelijke
	oplossing en om te helpen met het in kaart brengen van bepaald
	gedrag, kan de <acronym>ASL</acronym> handmatig gerepareerd
	worden.  Mocht dit lukken, dan wordt erop aangedrongen een
	&man.diff.1; van de oude en de nieuwe <acronym>ASL</acronym> te
	mailen, zodat het foutieve gedrag mogelijk in
	<acronym>ACPI-CA</acronym> kan worden verwerkt, waardoor andere
	gebruikers niet meer handmatig met hun <acronym>ASL</acronym>
	aan de gang hoeven.</para>

      <indexterm>
	<primary>ACPI</primary>

	<secondary>foutmeldingen</secondary>
      </indexterm>

      <para>Hieronder staat een lijst algemene foutmeldingen, hun
	oorzaken en hoe ze op te lossen:</para>

      <sect3>
	<title>_OS afhankelijkheden</title>

	<para>Sommige <acronym>AML</acronym>s gaan ervan uit dat de
	  wereld enkel bestaat uit &windows; versies.  &os; kan zich
	  voordoen als elk <acronym>OS</acronym> om te kijken of dit
	  problemen oplost.  Een gemakkelijke manier om dit te doen is
	  <literal>hw.acpi.osname="Windows 2001"</literal> in te stellen
	  in <filename>/boot/loader.conf</filename> of andere
	  gelijksoortige strings die in een <acronym>ASL</acronym>
	  staan.</para>
      </sect3>

      <sect3>
	<title>Ontbrekende return-opdrachten</title>

	<para>Sommige methoden hebben geen specifieke returnwaarde,
	  zoals wel vereist wordt door de standaard.  Hoewel
	  <acronym>ACPI-CA</acronym> hier niets mee doet, heeft &os;
	  de mogelijkheid tot impliciete returns.  Er kunnen ook
	  expliciete return-opdrachten toegevoegd worden waar vereist,
	  als het bekend is welke waarden teruggevoerd moeten worden.
	  Om <command>iasl</command> te dwingen tot compilatie van
	  <acronym>ASL</acronym> kan de schakeloptie
	  <option>-f</option> gebruikt worden.</para>
      </sect3>

      <sect3>
	<title>De standaard <acronym>AML</acronym> aanpassen</title>

	<para>Nadat <filename>eigen.asl</filename> aangepast is, kan
	  deze als volgt gecompileerd worden:</para>

	<screen>&prompt.root; <userinput>iasl eigen.asl</userinput></screen>

	<para>Met de optie <option>-f</option> is af te dwingen dat de
	  <acronym>AML</acronym> gemaakt wordt, zelfs als er
	  compileerfouten optreden.  Sommige fouten (zoals ontbrekende
	  return-opdrachten) worden automatisch opgelost door de
	  interpreter.</para>

	<para><filename>DSDT.aml</filename> is de standaardnaam voor het
	  bestand dat door <command>iasl</command> wordt geproduceerd.
	  Dit is in plaats van de foutieve versie uit het
	  <acronym>BIOS</acronym> (die nog steeds aanwezig is in het
	  flashgeneugen) te laden door
	  <filename>/boot/loader.conf</filename> als volgt te
	  wijzigen:</para>

	<programlisting>acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/DSDT.aml"</programlisting>

	<para><filename>DSDT.aml</filename> moet in de map <filename
	    class="directory">/boot</filename> staan.</para>
      </sect3>
    </sect2>

    <sect2 id="ACPI-debugoutput">
      <title>Debuguitvoer van <acronym>ACPI</acronym> verkrijgen</title>

      <indexterm>
	<primary>ACPI</primary>

	<secondary>problemen</secondary>
      </indexterm>

      <indexterm>
	<primary>ACPI</primary>

	<secondary>debuggen</secondary>
      </indexterm>

      <para>Het stuurprogramma <acronym>ACPI</acronym> heeft een zeer
	flexibele debugfaciliteit.  Er kan zowel een verzameling van
	subsystemen aangegeven worden als het niveau van uitvoerigheid.
	De te debuggen subsystemen worden aangegeven als lagen
	(<quote>layers</quote>) en zijn opgedeeld in
	<acronym>ACPI-CA</acronym>-componenten (ACPI_ALL_COMPONENTS) en
	<acronym>ACPI</acronym>-hardware-ondersteuning
	(ACPI_ALL_DRIVERS).  De uitvoerigheid van debuguitvoer wordt
	aangegeven als het niveau (<quote>level</quote>) en gaat van
	CPI_LV_ERROR (alleen fouten rapporteren) tot ACPI_LV_VERBOSE
	(alles).  Het niveau is een bitmasker en dus kunnen er meerdere
	opties tegelijk ingeschakeld worden (gescheiden door spaties).
	In de praktijk wordt wellicht een seriële console gebruikt
	om de uitvoer te loggen als deze zo omvangrijk is dat de
	console berichtbuffer vol loopt (misschien wel meerdere keren).
	Een complete lijst van de individuele lagen en niveaus staat in
	&man.acpi.4;.</para>

      <para>Debuguitvoer staat standaard niet aan.  Door
	<literal>options ACPI_DEBUG</literal> toe te voegen aan het
	bestand met kernelinstellingen als <acronym>ACPI</acronym> als
	de kernel is gebouwd, wordt het ingeschakeld.  Door
	<literal>ACPI_DEBUG=1</literal> toe te voegen aan
	<filename>/etc/make.conf</filename> wordt het systeembreed
	ingeschakeld.  Als <acronym>ACPI</acronym> als module wordt
	gebruikt (de normale situatie), dan hoeft slechts de module
	<filename>acpi.ko</filename> opnieuw gecompileerd te
	worden:</para>

      <screen>&prompt.root; <userinput>cd /sys/modules/acpi/acpi
&amp;&amp; make clean &amp;&amp;
make ACPI_DEBUG=1</userinput></screen>

      <para><filename>acpi.ko</filename> moet in
	<filename class="directory">/boot/kernel</filename> komen te
	staan en de gewenste debuglaag en het gewenste niveau van
	uitvoerigheid dienen toegevoegd te worden aan
	<filename>loader.conf</filename>.  Hieronder een voorbeeld
	waarmee debuguitvoer wordt aangezet voor alle
	<acronym>ACPI-CA</acronym>-componenten en alle
	<acronym>ACPI</acronym>-hardware-stuurprogramma's
	(<acronym>CPU</acronym>, <acronym>LID</acronym>, enzovoort.
	Het niveau van uitvoerigheid is het laagst mogelijke.  Er
	worden alleen fouten gemeld.</para>

      <programlisting>debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
debug.acpi.level="ACPI_LV_ERROR"</programlisting>

      <para>Als de gezochte informatie wordt veroorzaakt door een
	specifieke gebeurtenis (bijvoorbeeld in en uit slaapstand gaan),
	dan kunnen wijzigingen aan <filename>loader.conf</filename>
	achterwege blijven en in plaats daarvan kan
	<command>sysctl</command> gebruikt worden om laag en niveau in
	te stellen na het opstarten en zo het systeem voor te bereiden
	op die specifieke gebeurtenis.  De <command>sysctl</command>s
	hebben dezelfde namen als de parameters in
	<filename>loader.conf</filename>.</para>
    </sect2>

    <sect2 id="ACPI-References">
      <title>Verwijzingen</title>

      <para>Meer informatie over <acronym>ACPI</acronym> staat op de
	volgende locaties:</para>

      <itemizedlist>
	<listitem>
	  <para>De &a.acpi;</para>
	</listitem>

	<listitem>
	  <para>De <acronym>ACPI</acronym> mailinglijst archieven <ulink
	      url="http://lists.freebsd.org/pipermail/freebsd-acpi/">
	    </ulink></para>
	</listitem>

	<listitem>
	  <para>De oude <acronym>ACPI</acronym> mailinglijst archieven <ulink
	      url="http://home.jp.FreeBSD.org/mail-list/acpi-jp/">
	    </ulink></para>
	</listitem>

	<listitem>
	  <para>De <acronym>ACPI</acronym> 2.0 specificatie
	    <ulink url="http://acpi.info/spec.htm"></ulink></para>
	</listitem>

	<listitem>
	  <para>&os; Handleidingen: &man.acpi.4;,
	    &man.acpi.thermal.4;, &man.acpidump.8;, &man.iasl.8;,
	    &man.acpidb.8;</para>
	</listitem>

	<listitem>
	  <para><ulink
	      url="http://www.cpqlinux.com/acpi-howto.html#fix_broken_dsdt">
	      <acronym>DSDT</acronym> debugging informatie</ulink>.
	    (Gebruikt Compaq als voorbeeld, maar van algemeen
	    nut).</para>
	</listitem>
      </itemizedlist>
    </sect2>
  </sect1>
</chapter>