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
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!--
The FreeBSD Dutch Documentation Project
$FreeBSD$
%SOURCE% en_US.ISO8859-1/books/handbook/cutting-edge/chapter.xml
%SRCID% 39752
-->
<chapter id="updating-upgrading">
<chapterinfo>
<authorgroup>
<author>
<firstname>Jim</firstname>
<surname>Mock</surname>
<contrib>Geherstructureerd, gereorganiseerd en delen bijgewerkt
door </contrib>
</author>
<!-- Mar 2000 -->
</authorgroup>
<authorgroup>
<author>
<firstname>Jordan</firstname>
<surname>Hubbard</surname>
<contrib>Origineel door </contrib>
</author>
<author>
<firstname>Poul-Henning</firstname>
<surname>Kamp</surname>
</author>
<author>
<firstname>John</firstname>
<surname>Polstra</surname>
</author>
<author>
<firstname>Nik</firstname>
<surname>Clayton</surname>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Remko</firstname>
<surname>Lodder</surname>
<contrib>Vertaald door </contrib>
</author>
<author>
<firstname>Siebrand</firstname>
<surname>Mazeland</surname>
</author>
<author>
<firstname>René</firstname>
<surname>Ladan</surname>
</author>
</authorgroup>
</chapterinfo>
<title>&os; updaten en upgraden</title>
<sect1 id="updating-upgrading-synopsis">
<title>Overzicht</title>
<para>&os; wordt ontwikkeld tussen de verschillende versies in.
Sommige mensen prefereren om de officieel uitgegeven versies te
draaien, terwijl anderen gesynchroniseerd willen blijven met de
nieuwste ontwikkelingen. Zelfs officiële uitgaven echter
worden vaak bijgewerkt met veiligheids- en andere kritieke
reparaties. Ongeacht de gebruikte versie biedt &os; alle
noodzakelijke gereedschappen om uw systeem bijgewerkt te houden,
en maakt &os; het upgraden tussen versies ook gemakkelijk. Dit
hoofdstuk helpt om een keuze te maken of het wenselijk is het
ontwikkelsysteem te volgen of één van de uitgegeven
versies. De basisgereedschappen om uw systeem bijgewerkt te
houden worden ook gepresenteerd.</para>
<para>Na het lezen van dit hoofdstuk weet de lezer:</para>
<itemizedlist>
<listitem>
<para>Welke gereedschappen gebruikt kunnen worden om het systeem
en de Portscollectie te updaten.</para>
</listitem>
<listitem>
<para>Hoe een systeem bijgewerkt kan worden met
<application>freebsd-update</application>,
<application>CVSup</application>,
<application>CVS</application> of
<application>CTM</application>;</para>
</listitem>
<listitem>
<para>Hoe de toestand van een geïnstalleerd systeem met een
bekende maagdelijke kopie te vergelijken.</para>
</listitem>
<listitem>
<para>Hoe uw documentatie bijgewerkt te houden met
<application>CVSup</application> of documentatie-ports<!-- en
<application>Docsnap</application>-->.</para>
</listitem>
<listitem>
<para>De verschillen tussen de ontwikkeltakken &os.stable; en
&os.current;;</para>
</listitem>
<listitem>
<para>Hoe een basissysteem opnieuw te compileren en
te herinstalleren met <command>make buildworld</command>,
enzovoort.</para>
</listitem>
</itemizedlist>
<para>Veronderstelde criteria:</para>
<itemizedlist>
<listitem>
<para>Een juist ingesteld netwerk (<xref
linkend="advanced-networking"/>);</para>
</listitem>
<listitem>
<para>Weten hoe software van derden te installeren (<xref
linkend="ports"/>).</para>
</listitem>
</itemizedlist>
<note>
<para>Door dit hoofdstuk heen wordt <command>cvsup</command>
gebruikt om de broncode van &os; te verkrijgen en bij te werken.
Om het te gebruiken, dient u de port of het pakket voor <filename
role="package">net/cvsup</filename> te installeren (als u niet de
grafische <command>cvsup</command>-cliënt wilt installeren, kunt u
de port <filename>net/cvsup-without-gui</filename> installeren. U kunt
ervoor kiezen om dit te vervangen door &man.csup.1; welke onderdeel is
van het basissysteem.</para>
</note>
</sect1>
<sect1 id="updating-upgrading-freebsdupdate">
<sect1info>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Geschreven door </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Colin</firstname>
<surname>Percival</surname>
<contrib>Gebaseerd op notities aangeleverd door </contrib>
</author>
</authorgroup>
</sect1info>
<title>&os; Update</title>
<indexterm><primary>updaten en upgraden</primary></indexterm>
<indexterm>
<primary>freebsd-update</primary>
<see>updating-upgrading</see>
</indexterm>
<para>Het toepassen van beveiligingspatches is een belangrijk
onderdeel van het beheren van computersoftware, met name het
besturingssysteem. Dit was voor een lange tijd geen gemakkelijk
proces op &os;. Er moesten patches op de broncode worden
toegepast, de code moest herbouwd worden tot binairen, en daarna
moesten de binairen worden geherinstalleerd.</para>
<para>Dit is niet langer het geval aangezien &os; nu een gereedschap
heeft dat eenvoudigweg <command>freebsd-update</command> heet.
Dit gereedschap biedt twee gescheiden functies. Ten eerste
voorziet het in het toepassen van binaire beveiligings- en
errata-updates op het basissysteem van &os; zonder de eis om te
bouwen en te installeren. Ten tweede ondersteunt het gereedschap
kleine en grote uitgave-upgrades.</para>
<note>
<para>Binaire updates zijn beschikbaar voor alle architecturen en
uitgaveaankondigingen dienen gelezen te worden aangezien deze
belangrijke informatie over de gewenste uitgave kunnen bevatten.
De aankondigingen kunnen op de volgende koppelin bekeken worden:
<ulink url="http://www.FreeBSD.org/releases/"></ulink>.</para>
</note>
<para>Als er een <command>crontab</command> bestaat die de
mogelijkheden van <command>freebsd-update</command> gebruikt, moet
het uitgeschakeld worden voordat aan de volgende operatie wordt
begonnen.</para>
<sect2 id="freebsdupdate-config-file">
<title>Het configuratiebestand</title>
<para>Sommige gebruikers willen het standaard configuratiebestand
optimaliseren, waardoor het proces beter gecontroleerd kan
worden. De opties zijn goed gedocumenteerd, maar voor de
volgenden is wat extra uitleg nodig:</para>
<programlisting># Componenten van het basissysteem die bijgewerkt moeten blijven
Components src world kernel</programlisting>
<para>Deze parameter bepaalt welke delen van &os; bijgewerkt
blijven. Standaard wordt de broncode bijgewerkt, het hele
basissysteem, en de kernel. Dezelfde componenten als tijdens de
installatie zijn beschikbaar, het toevoegen van bijvoorbeeld
<literal>world/games</literal> zou de spelpatches toepassen. Het
gebruik van <literal>src/bin</literal> zou de broncode in <filename
class="directory">src/bin</filename> bijgewerkt houden.</para>
<para>Het beste kan dit op de standaardwaarde blijven aangezien
het veranderen hiervan om specifieke items te bevatten de
gebruiker dwingt om alle items die bijgewerkt dienen te worden
op te noemen. Dit kan rampzalige gevolgen hebben aangezien de
broncode en de binairen asynchroon kunnen raken.</para>
<programlisting># Paden die beginnen met iets wat overeenkomt met een regel in een IgnorePaths
# statement zullen genegeerd worden.
IgnorePaths</programlisting>
<para>Voeg paden, zoals
<filename class="directory">/bin</filename> of
<filename class="directory">/sbin</filename> toe om deze
specifieke mappen ongemoeid te laten tijdens het updateproces.
Deze optie kan gebruikt worden om te voorkomen dat
<command>freebsd-update</command> lokale wijzigingen
overschrijft.</para>
<programlisting># Paden die beginnen met iets wat overeenkomt met een regel in een UpdateIfUnmodified
# statement zullen alleen worden bijgewerkt als de inhoud van het bestand niet is
# gewijzigd door de gebruiker (tenzij veranderingen zijn samengevoegd; zie beneden).
UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile</programlisting>
<para>Werk configuratiebestanden in de aangegeven mappen alleen
bij als ze niet zijn gewijzigd. Alle veranderingen die door de
gebruiker zijn gemaakt maken het automatisch bijwerken van deze
bestanden ongeldig. Er is een andere optie,
<literal>KeepModifiedMetadata</literal>, die
<command>freebsd-update</command> instrueert om de veranderingen
tijdens het samenvoegen te bewaren.</para>
<programlisting># Wanneer naar een nieuwe uitgave van &os; wordt ge-upgraded, worden lokale veranderingen van bestanden die overeenkomen met MergeChanges
# samengevoegd in de versie van de nieuwe uitgave.
MergeChanges /etc/ /var/named/etc/</programlisting>
<para>Lijst van mappen met instellingenbestanden waar
<command>freebsd-update</command> moet proberen om in samen te
voegen. Het proces van bestanden samenvoegen is een serie
van &man.diff.1;-patches die ongeveer gelijk is aan
&man.mergemaster.8; met minder opties, de samenvoegingen worden
ofwel geaccepteerd, of openen een tekstverwerker, of zorgen
ervoor dat <command>freebsd-update</command> afbreekt. Maak in
geval van twijfel een reservekopie van <filename
class="directory">/etc</filename> en accepteer de
samenvoegingen. In <xref linkend="mergemaster"/> staat meer
informatie over het commando <command>mergemaster</command>.</para>
<programlisting># Map waarin de gedownloade updates en tijdelijke
bestanden
# die door een &os; Update worden gebruikt worden opgeslagen.
# WorkDir /var/db/freebsd-update</programlisting>
<para>Dit is de map waarin alle patches en tijdelijke bestanden
worden geplaatst. In het geval dat de gebruiker een
versie-upgrade uitvoert, dient deze locatie tenminste een
gigabyte aan vrije schijfruimte te hebben.</para>
<programlisting># Wanneer tussen uitgaven wordt ge-upgraded, dient de lijst van Componenten dan
# strikt gelezen te worden (StrictComponents yes) of slechts als een lijst van componenten
# die geïnstalleerd *kunnen* worden en waarvan &os; Update uit dient te zoeken
# welke daadwerkelijk zijn geïnstalleerd en die te upgraden (StrictComponents no)?
# StrictComponents no</programlisting>
<para>Wanneer ingesteld op <literal>yes</literal>, zal
<command>freebsd-update</command> aannemen dat de lijst
<literal>Components</literal> compleet is en zal het niet
proberen om wijzigingen buiten de lijst te maken. Effectief zal
<command>freebsd-update</command> proberen om elk bestand bij te
werken dat op de lijst <literal>Components</literal> staat.</para>
</sect2>
<sect2 id="freebsdupdate-security-patches">
<title>Beveiligingspatches</title>
<para>Beveiligingspatches staan op een verre machine en kunnen met
het volgende commando gedownload en geïnstalleerd
worden:</para>
<screen>&prompt.root; <userinput>freebsd-update fetch</userinput>
&prompt.root; <userinput>freebsd-update install</userinput></screen>
<para>Als er kernelpatches zijn toegepast moet het systeem opnieuw
opgestart worden. Als alles goed is gegaan dient het systeem
gepatcht te zijn en kan <command>freebsd-update</command> als
een nachtelijke &man.cron.8;-taak gedraaid worden. Een regel
in <filename>/etc/crontab</filename> zou genoeg moeten zijn om
deze taak te volbrengen:</para>
<programlisting>@daily root freebsd-update cron</programlisting>
<para>Deze regel verklaart dat eenmaal per dag het commando
<command>freebsd-update</command> gedraaid zal worden. Op deze
manier, door het argument <option>cron</option> te gebruiken,
zal het gereedschap <command>freebsd-update</command> alleen kijken of
er updates bestaan. Als er patches bestaan, zullen ze automatisch
worden gedownload naar de plaatselijke schijf maar niet worden
toegepast. Er zal een email aan de gebruiker
<username>root</username> worden verstuurd zodat ze handmatig
geïnstalleerd kunnen worden.</para>
<para>Als er iets misging, heeft <command>freebsd-update</command>
de mogelijkheid om de laatste verzamelingen veranderingen terug
te draaien met het volgende commando:</para>
<screen>&prompt.root; <userinput>freebsd-update rollback</userinput></screen>
<para>Eenmaal voltooid, dient het systeem herstart te worden als
de kernel of enige kernelmodule is gewijzigd. Dit stelt &os; in
staat om de nieuwe binairen in het geheugen te laden.</para>
<para>Het gereedschap <command>freebsd-update</command> kan alleen
de kernel <filename>GENERIC</filename> automatisch bijwerken. Als
een eigen kernel wordt gebruikt, moet het herbouwd en
geherinstalleerd worden nadat <command>freebsd-update</command>
klaar is met het installeren de rest van de updates.
<command>freebsd-update</command> zal echter de kernel
<filename>GENERIC</filename> in <filename
class="directory">/boot/GENERIC</filename> detecteren en
bijwerken (als het bestaat), zelfs als het niet de huidige
(draaiende) kernel van het systeem is.</para>
<note>
<para>Het is een goed idee om altijd een kopie van de kernel
<filename>GENERIC</filename> in <filename
class="directory">/boot/GENERIC</filename> te bewaren. Het
kan van pas komen bij het vaststellen van een keur aan
problemen, en bij het uitvoeren van versie-upgrades met
<command>freebsd-update</command> zoals beschreven in
<xref linkend="freebsdupdate-upgrade"/>.</para>
</note>
<para>Tenzij de standaardconfiguratie in
<filename>/etc/freebsd-update.conf</filename> is gewijzigd, zal
<command>freebsd-update</command> de bijgewerkte kernelbronnen
samen met de rest van de updates installeren. Het herbouwen en
herinstalleren van uw nieuwe eigen kernel kan daarna op de
gebruikelijke manier gedaan worden.</para>
<note>
<para>De updates die via <command>freebsd-update</command>
verspreid worden hebben niet altijd betrekking op de kernel.
Het is niet nodig om uw eigen kernel te herbouwen als de
kernelbronnen niet zijn aangepast door het uitvoeren van
<command>freebsd-update install</command>.
<command>freebsd-update install</command> zal echter altijd
het bestand <filename>/usr/src/sys/conf/newvers.sh</filename>
bijwerken. Het huidige patchniveau (zoals aangegeven door het
<literal>-p</literal>-nummer gerapporteerd door <command>uname
-r</command>) wordt uit dit bestand gehaald. Het herbouwen
van uw eigen kernel, zelfs als er niets veranderd is, stelt
&man.uname.1; in staat om het huidige patchniveau van het
systeem accuraat te rapporteren. Dit is in het bijzonder
behulpzaam wanneer meerdere systemen onderhouden worden,
aangezien hierdoor snel de geïnstalleerde updates op elk
ervan kunnen worden nagegaan.</para>
</note>
</sect2>
<sect2 id="freebsdupdate-upgrade">
<title>Grote en kleine upgrades</title>
<para>Dit proces ruimt oude objectbestanden en bibliotheken op
waardoor de meeste applicaties van derde partijen kapot gaan.
Het wordt aangeraden dat alle geïnstalleerde poorten ofwel
verwijderd en geherinstalleerd worden of later ge-upgraded
worden met het hulpmiddel <filename
role="package">ports-mgmt/portupgrade</filename>. De meeste
gebruikers zullen willen proefdraaien met het volgende
commando:</para>
<screen>&prompt.root; <userinput>portupgrade -af</userinput></screen>
<para>Dit zorgt ervoor dat alles juist wordt geherinstalleerd.
Merk op dat het instellen van de omgevingsvariabele
<makevar>BATCH</makevar> op <literal>yes</literal> het antwoord
<literal>yes</literal> zal geven op alle prompts tijdens dit
proces, waardoor het niet nodig is om handmatig in het
bouwproces in te grijpen.</para>
<para>Als een eigen kernel wordt gebruikt, is het upgradeproces
iets ingewikkelder. Een kopie van de kernel
<filename>GENERIC</filename> is nodig en dient in <filename
class="directory">/boot/GENERIC</filename> geplaatst te
worden. Als de kernel <filename>GENERIC</filename> niet reeds op
het systeem aanwezig is, moet het met één van de
volgende methoden verkregen worden:</para>
<itemizedlist>
<listitem>
<para>Als er slechts eenmaal een eigen kernel is gebouwd, dan
is de kernel in <filename
class="directory">/boot/kernel.old</filename> eigenlijk de
<filename>GENERIC</filename>. Hernoem deze map naar <filename
class="directory">/boot/GENERIC</filename>.</para>
</listitem>
<listitem>
<para>Aannemende dat fysieke toegang tot de machine mogelijk
is, kan een kopie van de kernel <filename>GENERIC</filename>
van het CD-ROM-medium worden geïnstalleerd. Laad de
installatieschijf en geef de volgende commando's:</para>
<screen>&prompt.root; <userinput>mount /cdrom</userinput>
&prompt.root; <userinput>cd /cdrom/<replaceable>X.Y-RELEASE</replaceable>/kernels</userinput>
&prompt.root; <userinput>./install.sh GENERIC</userinput></screen>
<para>Vervang <filename
class="directory"><replaceable>X.Y-RELEASE</replaceable></filename>
met de versie van de uitgave die u gebruikt. De kernel
<filename>GENERIC</filename> zal standaard in <filename
class="directory">/boot/GENERIC</filename> worden
geïnstalleerd.</para>
</listitem>
<listitem>
<para>Als al het bovenstaande niet lukt, kan de kernel
<filename>GENERIC</filename> herbouwd en geherinstalleerd
worden vanaf de broncode:</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>env DESTDIR=/boot/GENERIC make kernel</userinput>
&prompt.root; <userinput>mv /boot/GENERIC/boot/kernel/* /boot/GENERIC</userinput>
&prompt.root; <userinput>rm -rf /boot/GENERIC/boot</userinput></screen>
<para>Om deze kernel door <command>freebsd-update</command>
als <filename>GENERIC</filename> te laten herkennen, mag het
configuratiebestand voor <filename>GENERIC</filename> niet op
enige wijze veranderd zijn. Het is ook aan te raden dat het
zonder andere speciale opties wordt gebouwd (bij voorkeur
met een leeg <filename>/etc/make.conf</filename>).</para>
</listitem>
</itemizedlist>
<para>Opnieuw opstarten naar de kernel <filename>GENERIC</filename>
is in dit stadium niet nodig.</para>
<para>Updates van grote en kleine versies kunnen worden uitgevoerd
door een uitgaveversie als doel aan
<command>freebsd-update</command> op te geven, het volgende
commando zal bijvoorbeeld updaten naar &os; 8.1:</para>
<screen>&prompt.root; <userinput>freebsd-update -r 8.1-RELEASE upgrade</userinput></screen>
<para>Nadat het commando is ontvangen, zal
<command>freebsd-update</command> het instellingenbestand en het
huidige systeem evalueren in een poging om de benodigde
informatie te verzamelen om het systeem te updaten. Een lijst
op het scherm zal aangeven welke componenten zijn gedetecteerd
en welke niet. Bijvoorbeeld:</para>
<screen>Looking up update.FreeBSD.org mirrors... 1 mirrors found.
Fetching metadata signature for 8.0-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Inspecting system... done.
The following components of FreeBSD seem to be installed:
kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games
src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue
src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin
world/base world/info world/lib32 world/manpages
The following components of FreeBSD do not seem to be installed:
kernel/generic world/catpages world/dict world/doc world/games
world/proflibs
Does this look reasonable (y/n)? y</screen>
<para>Nu zal <command>freebsd-update</command> proberen om alle
bestanden die nodig zijn voor de upgrade te downloaden. In
sommige gevallen kan de gebruiker worden gevraagd wat te
installeren of hoe verder te gaan.</para>
<para>Wanneer een eigen kernel wordt gebruikt, zal de bovenstaande
stap een waarschuwing geven die lijkt op de volgende:</para>
<screen>WARNING: This system is running a "<replaceable>MIJNKERNEL</replaceable>" kernel, which is not a
kernel configuration distributed as part of FreeBSD 8.0-RELEASE.
This kernel will not be updated: you MUST update the kernel manually
before running "/usr/sbin/freebsd-update install"</screen>
<para>Deze waarschuwing kan op dit moment veilig worden
genegeerd. De bijgewerkte kernel <filename>GENERIC</filename>
zal als tussenliggende stap in het upgradeproces worden
gebruikt.</para>
<para>Nadat alle patches zijn gedownload naar het plaatselijke
systeem zullen ze worden toegepast. Dit proces kan afhankelijk
van de snelheid en werklast van de machine even duren. Hierna
zullen instellingenbestanden worden samengevoegd —
voor dit gedeelte van het proces is enige tussenkomst van de
gebruiker nodig aangezien een bestand kan worden samengevoegd of
omdat er een tekstverwerker op het scherm kan verschijnen om het
bestand handmatig samen te voegen. Het resultaat van elke
succesvolle samenvoeging zal aan de gebruiker worden getoond
naarmate het proces verder gaat. Een mislukte of genegeerde
samenvoegpoging zal het proces afbreken. Het is mogelijk voor
gebruikers om een reservekopie van <filename
class="directory">/etc</filename> te maken en belangrijke
bestanden, zoals <filename>master.passwd</filename> of
<filename>group</filename>, later samen te voegen.</para>
<note>
<para>Het systeem is nog niet veranderd, al het patchen en
samenvoegen gebeurt in een andere map. Wanneer alle patches
succesvol zijn toegepast, alle instellingenbestanden zijn
samengevoegd en het erop lijkt dat het proces soepel verloopt,
dienen de veranderingen verzegeld te worden door de
gebruiker.</para>
</note>
<para>Als dit proces eenmaal voltooid is, kan de upgrade aan de
schijf toevertrouwd worden met het volgende commando.</para>
<screen>&prompt.root; <userinput>freebsd-update install</userinput></screen>
<para>De kernel en kernelmodules zullen als eerste gepatcht
worden. Nu moet de machine opnieuw opgestart worden. Als het
systeem een eigen kernel draaide, gebruik dan het commando
&man.nextboot.8; om de kernel voor de volgende keer dat
opgestart wordt in te stellen op <filename
class="directory">/boot/GENERIC</filename> (welke is
bijgewerkt):</para>
<screen>&prompt.root; <userinput>nextboot -k GENERIC</userinput></screen>
<warning>
<para>Voordat er met de kernel <filename>GENERIC</filename> wordt
opgestart, dient te worden gecontroleerd dat het alle
stuurprogramma's bevat om uw systeem juist te laten opstarten
(en met het netwerk te verbinden, als de machine die
bijgewerkt wordt van afstand wordt benaderd). In het
bijzonder, als de vorige kernel die draaide ingebouwde
functionaliteit bevatte die normaalgesproken door
kernelmodules wordt geleverd, zorg er dan voor dat deze
modules tijdelijk in de kernel <filename>GENERIC</filename>
worden geladen door de faciliteit
<filename>/boot/loader.conf</filename> te gebruiken. U kunt
er ook voor kiezen om niet-essentiële diensten, schijf-
en netwerkkoppelingen, enzovoorts uit te zetten totdat het
upgradeproces voltooid is.</para>
</warning>
<para>De machine dient nu te worden herstart met de bijgewerkte
kernel:</para>
<screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
<para>Als het systeem weer actief is, moet
<command>freebsd-update</command> nogmaals gestart worden.
De toestand van het proces is opgeslagen en dus zal
<command>freebsd-update</command> niet vooraan beginnen, maar
zal het alle oude gedeelde bibliotheken en objectbestanden
verwijderen. Geef het volgende commando om verder te gaan op
dit punt:</para>
<screen>&prompt.root; <userinput>freebsd-update install</userinput></screen>
<note>
<para>Afhankelijk van het feit of er versienummers van
bibliotheken zijn opgehoogd, kunnen er slechts twee in plaats
van drie installatiefasen zijn.</para>
</note>
<para>Alle software van derde partijen dient nu opnieuw gebouwd en
geïnstalleerd te worden. Dit is nodig omdat
geïnstalleerde software van bibliotheken afhankelijk kan
zijn die tijdens het upgradeproces zijn verwijderd. Het
commando <filename
role="package">ports-mgmt/portupgrade</filename> kan gebruikt
worden om dit proces te automatiseren. Dit proces kan met de
volgende commando's gestart worden:</para>
<screen>&prompt.root; <userinput>portupgrade -f ruby</userinput>
&prompt.root; <userinput>rm /var/db/pkg/pkgdb.db</userinput>
&prompt.root; <userinput>portupgrade -f ruby18-bdb</userinput>
&prompt.root; <userinput>rm /var/db/pkg/pkgdb.db /usr/ports/INDEX-*.db</userinput>
&prompt.root; <userinput>portupgrade -af</userinput></screen>
<para>Voltooi, nadat dit voltooid is, het upgradeproces met een
laatste aanroep naar <command>freebsd-update</command>. Geef
het volgende commando om alle losse eindjes in het upgradeproces
samen te knopen:</para>
<screen>&prompt.root; <userinput>freebsd-update install</userinput></screen>
<para>Als de kernel <filename>GENERIC</filename> tijdelijk werd
gebruikt, is dit het moment om een nieuwe eigen kernel op de
gebruikelijke manier te bouwen en installeren.</para>
<para>Start de machine opnieuw op in de nieuwe &os;-versie. Het
proces is voltooid.</para>
</sect2>
<sect2 id="freebsdupdate-system-comparison">
<title>Het vergelijken van systeemtoestanden</title>
<para>Het gereedschap <command>freebsd-update</command> kan
gebruikt worden om de toestand van de geïnstalleerde versie
van &os; met een bekende goede kopie te vergelijken. Deze optie
evalueert de huidige versie van systeemgereedschappen,
bibliotheken, en instellingenbestanden. Geef het volgende
commando om met de vergelijking te beginnen:</para>
<screen>&prompt.root; <userinput>freebsd-update IDS >> uitvoerbestand.ids</userinput></screen>
<warning>
<para>Hoewel de commandonaam <acronym>IDS</acronym> is, is het
in geen geval een vervanging voor een indringdetectiesysteem
zoals <filename role="package">security/snort</filename>.
Aangezien <command>freebsd-update</command> gegevens op schijf
opslaat, is de mogelijkheid om te knoeien duidelijk. Hoewel
deze mogelijkheid verminderd kan worden door de instelling
<varname>kern.securelevel</varname> te gebruiken en de
gegevens van <command>freebsd-update</command> op een
bestandssysteem dat alleen gelezen kan worden op te slaan
wanneer deze niet gebruikt worden, zou een betere oplossing
zijn om het systeem met een veilige schijf te vergelijken,
zoals een <acronym>DVD</acronym> of een veilig opgeslagen
externe <acronym>USB</acronym>-schijf.</para>
</warning>
<para>Het systeem zal nu geïnspecteerd worden, en er zal een
lijst van hun &man.sha256.1;-hashwaarden, zowel de bekende
waarde in de uitgave en de huidige geïnstalleerde waarde,
afgebeeld worden. Hierom wordt de uitvoer naar het bestand
<filename>uitvoerbestand.ids</filename> gezonden. Het scrollt
te snel voorbij om het met het oog te vergelijken, en het vult
al snel de gehele consolebuffer op.</para>
<para>Deze regels zijn ook extreem lang, maar het uitvoerformaat
kan vrij eenvoudig geparsed worden. Geef, om bijvoorbeeld een
lijst van alle bestanden te krijgen die verschillen van die in
de uitgave, het volgende commando:</para>
<screen>&prompt.root; <userinput>cat uitvoerbestand.ids | awk '{ print $1 }' | more</userinput>
/etc/master.passwd
/etc/motd
/etc/passwd
/etc/pf.conf</screen>
<para>Deze uitvoer is afgekapt, er bestaan veel meer bestanden.
Sommige van deze bestanden hebben natuurlijke veranderingen, het
<filename>/etc/passwd</filename> is gewijzigd omdat er
gebruikers aan het systeem zijn toegevoegd. In sommige gevallen
kunnen er andere bestanden zijn, zoals kernelmodules, die
verschillen aangezien <command>freebsd-update</command> ze
ge-updated kan hebben. Voeg, om bepaalde bestanden of mappen
uit te sluiten, deze toe aan de optie
<literal>IDSIgnorePaths</literal> in
<filename>/etc/freebsd-update.conf</filename>.</para>
<para>Dit systeem kan gebruikt worden als deel van een uitgebreide
upgrademethode, afgezien van de eerder besproken versie.</para>
</sect2>
</sect1>
<sect1 id="updating-upgrading-portsnap">
<sect1info>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Geschreven door </contrib>
</author>
</authorgroup>
<authorgroup>
<author>
<firstname>Colin</firstname>
<surname>Percival</surname>
<contrib>Gebaseerd op notities geleverd door </contrib>
</author>
</authorgroup>
</sect1info>
<title>Portsnap: een updategereedschap voor de Portscollectie</title>
<indexterm><primary>updaten en upgraden</primary></indexterm>
<indexterm>
<primary>Portsnap</primary>
<see>updaten en upgraden</see>
</indexterm>
<para>Het basissysteem van &os; bevat ook een gereedschap om de
Portscollectie bij te werken: het hulpmiddel &man.portsnap.8;.
Wanneer het wordt uitgevoerd, zal het een verbinding maken met een
verre site, de veilige sleutel controleren, en een nieuwe kopie
van de Portscollectie downloaden. De sleutel wordt gebruikt om de
integriteit van alle gedownloade bestanden te controleren, om er
zeker van te zijn dat ze niet tijdens het downloaden zijn
gewijzigd. Geef het volgende commando om de nieuwste versie van
de bestanden van de Portscollectie te downloaden:</para>
<screen>&prompt.root; <userinput>portsnap fetch</userinput>
Looking up portsnap.FreeBSD.org mirrors... 9 mirrors found.
Fetching snapshot tag from geodns-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Tue May 22 02:12:15 CEST 2012 to Wed May 23 16:28:31 CEST 2012.
Fetching 3 metadata patches.. done.
Applying metadata patches... done.
Fetching 3 metadata files... done.
Fetching 90 patches.....10....20....30....40....50....60....70....80....90. done.
Applying patches... done.
Fetching 133 new ports or files... done.</screen>
<para>Dit voorbeeld laat zien dat &man.portsnap.8; verscheidene
patches heeft gevonden en deze met de huidige portsgegevens heeft
gecontroleerd. Het geeft ook aan dat het gereedschap eerder is
gedraaid, als het voor de eerste keer was gedraaid, had het
simpelweg de collectie gedownload.</para>
<para>Wanneer &man.portsnap.8; succesvol een
<command>fetch</command>-operatie afrondt, bestaan de
Portscollectie en de vervolgpatches die de verificatie doorstaan
hebben op het plaatselijke systeem. Gebruik de eerste keer dat
<command>portsnap</command> wordt uitgevoerd <literal>extract</literal>
om de gedownloade bestanden te installeren:</para>
<screen>&prompt.root; <userinput>portsnap extract</userinput>
/usr/ports/.cvsignore
/usr/ports/CHANGES
/usr/ports/COPYRIGHT
/usr/ports/GIDs
/usr/ports/KNOBS
/usr/ports/LEGAL
/usr/ports/MOVED
/usr/ports/Makefile
/usr/ports/Mk/bsd.apache.mk
/usr/ports/Mk/bsd.autotools.mk
/usr/ports/Mk/bsd.cmake.mk
<replaceable>...</replaceable></screen>
<para>Om een reeds geïnstalleerde Ports Collectie te updaten kan
er gebruik worden gemaakt van het commando
<command>portsnap update</command>:</para>
<screen>&prompt.root; <userinput>portsnap update</userinput></screen>
<para>Het proces is nu compleet, en applicaties kunnen met de
bijgewerkte Portscollectie worden geïnstalleerd of worden
bijgewerkt.</para>
<para>De bewerkingen <literal>fetch</literal> en <literal>extract</literal>
of <literal>update</literal> kunnen achter elkaar uitgevoerd worden, zoals
het volgende voorbeeld laat zien:</para>
<screen>&prompt.root; <userinput>portsnap fetch update</userinput></screen>
<para>Dit commando zal de laatste versie van de Ports Collectie downloaden
en de lokale versie bijwerken in de
<filename class="directory">/usr/ports</filename>.</para>
</sect1>
<sect1 id="updating-upgrading-documentation">
<title>De documentatie bijwerken</title>
<indexterm><primary>updaten en upgraden</primary></indexterm>
<indexterm>
<primary>documentatie</primary>
<see>updaten en upgraden</see>
</indexterm>
<para>Naast het basissysteem en de Portscollectie is documentatie
een integraal onderdeel van het besturingssysteem &os;. Hoewel
een actuele versie van de &os;-documentatie altijd beschikbaar is
op de <ulink
url="http://www.freebsd.org/doc/">&os; website</ulink>, hebben
sommige gebruikers een langzame of helemaal geen permanente
netwerkverbinding. Gelukkig zijn er verschillende manieren om de
documentatie die bij elke uitgave wordt geleverd bij te werken
door een lokale kopie van de nieuwste &os;-documentatie bij te
houden.</para>
<sect2 id="dsvn-doc">
<title><application>Subversion</application> gebruiken om de documentatie
bij te werken</title>
<para>De bronnen van de &os;-documentatie kunnen met
<application>Subversion</application> worden bijgewerkt. Deze sectie
beschrijft:</para>
<itemizedlist>
<listitem>
<para>Hoe de documentatiegereedschappen, de gereedschappen die
nodig zijn om de &os;-documentatie vanuit de broncode te
herbouwen, te installeren.</para>
</listitem>
<listitem>
<para>Hoe een kopie van de documentatiebronnen in <filename
class="directory">/usr/doc</filename> te downloaden door
<application>Subversion</application> te gebruiken.</para>
</listitem>
<listitem>
<para>Hoe de &os;-documentatie vanuit de broncode te herbouwen
en onder <filename
class="directory">/usr/share/doc</filename> te
installeren.</para>
</listitem>
<listitem>
<para>Sommige bouwopties die door het bouwsysteem van de
documentatie ondersteund worden, i.e., de opties die slechts
enkele van de verschillende vertalingen van de documentatie
bouwen of de opties die een specifiek uitvoerformaat
selecteren.</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 id="installing-documentation-toolchain">
<title><application>Subversion</application> en de
documentatiegereedschappen installeren</title>
<para>Voor het herbouwen van de &os;-documentatie vanuit de
broncode is een aardig grote verzameling gereedschappen nodig.
Deze gereedschappen zijn geen deel van het basissysteem van &os;
omdat ze een grote hoeveelheid schijfruimte nodig hebben en niet
voor alle &os;-gebruikers nuttig zijn; ze zijn alleen nuttig
voor die gebruikers die actief nieuwe documentatie voor &os;
schrijven of regelmatig hun documentatie vanuit de broncode
bijwerken.</para>
<para>Alle benodigde gereedschappen zijn beschikbaar als deel van
de Portscollectie. De port <filename
role="package">textproc/docproj</filename> is een meester-port
die door het &os; Documentatieproject is ontwikkeld om de
installatie en toekomstige updates van deze gereedschappen
makkelijker te maken.</para>
<note>
<para>Wanneer er geen &postscript;- of PDF-documentatie nodig
is, kan men overwegen om in plaats hiervan de port <filename
role="package">textproc/docproj-nojadetex</filename> te
installeren. Deze versie van de documentatiegereedschappen
bevat alles behalve de typesetting-engine
<application>teTeX</application>.
<application>teTeX</application> is een erg grote verzameling
van gereedschappen, dus kan het zinvol zijn om de installatie
ervan achterwege te laten als PDF-uitvoer niet echt nodig
is.</para>
</note>
<para><application>Subversion</application> wordt geïnstalleerd met de
port <filename role="package">textproc/docproj</filename>.</para>
</sect2>
<sect2 id="updating-documentation-sources">
<title>De documentatiebroncode bijwerken</title>
<para>Het programma <application>Subversion</application> kan een schone
kopie van de documentatiebroncode ophalen door het volgende te
typen:</para>
<screen>&prompt.root; <userinput>svn checkout <literal>svn://svn.FreeBSD.org/doc/head</literal> <filename class="directory">/usr/doc</filename></userinput></screen>
<para>De initiële download van de documentatiebroncode kan
een tijd duren. Laat het draaien totdat het voltooid is.</para>
<para>Toekomstige updates van de documentatiebroncode kunnen
opgehaald worden door het volgende commando te draaien:</para>
<screen>&prompt.root; <userinput>svn update <filename class="directory">/usr/doc</filename></userinput></screen>
<para>Nadat de broncode is uitgecheckt, wordt een alternatieve
manier om de documentatie bij te werken ondersteund door
<filename>Makefile</filename> van de map <filename
class="directory">/usr/doc</filename> door het volgende te
draaien:</para>
<screen>&prompt.root; <userinput>cd /usr/doc</userinput>
&prompt.root; <userinput>make update</userinput></screen>
</sect2>
<sect2 id="updating-documentation-options">
<title>Instelbare opties van de documentatiebroncode</title>
<para>Het bijwerk- en bouwsysteem van de &os;-documentatie
ondersteunt enkele opties die het proces om de documentatie
alleen gedeeltelijk bij te werken, of om specifieke vertalingen
te bouwen, makkelijker maken. Deze opties kunnen of als
systeemwijde opties in het bestand
<filename>/etc/make.conf</filename> worden ingesteld, of als
opdrachtregelopties aan het hulpmiddel &man.make.1; worden
doorgegeven.</para>
<para>De volgende opties zijn er enkelen van:</para>
<variablelist>
<varlistentry>
<term><makevar>DOC_LANG</makevar></term>
<listitem>
<para>De lijst van te bouwen en te installeren talen en
coderingen, bijvoorbeeld
<literal>en_US.ISO8859-1</literal> voor alleen de Engelse
documentatie.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><makevar>FORMATS</makevar></term>
<listitem>
<para>Een enkel formaat of een lijst van uitvoerformaten die
gebouwd moeten worden. Momenteel worden
<literal>html</literal>, <literal>html-split</literal>,
<literal>txt</literal>, <literal>ps</literal>,
<literal>pdf</literal>, en <literal>rtf</literal>
ondersteund.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><makevar>DOCDIR</makevar></term>
<listitem>
<para>Waar de documentatie te installeren. Dit staat
standaard op <filename
class="directory">/usr/share/doc</filename>.</para>
</listitem>
</varlistentry>
</variablelist>
<para>Bekijk &man.make.conf.5; voor meer make-variabelen die als
systeemwijde opties in &os; worden ondersteund.</para>
<para>Voor meer make-variabelen die door het bouwsysteem van
de &os;-documentatie ondersteund worden, wordt naar het <ulink
url="&url.doc.langbase;/books/fdp-primer">&os; Documentation
Project Primer for New Contributors</ulink> verwezen.</para>
</sect2>
<sect2 id="updating-installed-documentation">
<title>De &os;-documentatie vanuit de broncode installeren</title>
<para>Wanneer er een actueel snapshot van de documentatiebroncode
is opgehaald in <filename class="directory">/usr/doc</filename>,
is alles gereed om de geïnstalleerde documentatie bij te
werken.</para>
<para>Het volledig bijwerken van alle talen die in de
Makefile-optie <makevar>DOC_LANG</makevar> zijn gedefinieerd kan
worden gedaan door te typen:</para>
<screen>&prompt.root; <userinput>cd /usr/doc</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
<para>Als alleen het bijwerken van een specifieke taal gewenst is,
dan kan &man.make.1; worden aangeroepen in een taalspecifieke
submap van <filename class="directory">/usr/doc</filename>,
i.e.:</para>
<screen>&prompt.root; <userinput>cd /usr/doc/en_US.ISO8859-1</userinput>
&prompt.root; <userinput>make update install clean</userinput></screen>
<para>De te installeren uitvoerformaten kunnen worden
gespecificeerd door de make-variabele <makevar>FORMATS</makevar>
in te stellen, i.e.:</para>
<screen>&prompt.root; <userinput>cd /usr/doc</userinput>
&prompt.root; <userinput>make FORMATS='html html-split' install clean</userinput></screen>
</sect2>
<sect2 id="doc-ports">
<sect2info>
<authorgroup>
<author>
<firstname>Marc</firstname>
<surname>Fonvieille</surname>
<contrib>Gebaseerd op het werk van </contrib>
</author>
</authorgroup>
</sect2info>
<title>Documentatieports gebruiken</title>
<indexterm><primary>Updaten en upgraden</primary></indexterm>
<indexterm>
<primary>documentatiepakket</primary>
<see>Updaten en upgraden</see>
</indexterm>
<para>In de vorige sectie werd er een methode voor het bijwerken
van de &os;-documentatie vanaf de broncode gepresenteerd. Het
bijwerken gebaseerd op broncode is echter niet voor alle
&os;-systemen haalbaar of praktisch. Voor het bouwen van de
documentatiebronnen zijn een redelijk grote verzameling van
gereedschappen, de <emphasis>documentatie
gereedschapskist</emphasis>, een bepaald niveau van bekendheid
met <application>Subversion</application> en checkouts van broncode
vanuit een reservoir nodig, en een aantal handmatige stappen om
de uitgecheckte broncode te bouwen. In deze sectie wordt een
alternatieve manier beschreven om de geïnstalleerde
kopiën van de &os;-documentatie bij te werken; een die de
Ports Collectie gebruikt en het mogelijk maakt om:</para>
<itemizedlist>
<listitem>
<para>Voorgebouwde versies van de documentatie te downloaden
en te installeren, zonder iets lokaal te hoeven bouwen (op
deze manier wordt de noodzaak voor een installatie van de
gehele documentatie-gereedschapskist voorkomen).</para>
</listitem>
<listitem>
<para>De documentatiebronnen te bouwen en ze via het
ports-raamwerk te bouwen (de stappen van het uitchecken en
bouwen worden iets eenvoudiger gemaakt).</para>
</listitem>
</itemizedlist>
<para>Deze twee methoden om de &os;-documentatie bij te werken
worden ondersteund door een verzameling van
<emphasis>documentatie-ports</emphasis> die maandelijks door
het &a.doceng; worden bijgewerkt. Deze zijn vermeld in de &os;
Ports Collectie onder de virtuele categorie <ulink
url="http://www.freshports.org/docs/">docs</ulink>.</para>
<sect3 id="doc-ports-install-make">
<title>Documentatie-ports bouwen en installeren</title>
<para>De documentatie-ports gebruiken het bouwraamwerk van de
ports om het bouwen van documentatie eenvoudiger te maken. Ze
automatiseren het proces van het uitchecken van de broncode
van de documentatie, het draaien van &man.make.1; met de
juiste omgevingsinstellingen en opdrachtregelopties, en ze
maken de installatie of deïnstallatie van documentatie
net zo eenvoudig als de installatie van elke andere &os;-port
of -pakket.</para>
<note>
<para>Als een extra eigenschap registreren de
documentatie-ports, wanneer ze lokaal zijn gebouwd, een
afhankelijkheid naar de ports van de
<emphasis>documentatie-gereedschapskist</emphasis>, zodat
de laatste ook automatisch is geïnstalleerd.</para>
</note>
<para>De organisatie van de documentatie-ports is als volgt:</para>
<itemizedlist>
<listitem>
<para>Er is een <quote>meester-port</quote>, <filename
role="package">misc/freebsd-doc-en</filename>, waar de
bestanden van de documentatie-ports gevonden kunnen worden.
Het is de basis van alle documentatie-ports. Standaard
bouwt het alleen de Engelstalige documentatie.</para>
</listitem>
<listitem>
<para>Er is een <quote>alles-in-één
port</quote>, <filename
role="package">misc/freebsd-doc-all</filename>, en het
bouwt en installeert alle documentatie in alle beschikbare
talen.</para>
</listitem>
<listitem>
<para>Ten slotte is er een <quote>slaaf-port</quote> voor
elke vertaling, bijvoorbeeld <filename
role="package">misc/freebsd-doc-hu</filename> voor de
documenten in het Hongaars. Ze zijn allemaal afhankelijk
van de meester-port en installeren de vertaalde
documentatie van de respectievelijke taal.</para>
</listitem>
</itemizedlist>
<para>Gebruik de volgende commando's (als
<username>root</username>) om een documentatieport vanaf de
broncode te installeren:</para>
<screen>&prompt.root; <userinput>cd /usr/ports/misc/freebsd-doc-en</userinput>
&prompt.root; <userinput>make install clean</userinput></screen>
<para>Dit zal de Engelstalige documentatie in gesplitst
<acronym>HTML</acronym>-formaat (hetzelfde als dat op <ulink
url="http://www.FreeBSD.org"></ulink> wordt gebruikt) in de
map <filename
class="directory">/usr/local/share/doc/freebsd</filename>
bouwen en installeren.</para>
<sect4 id="doc-ports-options">
<title>Algemene knoppen en opties</title>
<para>Er zijn vele opties om het standaardgedrag van de
documentatie-ports aan te passen. Het volgende is slechts
een korte lijst:</para>
<variablelist>
<varlistentry>
<term><makevar>WITH_HTML</makevar></term>
<listitem>
<para>Staat bouwen van het HTML-formaat toe: een enkel
HTML-bestand per document. De opgemaakte documentatie
wordt naar gelang in een bestand genaamd
<filename>article.html</filename>, of
<filename>book.html</filename>, met afbeeldingen
opgeslagen.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><makevar>WITH_PDF</makevar></term>
<listitem>
<para>Staat bouwen van het &adobe; Portable Document
Format toe, te gebruiken met &adobe; &acrobat.reader;,
<application>Ghostscript</application>, of andere
PDF-lezers. De opgemaakte documentatie wordt naar
gelang opgeslagen in een bestand genaamd
<filename>article.pdf</filename> of
<filename>book.pdf</filename> opgeslagen.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><makevar>DOCBASE</makevar></term>
<listitem>
<para>Waar de documentatie te installeren. Standaard is
dit <filename
class="directory">/usr/local/share/doc/freebsd</filename>.</para>
<note>
<para>Merk op dat de standaard doelmap afwijkt van de map die
door de <application>Subversion</application>-methode wordt
gebruikt. Dit komt omdat er een port wordt
geïnstalleerd, en ports worden normaliter onder
de map <filename
class="directory">/usr/local</filename>
geïnstalleerd. Dit kan veranderd worden door
de variabele <makevar>PREFIX</makevar> toe te
voegen.</para>
</note>
</listitem>
</varlistentry>
</variablelist>
<para>Hier is een kort voorbeeld over hoe de bovengenoemde
variabelen te gebruiken om de Hongaarse documentatie in
Portable Document Format te installeren:</para>
<screen>&prompt.root; cd /usr/ports/misc/freebsd-doc-hu
&prompt.root; make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean</screen>
</sect4>
</sect3>
<sect3 id="doc-ports-install-package">
<title>Documentatiepakketten gebruiken</title>
<para>Voor het bouwen van de documentatie-ports vanaf broncode,
zoals beschreven in de vorige sectie, is een lokale
installatie van de documentatie-gereedschapskist en wat
schijfruimte voor het bouwen van de ports nodig. Wanneer de
bronnen voor het installeren van de documentatie-gereedschapskist
niet aanwezig zijn, of wanneer het bouwen vanaf broncode te
veel schijfruimte in beslag neemt, is het nog steeds mogelijk
om de vooraf gebouwde versies van de documentatie-ports te
installeren.</para>
<para>Het &a.doceng; bereidt maandelijkse versies van de &os;
documentatiepakketten voor. Deze binaire pakketten kunnen met
elk van de meegeleverde pakketgereedschappen, zoals
&man.pkg.add.1;, &man.pkg.delete.1;, enzovoorts gebruikt
worden.</para>
<note>
<para>Wanneer binaire pakketten worden gebruikt, zal de &os;
documentatie in <emphasis>alle</emphasis> beschikbare
formaten voor de gegeven taal geïnstalleerd worden.</para>
</note>
<para>Het volgende commando bijvoorbeeld zal het nieuwste vooraf
gebouwde pakket van de Hongaarse documentatie installeren:</para>
<screen>&prompt.root; <userinput>pkg_add -r hu-freebsd-doc</userinput></screen>
<note>
<para>Pakketten hebben het volgende naamformaat welke afwijkt
van de naam van de overeenkomstige port:
<literal><replaceable>taal</replaceable>-freebsd-doc</literal>.
Hier is <replaceable>taal</replaceable> het korte formaat
van de taalcode, i.e., <literal>hu</literal> voor Hongaars,
of <literal>zh_cn</literal> voor Vereenvoudigd Chinees.</para>
</note>
</sect3>
<sect3 id="doc-ports-update">
<title>Documentatieports bijwerken</title>
<para>Voor het bijwerken van een eerder geïnstalleerde
documentatieport is elk gereedschap voor het bijwerken van
ports geschikt. Het volgende commando bijvoorbeeld werkt de
geïnstalleerde Hongaarse documentatie bij via het
gereedschap <filename
role="package">ports-mgmt/portupgrade</filename> door alleen
pakketten te gebruiken:</para>
<screen>&prompt.root; <userinput>portupgrade -PP hu-freebsd-doc</userinput></screen>
</sect3>
</sect2>
</sect1>
<sect1 id="current-stable">
<title>Een ontwikkelingstak volgen</title>
<indexterm><primary>-CURRENT</primary></indexterm>
<indexterm><primary>-STABLE</primary></indexterm>
<para>Er zijn twee ontwikkeltakken voor &os;: &os.current; en
&os.stable;. Deze sectie licht beiden toe en beschrijft hoe een
systeem bijgewerkt te houden met elke tak. &os.current; wordt
eerst behandeld, daarna &os.stable;.</para>
<sect2 id="current">
<title>Bijblijven met &os;</title>
<para>Bedenk dat &os.current; het <quote>nieuwste van het
nieuwste</quote> is van &os; ontwikkeling. Van &os.current;
gebruikers wordt verwacht dat ze veel technische kennis hebben
en capabel zijn om zelfstandig lastige systeemproblemen op te
lossen. Nieuwe gebruikers van &os; kunnen het beste twee keer
nadenken alvorens het te installeren.</para>
<sect3>
<title>Wat is &os.current;?</title>
<indexterm><primary>momentopname</primary></indexterm>
<para>&os.current; is de laatste werkende set broncode voor
&os;. Dit bevat werk in uitvoering, experimentele
wijzigingen en overgangsmechanismes die mogelijk wel of niet
meegenomen worden in de volgende officiële uitgave van
het besturingssysteem. Alhoewel veel &os;-ontwikkelaars de
broncode van &os.current; dagelijks compileren, zijn er
periodes dat de broncode niet compileerbaar is. Deze
problemen worden zo snel mogelijk gerepareerd, maar het is
mogelijk dat &os.current; een ramp veroorzaakt in plaats van
dat het de gewenste functionaliteit levert. Dit ligt geheel
aan het moment waarop de broncode is opgehaald.</para>
</sect3>
<sect3>
<title>Wie heeft &os.current; nodig?</title>
<para>&os.current; is beschikbaar voor drie primaire
aandachtsgroepen:</para>
<orderedlist>
<listitem>
<para>Leden van de &os;-gemeenschap die actief werken aan
een deel van de broncode voor wie <quote>current</quote>
een echte eis is.</para>
</listitem>
<listitem>
<para>Leden van de &os;-gemeenschap die actief testen en
tijd hebben om problemen op te lossen om zeker te stellen
dat &os.current; zo gezond als mogelijk is. Er zijn ook
mensen die actuele suggesties maken over wijzigingen
en de algemene richting van &os; en die patches
opsturen om deze te implementeren.</para>
</listitem>
<listitem>
<para>Diegenen die alleen een oogje in het zeil willen
houden of de huidige bronnen gebruiken ter referentie
(bijvoorbeeld voor het <emphasis>lezen</emphasis> en
niet het draaien). Deze mensen geven ook regelmatig
commentaar of dragen bij in de code.</para>
</listitem>
</orderedlist>
</sect3>
<sect3>
<title>Wat is &os.current; <emphasis>niet</emphasis>?</title>
<orderedlist>
<listitem>
<para>Een snelle manier om pre-release versies te krijgen
omdat bekend is dat er een aantal leuke nieuwe
mogelijkheden in zitten en het leuk is deze als eerste te
gebruiken. Het als eerste gebruiken van nieuwe
mogelijkheden betekent ook de eerste zijn die nieuwe bugs
ontdekt.</para>
</listitem>
<listitem>
<para>Een snelle manier om bugfixes te krijgen. Elke
willekeurige versie van &os.current; heeft waarschijnlijk
net zoveel nieuwe bugs als dat er bugs opgelost
zijn.</para>
</listitem>
<listitem>
<para>Op welke manier dan ook
<quote>officieel ondersteund</quote>. We doen onze best
om mensen echt te helpen in één van de drie
<quote>legitieme</quote> &os.current; groepen maar er is
simpelweg <emphasis>niet genoeg tijd</emphasis> om
technische ondersteuning te leveren. Dit is niet omdat
we gemene en vervelende mensen zijn die anderen niet
willen helpen (we zouden niet eens aan &os; werken als
we dat durfden). De ontwikkelaars kunnen simpelweg geen
honderd berichten per dag beantwoorden
<emphasis>én</emphasis> aan &os; werken. Bij de
keuze tussen het verbeteren van &os; en vragen
beantwoorden over experimentele code, kiezen
ontwikkelaars voor het eerste.</para>
</listitem>
</orderedlist>
</sect3>
<sect3>
<title>&os.current; gebruiken</title>
<indexterm>
<primary>-CURRENT</primary>
<secondary>gebruiken</secondary>
</indexterm>
<orderedlist>
<listitem>
<para>Neem een abonnement op de mailinglijsten
&a.current.name; en &a.svn-src-head.name;. Dit is niet
alleen een goed idee, het is
<emphasis>essentieel</emphasis>. Geen berichten ontvangen
van de lijst <emphasis>&a.current.name;</emphasis>
betekent geen commentaar zien dat mensen maken over de
huidige staat van het systeem en dus waarschijnlijk
struikelen over problemen die anderen al gevonden en
opgelost hebben. Nog belangrijker is het missen van
belangrijke informatie die kritisch kan zijn voor een
systeem.</para>
<para>De lijst &a.svn-src-head.name; biedt de mogelijkheid
de wijzigingsboodschap te zien voor elke wijziging die
gemaakt wordt, samen met relevante informatie over
mogelijke bijwerkingen.</para>
<para>Ga om op deze lijsten of één van de
andere beschikbare lijsten te abonneren naar
&a.mailman.lists.link; en klik op de gewenste lijst.
Instructies over de rest van de procedure zijn daar
beschikbaar. Als u geïnteresseerd bent in het volgen
van veranderingen voor de gehele broncodeboom, raden wij u
aan een abonnement te nemen op de lijst
&a.svn-src-all.name;.</para>
</listitem>
<listitem>
<para>Haal de broncode van een &os;
<link linkend=" mirrors">mirrorsite</link>. Dit kan op
de volgende twee manieren:</para>
<orderedlist>
<indexterm><primary><command>cvsup</command></primary></indexterm>
<indexterm><primary><command>cron</command></primary></indexterm>
<indexterm>
<primary>-CURRENT</primary>
<secondary>Synchroniseren met
<application>CVSup</application></secondary>
</indexterm>
<listitem>
<para>Gebruik het programma <link
linkend="cvsup">cvsup</link> met de
<filename>supfile</filename> genaamd
<filename>standard-supfile</filename> uit
<filename>/usr/share/examples/cvsup</filename>. Dit
is de geadviseerde methode, omdat de gehele collectie
in één keer wordt binnengehaald en
daarna alleen hetgeen wat gewijzigd is. Veel mensen
draaien <command>cvsup</command> vanuit de
<command>cron</command> en houden daarmee hun
broncode automatisch bijgewerkt. De voorbeeld
<filename>supfile</filename> dient aangepast te
worden om <link linkend="cvsup">cvsup</link> in te
stellen voor uw omgeving.</para>
<note>
<para>Het voorbeeld
<filename>standard-supfile</filename> is bedoeld om
een specifieke beveiligingstak van &os; te volgen,
niet &os.current;. U moet dit bestand bewerken en
de volgende regel vervangen:</para>
<programlisting>*default release=cvs tag=RELENG_<replaceable>X</replaceable>_<replaceable>Y</replaceable></programlisting>
<para>door deze:</para>
<programlisting>*default release=cvs tag=.</programlisting>
<para>Voor een gedetailleerde uitleg over bruikbare
tags wordt naar de sectie <link
linkend="cvs-tags">CVS Tags</link> van het
Handboek verwezen.</para>
</note>
</listitem>
<listitem>
<para>Gebruik de faciliteit <application><link
linkend="ctm">CTM</link></application>.
Bij een <quote>slechte verbinding</quote>, dure
connecties of alleen e-mail toegang, is
<application>CTM</application> een optie. Het werkt
echter lastig en geeft mogelijk corrupte bestanden.
Dit zorgt ervoor dat het zelden gebruikt wordt, dat
de kans verhoogt dat het niet werkt voor redelijk
lange periodes. Het advies is
<application><link
linkend="cvsup">CVSup</link></application> te
gebruiken.</para>
</listitem>
</orderedlist>
</listitem>
<listitem>
<para>Als de broncode wordt opgehaald om te draaien en niet
alleen om naar te kijken, haal dan
<emphasis>alles</emphasis> op van &os.current; en niet
alleen geselecteerde delen. De reden hiervoor is dat
verschillende delen van de code afhangen van updates
op andere plekken en het compileren van een onderdeel
gegarandeerd problemen oplevert.</para>
<indexterm>
<primary>-CURRENT</primary>
<secondary>compileren</secondary>
</indexterm>
<para>Voordat &os.current; gecompileerd wordt is het
raadzaam om de <filename>Makefile</filename> in
<filename>/usr/src</filename> aandachtig te bekijken.
Het is handig om de eerste keer op zijn minst <link
linkend="makeworld">de kernel en de
<quote>wereld</quote> opnieuw te bouwen</link> als
onderdeel van het updateproces. Via de
&a.current; en <filename>/usr/src/UPDATING</filename> is
het mogelijk op de hoogte te blijven van mogelijke
wijzigingen in de opstartprocedures die soms nodig zijn
tussen verschillende versies.</para>
</listitem>
<listitem>
<para>Wees actief! Ervaringen van &os.current;-gebruikers
zijn belangrijk, zeker als het gaat om suggesties voor
verbeteringen of bugfixes. Suggesties met bijbehorende
code worden enthousiast ontvangen!</para>
</listitem>
</orderedlist>
</sect3>
</sect2>
<sect2 id="stable">
<title>&os; stabiel houden</title>
<sect3>
<title>Wat is &os.stable;?</title>
<indexterm><primary>-STABLE</primary></indexterm>
<para>&os.stable; is de ontwikkeltak waaruit grote releases
gemaakt worden. Wijzigingen in deze tak gaan in een ander
tempo en met de algemene aanname dat ze eerst in &os.current;
worden ingebracht ter test. Dit is <emphasis>nog
steeds</emphasis> een ontwikkeltak, echter dit betekent dat
op elk gegeven moment de code voor &os.stable; wel of niet
geschikt is voor een speciaal doel. Het is simpelweg een
andere ontwikkelomgeving en geen bron voor
eindgebruikers.</para>
</sect3>
<sect3>
<title>Wie heeft &os.stable; nodig?</title>
<para>Bij interesse in het bijhouden van of bijdragen aan het
&os;-ontwikkelproces, speciaal als het gerelateerd is aan de
volgende versie van &os;, is het volgen van &os.stable; het
overwegen waard.</para>
<para>Ondanks dat security fixes ook in de &os.stable;-tak
komen, hoeft dit <emphasis>niet</emphasis> per se. In elke
beveiligingswaarschuwing voor &os; wordt uitgelegd uit hoe
het probleem opgelost kan worden voor de release die het
betreft.
<footnote>
<para>Dit is niet helemaal waar. Oude releases van &os;
kunnen niet eeuwig ondersteund worden, ook al duurt
ondersteuning vele jaren. Een volledige beschrijving van
het huidige beveiligingsbeleid voor oudere releases van
&os; staat op <ulink
url="&url.base;/security/">http://www.FreeBSD.org/security/</ulink>.</para></footnote>
Het volgen van de volledige ontwikkeltak alleen om
veiligheidsredenen levert ongetwijfeld ongewenste wijzigingen
op.</para>
<para>Ondanks het voornemen ervoor te zorgen dat de
&os.stable;-tak compileert en altijd draait, wordt dit niet
gegarandeerd. Terwijl code ontwikkeld wordt in &os.current;
voordat die in &os.stable; verwerkt wordt, draaien meer
mensen &os.stable; dan &os.current;, dus het is onontkoombaar
dat bugs en randgevallen soms in &os.stable; gevonden worden
die niet in &os.current; bekend waren.</para>
<para>Om deze redenen wordt <emphasis>niet</emphasis>
aangeraden &os.stable; blindelings te volgen en het is extra
belangrijk geen productieservers bij te werken naar
&os.stable; zonder de code te testen in een
testomgeving.</para>
<para>Als de mogelijkheden om dit te doen niet beschikbaar
zijn, dan is het advies de meest recente release van &os; te
draaien en dan de binaire update methode te hanteren om bij
te werken tussen verschillende releases.</para>
</sect3>
<sect3>
<title>&os.stable; gebruiken</title>
<indexterm>
<primary>&os.stable;</primary>
<secondary>gebruiken</secondary>
</indexterm>
<orderedlist>
<listitem>
<para>Neem een abonnement op de lijst &a.stable.name;.
Deze biedt informatie over onderdelen van de build die
mogelijk verschijnen in &os.stable; of eventuele andere
kwesties die speciale aandacht vereisen. Ontwikkelaars
kondigen in deze mailinglijst ook aan wanneer ze
overwegen om een controversiële fix of aanpassing
willen maken, waardoor de gebruikers een kans hebben om
te reageren als ze goede redenen hebben tegen de
voorgestelde wijziging.</para>
<para>Wordt lid van de relevante
<application>SVN</application>-lijst voor de tak die u
volgt. Als u bijvoorbeeld de tak 7-STABLE volgt, wordt u
lid van de &a.svn-src-stable-7.name; lijst. Dit stelt u
in staat om het commit-log-bericht te bekijken voor elke
verandering die is gemaakt, tezamen met relevante
informatie over mogelijke bijwerkingen.</para>
<para>Ga om te abonneren op deze lijsten, of
één van de andere beschikbare lijsten
naar &a.mailman.lists.link; en klik op de lijst waarop
een abonnement gewenst is. Instructies over de rest van
de procedure zijn daar beschikbaar. Als u
geïnteresseerd bent in het volgen van veranderingen
voor de gehele broncodeboom, raden wij u aan een
abonnement te nemen op de &a.svn-src-all.name;
lijst.</para>
</listitem>
<listitem>
<para>Kijk op de webpagina <ulink
url="&url.base;/snapshots/">Snapshots</ulink> om een
systeem te installeren van een maandelijkse snapshot
van &os.stable;. Het is ook mogelijk om de meest recente
&os.stable; release te installeren van de <link
linkend="mirrors">mirrorsites</link>. Volg de
onderstaande instructies om een systeem bij te werken
naar de meest recente &os.stable; broncode.</para>
<para>Als al een vorige release van &os; draait en
bijgewerkt moet worden via de broncodes dan kan dat via
de &os; <link linkend="mirrors">mirrorsites</link>. Dit
kan op één van de twee volgende
manieren:</para>
<orderedlist>
<indexterm><primary><command>cvsup</command></primary></indexterm>
<indexterm><primary><command>cron</command></primary></indexterm>
<indexterm>
<primary>&os.stable;</primary>
<secondary>synchroniseren met
<application>CVSup</application></secondary>
</indexterm>
<listitem>
<para>Gebruik het programma <link
linkend="cvsup">cvsup</link> met de
<filename>supfile</filename>
<filename>stable-supfile</filename> uit de map
<filename>/usr/share/examples/cvsup</filename>.
Dit is de aanbevolen methode omdat het hiermee
mogelijk is de volledige collectie te downloaden en
daarna alleen hetgeen wat veranderd is. Veel mensen
draaien <command>cvsup</command> vanuit de
<command>cron</command> om de broncodes automatisch
bij te werken. Het voorbeeld van de
<filename>supfile</filename> dient aangepast en
ingesteld te worden voor de omgeving waarin het
instellingenbestand gebruikt wordt.</para>
</listitem>
<listitem>
<indexterm>
<primary>&os.stable;</primary>
<secondary>synchroniseren met CTM</secondary>
</indexterm>
<para>Gebruik <application><link
linkend="ctm">CTM</link></application> als er geen
snelle, goedkope verbinding is met internet. Dan is
dit de methode om te gebruiken.</para>
</listitem>
</orderedlist>
</listitem>
<listitem>
<para>Als er snelle on-demand toegang nodig is tot de
broncode en bandbreedte is geen overweging, gebruik dan
<command>cvsup</command> of <command>ftp</command>.
Gebruik anders <application>CTM</application>.</para>
</listitem>
<listitem>
<indexterm>
<primary>&os.stable;</primary>
<secondary>compileren</secondary>
</indexterm>
<para>Lees alvorens &os.stable; te compileren goed de
<filename>Makefile</filename> in
<filename>/usr/src</filename>. Het is handig om de
eerste keer op zijn minst <link linkend="makeworld">de
kernel en de <quote>wereld</quote> opnieuw te
bouwen</link> als onderdeel van het updateproces. Via
de &a.stable; en <filename>/usr/src/UPDATING</filename>
is het mogelijk op de hoogte te blijven van mogelijke
wijzigingen in de opstartprocedures die soms nodig zijn
tussen verschillende releases.</para>
</listitem>
</orderedlist>
</sect3>
</sect2>
</sect1>
<sect1 id="synching">
<title>Broncode synchroniseren</title>
<para>Er zijn verschillende manieren om een internet (of e-mail)
verbinding te gebruiken om bij te blijven met elk onderdeel van
de &os; projectbronnen of alle onderdelen, afhankelijk van
het interessegebied. De primaire diensten zijn <link
linkend="anoncvs">Anonieme CVS</link> en
<link linkend="ctm">CTM</link>.</para>
<warning>
<para>Ondanks dat het mogelijk is om alleen delen van de
broncode bij te werken, is de enige ondersteunde methode
de totale broncode bijwerken en zowel userland (alle
programma's die in gebruikersruimte draaien, zoals
programma's in <filename>/bin</filename> en
<filename>/sbin</filename>) als de kernel opnieuw compileren.
Als alleen delen van de broncode worden bijgewerkt, alleen de
kernel of alleen het userland, resulteert dat vaak in
problemen. Deze problemen kunnen verschillen van
compileerfouten tot kernel panics of corruptie van
gegevens.</para>
</warning>
<indexterm>
<primary>CVS</primary>
<secondary>anoniem</secondary>
</indexterm>
<para><application>Anonieme CVS</application> en
<application>CVSup</application> gebruiken het
<emphasis>pull</emphasis> model om broncode bij te werken. In
het geval van <application>CVSup</application> start de gebruiker
(of een <command>cron</command> script) het programma
<command>cvsup</command> waarbij het communiceert met een
<command>cvsupd</command> server om bestanden bij te werken. De
ontvangen updates zijn op de minuut nauwkeurig en ze komen alleen
wanneer dat is ingesteld. Updates kunnen eenvoudig beperkt
worden tot specifieke bestanden of mappen uit een
interessegebied. Updates worden automatisch gegenereerd door een
server, aan de hand van wat is ingesteld.
<application>Anonieme CVS</application> is veel eenvoudiger dan
<application>CVSup</application> omdat dat alleen een uitbreiding
is van <application>CVS</application> die de mogelijkheid biedt
om wijzigingen direct van een CVS repository op afstand te halen.
<application>CVSup</application> kan dit veel efficiënter
doen, maar <application>anonieme CVS</application> is makkelijker
in het gebruik.</para>
<indexterm><primary><application>CTM</application></primary></indexterm>
<para><application>CTM</application> aan de andere kant maakt geen
vergelijking tussen de aanwezige bronnen en die op de master
server. In plaats daarvan wordt een script uitgevoerd dat
wijzigingen in bestanden ziet sinds de vorige keer dat is
bijgewerkt en die meerdere keren per dag worden uitgevoerd op de
master CTM machine. Elke ontdekte wijziging wordt gecomprimeerd,
krijgt een volgnummer toegekend en wordt gecodeerd voor
verzending via e-mail (in leesbare ASCII). Deze <quote>CTM
delta's</quote> kunnen dan aangeleverd worden aan
&man.ctm.rmail.1; die ze automatisch decodeert, controleert en
toepast in de gebruikerskopie van de bronnen. Dit proces is
veel efficiënter dan <application>CVSup</application> en
claimt minder systeembronnen omdat het model
<emphasis>push</emphasis> in plaats van
<emphasis>pull</emphasis> is.</para>
<para>Er zijn andere nadelen. Als per ongeluk een deel van het
archief wordt verwijderd, kan <application>CVSup</application>
dat detecteren en het beschadigde deel repareren.
<application>CTM</application> doet dit niet en als een deel van
de broncode wordt verwijderd (en er geen back-up is), dan moet er
opnieuw begonnen worden (vanaf de meest recente CVS <quote>base
delta</quote> en moet alles opnieuw opgebouwd worden
met <application>CTM</application>. Met
<application>Anonymous CVS</application> kan simpelweg het
slechte deel verwijderd worden alvorens weer te
synchroniseren.</para>
</sect1>
<sect1 id="makeworld">
<title>De <quote>wereld</quote> opnieuw bouwen</title>
<indexterm><primary><quote>world</quote> opnieuw
bouwen</primary></indexterm>
<para>Zodra de lokale broncode gesynchroniseerd is met een
bepaalde versie van &os; (&os.stable;, &os.current;, enzovoort)
kan de broncode gebruikt worden om een systeem te
herbouwen.</para>
<warning>
<title>Maak een back-up</title>
<para>Het kan niet vaak genoeg verteld worden hoe belangrijk het
is om een back-up te maken van een systeem
<emphasis>vóór</emphasis> deze taak uit te
voeren. Ook al is het opnieuw bouwen van de wereld vrij simpel
(als deze instructies gevolgd worden), er worden ongetwijfeld
ooit fouten gemaakt, misschien zelfs in de broncode, die het
onmogelijk maken om een systeem op te starten.</para>
<para>Wees ervan verzekerd dat er een back-up gemaakt is en dat er
een reparatiediskette of cd-rom bij de hand is. Deze wordt
waarschijnlijk nooit gebruikt maar <quote>better safe than
sorry</quote>.</para>
</warning>
<warning>
<title>Abonneer op de juiste mailinglijsten</title>
<indexterm><primary>mailinglijst</primary></indexterm>
<para>De &os.stable; en &os.current; takken zijn van nature
<emphasis>in ontwikkeling</emphasis>. Mensen die bijdragen
aan &os; zijn menselijk en foutjes ontstaan regelmatig.</para>
<para>Soms zijn deze foutjes onschadelijk, ze geven dan hooguit
een nieuwe diagnostische waarschuwing weer. Maar de wijziging
kan ook catastrofaal zijn en ervoor zorgen dat een systeem niet
meer opstart of bestandssystemen vernietigt (of erger).</para>
<para>Als problemen zoals deze voorkomen wordt er een
<quote>heads up</quote> naar de juiste mailinglijst gestuurd,
waarin uitgelegd wordt wat het probleem is en welke systemen
het raakt. Er wordt een <quote>all clear</quote> bericht
gestuurd als het probleem is opgelost.</para>
<para>&os.stable; of &os.current; volgen zonder de &a.stable; of
&a.current; te volgen is vragen om problemen.</para>
</warning>
<warning>
<title>Gebruik geen <command>make world</command></title>
<para>Veel oudere documentatie raadt aan om <command>make
world</command> te gebruiken. In dat geval worden er
belangrijke stappen overgeslagen en gebruik het commando alleen
als er voldoende kennis over aanwezig is. In bijna alle
omstandigheden is <command>make world</command> verkeerd en
de procedure die hier beschreven is hoort in plaats daarvan
gebruikt te worden.</para>
</warning>
<sect2 id="canonical-build">
<title>De universele wijze om een systeem bij te werken</title>
<para>Om uw systeem bij te werken, dient u
<filename>/usr/src/UPDATING</filename> te controleren op
eventuele pre-buildworld stappen die nodig zijn voor uw versie
van de broncode en daarna de procedure te gebruiken die hier
beschreven staat.</para>
<para>Deze bijwerkstappen nemen aan dat u nu een oude versie van
&os; gebruikt, die uit een oude compiler, een oude kernel, een
oude wereld en oude instellingenbestanden bestaat. Onder
<quote>wereld</quote> worden de binairen, bibliotheken, en
programmeerbestanden van het kernsysteem verstaan. De compiler
is deel van <quote>wereld</quote>, maar heeft enkele speciale
aandachtspunten.</para>
<para>We nemen ook aan dat u reeds de broncode van een nieuwer
systeem heeft verkregen. Bekijk, als de bronnen op een bepaald
systeem ook oud zijn, <xref linkend="synching"/> voor uitgebreide
hulp over het synchroniseren ervan naar een nieuwere
versie.</para>
<para>Het bijwerken van het systeem vanaf de broncode is wat
subtieler dan het op het eerste gezicht lijkt, en de
ontwikkelaars van &os; vonden het in de loop der jaren nodig om
de aangeraden methode redelijk drastisch te veranderen met het
aan het licht komen van nieuwe soorten onontwijkbare
afhankelijkheden. De rest van deze sectie beschrijft de
rationale achter de huidige aanbevolen bijwerkmethode.</para>
<para>Elke succesvolle bijwerkmethode krijgt te maken met de
volgende punten:</para>
<itemizedlist>
<listitem>
<para>Het kan voorkomen dat de oude compiler de nieuwe kernel
niet kan compileren. (Oude compilers bevatten soms bugs.)
De nieuwe kernel dient dus met de nieuwe compiler gebouwd te
worden. In het bijzonder moet de nieuwe compiler gebouwd
worden voordat de nieuwe kernel gebouwd wordt. Dit betekent
niet per se dat de nieuwe compiler
<emphasis>geïnstalleerd</emphasis> moet worden voordat
de nieuwe kernel gebouwd wordt.</para>
</listitem>
<listitem>
<para>De nieuwe wereld kan afhankelijk zijn van mogelijkheden
van de nieuwe kernel. Dus moet de nieuwe kernel worden
geïnstalleerd voordat de nieuwe wereld wordt
geïnstalleerd.</para>
</listitem>
</itemizedlist>
<para>De eerste twee gevallen zijn de basis voor de methode
<maketarget>buildworld</maketarget>,
<maketarget>buildkernel</maketarget>,
<maketarget>installkernel</maketarget>,
<maketarget>installworld</maketarget> die we in de volgende
paragrafen beschrijven. Dit is geen uitputtende lijst van alle
redenen waarom het huidige aanbevolen bijwerkproces de voorkeur
verdient. Wat minder voor de hand liggende redenen worden
hieronder genoemd:</para>
<itemizedlist>
<listitem>
<para>Het kan zijn dat de oude wereld niet correct draait op
de nieuwe kernel, dus moet de nieuwe wereld onmiddellijk na
het installeren van de nieuwe kernel geïnstalleerd
worden.</para>
</listitem>
<listitem>
<para>Sommige instellingen moeten veranderd worden voordat de
nieuwe wereld wordt geïnstalleerd, maar anderen kunnen
de oude wereld kapot maken. Vandaar dat over het algemeen
twee verschillende bijwerkstappen voor de instellingen nodig
zijn.</para>
</listitem>
<listitem>
<para>Voor het grootste gedeelte houdt het bijwerkproces zich
alleen bezig met het vervangen of toevoegen van bestanden;
bestaande oude bestanden worden niet verwijderd. Dit kan in
sommige gevallen problemen geven. Als een gevolg zal de
bijwerkprocedure soms aangeven dat bepaalde bestanden
tijdens bepaalde stappen handmatig verwijderd dienen te
worden. Dit kan in de toekomst eventueel geautomatiseerd
worden.</para>
</listitem>
</itemizedlist>
<para>Deze zorgen hebben tot het volgende aanbevolen bijwerkproces
geleid. Merk op dat het gedetailleerde proces voor bepaalde
updates aanvullende stappen nodig kan hebben, maar dit
kernproces zou de komende tijd ongewijzigd moeten
blijven:</para>
<orderedlist>
<listitem>
<para><command>make
<maketarget>buildworld</maketarget></command></para>
<para>Dit compileert eerst de nieuwe compiler en enkele
aanverwante gereedschappen, daarna wordt de nieuwe compiler
gebruikt om de rest van de nieuwe wereld te compileren. Het
resultaat komt in <filename
class="directory">/usr/obj</filename> te staan.</para>
</listitem>
<listitem>
<para><command>make
<maketarget>buildkernel</maketarget></command></para>
<para>In tegenstelling tot de oude aanpak, die &man.config.8;
en &man.make.1; gebruikt, gebruikt dit de
<emphasis>nieuwe</emphasis> compiler die in <filename
class="directory">/usr/obj</filename> verblijft. Dit
beschermt u tegen mismatches tussen de compiler en de
kernel.</para>
</listitem>
<listitem>
<para><command>make
<maketarget>installkernel</maketarget></command></para>
<para>Plaatst de nieuwe kernel en kernelmodules op de schijf,
waardoor het mogelijk wordt om met de nieuw bijgewerkte
kernel op te starten.</para>
</listitem>
<listitem>
<para>Start opnieuw op in enkele-gebruikersmodus.</para>
<para>De enkele-gebruikersmodus minimaliseert problemen met
het bijwerken van software die al draait. Het minimaliseert
ook problemen die opduiken door een oude wereld op een
nieuwe kernel te draaien.</para>
</listitem>
<listitem>
<para><command>mergemaster <option>-p</option></command></para>
<para>Dit voert wat initiële updates aan
instellingenbestanden uit ter voorbereiding op de nieuwe
wereld. Het kan bijvoorbeeld nieuwe gebruikersgroepen aan
het systeem, of nieuwe gebruikersnamen aan de
wachtwoorddatabase toevoegen. Dit is vaak nodig wanneer er
nieuwe groepen of speciale accounts voor systeemgebruikers
zijn toegevoegd sinds de laatste keer bijwerken, zodat de
stap <maketarget>installworld</maketarget> zonder problemen
de nieuw geïnstalleerde namen van systeemgebruikers of
systeemgroepen kan gebruiken.</para>
</listitem>
<listitem>
<para><command>make
<maketarget>installworld</maketarget></command></para>
<para>Kopieert de wereld van <filename
class="directory">/usr/obj</filename>. U heeft nu een
nieuwe kernel en een nieuwe wereld op schijf staan.</para>
</listitem>
<listitem>
<para><command>mergemaster</command></para>
<para>Nu kunt u de overgebleven instellingenbestanden
bijwerken, aangezien u een nieuwe wereld op schijf heeft
staan.</para>
</listitem>
<listitem>
<para>Start opnieuw op.</para>
<para>Een volledige nieuwe start van de machine is nodig om de
nieuwe kernel en de nieuwe wereld met nieuwe
instellingenbestanden te laden.</para>
</listitem>
</orderedlist>
<para>Merk op dat als u van de ene uitgave van dezelfde tak van
&os; bijwerkt naar een recentere uitgave van dezelfde tak, i.e.
van 7.0 naar 7.1, dat deze procedure dan niet absoluut nodig is,
aangezien het onwaarschijnlijk is dat u serieuze problemen
krijgt met de compiler, kernel, gebruikersland en
instellingenbestanden. De oudere aanpak met <command>make
<maketarget>world</maketarget></command> gevolgd door het
bouwen en installeren van een nieuwe kernel kan voor kleine
updates goed genoeg zijn.</para>
<para>Maar mensen die deze procedure niet volgen tijdens het
bijwerken tussen grote uitgaven kunnen wat problemen
verwachten.</para>
<para>Het is ook goed om op te merken dat veel upgrades (i.e.
4.<replaceable>X</replaceable> naar 5.0) wat specifieke
aanvullende stappen nodig hebben (bijvoorbeeld het hernoemen of
verwijderen van specifieke bestanden voorafgaand aan
installworld). Lees het bestand
<filename>/usr/src/UPDATING</filename> zorgvuldig, met name het
einde, waar het huidig aangeraden bijwerkproces expliciet wordt
beschreven.</para>
<para>Deze procedure is in de loop der tijd veranderd aangezien de
ontwikkelaars zagen dat het onmogelijk was om bepaalde
mismatch-problemen volledig te voorkomen. Hopelijk blijft de
huidige procedure voor een lange tijd stabiel.</para>
<para>Samengevat is de huidige aanbevolen manier om &os; vanaf
broncode bij te werken:</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make buildworld</userinput>
&prompt.root; <userinput>make buildkernel</userinput>
&prompt.root; <userinput>make installkernel</userinput>
&prompt.root; <userinput>shutdown -r now</userinput></screen>
<note>
<para>Er zijn een aantal zeldzame gevallen waarin
<command>mergemaster -p</command> nog een keer moet draaien
voor de stap met <maketarget>buildworld</maketarget>. Deze
staan beschreven in <filename>UPDATING</filename>. In het
algemeen kan deze stap echter zonder risico worden
overgeslagen als er niet tussen een of meer hoofdversies
wordt bijgewerkt.</para>
</note>
<para>Nadat <maketarget>installkernel</maketarget> succesvol is
afgerond, dient er in single-user modus opgestart te worden
(met <command>boot -s</command> vanaf de loaderprompt). Draai
dan:</para>
<screen>&prompt.root; <userinput>mount -u /</userinput>
&prompt.root; <userinput>mount -a -t ufs</userinput>
&prompt.root; <userinput>adjkerntz -i</userinput>
&prompt.root; <userinput>mergemaster -p</userinput>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make installworld</userinput>
&prompt.root; <userinput>mergemaster</userinput>
&prompt.root; <userinput>reboot</userinput></screen>
<warning>
<title>Lees verdere uitleg</title>
<para>De hierboven beschreven volgorde is alleen een korte
samenvatting. Ook de volgende secties lezen geeft een beter
beeld van elke stap, met name als er een op maat gemaakte
kernelinstelling wordt gebruikt.</para>
</warning>
</sect2>
<sect2 id="src-updating">
<title><filename>/usr/src/UPDATING</filename> lezen</title>
<para>Lees voor verder te gaan
<filename>/usr/src/UPDATING</filename> (of het gelijknamige
bestand waar de kopie van de broncode ook staat). Dit bestand
kan belangrijke informatie bevatten over mogelijke problemen of
specificeert de volgorde waarin bepaalde commando's gestart
moeten worden. Als <filename>UPDATING</filename> tegenstrijdig
is met wat hier wordt beschreven, heeft
<filename>UPDATING</filename> voorrang.</para>
<important>
<para><filename>UPDATING</filename> lezen is geen acceptabele
vervanging voor het abonneren op de correcte mailinglijst
zoals eerder beschreven. De twee vullen elkaar aan en zijn
niet exclusief.</para>
</important>
</sect2>
<sect2 id="make-conf">
<title><filename>/etc/make.conf</filename> controleren</title>
<indexterm><primary><filename>make.conf</filename></primary></indexterm>
<para>Controleer
<filename>/usr/share/examples/etc/make.conf</filename>
en <filename>/etc/make.conf</filename>. Het
eerste bestand bevat standaard definities, waarvan de meeste
uitgecommentarieerd zijn. Om hiervan gebruik te maken als het
systeem opnieuw opgebouwd wordt vanuit de broncode, moeten ze
toegevoegd worden aan <filename>/etc/make.conf</filename>.
Bedenk dat alles wat toegevoegd wordt aan
<filename>/etc/make.conf</filename> ook gebruikt wordt bij elk
<command>make</command> commando. Het is dus verstandig om
daar redelijke waardes in te vullen voor een systeem.</para>
<para>Een typische gebruiker wil waarschijnlijk de regel
<makevar>NO_PROFILE</makevar> uit
<filename>/usr/share/examples/etc/make.conf</filename>
kopiëren naar <filename>/etc/make.conf</filename> en het
commentaar verwijderen.</para>
<para>Bekijk de andere definities, zoals <makevar>NOPORTDOCS</makevar> en
bepaal of deze relevant zijn.</para>
</sect2>
<sect2 id="updating-etc">
<title><filename>/etc</filename> bijwerken</title>
<para>De map <filename>/etc</filename> bevat een groot deel van
de systeeminstellingen en scripts die gestart worden tijdens de
systeemstart. Sommige van deze scripts verschillen van versie
tot versie in &os;.</para>
<para>Sommige van de instellingenbestanden worden dagelijks
gebruikt voor het draaien van een systeem. In het bijzonder
<filename>/etc/group</filename>.</para>
<para>Er zijn gevallen geweest waarbij het installatiegedeelte
van <command>make installworld</command> een aantal
gebruikersnamen of groepen verwachtte. Als er een upgrade
wordt uitgevoerd is het waarschijnlijk dat deze gebruikers of
groepen niet bestaan. Dit levert problemen op bij upgraden.
In sommige gevallen controleert <command>make
buildworld</command> of deze gebruikers of groepen
bestaan.</para>
<para>Een voorbeeld hiervan is het toevoegen van de gebruiker
<username>smmsp</username>. Gebruikers hadden een falend
installatieproces toen &man.mtree.8; probeerde om
<filename>/var/spool/clientmqueue</filename> te
creëren.</para>
<para>&man.mergemaster.8; kan in voorbereidende modus gedraaid
worden als de optie <option>-p</option> wordt meegegeven. Dan
worden alleen de bestanden vergeleken die essentieel zijn voor
het succes van <maketarget>buildworld</maketarget> of
<maketarget>installworld</maketarget>:</para>
<tip>
<para>In <quote>paranoide beheerdersmodus</quote> kan er
gecontroleerd worden welke bestanden op een systeem eigendom
zijn van de groep die wordt hernoemd of verwijderd:</para>
<screen>&prompt.root; <userinput>find / -group <replaceable>GID</replaceable> -print</userinput></screen>
<para>Dit commando toont alle bestanden die eigendom zijn van
de groep <replaceable>GID</replaceable> (een groepsnaam of
een numeriek groeps-ID).</para>
</tip>
</sect2>
<sect2 id="makeworld-singleuser">
<title>Systeem naar single-user modus brengen</title>
<indexterm><primary>single-user modus</primary></indexterm>
<para>Het kan zijn dat een systeem in single-user modus
gecompileerd moet worden. Buiten het duidelijke voordeel dat
de operatie iets sneller verloopt, is het voordeel dat bij een
herinstallatie van een systeem een aantal belangrijke
systeembestanden waaronder binaire systeembestanden,
bibliotheken, include bestanden, enzovoort, worden aangepast,
iets wat op een actief systeem vragen om problemen is (zeker
als er actieve gebruikers op een systeem aanwezig zijn).</para>
<indexterm><primary>multi-user modus</primary></indexterm>
<para>Een andere methode is het systeem compileren in multi-user
modus en daarna naar single-user modus gaan voor de
installatie. Bij deze methode moeten de volgende stappen
gevolgd worden. Het overschakelen naar single-user modus kan
uitgesteld worden tot en met
<maketarget>installkernel</maketarget> of
<maketarget>installworld</maketarget>.</para>
<para>Een supergebruiker kan als volgt een draaiend systeem naar
single-user modus overgeschakelen:</para>
<screen>&prompt.root; <userinput>shutdown now</userinput></screen>
<para>Als alternatief kan tijdens het opstarten de optie
<option>single user</option> worden gekozen. Het systeem start dan
in single-user modus. Op de shell prompt moet dan worden
ingegeven:</para>
<screen>&prompt.root; <userinput>fsck -p</userinput>
&prompt.root; <userinput>mount -u /</userinput>
&prompt.root; <userinput>mount -a -t ufs</userinput>
&prompt.root; <userinput>swapon -a</userinput></screen>
<para>Hierdoor worden de bestandssystemen gecontroleerd,
<filename>/</filename> met lees en schrijf rechten opnieuw
gemount, worden alle andere UFS bestandssystemen die in
<filename>/etc/fstab</filename> staan gemount en wordt swap
ingeschakeld.</para>
<note>
<para>Als de CMOS-klok ingesteld is naar de lokale tijd en
niet naar GMT (dit is waar als het resultaat van
&man.date.1; niet de correcte tijd en zone weergeeft), dan
is het misschien handig om het volgende commando te
starten:</para>
<screen>&prompt.root; <userinput>adjkerntz -i</userinput></screen>
<para>Dit zorgt ervoor dat de lokale tijdzoneinstellingen
correct ingesteld worden. Zonder deze instelling kunnen er
later problemen ontstaan.</para>
</note>
</sect2>
<sect2 id="cleaning-usr-obj">
<title><filename>/usr/obj</filename> verwijderen</title>
<para>Als delen van een systeem opnieuw gebouwd worden, worden ze
standaard geplaatst in mappen onder
<filename>/usr/obj</filename>. Deze mappen schaduwen de mappen
onder <filename>/usr/src</filename>.</para>
<para>Het proces <command>make buildworld</command> kan versneld
worden en problemen met afhankelijkheden kunnen voorkomen
worden als deze map wordt verwijderd.</para>
<para>Sommige bestanden onder <filename>/usr/obj</filename>
hebben mogelijk de optie <quote>niet aanpassen</quote>
ingesteld (zie &man.chflags.1;) die eerst verwijderd moet
worden:</para>
<screen>&prompt.root; <userinput>cd /usr/obj</userinput>
&prompt.root; <userinput>chflags -R noschg *</userinput>
&prompt.root; <userinput>rm -rf *</userinput></screen>
</sect2>
<sect2 id="updating-upgrading-recompilebase">
<title>Broncode van het basissysteem hercompileren</title>
<sect3>
<title>Uitvoer bewaren</title>
<para>Het is een goed idee om de uitvoer van &man.make.1; te
bewaren in een ander bestand. Als er iets misgaat is er een
kopie van de foutmelding aanwezig. Hoewel dit misschien niet
helpt in de diagnose van wat er fout is gegaan, kan het
anderen helpen als het probleem wordt aangegeven in
een &os; mailinglijst.</para>
<para>De makkelijkste manier om dit te doen is door het
commando &man.script.1; te gebruiken, met een parameter
die de naam specificeert waar de uitvoer naartoe moet. Dit
moet direct gedaan worden vóór het herbouwen
van de wereld, zodat het proces klaar is moet
<userinput>exit</userinput> worden ingegeven:</para>
<screen>&prompt.root; <userinput>script /var/tmp/mw.out</userinput>
Script started, output file is /var/tmp/mw.out
&prompt.root; <userinput>make TARGET</userinput>
<emphasis>… compile, compile, compile …</emphasis>
&prompt.root; <userinput>exit</userinput>
Script done, …</screen>
<para>Bewaar de uitvoer in deze stap <emphasis>niet</emphasis>
in <filename>/tmp</filename>. Deze map wordt mogelijk
opgeschoond tijdens de volgende herstart. Een betere plaats
om dit bestand te bewaren is de map
<filename>/var/tmp</filename> (zoals in het vorige voorbeeld)
of in de thuismap van <username>root</username>.</para>
</sect3>
<sect3 id="make-buildworld">
<title>Basissysteem compileren</title>
<para>Ga naar de map <filename>/usr/src</filename>, tenzij de
broncode ergens anders staat, in welk geval naar die map
gegaan moet worden:</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput></screen>
<indexterm><primary><command>make</command></primary></indexterm>
<para>Om de wereld opnieuw te bouwen moet het commando
&man.make.1; gebruikt worden. Dit commando leest zijn
instructies uit het bestand <filename>Makefile</filename>,
dat beschrijft hoe de programma's die samen &os; vormen
moeten worden gebouwd, in welke volgorde ze gebouwd moeten
worden, enzovoort.</para>
<para>Het algemene formaat van de commandoregel die gebruikt
moet worden is als volgt:</para>
<screen>&prompt.root; <userinput>make -<replaceable>x</replaceable> -D<replaceable>VARIABELE</replaceable> <replaceable>doel</replaceable></userinput></screen>
<para>In dit voorbeeld is de optie
<option>-<replaceable>x</replaceable></option> een optie die
wordt meegegeven aan &man.make.1;. In de hulppagina voor
&man.make.1; staat een voorbeeld van de opties die meegegeven
kunnen worden.</para>
<para><option>-D<replaceable>VARIABELE</replaceable></option>
geeft een variabele door aan <filename>Makefile</filename>.
Het gedrag van <filename>Makefile</filename> wordt
beïnvloed door deze variabele. Dit zijn dezelfde
variabelen die ingesteld worden in
<filename>/etc/make.conf</filename>. Deze optie biedt een
alternatief om deze opties in te stellen.</para>
<screen>&prompt.root; <userinput>make -DNO_PROFILE <replaceable>doel</replaceable></userinput></screen>
<para>Het bovenstaande commando is een andere manier om aan te
geven dat geprofileerde bibliotheken niet gebouwd moeten
worden en correspondeert met de onderstaande regel in
<filename>/etc/make.conf</filename>:</para>
<programlisting>NO_PROFILE= true # Avoid compiling profiled libraries</programlisting>
<para><replaceable>doel</replaceable> geeft &man.make.1; aan
wat er gedaan moet worden. Elke
<filename>Makefile</filename> definieert een aantal van
verschillende doelen en het gekozen doel bepaalt wat er
gebeurt.</para>
<para>Sommige doelen staan vermeld in het bestand
<filename>Makefile</filename>, maar zijn niet geschikt om
direct te starten. Integendeel, deze worden gebruikt door
het bouwproces om de benodigde stappen onder te
verdelen.</para>
<para>In veel gevallen hoeven er geen parameters te worden
meegegeven aan &man.make.1; en dus ziet de commando regel er
als volgt uit:</para>
<screen>&prompt.root; <userinput>make <replaceable>doel</replaceable></userinput></screen>
<para>Waar <replaceable>doel</replaceable> een van de vele
bouw opties is. De eerste target moet echter altijd
<makevar>buildworld</makevar> zijn.</para>
<para>Zoals de namen impliceren bouwt
<maketarget>buildworld</maketarget> een compleet nieuwe boom
onder <filename>/usr/obj</filename> en
<maketarget>installworld</maketarget>, een andere target,
installeert deze boom op de huidige machine.</para>
<para>Het hebben van verschillende opties is handig om twee
redenen. Als eerste biedt het
de mogelijkheid om de bouw veilig te doen met de wetenschap
dat geen enkel draaiend onderdeel van een systeem geraakt
wordt. De bouw is <quote>zelf ondersteunend</quote>.
Hierdoor kan veilig in multi-user modus
<maketarget>buildworld</maketarget> gedraaid worden. Het
wordt echter nog steeds aangeraden om
<maketarget>installworld</maketarget> in single-user modus te
starten.</para>
<para>Ten tweede geeft het de mogelijkheid om NFS-mounts te
gebruiken om meerdere machines in het netwerk bij te werken.
Als er drie machines zijn, <hostid>A</hostid>,
<hostid>B</hostid> en <hostid>C</hostid>, die bijgewerkt
moeten worden, dan kunnen <command>make buildworld</command>
en <command>make installworld</command> gedraaid worden op
<hostid>A</hostid> waarna <hostid>B</hostid> en
<hostid>C</hostid> een NFS-mount kunnen opzetten naar
<filename>/usr/src</filename> en
<filename>/usr/obj</filename> op machine <hostid>A</hostid>
waarna <command>make installworld</command> gedraaid kan
worden op <hostid>B</hostid> en <hostid>C</hostid> om de
resultaten de installeren.</para>
<para>Alhoewel het doel <maketarget>world</maketarget> nog wel
bestaat wordt het gebruik ervan sterk
<emphasis>afgeraden</emphasis>.</para>
<para>Voer het volgende commando uit:</para>
<screen>&prompt.root; <userinput>make buildworld</userinput></screen>
<para>Het is mogelijk om de optie <option>-j</option> mee te
geven aan <command>make</command>, wat resulteert in meerdere
processen die tegelijkertijd draaien. Dit heeft het meeste
effect op machines met meerdere processoren. Echter, omdat
het compilatieproces meer IO-gericht is dan processorgericht,
kan het ook nuttig zijn op systemen met één
processor.</para>
<para>Start als volgt op een systeem met één
processor:</para>
<screen>&prompt.root; <userinput>make -j4 buildworld</userinput></screen>
<para>&man.make.1; draait dan maximaal 4 processen
tegelijkertijd. In het algemeen blijkt uit de mailinglijsten
dat dit de beste resultaten geeft.</para>
<para>Als er meerdere processoren in een systeem zitten en
gebruik gemaakt wordt van een SMP kernel, probeer dan waardes
tussen de 6 en 10 en bekijk hoe het systeem reageert.</para>
</sect3>
<sect3>
<title>Doorlooptijd</title>
<indexterm>
<primary><quote>world</quote> opnieuw bouwen</primary>
<secondary>doorlooptijd</secondary>
</indexterm>
<para>Veel factoren bepalen de doorlooptijd van het bouwen van
een boom, maar redelijk recente machines doen er maar 1 tot
2 uur over om de &os.stable; boom te bouwen.
zonder extra trucjes. Een &os.current; boom kan wat langer
duren.</para>
</sect3>
</sect2>
<sect2 id="new-kernel">
<title>Nieuwe kernel compileren en installeren</title>
<indexterm>
<primary>kernel</primary>
<secondary>compileren</secondary>
</indexterm>
<para>Om volledig gebruik te maken van het nieuwe systeem moet de
kernel opnieuw gecompileerd worden. Dit is bijna altijd nodig
omdat sommige geheugenstructuren mogelijkerwijs veranderd zijn
en programma's als &man.ps.1; en &man.top.1; niet werken totdat
de kernel en de broncode dezelfde versie hebben.</para>
<para>De simpelste en makkelijkste manier om dit te doen is
om een kernel te maken die gebaseerd is op
<filename>GENERIC</filename>. Ondanks dat
<filename>GENERIC</filename> mogelijk niet alle benodigde
apparaten heeft voor een systeem, hoort het alles te bevatten
dat nodig is om een systeem te starten in single-user modus.
Dit is een goede test op de correcte werking van een nieuw
systeem. Na het opstarten van <filename>GENERIC</filename> en
een systeemcontrole kan erna een nieuwe kernel gebouwd worden
gebaseerd op een aangepast kernelinstellingenbestand.</para>
<para>Op &os; is het belangrijk om de
<link linkend="make-buildworld">wereld opnieuw te bouwen</link>
voordat een nieuwe kernel gebouwd wordt.</para>
<note>
<para>Als een aangepaste kernel gemaakt moet worden en er reeds
een instellingenbestand aanwezig is, gebruik dan
<literal>KERNCONF=<replaceable>MYKERNEL</replaceable></literal>
als volgt:</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make buildkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput>
&prompt.root; <userinput>make installkernel KERNCONF=<replaceable>MYKERNEL</replaceable></userinput></screen>
</note>
<para>Let op dat als <literal>kern.securelevel</literal> een
waarde hoger dan 1 heeft <emphasis>of</emphasis>
<literal>noschg</literal> of gelijksoortige opties geplaatst
zijn op het binaire kernelbestand, is het misschien nodig om
terug te gaan naar single-user modus om
<maketarget>installkernel</maketarget> uit te voeren. In
andere gevallen moet het mogelijk zijn om deze commando's
zonder problemen uit te voeren in multi-user modus. Zie
&man.init.8; voor meer informatie over
<literal>kern.securelevel</literal> en &man.chflags.1; voor
informatie over diverse bestandsopties.</para>
</sect2>
<sect2 id="new-kernel-singleuser">
<title>Opnieuw opstarten in single-user modus</title>
<indexterm><primary>single-user modus</primary></indexterm>
<para>Start met de instructies in <xref
linkend="makeworld-singleuser"/> in single-user modus op om te
testen of de nieuwe kernel werkt.</para>
</sect2>
<sect2 id="post-installworld-updates">
<title>Nieuwe binaire systeembestanden installeren</title>
<para>Na het draaien van <command>make buildworld</command> kan
nu <maketarget>installworld</maketarget> gebruikt worden om de
nieuwe binaire systeembestanden te installeren.</para>
<para>Voer de volgende commando's uit:</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make installworld</userinput></screen>
<note>
<para>Als er variabelen gespecificeerd zijn op de commandoregel
van <command>make buildworld</command> moeten dezelfde
variabelen gebruikt worden op de commandoregel van
<command>make installworld</command>. Dit is niet per se
waar voor opties zoals <option>-j</option>, die nooit
gebruikt mogen worden met
<maketarget>installworld</maketarget>.</para>
<para>Als bijvoorbeeld het volgende commando is
uitgevoerd:</para>
<screen>&prompt.root; <userinput>make -DNO_PROFILE buildworld</userinput></screen>
<para>Dan moet het resultaat geïnstalleerd worden
met:</para>
<screen>&prompt.root; <userinput>make -DNO_PROFILE installworld</userinput></screen>
<para>Anders wordt geprobeerd geprofileerde bibliotheken te
installeren die niet gebouwd zijn tijdens de fase
<command>make buildworld</command>.</para>
</note>
</sect2>
<sect2 id="make-installworld">
<title>Bestanden bijwerken die niet bijgewerkt zijn door
<command>make installworld</command></title>
<para>Het herbouwen van de wereld werkt bepaalde mappen niet
bij (in het bijzonder <filename>/etc</filename>,
<filename>/var</filename> en <filename>/usr</filename>) met
nieuwe of gewijzigde instellingenbestanden.</para>
<para>De simpelste manier om deze bestanden bij te werken is door
&man.mergemaster.8; te gebruiken, maar het is ook mogelijk
dit handmatig te doen. Welke manier er ook gekozen wordt, zorg
er altijd voor dat een back-up van <filename>/etc</filename>
beschikbaar is voor het geval er iets misgaat.</para>
<sect3 id="mergemaster">
<sect3info>
<authorgroup>
<author>
<firstname>Tom</firstname>
<surname>Rhodes</surname>
<contrib>Bijgedragen door </contrib>
</author>
</authorgroup>
</sect3info>
<title><command>mergemaster</command></title>
<indexterm><primary><command>mergemaster</command></primary></indexterm>
<para>Het hulpprogramma &man.mergemaster.8; is een Bourne script
dat helpt bij het bepalen van de verschillen tussen de
instellingenbestanden in <filename>/etc</filename> en de
instellingenbestanden in de broncodeboom
<filename>/usr/src/etc</filename>. Deze methode wordt
aangeraden om instellingenbestanden van een systeem bijgewerkt
te houden met de bestanden die in de broncodeboom staan.</para>
<para>Het programma wordt gestart met
<command>mergemaster</command> op de commandoregel en geeft dan
resultaten weer. <command>mergemaster</command> bouwt dan een
tijdelijke root omgeving vanaf <filename>/</filename> en vult
deze met diverse instellingenbestanden voor een systeem. Deze
bestanden worden vergeleken met de bestanden die
geïnstalleerd zijn op een systeem. Op dit punt worden de
bestanden getoond die verschillen in het &man.diff.1;-formaat,
met een <option>+</option> voor toegevoegde of gewijzigde
regels en een <option>-</option> voor regels die verwijderd of
vervangen zijn. In de hulppagina voor &man.diff.1; staat meer
informatie over de syntaxis van &man.diff.1; en hoe
bestandsverschillen getoond worden.</para>
<para>&man.mergemaster.8; toont dan elk bestand dat verschilt en
op dit moment is er de mogelijkheid om of het nieuwe bestand te
verwijderen (ofwel het tijdelijke bestand), het tijdelijke
bestand te installeren zonder enige wijzigingen, het verwerken
van het oude bestand in het nieuwe bestand of de resultaten van
&man.diff.1; nogmaals te tonen.</para>
<para>Als gekozen wordt om het tijdelijke bestand te verwijderen,
geeft dit &man.mergemaster.8; aan dat het huidige bestand niet
gewijzigd dient te worden en de nieuwe versie verwijderd kan
worden. Deze optie wordt niet aangeraden, behalve als er geen
reden is om het huidige bestand aan te passen. Op ieder moment
kunnen hulpteksten getoond worden door <keycap>?</keycap> in te
geven op de prompt van &man.mergemaster.8;. Als een bestand
wordt overgeslagen, dan wordt het weer getoond als alle overige
bestanden verwerkt zijn.</para>
<para>Bij de keuze om het ongewijzigde tijdelijke bestand te
installeren wordt het huidige bestand vervangen door het
nieuwe. Voor de meeste ongewijzigde bestanden is dit de beste
optie.</para>
<para>Als ervoor gekozen wordt om de wijzigingen te verwerken
wordt er een tekstverwerker gestart die de inhoud van beide
bestanden toont. De verschillen kunnen verwerkt worden terwijl
beide bestanden naast elkaar op het scherm staan. Hier kunnen
delen gekozen worden die gezamenlijk een nieuw bestand
opleveren. Als de bestanden zij aan zij vergeleken worden,
wordt met de toets <keycap>l</keycap> de inhoud links
geselecteerd en met de toets <keycap>r</keycap> de inhoud
rechts geselecteerd. Het eindresultaat bestaat uit delen van
beide bestanden die erna geinstalleerd kunnen worden. Deze
optie wordt voornamelijk gebruikt voor bestanden die gewijzigd
zijn door de beheerder.</para>
<para>Als ervoor gekozen wordt om de &man.diff.1; resultaten nog
een keer te tonen, worden dezelfde verschillen getoond
zoals &man.mergemaster.8; deed voordat een optie gevraagd
werd.</para>
<para>Zodra &man.mergemaster.8; klaar is met de systeembestanden
worden er andere opties getoond. &man.mergemaster.8; kan
vragen of het wachtwoordbestand opnieuw gebouwd moet worden.
Als laatste wordt een optie getoond om
alle overgebleven tijdelijke bestanden te verwijderen.</para>
</sect3>
<sect3>
<title>Handmatig bijwerken</title>
<para>Bij handmatig bijwerken kunnen de bestanden van
<filename>/usr/src/etc</filename> niet zomaar naar
<filename>/etc</filename> gekopieerd worden om een werkend
systeem te krijgen. Sommige van deze bestanden moeten eerst
<quote>geïnstalleerd</quote> worden. Dit omdat de map
<filename>/usr/src/etc</filename> <emphasis>geen</emphasis>
kopie is van <filename>/etc</filename>. Daarnaast staan er
in <filename>/etc</filename> bestanden die niet in
<filename>/usr/src/etc</filename> staan.</para>
<para>Als &man.mergemaster.8; gebruikt wordt (zoals
aangeraden), kan doorgegaan worden met het <link
linkend="updating-upgrading-rebooting">volgende
onderdeel</link>.</para>
<para>De simpelste manier om met de hand bij te werken, is de
bestanden in een nieuwe map installeren en daarna naar
verschillen tussen de bestanden te zoeken.</para>
<warning>
<title>Back-up maken van <filename>/etc</filename></title>
<para>Ondanks dat, in theorie, niets in deze map automatisch
wordt aangepast, is het altijd beter om daar zeker van te
zijn. Dus kopieer de bestaande <filename>/etc</filename>
naar een veilige locatie. Zoals bijvoorbeeld met het
volgende commando:</para>
<screen>&prompt.root; <userinput>cp -Rp /etc /etc.old</userinput></screen>
<para><option>-R</option> maakt een recursieve kopie,
<option>-p</option> bewaart tijden, eigenaarschap,
enzovoorts op bestanden.</para>
</warning>
<para>Er moet een dummyset van mappen gemaakt worden om de
nieuwe <filename>/etc</filename> en andere bestanden in te
installeren. <filename>/var/tmp/root</filename> is een
redelijke keuze en er zijn hier een aantal benodigde
submappen aanwezig:</para>
<screen>&prompt.root; <userinput>mkdir /var/tmp/root</userinput>
&prompt.root; <userinput>cd /usr/src/etc</userinput>
&prompt.root; <userinput>make DESTDIR=/var/tmp/root distrib-dirs distribution</userinput></screen>
<para>Dit maakt de benodigde mappenstructuur en installeert de
bestanden. Een groot deel van de submappen die gemaakt zijn
in <filename>/var/tmp/root</filename> zijn leeg en moeten
verwijderd worden. De simpelste manier om dit te doen
is:</para>
<screen>&prompt.root; <userinput>cd /var/tmp/root</userinput>
&prompt.root; <userinput>find -d . -type d | xargs rmdir 2>/dev/null</userinput></screen>
<para>Dit verwijderd alle lege mappen. De standaardfout wordt
omgeleid naar <filename>/dev/null</filename> om
waarschuwingen te voorkomen over mappen die niet leeg
zijn.</para>
<para><filename>/var/tmp/root</filename> bevat nu alle
bestanden die geplaatst zouden moeten worden op de juiste
locaties in <filename>/</filename>. Er moet nu in de
bestanden gekeken worden om te bepalen of deze verschillen
met de huidige betanden.</para>
<para>Let op dat sommige van de bestanden die
geïnstalleerd zijn in <filename>/var/tmp/root</filename>
beginnen met een <quote>.</quote>. Op het moment van
schrijven hebben alleen shell opstartscripts in
<filename>/var/tmp/root</filename> en
<filename>/var/tmp/root/root</filename> dit, maar er kunnen
ook andere zijn. Zorg ervoor dat <command>ls -a</command>
gebruikt wordt om deze bestanden te zien.</para>
<para>De simpelste manier om twee bestanden te vergelijken is
&man.diff.1; gebruiken:</para>
<screen>&prompt.root; <userinput>diff /etc/shells /var/tmp/root/etc/shells</userinput></screen>
<para>Dit toont de verschillen tussen de huidige
<filename>/etc/shells</filename> en de nieuwe
<filename>/var/tmp/root/etc/shells</filename>. Gebruik dit
om te bepalen of de wijzigingen gemigreerd moeten worden of
dat het oude bestand gekopieërd moet worden.</para>
<tip>
<title>Voeg aan de naam van de nieuwe rootmap
(<filename>/var/tmp/root</filename>) een tijdsindicatie toe
zodat makkelijk verschillen tussen versies bepaald kunnen
worden</title>
<para>Als de wereld regelmatig wordt herbouwd moeten
bestanden in <filename>/etc</filename> ook regelmatig
bijgewerkt moeten worden, wat een vervelend werkje kan
zijn.</para>
<para>Dit proces kan versneld worden door een kopie te
bewaren van de bestanden die gemigreerd zijn naar
<filename>/etc</filename>. De volgende procedure geeft een
idee over hoe dit gedaan kan worden.</para>
<procedure>
<step>
<para>Maak de wereld zoals normaal. Als
<filename>/etc</filename> en de andere mappen
bijgewerkt moeten worden, geef dan de doelmap een naam
gebaseerd op de huidige datum. Op 14 februari 1998
wordt dat als volgt gedaan:</para>
<screen>&prompt.root; <userinput>mkdir /var/tmp/root-19980214</userinput>
&prompt.root; <userinput>cd /usr/src/etc</userinput>
&prompt.root; <userinput>make DESTDIR=/var/tmp/root-19980214 \
distrib-dirs distribution</userinput></screen>
</step>
<step>
<para>Migreer de wijzigingen van deze map zoals hierboven
beschreven.</para>
<para>Verwijder de map
<filename>/var/tmp/root-19980214</filename>
<emphasis>niet</emphasis> na afronden.</para>
</step>
<step>
<para>Als de laatste versie van de broncode gedownload en
opnieuw gemaakt is, volg stap 1. Dit geeft een nieuwe
map die wellicht
<filename>/var/tmp/root-19980221</filename> heet (als
er een week zit tussen het bijwerken).</para>
</step>
<step>
<para>De verschillen die gemaakt zijn in de
tussenliggende week kunnen nu getoond worden door met
&man.diff.1; een recursieve diff te maken tussen de
twee mappen:</para>
<screen>&prompt.root; <userinput>cd /var/tmp</userinput>
&prompt.root; <userinput>diff -r root-19980214 root-19980221</userinput></screen>
<para>Vaak is dit een kleinere set aan verschillen dan
tussen <filename>/var/tmp/root-19980221/etc</filename>
en <filename>/etc</filename>. Omdat de set
verschillen kleiner is, is het makkelijker om deze te
migreren naar de map <filename>/etc</filename>.</para>
</step>
<step>
<para>De oudste van de twee
<filename>/var/tmp/root-*</filename>-mappen kan nu
verwijderd worden:</para>
<screen>&prompt.root; <userinput>rm -rf /var/tmp/root-19980214</userinput></screen>
</step>
<step>
<para>Herhaal dit proces elke keer als er wijzigingen
gemigreerd moeten worden naar
<filename>/etc</filename>.</para>
</step>
</procedure>
<para>Met &man.date.1; kan het maken van de mappen
geautomatiseerd worden:</para>
<screen>&prompt.root; <userinput>mkdir /var/tmp/root-`date "+%Y%m%d"`</userinput></screen>
</tip>
</sect3>
</sect2>
<sect2 id="updating-upgrading-rebooting">
<title>Herstarten</title>
<para>Dit was het. Na een controle of alles op de juiste plaats
staat kan het systeem herstart worden. Dan kan met een simpele
&man.shutdown.8;:</para>
<screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
</sect2>
<sect2>
<title>Klaar</title>
<para>Het &os; systeem is nu succesvol bijgewerkt.
Gefeliciteerd!</para>
<para>Als er dingen misgingen is het makkelijk om een deel van
het systeem opnieuw te bouwen. Als bijvoorbeeld per ongeluk
<filename>/etc/magic</filename> verwijderd is als onderdeel
van de upgrade of door het samenvoegen van
<filename>/etc</filename>, dan werkt &man.file.1; niet meer.
Dat kan als volgt opgelost worden:</para>
<screen>&prompt.root; <userinput>cd /usr/src/usr.bin/file</userinput>
&prompt.root; <userinput>make all install</userinput></screen>
</sect2>
<sect2 id="updating-questions">
<title>Vragen</title>
<qandaset>
<qandaentry>
<question>
<para>Moet de wereld opnieuw gemaakt worden voor elke
wijziging?</para>
</question>
<answer>
<para>Op deze vraag bestaat geen eenvoudig antwoord, omdat
dit afhangt van de aard van de wijziging. Als
bijvoorbeeld net <application>CVSup</application> is
gedraaid en de onderstaande bestanden zijn bijgewerkt,
dan is het waarschijnlijk niet de moeite waard om de
volledige wereld te herbouwen:</para>
<screen><filename>src/games/cribbage/instr.c</filename>
<filename>src/games/sail/pl_main.c</filename>
<filename>src/release/sysinstall/config.c</filename>
<filename>src/release/sysinstall/media.c</filename>
<filename>src/share/mk/bsd.port.mk</filename></screen>
<para>Dan is het handiger om naar de juiste submappen te
gaan, daar <command>make all install</command> uit te
voeren en dat is het zo'n beetje. Maar als er iets
wezenlijks is veranderd, bijvoorbeeld
<filename>src/lib/libc/stdlib</filename>, dan dient ofwel
de wereld herbouwd te worden of tenminste die delen die
statisch gelinkt zijn (en ook al het andere dat statisch
gelinkt is en onderdeel is van een systeem).</para>
<para>Uiteindelijk beslist een beheerder zelf. Misschien
vindt die het prettig iedere twee weken de wereld te
herbouwen terwijl de wijzigingen in die twee weken
binnenkomen. Een andere beheerder herbouwt alleen die
onderdelen die veranderd zijn en vertrouwt erop dat hij
alle afhankelijkheden in de gaten heeft.</para>
<para>Natuurlijk hangt het ook af van de keuze hoe vaak het
wenselijk is bij te werken en of &os.stable; of
&os.current; wordt bijgehouden.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<indexterm><primary>signal 11</primary></indexterm>
<para>Het compileren gaat fout met veel meldingen van
signal 11 (of andere signalnummers). Wat is er aan de
hand?</para>
</question>
<answer>
<para>Dit wijst meestal op hardwareproblemen. Het
(her)bouwen van de wereld is een prima manier om een
stresstest op hardware uit te voeren en hierdoor komen
vaak geheugenproblemen bovendrijven. Die resulteren vaak
in een compiler die op mysterieuze wijze overlijdt na het
ontvangen van vreemde signalen.</para>
<para>Dit probleem is nog duidelijker als na het herstarten
van de make het proces opnieuw stopt op een ander
punt.</para>
<para>Hier biedt niets anders uitkomst dan componenten in
een systeem wisselen om uit te zoeken welk component er
faalt.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Kan <filename>/usr/obj</filename> verwijderd worden
na afloop?</para>
</question>
<answer>
<para>Het korte antwoord is ja.</para>
<para><filename>/usr/obj</filename> bevat alle
objectbestanden die tijdens het compileren zijn gemaakt.
Normaliter is een van de eerste stappen in het
<command>make buildworld</command> proces deze map
verwijderen en een verse start maken. In dit geval heeft
het behouden van <filename>/usr/obj</filename> na het
afronden weinig zin en geeft het ook nogal wat extra
vrije schijfruimte (ongeveer 2 GB).</para>
<para>Als er veel kennis aanwezig is bij een beheerder, dan
kan <command>make buildworld</command> aangegeven worden
deze stap over te slaan. Hierdoor draaien volgende
builds veel sneller, omdat veel broncode niet opnieuw
gecompileerd hoeft te worden. De andere kant van de
medaille is dat er subtiele afhankelijkheidsproblemen
kunnen ontstaan, waardoor een build op bijzondere wijze
kan falen. Hierdoor onstaat regelmatig ruis op &os;
mailinglijsten als er iemand klaagt dat zijn build faalt,
terwijl hij zich niet realiseert dat dit komt doordat hij
zijn updateproces niet volgens het boekje heeft
uitgevoerd.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Kunnen onderbroken builds gecontinueerd
worden?</para>
</question>
<answer>
<para>Dit hangt af van hoever een systeem was voordat een
probleem gevonden werd.</para>
<para><emphasis>Normaal gesproken</emphasis> (en dit is
geen vaste regel) maakt het proces <command>make
buildworld</command> nieuwe kopieën van essentiele
hulpprogramma's (zoals &man.gcc.1; en &man.make.1;) en de
systeembibliotheken. Deze hulpprogramma's en
bibliotheken worden daarna geïnstalleerd. De nieuwe
hulpprogramma's en bibliotheken worden daarna gebruikt om
zichzelf opnieuw op te bouwen en wederom te installeren.
Het complete systeem (nu met gewone programma's zoals
&man.ls.1; en &man.grep.1;) wordt daarna opnieuw gebouwd
met de nieuwe systeembestanden.</para>
<para>Als een systeem in de laatste fase zit (wat uit de
uitvoer blijkt) kan dit redelijk veilig gedaan
worden:</para>
<screen><emphasis>… fix the problem …</emphasis>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make -DNO_CLEAN all</userinput></screen>
<para>Dit maakt het werk van de vorige <command>make
buildworld</command> niet ongedaan.</para>
<para>Als het onderstaande bericht in de uitvoer van
<command>make buildworld</command> staat, dan is het
redelijk veilig om het te doen:</para>
<screen>--------------------------------------------------------------
Building everything..
--------------------------------------------------------------</screen>
<para>Als dat bericht er niet is, of er is onzekerheid
over, dan is het altijd beter om de build opnieuw te
starten vanaf het begin.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Kan kan de wereld bouwen versneld worden?</para>
</question>
<answer>
<itemizedlist>
<listitem>
<para>Draai in single-user modus;</para>
</listitem>
<listitem>
<para>Zet de mappen <filename>/usr/src</filename> en
<filename>/usr/obj</filename> op aparte
bestandssystemen die op aparte schijven staan. Hang
deze schijven als mogelijk aan aparte
schijfcontrollers;</para>
</listitem>
<listitem>
<para>Nog beter, verspreid de bestandssystemen over
meerdere schijven via het apparaat &man.ccd.4;
(concatenated disk driver);</para>
</listitem>
<listitem>
<para>Zet profiling uit (voeg
<quote>NO_PROFILE=true</quote> toe aan
<filename>/etc/make.conf</filename>). Het is zeer
waarschijnlijk niet nodig;</para>
</listitem>
<listitem>
<para>Geef de optie
<option>-j<replaceable>n</replaceable></option> mee
aan &man.make.1; om meerdere processen parallel te
laten lopen. Dit helpt in de meeste gevallen,
onafhankelijk of er gewerkt wordt op een systeem met
één of meerdere processoren;</para>
</listitem>
<listitem>
<para>Het bestandssysteem dat
<filename>/usr/src</filename> bevat, kan (opnieuw)
gemount worden met de optie <option>noatime</option>.
Dit voorkomt dat het bestandssysteem de
toegangsmomenten registreert. Deze informatie is
waarschijnlijk toch niet nodig.</para>
<screen>&prompt.root; <userinput>mount -u -o noatime /usr/src</userinput></screen>
<warning>
<para>In dit voorbeeld wordt aangenomen dat
<filename>/usr/src</filename> op zijn eigen
bestandssysteem staat. Als dit niet het geval is
(bijvoorbeeld als het onderdeel is van
<filename>/usr</filename>), dan moet het mountpunt
voor dat bestandssysteem gebruikt moeten worden
en niet <filename>/usr/src</filename>;</para>
</warning>
</listitem>
<listitem>
<para>Het bestandssysteem dat
<filename>/usr/obj</filename> gevat kan (opnieuw)
worden gemount met de optie <option>async</option>.
Dit zorgt ervoor dat schrijfacties naar een schijf
asynchroon plaatsvinden. In andere woorden: de
schrijfactie wordt direct uitgevoerd en de gegevens
worden later naar de schijf geschreven. Dit stelt
het systeem in staat om data geclusterd weg te
schrijven, wat een grote prestatieverbetering kan
opleveren.</para>
<warning>
<para>Houd er rekening mee dat deze optie het
bestandssysteem kwetsbaarder maakt. Met deze optie
is er een vergrote kans dat, indien er een
stroomstoring optreed, het bestandssysteem in een
niet meer te herstellen staat komt als de machine
herstart.</para>
<para>Als op dit bestandssysteem alleen
<filename>/usr/obj</filename> staat, is dit geen
probleem. Als er andere belangrijke gegevens op
hetzelfde bestandssysteem staan, zorg er dan voor
dat er verse back-ups zijn voordat deze optie
aangezet wordt.</para>
</warning>
<screen>&prompt.root; <userinput>mount -u -o async /usr/obj</userinput></screen>
<warning>
<para>Zorg ervoor, zoals al eerder is aangegeven, dat
als <filename>/usr/obj</filename> niet op een eigen
bestandssysteem staat, het juiste mountpunt wordt
gebruikt.</para>
</warning>
</listitem>
</itemizedlist>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>Wat te doen als er iets mis gaat?</para>
</question>
<answer>
<para>Zorg ervoor dat het systeem geen rommel meer bevat
van eerdere builds. Het volgende helpt daarbij:</para>
<screen>&prompt.root; <userinput>chflags -R noschg /usr/obj/usr</userinput>
&prompt.root; <userinput>rm -rf /usr/obj/usr</userinput>
&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make cleandir</userinput>
&prompt.root; <userinput>make cleandir</userinput></screen>
<para>Inderdaad, <command>make cleandir</command> moet twee
keer gedraaid worden.</para>
<para>Herstart daarna het complete proces vanaf
<command>make buildworld</command>.</para>
<para>Als er nog steeds problemen zijn, stuur dan de
foutmelding en de uitvoer van <command>uname -a</command>
naar de &a.questions;. Wees bereid aanvullende vragen
over het systeem te beantwoorden!</para>
</answer>
</qandaentry>
</qandaset>
</sect2>
</sect1>
<sect1 id="make-delete-old">
<sect1info>
<authorgroup>
<author>
<firstname>Antn</firstname>
<surname>Shterenlikht</surname>
<contrib>Gebaseerd op notities van </contrib>
</author>
</authorgroup>
</sect1info>
<title>Het verwijderen van overbodige bestanden, directories en
bibliotheken</title>
<indexterm>
<primary>Verwijderen van overbodige bestanden, directories en
bibliotheken</primary>
</indexterm>
<para>Als onderdeel van de &os; ontwikkel levenscyclus kan het van
tijd tot tijd gebeuren dat bestanden en de inhoud ervan overbodig
worden. Dit kan komen doordat de functionaliteit ergens anders
geïmplementeerd is, het versienummer van de bibliotheek
veranderd is of hij is totaal van het systeem verdwenen. Dit is
inclusief oude bestanden, bibliotheken en directories welke
verwijderd moeten worden bij het updaten van het systeem. Het
voordeel voor de gebruiker is dat het systeem niet vervuild wordt
met oude bestanden die onnodig ruimte innemen op het opslag (en
back-up) systeem. Ook is het zo dat als de oude bibliotheek een
beveiligings of stabiliteits probleem had, er moet worden geupdate
naar de nieuwere bibliotheek om het systeem veilig te houden en te
voorkomen dat er crashes komen door de oude implementatie van de
bibliotheek. De bestanden, directories en bibliotheken welke als
overbodig worden gezien zijn beschreven in
<filename>/usr/src/ObsoleteFiles.inc</filename>. De volgende
instructies zullen helpen om deze verouderde bestanden te verwijderen
tijdens het systeem upgrade proces.</para>
<para>Er wordt aangenomen dat de stappen gevolgd worden zoals uitgelegd
in <xref linkend="canonical-build"/>. Na het <command>make
<maketarget>installworld</maketarget></command> commando en het daarop
volgende <command>mergemaster</command> commando succesvol uitgevoerd zijn
kan er op de volgende manier gecontroleerd worden voor verouderde
bestanden en bibliotheken:</para>
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make check-old</userinput></screen>
<para>Als er verouderde bestanden gevonden worden kunnen deze verwijderd
worden door het volgende commando:</para>
<screen>&prompt.root; <userinput>make delete-old</userinput></screen>
<tip>
<para>Zie het <filename>/usr/src/Makefile</filename>
bestand voor meer interessante targets.</para>
</tip>
<para>Er wordt een prompt getoond voordat elk verouderd bestand wordt
verwijderd. Deze prompt kan worden overgeslagen en het systeem deze
bestanden automatisch laten verwijderen door gebruik te maken van de
<makevar>BATCH_DELETE_OLD_FILES</makevar> make variabele als volgt:</para>
<screen>&prompt.root; <userinput>make -DBATCH_DELETE_OLD_FILES delete-old</userinput></screen>
<para>Dit kan ook worden gedaan door deze commando's door
<command>yes</command> te pipen als volgt:</para>
<screen>&prompt.root; <userinput>yes|make delete-old</userinput></screen>
<warning>
<title>Waarschuwing</title>
<para>Het verwijderen van verouderde bestanden zal applicaties
stuk maken die nog gebruik maken van de overbodige bestanden.
Dit is zeker waar voor oude bibliotheken. In de meeste gevallen
moeten de programma's, ports of bibliotheken opnieuw gecompileerd
worden voordat
<command>make <maketarget>delete-old-libs</maketarget></command>
wordt uitgevoerd.</para>
</warning>
<para>Gereedschappen om gedeelde bibliotheek afhankelijkheden te controleren
zijn beschikbaar in de Ports Collectie in <filename
role="package">sysutils/libchk</filename> of <filename
role="package">sysutils/bsdadminscripts</filename>.</para>
<para>Overbodige gedeelde bibliotheken kunnen conflicteren met
nieuwere bibliotheken welke berichten zoals deze kunnen
veroorzaken:</para>
<screen>/usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5
/usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5</screen>
<para>Om deze problemen op te lossen moet bepaald worden welke port
deze bibliotheek heeft geïnstalleerd:</para>
<screen>&prompt.root; <userinput>pkg_info -W /usr/local/lib/libtiff.so</userinput>
/usr/local/lib/libtiff.so was installed by package tiff-3.9.4
&prompt.root; <userinput>pkg_info -W /usr/local/lib/libXext.so</userinput>
/usr/local/lib/libXext.so was installed by package libXext-1.1.1,1</screen>
<para>Deïnstalleer, herbouw en herinstalleer de port. De <filename
role="package">ports-mgmt/portmaster</filename> en <filename
role="package">ports-mgmt/portupgrade</filename> gereedschappen kunnen
gebruikt worden om deze processen te automatiseren. Nadat zeker is dat
alle ports opnieuw gebouwd zijn, en de oude bibliotheken niet meer
gebruikt worden, kunnen deze verwijderd worden met het volgende
commando:</para>
<screen>&prompt.root; <userinput>make delete-old-libs</userinput></screen>
</sect1>
<sect1 id="small-lan">
<sect1info>
<authorgroup>
<author>
<firstname>Mike</firstname>
<surname>Meyer</surname>
<contrib>Bijgedragen door </contrib>
</author>
</authorgroup>
</sect1info>
<title>Meerdere machines bijwerken</title>
<indexterm>
<primary>NFS</primary>
<secondary>meerdere machines installeren</secondary>
</indexterm>
<para>Als er meerdere machines zijn die dezelfde broncode
bijhouden, lijkt het downloaden van alle broncode en alles overal
opnieuw bouwen zonde van de bronnen: harde schijfruimte, netwerk
bandbreedte, en processorbelasting. Dit klopt en de oplossing is
om alles op één machine te doen terwijl de overige
machines het uitgevoerde werk benaderen via NFS. Nu wordt een
methode beschreven waarmee dit gedaan kan worden.</para>
<sect2 id="small-lan-preliminaries">
<title>Benodigdheden</title>
<para>Als eerste moet er een groep van machines gekozen worden
die dezelfde set aan binaire bestanden zal draaien, hier een
<emphasis>bouwgroep</emphasis>. Elke machine kan een eigen
afwijkende kernel hebben maar moet dezelfde binaire
gebruikersbestanden draaien. Uit die groep moet een machine
gekozen worden die de <emphasis>bouwmachine</emphasis> wordt.
Dit wordt de machine waar de wereld en kernel op gebouwd
worden. In het meest ideale geval is dit een snelle machine
die genoeg processorkracht vrij heeft om <command>make
buildworld</command> en <command>make buildkernel</command>
te draaien. Er moet ook een machine gekozen worden die de
<emphasis>testmachine</emphasis> wordt waarop alle bijgewerkte
software wordt test voordat die in productie wordt genomen.
Dit <emphasis>moet</emphasis> een machine zijn die voor langere
tijd down mag zijn. Dit kan de bouwmachine zijn maar dat hoeft
niet per se.</para>
<para>Alle machines in deze bouwgroep moeten ingesteld worden om
<filename>/usr/obj</filename> en <filename>/usr/src</filename>
vanaf dezelfde machine te mounten op hetzelfde punt. In het
meest ideale geval zijn dit twee verschillende schijven op de
bouwmachine, maar ze kunnen ook door middel van NFS op die
machine gemount zijn. Als er meerdere bouwgroepen zijn, dan
moet <filename>/usr/src</filename> op één
bouwmachine staan en door middel van NFS gemount worden op de
overige machines.</para>
<para>Zorg er als laatste voor dat
<filename>/etc/make.conf</filename> en
<filename>/etc/src.conf</filename> op alle machines in de
bouwgroep het eens zijn met de bouwmachine. Dat betekent dat
de bouwmachine alle delen van het basissysteem moet bouwen die
elke machine in de bouwgroep installeert. Ook heeft elke
bouwmachine zijn kernelnaam ingesteld met
<makevar>KERNCONF</makevar> in
<filename>/etc/make.conf</filename> en de bouwmachine moet ze
allemaal hebben in <makevar>KERNCONF</makevar>, zijn eigen
kernel eerst. De bouwmachine moet de instellingenbestanden
voor elke machine in
<filename>/usr/src/sys/<replaceable>arch</replaceable>/conf</filename>
hebben als deze machine de kernels voor de overige machines
gaat bouwen.</para>
</sect2>
<sect2 id="small-lan-base-system">
<title>Basissysteem</title>
<para>Nu kan één systeem alles bouwen. Bouw de
kernel en wereld zoals beschreven in <xref
linkend="make-buildworld"/> op de bouwmachine, maar installeer
niets. Zodra de bouw klaar is, moet op de testmachine de
kernel geïnstalleerd en getest worden. Als deze machine
<filename>/usr/src</filename> en <filename>/usr/obj</filename>
mount via NFS, moet na een herstart in single-user modus het
netwerk ingeschakeld worden zodat de mounts opnieuw gemaakt
kunnen worden. De makkelijkste manier om dit te doen is om te
starten in multi-user modus en daar
<command>shutdown now</command> starten om in single-user modus
te komen. Eenmaal daar aangekomen kunnen de nieuwe kernel en
de wereld geïnstalleerd worden en kan daarna normaal
<command>mergemaster</command> gestart worden. Zodra dit klaar
is, kan de machine opnieuw gestart worden om naar multi-user
modus terug te keren.</para>
<para>Nadat zeker is dat alles op de testmachine correct werkt,
kan dezelfde procedure gebruikt worden om de nieuwe software op
elke machine te installeren in de bouwgroep.</para>
</sect2>
<sect2 id="small-lan-ports">
<title>Ports</title>
<para>Dezelfde ideeën kunnen gebruikt worden voor de ports.
De eerste kritieke stap is om <filename>/usr/ports</filename>
te mounten op alle machines in de bouwgroep. Daarna kan
<filename>/etc/make.conf</filename> correct ingesteld worden
om de distfiles te delen. De variabele
<makevar>DISTDIR</makevar> moet wijzen naar een gedeelde map
waarin geschreven kan worden door de gebruiker waar
<username>root</username> naar wijst in de NFS mounts. Op elke
machine moet <makevar>WRKDIRPREFIX</makevar> naar een lokale
bouwmap wijzen. Als er pakketten gebouwd en gedistribueerd
worden moet <makevar>PACKAGES</makevar> naar een map wijzen
gelijkvormig aan de instelling voor
<makevar>DISTDIR</makevar>.</para>
</sect2>
</sect1>
</chapter>
|