FreeBSD handboek
Terug | Hoofdstuk 5. Applicaties installeren: pakketten en ports | Volgende

# 5.5. 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 ports(7).

## 5.5.1. De Portscollectie

Voordat ports geïnstalleerd kunnen worden moet eerst de Portscollectie op een systeem staan, die in essentie een set van `Makefiles`, patches en bestanden met beschrijvingen is in `/usr/ports`.

Tijdens het installeren van een FreeBSD systeem, vraagt sysinstall of de Portscollectie geïnstalleerd moet worden. Als daar NO is aangegeven, dan kan met behulp van de volgende instructies alsnog de Portscollectie op een systeem gezet worden:

Met CVSup

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 CVSup gebruiken.

> Opmerking: De implementatie van het CVSup-protocol dat met FreeBSD wordt geleverd heet csup.

Zorg ervoor dat `/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.

1. Draai `csup`:

       # csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile

   Wijzig `cvsup.FreeBSD.org` in een CVSup server in de buurt. In CVSup Mirrors (Paragraaf A.6.7) staat een complete lijst van mirrorsites;

   > Opmerking: Het kan wenselijk zijn een aangepaste `ports-supfile` te gebruiken, bijvoorbeeld om een CVSup server niet mee te hoeven geven op de commandoregel.

   > 1. Kopieer in dit geval, als `root`, `/usr/share/examples/cvsup/ports-supfile` naar een nieuwe locatie, zoals /root of een thuismap.

   > 2. Wijzig `ports-supfile`.

   > 3. Wijzig `CHANGE_THIS.FreeBSD.org` in een CVSup server in de buurt. In CVSup Mirrors (Paragraaf A.6.7) staat een volledige lijst met mirrorsites.

   > 4. Roep nu als volgt `csup` aan:

   >        # csup -L 2 /root/ports-supfile

2. Het later draaien van csup(1) zal alle recente veranderingen aan uw Portscollectie downloaden en toepassen, behalve het eigenlijke herbouwen van ports voor uw eigen systeem.

Met Portsnap

Portsnap is een alternatief systeem voor het distribueren van de Portscollectie. In Portsnap gebruiken staat een gedetailleerde beschrijving van alle mogelijkheden van Portsnap.

1. Download een gecomprimeerd snapshot van de Portscollectie naar `/var/db/portsnap`. Na deze stap kan eventueel de verbinding met Internet verbroken worden.

       # portsnap fetch

2. Als Portsnap voor de eerste keer draait, pak het snapshot dan uit in `/usr/ports`:

       # portsnap extract

   Als `/usr/ports` al gevuld is en er alleen wordt bijgewerkt, voer dan het volgende commando uit in plaats van het bovenstaande:

       # portsnap update

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.

1. Draai als `root` `sysinstall` zoals hieronder aangegeven:

       # sysinstall

2. Scroll naar beneden en selecteer Configure, druk op Enter.

3. Scroll naar beneden en selecteer Distributions, druk op Enter.

4. Scroll naar ports, druk op Space.

5. Scroll naar boven naarExit, druk op Enter.

6. Selecteer de gewenste installatiemedia, zoals CD-ROM, FTP, enzovoort.

7. Scroll omhoog naar Exit en druk op Enter.

8. Druk op X om sysinstall af te sluiten.

## 5.5.2. 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 `Makefile`. De `Makefile` bevat verschillende definities die aangeven hoe de applicatie gecompileerd moet worden en waar die op een systeem geïnstalleerd moet worden;

- Een bestand `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 sha256(1)), om vast te stellen dat de bestanden niet corrupt zijn geraakt tijdens de download;

- Een map `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 diff(1).

  Deze map kan ook andere bestanden bevatten die gebruikt worden om de port te bouwen;

- Een bestand `pkg-descr`. Dit is een meer gedetailleerde beschrijving van het programma, vaak in één regel;

- Een bestand `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 `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 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.

> Opmerking: Ports installeren dient als `root` te gebeuren.

> WaarschuwingVoordat een port wordt geïnstalleerd is het aan te raden op 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 (`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 portaudit(1) en 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 `/usr/ports/distfiles`.

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

    # cd /usr/ports/sysutils/lsof

Eenmaal in de map `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:

    # 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:

    # 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.

    # make clean
    ===>  Cleaning for lsof-4.57
    #

> Opmerking: 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.

> Opmerking: 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 FreeBSD Mall bevatten distributiebestanden. Die kunnen met de Portscollectie gebruikt worden. Koppel de DVD-ROM aan op `/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.

> Opmerking: 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 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 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 `/usr/ports` uit te voeren worden alle benodigde bestanden gedownload. Dit commando werkt ook op een lager niveau als `/usr/ports/net` of `/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`.

> Opmerking: 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:

    # 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/`.

> Opmerking: 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 `www/firefox`, `security/gpgme` en `mail/sylpheed-claws`. Er wordt een bericht getoond als dit soort instellingen beschikbaar zijn.

### 5.5.2.1. 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:

    # make WRKDIRPREFIX=/usr/home/example/ports install

Het voorbeeld hierboven compileert de port in `/usr/home/example/ports` en installeert alles in `/usr/local`.

    # make PREFIX=/usr/home/example/local install

Het voorbeeld hierboven compileert in `/usr/ports` en installeert in `/usr/home/example/local`.

    # 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.

### 5.5.2.2. 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 `/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.

### 5.5.2.3. 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 ports(7).

## 5.5.3. 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 pkg_delete(1) (zoals beschreven in het onderdeel Pakketten):

    # pkg_delete lsof-4.57

## 5.5.4. Ports bijwerken

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

    # pkg_version -v

### 5.5.4.1. `/usr/ports/UPDATING`

Als de Portscollectie eenmaal is bijgewerkt vóór het bijwerken van ports, is het verstandig het bestand `/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 `UPDATING` tegenstrijdig is met wat hier beschreven is, moet men `UPDATING` als waar beschouwen.

### 5.5.4.2. Ports bijwerken met portupgrade

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

    # 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.

    # 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.

    # 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`:

    # 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 portupgrade(1).

### 5.5.4.3. Ports bijwerken met portmanager

Portmanager is een ander hulpprogramma voor het eenvoudig bijwerken van geïnstalleerde ports. Het is beschikbaar via de port `ports-mgmt/portmanager`:

    # cd /usr/ports/sysutils/portmanager
    # make install clean

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

    # portmanager -u

Door de vlag `-ui` aan bovenstaand commando ( `portmanager -u -ui`) toe te voegen kan ingesteld worden dat voor iedere stap die Portmanager wil uitvoeren vooraf toestemming moet worden gegeven. Portmanager kan ook nieuwe ports op een systeem installeren. Anders dan met het bekende commando `make `install clean`` worden alle afhankelijkheden bijgewerkt voordat de geselecteerde port wordt gebouwd en geïnstalleerd:

    # portmanager x11/gnome2

Als er problemen zijn ten aanzien van de afhankelijkheden voor een geselecteerde port, dan kan Portmanager ze allemaal herbouwen in de juiste volgorde. Als dat is afgerond, wordt daarna ook de port die problemen opleverde opnieuw gebouwd:

    # portmanager graphics/gimp -f

Meer informatie staat in portmanager(1).

### 5.5.4.4. 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 `/var/db/pkg` om te bepalen welke ports bij te werken. Het is beschikbaar via de port `ports-mgmt/portmaster`:

    # 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:

    # 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:

    # portmaster -a

> Opmerking: Standaard maakt portmaster een backup-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:

    # 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:

    # portmaster shells/bash

Bekijk portmaster(8) voor meer informatie.

## 5.5.5. 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 `work` op te ruimen met het commando `make `clean``. De complete Portscollectie kan geschoond worden met het volgende commando:

    # portsclean -C

In de loop der tijd komen ook veel oude bestanden met broncode in de map `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:

    # portsclean -D

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

    # portsclean -DD

> Opmerking: 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 `ports-mgmt/pkg_cutleaves` zijn.

Terug | Begin | Volgende
Het pakkettensysteem gebruiken | Omhoog | Activiteiten na het installeren