aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/nl/books/handbook/ports/_index.adoc
blob: 3f1d655d886cc3a059e6a8f18d68813982081912 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
---
title: "Hoofdstuk 5. Applicaties installeren: pakketten en ports"
part: Deel I. Beginnen
prev: books/handbook/basics
next: books/handbook/x11
---

[[ports]]
= Applicaties installeren: pakketten en ports
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:skip-front-matter:
:toc-title: Inhoudsopgave
:table-caption: Tabel
:figure-caption: Afbeelding
:example-caption: Voorbeeld
:xrefstyle: basic
:relfileprefix: ../
:outfilesuffix:
:sectnumoffset: 5

ifeval::["{backend}" == "html5"]
:imagesdir: ../../../images/books/handbook/ports/
endif::[]

ifeval::["{backend}" == "pdf"]
:imagesdir: ../../../../static/images/books/handbook/ports/
endif::[]

ifeval::["{backend}" == "epub3"]
:imagesdir: ../../../../static/images/books/handbook/ports/
endif::[]

include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/nl/mailing-lists.adoc[]
include::shared/nl/teams.adoc[]
include::shared/nl/urls.adoc[]

toc::[]

[[ports-synopsis]]
== Overzicht

FreeBSD bevat een grote collectie aan systeemgereedschappen als onderdeel van het basissysteem. De mogelijkheden reiken echter niet heel ver en daarom is er snel een applicatie van een andere partij nodig. FreeBSD bevat twee complementaire technologieën om andere applicaties te installeren: de FreeBSD Portscollectie (voor het installeren vanuit broncode) en pakketten (voor het installeren vanuit voorgecompileerde binaire bestanden). Beide systemen kunnen gebruikt worden om de nieuwste versies van een gewenste applicatie te installeren van lokale media of rechtstreeks van het netwerk.

Na het lezen van dit hoofdstuk weet de lezer:

* Hoe binaire softwarepakketten van derden te installeren;
* Hoe software van derden vanuit de Portscollectie vanuit broncode te installeren;
* Hoe eerder geïnstalleerde pakketten of ports te verwijderen;
* Hoe standaardwaarden die door de ports worden gebruikt te wijzigen;
* Hoe het juiste softwarepakket te vinden;
* Hoe applicaties bij te werken.

[[ports-overview]]
== Overzicht van softwareinstallatie

Als u eerder gebruik heeft gemaakt van een UNIX(R)-systeem dan is het bekend dat de standaardprocedure voor het installeren van software van derden ongeveer als volgt is:

[.procedure]
====
. Download de software als broncode of als binair bestand;
. Pak de software uit vanuit zijn originele distributietype (meestal een tar-bestand gecomprimeerd met man:compress[1], man:gzip[1], of man:bzip2[1]);
. Zoek de documentatie (meestal een [.filename]#INSTALL# of [.filename]#README# bestand of enkele bestanden in een submap [.filename]#doc/#) en lees zorgvuldig hoe de software geïnstalleerd moet worden;
. Als de software als broncode is gedistribueerd, moet de broncode gecompileerd worden. Dit kan wijzigingen in een [.filename]#Makefile# vereisen of het draaien van een `configure` script en andere werkzaamheden;
. De software installeren en testen.
====

En dat geldt alleen als alles goed gaat. Als er een softwarepakket geïnstalleerd wordt dat niet specifiek gemaakt is voor FreeBSD moet mogelijkerwijs zelfs de code aangepast worden om alles goed te laten werken.

Als de gebruiker het wenst, kan hij in FreeBSD doorgaan met het installeren van software op de "traditionele" manier. FreeBSD levert echter twee technologieën die veel moeite kunnen besparen: pakketten en ports. Op dit moment zijn zo meer dan {numports} applicaties beschikbaar.

Voor iedere gewenste applicatie is het FreeBSD pakket voor die applicatie één te downloaden bestand. Het pakket bevat voorgecompileerde kopiën met alle commando's voor de applicatie en alle instellingenbestanden of documentatie. Een gedownload pakketbestand kan gemanipuleerd worden met FreeBSD pakketbeheercommando's zoals man:pkg_add[1], man:pkg_delete[1], man:pkg_info[1], enzovoort. Het installeren van een nieuwe applicatie kan met één commando.

Een FreeBSD port van een applicatie is een groep bestanden ontworpen om het proces van compileren van een applicatie vanuit broncode te automatiseren.

Het is te vergelijken met de stappen die normaal gevolgd worden om een programma te compileren (downloaden, uitpakken, aanpassen, compileren en installeren). De bestanden die samen een port vormen bevatten alle noodzakelijke informatie om het systeem dit te laten doen. Met een aantal eenvoudige commando's wordt de broncode voor de applicatie automatisch gedownload, uitgepakt, aangepast, gecompileerd en geïnstalleerd.

Het portssysteem kan zelfs gebruikt worden om pakketten te maken die later weer gemanipuleerd kunnen worden met `pkg_add` en andere pakketbeheercommando's, waarover later meer uitleg wordt gegeven.

Zowel pakketten als ports kennen afhankelijkheden (_dependencies_). Stel dat er een applicatie geïnstalleerd gaat worden die er vanuit gaat dat een specifieke bibliotheek wordt geïnstalleerd. Zowel de applicatie als de bibliotheek zijn beschikbaar als FreeBSD ports en pakketten. Als het commando `pkg_add` of het portssysteem wordt gebruikt om de applicatie toe te voegen, dan zien beiden dat de bibliotheek niet geïnstalleerd is en wordt deze automatisch eerst geïnstalleerd.

Gezien het feit dat beide technologieën vrijwel identiek zijn, kan de vraag rijzen waarom FreeBSD de moeite neemt om beide te faciliteren. Pakketten en ports hebben ieder hun eigen kracht. Welke gebruikt wordt hangt af van voorkeuren en omstandigheden.

.Voordelen van pakketten
* Een gecomprimeerd pakket tar-bestand is meestal kleiner dan het gecomprimeerde tar-bestand met de broncode van de applicatie;
* Pakketten vereisen geen additionele compilatie. Voor grote applicaties als Mozilla, KDE of GNOME kan dit belangrijk zijn, vooral als een systeem wat trager is;
* Pakketten vereisen geen begrip van het proces van het compileren van software op FreeBSD.

.Voordelen van ports
* Pakketten worden meestal gecompileerd met conservatieve opties, omdat ze moeten draaien op een maximaal aantal systemen. Bij het installeren vanuit de port kunnen de compilatie-instellingen aangepast worden om zo bijvoorbeeld code te maken die specifiek voor een Pentium 4 of een Athlon processor is;
* Sommige applicaties hebben compilatie-instellingen gerelateerd aan wat ze wel of niet kunnen doen. Apache kan bijvoorbeeld ingesteld worden met een uitgebreide hoeveelheid verschillende ingebouwde instellingen. Door vanuit de port te werken hoeven niet alle standaardinstellingen geaccepteerd te worden en kunnen ze ingesteld worden;
+ 
In sommige gevallen zijn er meerdere pakketten voor dezelfde applicatie om specifieke instellingen aan te geven. Ghostscript is bijvoorbeeld beschikbaar als een [.filename]#ghostscript# pakket en [.filename]#ghostscript-nox11# pakket, afhankelijk van het al dan niet geïnstalleerd hebben van een X11 server. Deze ruwe vorm van tweaking is mogelijk met pakketten, maar dit wordt snel onmogelijk als een applicatie meer dan één of twee verschillende compilatie-instellingen heeft;
* De licentievoorwaarden van sommige softwaredistributies verbieden binaire distributie. Ze moeten dus gedistribueerd worden als broncode;
* Sommige mensen vertrouwen binaire distributies niet. Broncode kan tenminste (in theorie) zelf doorgelezen en gecontroleerd worden op potentiële problemen;
* Als er lokale modificaties zijn, is de broncode nodig om ze toe te passen;
* Sommige mensen hebben graag de broncode zodat ze die kunnen lezen als ze zich vervelen, erin kunnen hacken, code kunnen overnemen (indien de licentie dit toestaat natuurlijk), enzovoort.

Om vernieuwingen van ports bij te houden kan een abonnement genomen worden op de {freebsd-ports} en/of de {freebsd-ports-bugs}.

[WARNING]
====

Voordat een applicatie wordt geïnstalleerd is het aan te raden op http://vuxml.freebsd.org/[http://vuxml.freebsd.org/] na kijken of er geen beveiligingsproblemen voor de gewenste applicatie bekend zijn.

Het is ook mogelijk om package:ports-mgmt/portaudit[] te installeren, dat automatisch alle geïnstalleerde applicaties controleert op bekende fouten. Deze controle wordt ook uitgevoerd voordat een port wordt geïnstalleerd. Met het commando `portaudit -F -a` kunnen de pakketten die al geïnstalleerd zijn worden gecontroleerd.
====

In de rest van dit hoofdstuk wordt uitgelegd hoe pakketten en ports gebruikt kunnen worden om software in FreeBSD te installeren en te beheren.

[[ports-finding-applications]]
== Applicaties zoeken

Voordat een applicatie geïnstalleerd kan worden, moeten de doelen bekend zijn en hoe de applicatie heet.

De lijst met voor FreeBSD beschikbare applicaties groeit continu. Gelukkig zijn er een aantal manieren om te zoeken:

* Op de FreeBSD website staat een recente doorzoekbare lijst met alle beschikbare applicaties: link:https://www.FreeBSD.org/ports/[http://www.FreeBSD.org/ports/]. De ports zijn onderverdeeld in categorieën. Er kan naar een applicatie gezocht worden op naam (als die bekend is) of alle applicaties in een categorie kunnen bekeken worden.
* Dan Langille onderhoudt FreshPorts op http://www.FreshPorts.org/[http://www.FreshPorts.org/]. FreshPorts volgt veranderingen in applicaties in de ports en biedt de mogelijkheid om of meer ports te volgen. Er wordt dan een email gestuurd als de port is bijgewerkt.
* Als de naam van de gewenst applicatie niet bekend is, is het wellicht mogelijk deze te achterhalen via een website als Freecode (http://www.freecode.com/[http://www.freecode.com/]) en kan daarna op de FreeBSD site gecontroleerd worden of de applicatie al geschikt gemaakt is voor gebruik met FreeBSD.
* Als de precieze naam van de port bekend is, maar niet bekend is in welke categorie deze staat, kan dit achterhaald worden met man:whereis[1]. Door simpelweg `whereis bestand` in te geven, waar _bestand_ het te installeren programma is. Als het op het systeem staat, wordt dat als volgt aangegeven:
+
[source,shell]
....
# whereis lsof
lsof: /usr/ports/sysutils/lsof
....
+ 
Dit geeft aan dat `lsof` (een systeemhulpprogramma) in de map [.filename]#/usr/ports/sysutils/lsof# staat.
* U kunt ook een eenvoudig man:echo[1]-statement gebruiken om uit te zoeken waar een port zich in te ports tree bevindt. Bijvoorbeeld:
+
[source,shell]
....
# echo /usr/ports/*/*lsof*
/usr/ports/sysutils/lsof
....
+ 
Merk op dat dit alle overeenkomstige bestanden die gedownload zijn in de map [.filename]#/usr/ports/distfiles# terruggeeft.
* Nog een andere manier om een port op te sporen is door het ingebouwde zoekmechanisme van de Portscollectie te gebruiken. Hiervoor moet het huidige pad de map [.filename]#/usr/ports# zijn. Vanuit die map kan `make search name=programmanaam` uitgevoerd worden, waar _programmanaam_ de naam is van het programma dat wordt gezocht. Als bijvoorbeeld `lsof` wordt gezocht:
+
[source,shell]
....
# cd /usr/ports
# make search name=lsof
Port:   lsof-4.56.4
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
Maint:  obrien@FreeBSD.org
Index:  sysutils
B-deps:
R-deps:
....
+ 
Het belangrijkste onderdeel van de uitvoer is in dit geval de regel waarop "Path:" staat, omdat die aangeeft waar de port staat. De andere informatie is niet nodig voor de installatie van de port en wordt hier niet behandeld.
+ 
Voor nog dieper zoeken kan ook `make search key=string` gebruikt worden waar _string_ tekst is waarnaar gezocht moet worden. Hiermee wordt naar namen van ports, commentaar, beschrijvingen en afhankelijkheden gezocht en dit kan gebruikt worden om ports te vinden die te maken hebben met een bepaald onderwerp als onbekend is hoe het gezochte programma heet.
+ 
In beide gevallen is de zoekstring niet hoofdlettergevoelig. Zoeken naar "LSOF" geeft hetzelfde resultaat als zoeken naar "lsof".

[[packages-using]]
== Het pakkettensysteem gebruiken

Er zijn verschillende gereedschappen die gebruikt worden om pakketten op FreeBSD te beheren:

* Het gereedschap `sysinstall` kan op een draaiend systeem worden gebruikt om beschikbare en geïnstalleerde pakketten te installeren, te verwijderen, en weer te geven. Zie voor meer informatie crossref:install[packages,Pakketten installeren].
* De opdrachtregelgereedschappen om pakketten te beheren, welke het onderwerp van de rest van deze sectie zijn.

=== Pakketten installeren

Met man:pkg_add[1] kan een FreeBSD softwarepakket geïnstalleerd worden vanaf een lokaal bestand of vanaf een server op het netwerk.

.Handmatig pakketten downloaden en lokaal installeren
[example]
====

[source,shell]
....
# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp3.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230-     This machine is in Vienna, VA, USA, hosted by Verio.
230-         Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375       00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgz
....

====

Als er lokaal geen bron is voor pakketten (zoals de FreeBSD CD-ROM-verzameling) dan is het waarschijnlijk makkelijker om de `-r` optie te gebruiken met man:pkg_add[1]. Deze optie zorgt er voor dat het hulpprogramma automatisch het correcte formaat en de juiste versie bepaalt en die daarna binnenhaalt en installeert vanaf een FTP site.

[source,shell]
....
# pkg_add -r lsof
....

Het voorbeeld hierboven haalt het correcte pakket binnen en installeert het zonder dat de gebruiker iets hoeft te doen. Als u een alternatieve FreeBSD Pakkettenmirror wilt specificeren, in plaats van de hoofddistributiesite, dan moet u de omgevingsvariabele `PACKAGESITE` overeenkomstig instellen om de standaardinstellingen aan te passen. man:pkg_add[1] gebruikt man:fetch[3] om de bestanden binnen te halen, dat gebruik maakt van diverse omgevingsvariabelen zoals `FTP_PASSIVE_MODE`, `FTP_PROXY`, en `FTP_PASSWORD`. Mogelijk moeten ook één of meer van deze variabelen gebruikt worden als een machine achter een firewall staat of als gebruik gemaakt moet worden van een FTP/HTTP proxy. In man:fetch[3] staat de complete lijst. In het voorbeeld hierboven is gebruik gemaakt van `lsof` in plaats van `lsof-4.56.4`. Als het pakket wordt binnengehaald met behulp van de bovenstaande instellingen, dan moet het versienummer van het pakket niet gebruikt worden. man:pkg_add[1] haalt automatisch de laatste versie van de applicatie binnen.

[NOTE]
====
man:pkg_add[1] downloadt de meest recente versie van een applicatie als FreeBSD-CURRENT of FreeBSD-STABLE. Als een -RELEASE versie wordt gebruikt, wordt het pakket dat bij die release hoort gebruikt. Het is mogelijk dit gedrag te veranderen door `PACKAGESITE` te wijzigen. Als u bijvoorbeeld FreeBSD 8.1-RELEASE draait, dan haalt man:pkg_add[1] standaard de pakketten uit `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8.1-release/Latest/`. Om man:pkg_add[1] de FreeBSD 8-STABLE pakketten te laten downloaden kan `PACKAGESITE` ingesteld worden op `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-8-stable/Latest/`.
====

Pakketbestanden worden gedistribueerd in de formaten [.filename]#.tgz# en [.filename]#.tbz#. Ze zijn te vinden op link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/] of op de FreeBSD CD-ROM-distributie. Iedere CD-ROM in de FreeBSD 4-CD-ROM-verzameling (en de PowerPak, enzovoort) bevat pakketten in de map [.filename]#/packages#. De opbouw van de pakketten is ongeveer gelijk aan die van [.filename]#/usr/ports#. Iedere categorie heeft zijn eigen map en ieder pakket staat ook in de map [.filename]#All#.

De mappenstructuur van het pakkettensysteem is gelijk aan die van het portssysteem. Samen vormen ze het pakket/portssysteem.

=== Pakketten beheren

man:pkg_info[1] is een hulpprogramma dat de diverse geïnstalleerde pakketten toont en beschrijft.

[source,shell]
....
# pkg_info
cvsup-16.1          A general network file distribution system optimized for CV
docbook-1.2         Meta-port for the different versions of the DocBook DTD
...
....

man:pkg_version[1] is een hulpprogramma dat een samenvatting van de versie van alle geïnstalleerde pakketten geeft. Het vergelijkt de versie van het pakket met de huidige versie in de Portscollectie.

[source,shell]
....
# pkg_version
cvsup                       =
docbook                     =
...
....

De symbolen in de tweede kolom geven aan hoe de geïnstalleerde versie staat ten opzichte van de versie die beschikbaar is in de lokale Portscollectie.

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Symbool
| Betekenis

|=
|De versie van het geïnstalleerde pakket komt overeen met die in de lokale Portscollectie.

|<
|De geïnstalleerde versie is ouder dan die beschikbaar is in de ports.

|>
|De geïnstalleerde versie is nieuwer dan die in de lokale Portscollectie. De lokale Portscollectie is waarschijnlijk verouderd.

|?
|Het geïnstalleerde pakket kan niet gevonden worden in index van de Portscollectie. Dit kan bijvoorbeeld gebeuren als een geïnstalleerde port uit de Portscollectie wordt verwijderd of hernoemd.

|*
|Er zijn meerdere versies van het pakket.

|!
|Het geïnstalleerde pakket bestaat in de index maar om de een of andere reden was `pkg_version` niet in staat om het versienummer van het geïnstalleerde pakket met de overeenkomstige ingang in de index te vergelijken.
|===

=== Pakketten verwijderen

Voor het verwijderen van een geïnstalleerd pakket wordt het hulpprogramma man:pkg_delete[1] gebruikt.

[source,shell]
....
# pkg_delete xchat-1.7.1
....

Merk op dat man:pkg_delete[1] de volledige naam en het volledige nummer van het pakket nodig heeft; het bovenstaande commando zou niet werken als _xchat_ in plaats van _xchat-1.7.1_ was gegeven. Het is echter eenvoudig om man:pkg_version[1] te gebruiken om de versie van het geïnstalleerde pakket te achterhalen. U zou ook eenvoudigweg een wildcard kunnen gebruiken:

[source,shell]
....
# pkg_delete xchat\*
....

In dit geval zullen alle pakketten waarvan de naam met `xchat` begint worden verwijderd.

=== Diversen

Alle informatie over pakketten wordt opgeslagen in de map [.filename]#/var/db/pkg#. De lijst met geïnstalleerde bestanden en beschrijvingen van ieder pakket staat in de bestanden in deze map.

[[ports-using]]
== De Portscollectie gebruiken

In de volgende paragrafen worden basisinstructies gegeven over het gebruik van de Portscollectie om programma's op een systeem te installeren of ervan te verwijderen. Een gedetailleerde beschrijving van de `make`-doelen en omgevingsvariabelen staat in man:ports[7].

[WARNING]
====

Sinds eind 2012 is het FreeBSD Ports Project bezig om het versiebeheersysteem te migreren van CVS naar Subversion. Als gevolg hiervan zijn deze instructies aan verandering onderhevig. Het aanbevolen mechanisme voor algemeen gebruik van de ports is Portsnap. Gebruikers die lokale aanpassingen van ports nodig hebben (dus aanvullende lokale patches beheren) zullen er waarschijnlijk de voorkeur aan geven om rechtstreeks Subversion te gebruiken. De dienst CVSup wordt per 28 februari 2013 uitgefaseerd en verder gebruik wordt ontmoedigd.
====

[[ports-tree]]
=== De Portscollectie verkrijgen

De Portscollectie is een verzameling van [.filename]#Makefiles#, patches en bestanden met beschrijvingen in [.filename]#/usr/ports#. Deze verzameling bestanden wordt gebruikt om applicaties op FreeBSD te bouwen en te installeren. De onderstaande instructies laten verschillende methodes zien om de Portscollectie te verkrijgen als dit niet tijdens de initiële installatie van FreeBSD is gebeurd.

[.procedure]
====
*Procedure: Met Portsnap*

Portsnap is een snel en gebruiksvriendelijk gereedschap om de Portscollectie te verkrijgen en de aanbevolen manier voor de meeste gebruikers. Zie crossref:cutting-edge[updating-upgrading-portsnap,Portsnap gebruiken] voor een gedetailleerde beschrijving van Portsnap.

. Download een gecomprimeerde momentopname van de Portscollectie naar [.filename]#/var/db/portsnap#.
+
[source,shell]
....
# portsnap fetch
....
+
. Pak de momentopname bij het eerste gebruik van Portsnap uit naar [.filename]#/usr/ports#:
+
[source,shell]
....
# portsnap extract
....
+ 
Nadat het eerste gebruik van Portsnap is voltooid zoals hierboven is aangegeven, kan [.filename]#/usr/ports# worden bijgewerkt met:
+
[source,shell]
....
# portsnap update
....
====

[.procedure]
====
*Procedure: Met Subversion*

Als meer controle over de ports-boom nodig is (om bijvoorbeeld lokale veranderingen te beheren) kan Subversion worden gebruikt om de Portscollectie te verkrijgen. Zie de link:{committers-guide}#subversion-primer/[Subversion Primer] voor een gedetailleerde beschrijving van Subversion.

. Subversion moet geïnstalleerd zijn voordat het gebruikt kan worden om de ports-boom uit te checken. Als er reeds een kopie van de ports-boom aanwezig is, installeer dan Subversion als volgt:
+
[source,shell]
....
# cd /usr/ports/devel/subversion
# make install clean
....
+ 
Als de ports-boom niet beschikbaar is, kan Subversion worden geïnstalleerd als een pakket:
+
[source,shell]
....
# pkg_add -r subversion
....
+ 
Als pkgng wordt gebruikt om pakketten te beheren, kan Subversion in plaats daarvan worden geïnstalleerd met:
+
[source,shell]
....
# pkg install subversion
....
+
. Check een kopie van de ports-boom uit. Gebruik voor een betere prestatie een specifieke link:{handbook}#mirrors-svn/[Subversion mirror] dichtbij u in plaats van _svn.FreeBSD.org_ in onderstaand commando. Committers dienen eerst de link:{committers-guide}#subversion-primer/[Subversion Primer] te lezen om er zeker van te zijn dat het juiste protocol is gekozen.
+
[source,shell]
....
# svn checkout svn://svn.FreeBSD.org/ports/head /usr/ports
....
+
. Om [.filename]#/usr/ports# na de initiële checkout met Subversion bij te werken:
+
[source,shell]
....
# svn update /usr/ports
....
====

[.procedure]
====
*Procedure: Met CVSup*

[WARNING]
======

Het gebruik van CVsup om de Portscollectie te verkrijgen en te synchroniseren wordt ontmoedigd als onderdeel van een migratie naar Subversion. Hoewel het ondersteund blijft zal de dienst niet meer worden geleverd na 28 februari 2013.
======

Dit is een snelle methode voor het verkrijgen en bijhouden van een kopie van Portscollectie met behulp van het CVSup-protocol. Meer informatie over CVSup staat in crossref:mirrors[cvsup,CVSup gebruiken].

[NOTE]
======
De implementatie van het CVSup-protocol dat met FreeBSD wordt geleverd heet csup.
======

Zorg ervoor dat [.filename]#/usr/ports# leeg is voordat csup voor het eerst gebruikt wordt! Als er reeds een Ports Collectie aanwezig is die via een andere bron is opgehaald, zal csup verwijderde patchbestanden niet verwijderen.

. Draai `csup`:
+
[source,shell]
....
# csup -L 2 -h cvsup.FreeBSD.org /usr/shared/examples/cvsup/ports-supfile
....
+ 
Wijzig _cvsup.FreeBSD.org_ in een CVSup server in de buurt. In crossref:mirrors[cvsup-mirrors,CVSup Mirrors] (crossref:mirrors[cvsup-mirrors,CVSup sites]) staat een complete lijst van mirrorsites;
+
[NOTE]
======
Het kan wenselijk zijn een aangepaste [.filename]#ports-supfile# te gebruiken, bijvoorbeeld om een CVSup server niet mee te hoeven geven op de commandoregel.

[.procedure]
****
.. Kopieer in dit geval, als `root`, [.filename]#/usr/shared/examples/cvsup/ports-supfile# naar een nieuwe locatie, zoals /root of een thuismap.
.. Wijzig [.filename]#ports-supfile#.
.. Wijzig _CHANGE_THIS.FreeBSD.org_ in een CVSup server in de buurt. In crossref:mirrors[cvsup-mirrors,CVSup Mirrors] (crossref:mirrors[cvsup-mirrors,CVSup sites]) staat een volledige lijst met mirrorsites.
.. Roep nu als volgt `csup` aan:
+
[source,shell]
....
# csup -L 2 /root/ports-supfile
....
****

======
+
. Het later draaien van man:csup[1] zal alle recente veranderingen aan uw Portscollectie downloaden en toepassen, behalve het eigenlijke herbouwen van ports voor uw eigen systeem.
====

[.procedure]
====
*Procedure: Met sysinstall*

Bij deze methode wordt sysinstall gebruikt om de Portscollectie van installatiemedia te installeren. Hier wordt wel de Portscollectie op het moment dat de release gemaakt is geïnstalleerd. Bij toegang tot Internet is het advies altijd een andere methode te gebruiken.

. Draai als `root sysinstall` zoals hieronder aangegeven:
+
[source,shell]
....
# sysinstall
....

. Scroll naar beneden en selecteer [.guimenuitem]#Configure#, druk op kbd:[Enter].
. Scroll naar beneden en selecteer [.guimenuitem]#Distributions#, druk op kbd:[Enter].
. Scroll naar [.guimenuitem]#ports#, druk op kbd:[Space].
. Scroll naar boven naar [.guimenuitem]#Exit#, druk op kbd:[Enter].
. Selecteer de gewenste installatiemedia, zoals CD-ROM, FTP, enzovoort.
. Scroll omhoog naar [.guimenuitem]#Exit# en druk op kbd:[Enter].
. Druk op kbd:[X] om sysinstall af te sluiten.
====

[[cvsup-migration]]
=== Migreren van CVSup/csup naar portsnap

[WARNING]
====

Per 28 februari 2013 zal de ports-boom niet langer naar CVS worden en daarom geëxporteerd zullen CVSup en csup niet langer updates voor de Portscollectie bieden.
====

[.procedure]
====
*Procedure: Migreren naar Portsnap*

De migratie zal ongeveer 1 GB aan schijfruimte op [.filename]#/usr# nodig hebben, en Portsnap zal ongeveer 150 MB aan schijfruimte op [.filename]#/var# nodig hebben.

. Schakel alle automatische updates aan ports die u gebruikt, zoals een man:cron[8]-taak die CVSup of csup uit.
. Verplaats de bestaande ports-boom naar een tijdelijke lokatie:
+
[source,shell]
....
# mv /usr/ports /usr/ports.old
....
+
. Haal de nieuwe ports-boom met Portsnap op en pak deze uit in [.filename]#/usr/ports#:
+
[source,shell]
....
# portsnap fetch extract
....
+
. Verplaats distfiles en bewaarde pakketten naar de nieuwe ports-boom:
+
[source,shell]
....
# mv /usr/ports.old/distfiles /usr/ports
# mv /usr/ports.old/packages /usr/ports
....
+
. Verwijder de oude ports-boom:
+
[source,shell]
....
# rm -rf /usr/ports.old
....
+
. Indien voorheen CVSup gebruikt werd, kan het nu worden gedeïnstalleerd:
+
[source,shell]
....
# pkg_delete -r -v cvsup-without-gui-\*
....
+ 
Gebruikers van pkgng kunnen het volgende commando gebruiken:
+
[source,shell]
....
# pkg remove cvsup-without-gui
....
====

Zie crossref:cutting-edge[updating-upgrading-portsnap,Portsnap gebruiken] voor een gedetailleerde beschrijving van Portsnap en hoe de ports-boom met Portsnap bij te werken.

[[ports-skeleton]]
=== Ports installeren

Het eerste wat uitleg behoeft als het over de Portscollectie gaat is de term "skelet" ("skeleton"). In een notendop is een portskelet een minimaal aantal bestanden dat FreeBSD aangeeft hoe een programma gecompileerd en geïnstalleerd kan worden. Ieder portskelet bevat:

* Een [.filename]#Makefile#. De [.filename]#Makefile# bevat verschillende definities die aangeven hoe de applicatie gecompileerd moet worden en waar die op een systeem geïnstalleerd moet worden;
* Een bestand [.filename]#distinfo#. Dit bestand bevat informatie over de bestanden die gedownload moeten worden om de port te bouwen, en hun checksums (door gebruik te maken van man:sha256[1]), om vast te stellen dat de bestanden niet corrupt zijn geraakt tijdens de download;
* Een map [.filename]#files#. Deze map bevat patches om het programma op een FreeBSD systeem te laten compileren en installeren. Patches zijn in essentie kleine bestanden waarin kleine veranderingen aan andere, specifieke, bestanden staan aangegeven. Ze zijn opgesteld in platte tekst en er staan dingen in als "Verwijder regel 10" of "Wijzig regel 26 in ...". Patches staan ook wel bekend als "diffs" omdat ze gemaakt worden met het programma man:diff[1].
+ 
Deze map kan ook andere bestanden bevatten die gebruikt worden om de port te bouwen;
* Een bestand [.filename]#pkg-descr#. Dit is een meer gedetailleerde beschrijving van het programma, vaak in één regel;
* Een bestand [.filename]#pkg-plist#. Dit is een lijst met alle bestanden die door de port geïnstalleerd worden. Het geeft het portssysteem ook aan welke bestanden bij het verwijderen van de port weer verwijderd kunnen worden.

Sommige ports bevatten nog andere bestanden, zoals [.filename]#pkg-message#. Het portssysteem gebruikt die bestanden voor het afhandelen van bijzondere situaties. Meer details over die bestanden en over ports in het algemeen zijn na te lezen in het link:{porters-handbook}[FreeBSD Handboek voor Porters].

De port bevat instructies over hoe de broncode gebouwd moet worden, maar de broncode zelf is er geen onderdeel van. De broncode staat op een CD-ROM of op Internet. De broncode wordt verspreid op de wijze waarop de auteur dat wenst. Vaak is dat als een tar of gzip bestand, maar het kan ook ingepakt zijn met een ander programma of helemaal niet ingepakt zijn. De broncode van een programma, in welke vorm dan ook, heet een "distributiebestand". De twee methoden om een FreeBSD port te installeren worden hieronder beschreven.

[NOTE]
====
Ports installeren dient als `root` te gebeuren.
====

[WARNING]
====

Voordat een port wordt geïnstalleerd is het aan te raden op http://vuxml.freebsd.org/[http://vuxml.freebsd.org/] na kijken of er geen beveiligingsproblemen voor de gewenste port bekend zijn.

Er kan automatisch een controle op beveiligingsproblemen door portaudit gedaan worden voordat er een nieuwe applicatie wordt geïnstalleerd. Dit gereedschap kan in de Portscollectie gevonden worden (package:ports-mgmt/portaudit[]). Overweeg om `portaudit -F` te draaien voordat er een nieuwe port wordt geïnstalleerd, om de huidige database met beveiligingsproblemen op te halen. Tijdens de dagelijkse beveiligingscontrole van het systeem zal er een beveiligingsaudit en een update van de database plaatsvinden. Lees voor meer informatie de hulppagina's man:portaudit[1] en man:periodic[8].
====

De Portscollectie neemt aan dat er een werkende Internetverbinding is. Als die niet aanwezig is, zet dan handmatig een kopie van het benodigde distributiebestand in [.filename]#/usr/ports/distfiles#.

Ga om te beginnen naar de juiste map voor een port:

[source,shell]
....
# cd /usr/ports/sysutils/lsof
....

Eenmaal in de map [.filename]#lsof# is het skelet van de port te zien. In de volgende stap wordt de broncode voor de port gecompileerd of "gebouwd". Dit wordt gedaan door op het prompt `make` in te voeren. Dat levert iets als het volgende op:

[source,shell]
....
# make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===>  Extracting for lsof-4.57
...
[uitvoer van uitpakken verwijderd]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[uitvoer van configure verwijderd]
...
===>  Building for lsof-4.57
...
[uitvoer van compileren verwijderd]
...
#
....

Als het compileren is afgerond is het prompt weer zichtbaar. In de volgende stap wordt de port geïnstalleerd. Om dat te bewerkstelligen wordt het woord `install` aan `make` toegevoegd:

[source,shell]
....
# make install
===>  Installing for lsof-4.57
...
[uitvoer installatie verwijderd]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
#
....

Als de prompt weer beschikbaar is, is de applicatie klaar voor gebruik. Omdat `lsof` met verhoogde rechten wordt uitgevoerd, wordt er een waarschuwing getoond. Tijdens het bouwen en installeren van ports zijn de getoonde waarschuwingen van belang.

Het is verstandig om de submap die als werkmap wordt gebruikt te verwijderen. Hierin staan alle tijdelijke bestanden die tijdens het compileren worden gebruikt. Die bestanden gebruiken niet alleen waardevolle schijfruimte, maar ze kunnen later ook problemen veroorzaken als de port wordt bijgewerkt.

[source,shell]
....
# make clean
===>  Cleaning for lsof-4.57
#
....

[NOTE]
====
Het is mogelijk twee stappen minder te gebruiken door `make install clean` uit te voeren in plaats van `make`, `make install` en `make clean` als drie afzonderlijke stappen.
====

[NOTE]
====
Wanneer een port alleen met `make install` wordt geïnstalleerd, betekent dit dat er in het begin mogelijk veel gewacht moet worden tussen interacties van de gebruiker aangezien het standaardgedrag is om de gebruiker te vragen om keuzes voor opties. Wanneer er veel afhankelijkheden zijn, kan dit voor het bouwen van een enkele port soms een hele opgave zijn. Om dit te voorkomen, kan `make config-recursive` gedraaid worden om de configuratie in één keer te doen. Draai daarna `make install [clean]`.
====

[TIP]
====

Wanneer `config-recursive` wordt gebruikt, wordt de lijst met ports om te configureren opgesteld door het doel `all-depends-list` van man:make[1]. Het wordt vaak aangeraden om `make config-recursive` totdat de opties van alle afhankelijke ports zijn gedefinieerd en er geen schermen van man:dialog[1] voor opties van ports meer verschijnen, om er zeker van te zijn dat de opties van alle ports zijn geconfigureerd zoals bedoeld.
====

[NOTE]
====
Sommige shells houden een cache bij van de commando's die in de mappen uit de omgevingsvariabele `PATH` staan om het opzoeken van een uitvoerbaar bestand te versnellen. Als zo'n shell wordt gebruikt, moet er na de installatie van een port het commando `rehash` worden uitgevoerd voordat zojuist geïnstalleerde commando's kunnen worden gebruikt. Dit commando werkt voor shells zoals `tcsh`. Gebruik voor shells als `sh hash -r`. In de documentatie van een shell staat meer informatie.
====

Sommige DVD-ROM-producten van andere partijen, zoals de FreeBSD Toolkit van de http://www.freebsdmall.com/[FreeBSD Mall] bevatten distributiebestanden. Die kunnen met de Portscollectie gebruikt worden. Koppel de DVD-ROM aan op [.filename]#/cdrom#. Stel bij gebruik van een ander aankoppelpunt de make variabele `CD_MOUNTPTS` in. De benodigde distributiebestanden worden automatisch gebruikt als ze op de schijf aanwezig zijn.

[NOTE]
====
Licenties van sommige ports staan niet toe dat de code wordt opgenomen in een CD-ROM. Dit kan komen doordat er een formulier ingevuld moet worden voor een download of doordat herdistributie niet is toegestaan of om een andere reden. Om een port te installeren die niet op de CD-ROM staat moet de computer waarop de port geïnstalleerd wordt een Internetverbinding hebben.
====

Het portssysteem gebruikt man:fetch[1] om bestanden te downloaden. Dat programma maakt gebruik van een aantal omgevingsvariabelen, waaronder `FTP_PASSIVE_MODE`, `FTP_PROXY`, en `FTP_PASSWORD`. Als een systeem achter een firewall staat, is het wellicht noodzakelijk om een of meer van deze omgevingsvariabelen in te stellen of om gebruik te maken van een FTP/HTTP proxy. In man:fetch[3] staat een complete lijst.

Als er geen continue Internetverbinding is, kan gebruik gemaakt worden van `make fetch`. Door dit commando in de map [.filename]#/usr/ports# uit te voeren worden _alle_ benodigde bestanden gedownload. Dit commando werkt ook op een lager niveau als [.filename]#/usr/ports/net# of [.filename]#/usr/ports/net/xmule#. Als een port afhankelijk is van bibliotheken of andere ports dan worden de distributiebestanden van die ports _niet_ opgehaald. Om dat de bereiken dient `fetch` vervangen te worden door `fetch-recursive`.

[NOTE]
====
Het is mogelijk alle ports in een categorie te bouwen door `make` in een hogere map uit te voeren, naar analogie van het voorbeeld voor `make fetch`. Dit is wel gevaarlijk, omdat sommige ports niet tegelijk met andere geïnstalleerd kunnen zijn. In andere gevallen installeren twee ports hetzelfde bestand met een andere inhoud.
====

In zeldzame gevallen willen of moeten gebruikers de tar-bestanden van een andere site dan de `MASTER_SITES` halen (de locatie waar de bestanden vandaan komen). Dat is mogelijk met de optie `MASTER_SITES` met een volgend commando:

[source,shell]
....
# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
....

In het voorgaande voorbeeld is de optie `MASTER_SITES` gewijzigd naar `ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/`.

[NOTE]
====
Sommige ports staan toe (of schrijven zelfs voor) dat er een aantal instellingen worden meegegeven die bepaalde onderdelen (niet gebruikt, beveiligingsinstellingen en andere aanpassingen) van de applicatie in- of uitschakelen. Voorbeelden van ports waarbij dat het geval is zijn package:www/firefox[], package:security/gpgme[] en package:mail/sylpheed-claws[]. Er wordt een bericht getoond als dit soort instellingen beschikbaar zijn.
====

==== Standaardmappen voor ports wijzigen

Soms is het handig (of verplicht) om een andere map voor werk of ports te gebruiken. Met de variabelen `WRKDIRPREFIX` en `PREFIX` kunnen de standaardmappen veranderd worden:

[source,shell]
....
# make WRKDIRPREFIX=/usr/home/example/ports install
....

Het voorbeeld hierboven compileert de port in [.filename]#/usr/home/example/ports# en installeert alles in [.filename]#/usr/local#.

[source,shell]
....
# make PREFIX=/usr/home/example/local install
....

Het voorbeeld hierboven compileert in [.filename]#/usr/ports# en installeert in [.filename]#/usr/home/example/local#.

[source,shell]
....
# make WRKDIRPREFIX=../ports PREFIX=../local install
....

Het voorbeeld hierboven combineert de twee instellingen. Het gaat te ver om dit volledig in het handboek te beschrijven, maar hier krijgt de lezer een idee van de mogelijkheden.

Het is ook mogelijk de bovenstaande variabelen als deel van de omgeving in te stellen. In de hulppagina's van de gebruikte shell staat hoe dat mogelijk is.

==== Omgaan met `imake`

Er zijn ports die `imake` gebruiken (een onderdeel van het X Window systeem) die niet goed werken met `PREFIX` en erop staan te installeren in [.filename]#/usr/X11R6#. Er zijn ook een aantal Perl ports die `PREFIX` negeren en in de Perl hiërarchie installeren. Deze ports op de `PREFIX` locatie laten installeren is meestal erg moeilijk of onmogelijk.

==== Ports herconfigureren

Tijdens het bouwen van bepaalde ports kan er een menu dat op ncurses is gebaseerd verschijnen waaruit u bepaalde bouwopties kunt selecteren. Het is niet ongebruikelijk dat gebruikers dit menu opnieuw willen bezoeken om deze opties toe te voegen, te verwijderen, of te veranderen nadat een port is gebouwd. Er zijn vele manieren om dit te doen. Eén optie is om naar de map waarin de port staat te gaan en `make config` te typen, wat eenvoudigweg het menu opnieuw toont met daarin de zelfde opties geselecteerd. Een andere optie is om `make showconfig` te gebruiken, wat alle instelopties voor de port aan u laat zien. Nog een andere optie is om `make rmconfig` uit te voeren wat alle geselecteerde opties zal verwijderen en u toestaat opnieuw te beginnen. Al deze opties, en anderen, worden zeer gedetailleerd uitgelegd in de hulppagina voor man:ports[7].

[[ports-removing]]
=== Geïnstalleerde ports verwijderen

Nu u weet hoe ports te installeren, zult u zich waarschijnlijk afvragen hoe ze te verwijderen, in het geval dat u er een installeert en later besluit dat u de verkeerde port heeft geïnstalleerd. We zullen ons vorige voorbeeld (`lsof`) verwijderen. Ports worden op precies dezelfde manier verwijderd als pakketten met het commando man:pkg_delete[1] (zoals beschreven in het onderdeel <<packages-using,Pakketten>>):

[source,shell]
....
# pkg_delete lsof-4.57
....

[[ports-upgrading]]
=== Ports bijwerken

Stel als eerste een lijst samen met ports waarvoor een nieuwere versie beschikbaar is in de Portscollectie met het commando man:pkg_version[1]:

[source,shell]
....
# pkg_version -v
....

[[ports-file-updating]]
==== [.filename]#/usr/ports/UPDATING#

Als de Portscollectie eenmaal is bijgewerkt vóór het bijwerken van ports, is het verstandig het bestand [.filename]#/usr/ports/UPDATING# te raadplegen. In dat bestand staan aanwijzingen en wijzigingen voor gebruikers die van belang zijn bij het bijwerken van ports, zoals het veranderen van bestandsformaten, veranderen van de locatie van configuratie bestanden, en andere incompatibiliteiten met voorgaande versies.

Als [.filename]#UPDATING# tegenstrijdig is met wat hier beschreven is, moet men [.filename]#UPDATING# als waar beschouwen.

[[portupgrade]]
==== Ports bijwerken met portupgrade

Het hulpprogramma portupgrade is ontworpen om geïnstalleerde ports eenvoudig bij te werken. Het is beschikbaar via de port package:ports-mgmt/portupgrade[]. Installeer het net als iedere andere port met het commando `make install clean`:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean
....

Scan de lijst met geïnstalleerde ports met het commando `pkgdb -F` en corrigeer alle gerapporteerde inconsistenties. Het is verstandig dit regelmatig te doen, voor iedere keer bijwerken.

Door het draaien van `portupgrade -a` zal portupgrade beginnen met het bijwerken van alle geïnstalleerde ports op een systeem waarvoor een nieuwere versie beschikbaar is. Met de vlag `-i` is het mogelijk in te stellen dat voor iedere bij te werken port om bevestiging wordt gevraagd.

[source,shell]
....
# portupgrade -ai
....

Gebruik om alleen een specifieke applicatie bij te werken en niet alle beschikbare ports `portupgrade pkgname`. Gebruik de vlag `-R` om portupgrade eerst alle ports bij te laten werken die voor een bij te werken toepassing benodigd zijn.

[source,shell]
....
# portupgrade -R firefox
....

Gebruik de vlag `-P` om bij installatie van pakketten in plaats van ports gebruik te maken. Met deze optie zoekt portupgrade in de lokale mappen uit `PKG_PATH` of haalt de pakketten via het netwerk op als ze lokaal niet worden aangetroffen. Als een pakket niet lokaal en niet via het netwerk wordt gevonden, dan gebruikt portupgrade ports. Om het gebruik van ports te voorkomen kan gebruik gemaakt worden van de optie `-PP`:

[source,shell]
....
# portupgrade -PP gnome2
....

Om alleen de distributiebestanden op te halen (of pakketten als `-P` is opgegeven), zonder bouwen of installeren, is `-F` beschikbaar. Meer informatie staat in man:portupgrade[1].

[[portmaster]]
==== Ports bijwerken met portmaster

portmaster is nog een gereedschap voor het bijwerken van geïnstalleerde ports. portmaster was ontworpen om gebruik te maken van de gereedschappen die in het "basis" systeem te vinden zijn (het hangt niet af andere ports) en het gebruikt de informatie in [.filename]#/var/db/pkg# om te bepalen welke ports bij te werken. Het is beschikbaar via de port package:ports-mgmt/portmaster[]:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portmaster
# make install clean
....

portmaster verdeelt ports in vier categoriën:

* Wortelpoorten (geen afhankelijkheden, wordt niet van afgehangen)
* Stampoorten (geen afhankelijkheden, wordt van afgehangen)
* Takpoorten (hebben afhankelijkheden, wordt van afgehangen)
* Bladpoorten (hebben afhankelijkheden, wordt niet van afgehangen)

U kunt de optie `-L` gebruiken om alle geïnstalleerde ports tonen en naar updates te zoeken:

[source,shell]
....
# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
        ===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache-2.2.3
        ===>>> New version available: apache-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
        ===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports

===>>> 137 total installed ports
        ===>>> 83 have new versions available
....

Alle geïnstalleerde ports kunnen met dit eenvoudige commando worden bijgewerkt:

[source,shell]
....
# portmaster -a
....

[NOTE]
====
Standaard maakt portmaster een back-up-pakket aan voordat het een bestaande port verwijderd. Als de installatie van de nieuwe versie succesvol is, zal portmaster de reservekopie verwijderen. Het gebruik van `-b` zal portmaster instrueren om de reservekopie niet automatisch te verwijderen. Het toevoegen van de optie `-i` zal portmaster in interactieve modus opstarten, en u vragen voordat het elke port bijwerkt.
====

Als u fouten tegenkomt tijdens het bijwerkproces, kunt u de optie `-f` gebruiken om alle ports bij te werken/te herbouwen:

[source,shell]
....
# portmaster -af
....

U kunt portmaster ook gebruiken om nieuwe ports op het systeem te installeren, en alle afhankelijkheden bijwerken voordat de nieuwe port gebouwd en geïnstalleerd wordt:

[source,shell]
....
# portmaster shells/bash
....

Bekijk man:portmaster[8] voor meer informatie.

[[ports-disk-space]]
=== Ports en schijfruimte

Werken met de Portscollectie kan in de loop der tijd veel schijfruimte gebruiken. Na het bouwen en installeren van software uit de ports, is het van belang altijd de tijdelijke mappen [.filename]#work# op te ruimen met het commando `make clean`. De complete Portscollectie kan geschoond worden met het volgende commando:

[source,shell]
....
# portsclean -C
....

In de loop der tijd komen ook veel oude bestanden met broncode in de map [.filename]#distfiles# te staan. Die kunnen handmatig verwijderd worden of met het volgende commando dat alle distributiebestanden waarnaar in de huidige ports geen verwijzingen meer staan verwijdert:

[source,shell]
....
# portsclean -D
....

Of om alle distributiebestanden te verwijderen waardoor momenteel door geen één geïnstalleerde port op uw systeem wordt verwezen:

[source,shell]
....
# portsclean -DD
....

[NOTE]
====
Het hulpprogramma `portsclean` is onderdeel van de suite portupgrade.
====

Vergeet niet ports die niet langer gebruikt worden te verwijderen. Een handig hulpmiddel hiervoor kan de port package:ports-mgmt/pkg_cutleaves[] zijn.

[[ports-nextsteps]]
== Activiteiten na het installeren

Na het installeren van een nieuwe applicatie is het meestal verstandig om de documentatie te lezen die bij een applicatie zit, bestanden met instellingen die vereist zijn aan te passen, ervoor te zorgen dat de applicatie start na het opstarten (als het een daemon is), enzovoort.

De exacte stappen om een applicatie in te stellen zijn natuurlijk voor iedere applicatie anders. Maar als er net een nieuwe applicatie is geïnstalleerd en het is niet vanzelfsprekend hoe verder te gaan, dan kunnen de volgende tips helpen:

* Met man:pkg_info[1] kan uitgevonden worden welke bestanden geïnstalleerd zijn en waar. Om bijvoorbeeld uit te vinden welke bestanden door FooPackage versie 1.0.0 zijn geïnstalleerd:
+
[source,shell]
....
# pkg_info -L foopackage-1.0.0 | less
....
+ 
Bestanden in mapnamen met [.filename]#man/# zijn hulppagina's, [.filename]#etc/# bevat bestanden met instellingen en [.filename]#doc/# bevat uitgebreidere documentatie.
+ 
Als niet helemaal duidelijk is welke versie van het programma is geïnstalleerd, kan een commando als volgt gebruikt worden:
+
[source,shell]
....
# pkg_info | grep -i foopackage
....
+ 
Hiermee worden alle pakketten getoond waar _foopackage_ in de pakketnaam voorkomt.
* Als de hulppagina's zijn gevonden, kunnen die bekeken worden met man:man[1]. Zo kan er ook in de bestanden met voorbeeldinstellingen gekeken worden en naar aanvullende documentatie, als die is bijgeleverd.
* Als er een website is voor de applicatie staat daar vaak ook aanvullende documentatie, veelgestelde vragen, enzovoort. Als het webadres niet bekend is, kan dat nog staan in de uitvoer van het volgende commando:
+
[source,shell]
....
# pkg_info foopackage-1.0.0
....
+ 
Als er een regel met `WWW:` in staat, is dat de URL naar de website voor de applicatie.
* Ports die na het opstarten moeten starten (zoals Internet diensten) hebben meestal een voorbeeldscript in [.filename]#/usr/local/etc/rc.d#. Dit script kan bekeken, aangepast en hernoemd worden waar nodig. Meer informatie staat in crossref:config[configtuning-starting-services,Diensten Starten].

[[ports-broken]]
== Omgaan met kapotte ports

Als een port niet werkt, zijn er een aantal mogelijke manieren om verder te komen:

. Zoek uit of er een oplossing voor de port staat te wachten in de link:https://www.FreeBSD.org/support/#gnats[Problem Report database]. Als dat zo is kan wellicht de voorgestelde reparatie gebruikt worden.
. Vraag de beheerder van de port om hulp. Voor het emailadres van de beheerder kan `make maintainer` getypt worden of het kan in de [.filename]#Makefile# staan. Zet in de mail in ieder geval de naam en versie van de port (de regel met `$FreeBSD:` in de [.filename]#Makefile#) en de uitvoer tot en met de foutmelding.
+
[NOTE]
====
Sommige ports worden niet beheerd door een individu maar in plaats daarvan door een link:{mailing-list-faq}[mailinglijst]. Veel, maar niet alle, van deze adressen zien eruit als mailto:freebsd-lijstnaam@FreeBSD.org[freebsd-lijstnaam@FreeBSD.org]. Houd hier alstublieft rekening mee bij het formuleren van vragen.

In het bijzonder worden ports die geregistreerd staan als onderhouden door mailto:ports@FreeBSD.org[ports@FreeBSD.org] helemaal niet onderhouden. Reparaties en ondersteuning, als dat al beschikbaar is, komt vanuit de gemeenschap die is geabonneerd op die mailinglijst. Meer vrijwilligers zijn altijd nodig!
====
+ 
Als er geen antwoord komt, stuur dan met man:send-pr[1] een foutrapport in. Zie link:{problem-reports}[Writing FreeBSD Problem Reports]).
. Repareren! In het link:{porters-handbook}[Handboek voor de Porter] is gedetailleerde informatie te vinden over de infrastructuur van de "Ports", zodat een kapotte port gemaakt kan worden of er zelfs een nieuwe port ingestuurd kan worden.
. Zoek een pakket van een FTP site in de buurt. De "master" pakketcollectie staat op `ftp.FreeBSD.org` in de link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[map pakketten], maar het is van belang dat er _eerst_ crossref:mirrors[mirrors-ftp,in de buurt] wordt gekeken! Dat het pakket werkt is waarschijnlijker dan wanneer uit de broncode wordt gecompileerd en het is nog sneller ook. Een pakket kan met man:pkg_add[1] geïnstalleerd worden.