[FAQ Index] [Naar Sectie 14 - Inrichting van de Schijf]
Er zijn veel externe toepassingen beschikbaar die men misschien wil gebruiken op een OpenBSD systeem. Om deze software gemakkelijker te installeren en te beheren, en om ze te helpen laten voldoen aan OpenBSD's beleid en doelstellingen, wordt de externe software geported naar OpenBSD. Met dit port-werk kunnen vele verschillende dingen gepaard gaan. Voorbeelden zijn: de software de standaard OpenBSD directorystructuur laten gebruiken (bv. configuratiebestanden worden in /etc geplaatst), voldoen aan OpenBSD's "shared library" specificaties, de software veiliger maken indien mogelijk, enz.
Het eindresultaat van het port-werk zijn binaire packages die klaar zijn om te installeren. De bedoeling van het package-systeem is bij te houden welke software ge´nstalleerd wordt, zodat deze gelijk wanneer heel gemakkelijk kan geŘpdatet of verwijderd worden. Op die manier blijven er geen onnodige bestanden achter, en kunnen gebruikers hun systemen zuiver houden. Het package-systeem helpt er ook voor te zorgen dat niets per ongeluk verwijderd wordt, wat ertoe kan leiden dat software ophoudt naar behoren te functioneren. Nog een voordeel is dat gebruikers zelden software hoeven te compileren vanaf broncode, aangezien packages reeds gecompileerd werden, beschikbaar zijn en klaar om op een OpenBSD systeem gebruikt te worden. In luttele minuten kan een groot aantal packages afgehaald en ge´nstalleerd worden, met alles op de juiste plaats.
De packages en ports verzameling ondergaat NIET dezelfde uitvoerige veiligheidsaudit die op het OpenBSD basissysteem wordt uitgevoerd. Alhoewel we ernaar streven om de kwaliteit van de packages hoog te houden, hebben we gewoonweg niet genoeg mankracht om hetzelfde niveau van robuustheid en veiligheid te garanderen. Natuurlijk worden beveiligingsupdates voor verscheidene toepassingen zo snel mogelijk gecommit in de ports tree, en worden de overeenkomstige package-beveiligingsupdates beschikbaar gemaakt als snapshots voor -current.
Packages zijn de vooraf gecompileerde binaries van een aantal van de meest gebruikte externe software. Packages kunnen gemakkelijk beheerd worden met behulp van verscheidene utilities, ook gekend als de pkg* tools:
Om naar behoren te draaien, kan een toepassing X vereisen dat andere toepassingen Y en Z ge´nstalleerd zijn. Toepassing X is met name afhankelijk van deze andere toepassingen, daarom worden Y en Z "dependencies" van X genoemd. Op zijn beurt kan Y andere toepassingen P en Q vereisen, en Z kan toepassing R vereisen om naar behoren te werken. Op deze manier wordt een hele "dependency tree" gevormd.
Packages zien eruit als eenvoudige .tgz archieven. Eigenlijk zijn ze dat ook, maar er is ÚÚn cruciaal verschil: ze bevatten wat extra packing-informatie. Deze informatie wordt door pkg_add(1) gebruikt voor verschillende doeleinden:
U kan de dingen erg gemakkelijk maken door de PKG_PATH omgevingsvariabele te gebruiken. Laat hem gewoon naar uw favoriete locatie wijzen, en pkg_add(1) zal daar automatisch gaan zoeken naar elke package die u specificeert, en ook automatisch de noodzakelijke dependencies van deze package afhalen en installeren.
Een lijst met mogelijke locaties om packages vandaan te halen wordt gegeven in de volgende sectie.
Voorbeeld 1: afhalen van uw CDROM, in de veronderstelling dat u deze hebt gemount op /mnt/cdrom
$ export PKG_PATH=/mnt/cdrom/5.3/packages/`machine -a`/
Voorbeeld 2: afhalen van een nabije FTP mirror
$ export PKG_PATH=ftp://your.ftp.mirror/pub/OpenBSD/5.3/packages/`machine -a`/
Het is gewoonlijk een goed idee om een lijn gelijkaardig aan de bovenstaande voorbeelden toe te voegen aan uw ~/.profile. Zoals bij de klassieke PATH variabele, kan u meerdere locaties specificeren, gescheiden door dubbele punten. Voorafgaand aan OpenBSD 4.4 MOET elk pad in de PKG_PATH variabele eindigen op een schuine streep (/). Op die manier kan pkg_add(1) het pad correct splitsen zelfs als er URL schema's in zitten die dubbele punten bevatten. Als de eerste entry in PKG_PATH faalt, zal de volgende geprobeerd worden, enzoverder, tot de package gevonden wordt. Als alle entries falen, krijgt u een foutmelding.
Bemerk het gebruik van machine(1) in de bovenstaande commandoregels. Dit vervangt automatisch de "toepassingsarchitectuur" van uw ge´nstalleerde OpenBSD, welke gewoonlijk, maar niet altijd, de naam van uw platform is. Indien u snapshots gebruikt, zal u natuurlijk "5.3" door "snapshots" vervangen.
Als u de ports tree op uw systeem hebt, kan u snel de package vinden die u zoekt zoals uitgelegd in Doorzoeken van de ports tree.
Als u een specifieke bestandsnaam zoekt, installeer dan het pkglocatedb package en gebruik het pkg_locate commando om te zoeken naar packages waar het betreffende bestand in zit.
U zal merken dat bepaalde packages beschikbaar zijn in enkele verschillende varianten, formeel "flavors" genoemd. Andere zijn onderdelen van dezelfde toepassing die afzonderlijk kunnen ge´nstalleerd worden. Deze worden "subpackages" genoemd. Dit wordt in meer detail besproken in Gebruik van flavors en subpackages maar flavor betekent eigenlijk dat ze geconfigureerd worden met verschillende sets van opties. Momenteel hebben vele packages flavors, bijvoorbeeld: databankondersteuning, ondersteuning voor systemen zonder X, of netwerktoevoegingen zoals SSL en IPv6. Elke flavor van een package zal een verschillend suffix hebben in zijn package-naam. Raadpleeg voor gedetailleerde informatie over package-namen alstublieft packages-specs(7).
Opmerking: Niet alle mogelijke packages zijn noodzakelijk beschikbaar op de FTP servers! Sommige toepassingen werken gewoon niet op alle architecturen. Sommige toepassingen mogen niet gedistribueerd worden via FTP (of CD-ROM) om licentieredenen. Er kunnen ook vele mogelijke combinaties van flavors van een port zijn, en het OpenBSD project heeft gewoon niet de middelen om ze allemaal te bouwen. Indien u een combinatie nodig hebt die niet beschikbaar is, zal u de port vanaf broncode moeten bouwen. Lees voor meer informatie daarover Gebruik van flavors en subpackages in de Ports sectie van dit document.
$ sudo pkg_add -v screen-4.0.3p1 parsing screen-4.0.3p1 installed /etc/screenrc from /usr/local/share/examples/screen/screenrc | 71% screen-4.0.3p1: complete
In dit voorbeeld werd de -v vlag gebruikt om meer uitgebreide uitvoer te geven. Deze optie is niet nodig maar ze is nuttig om te debuggen en werd hier gebruikt om een beetje meer inzicht te bieden in wat pkg_add(1) eigenlijk aan het doen is. Bemerk de boodschap die /etc/screenrc vermeldt. Het specificeren van meerdere -v vlaggen zal nog meer uitgebreide uitvoer produceren.
$ sudo pkg_add -i screen Ambiguous: screen could be screen-4.0.3p3 screen-4.0.3p3-shm Choose one package 0: <None> 1: screen-4.0.3p3 2: screen-4.0.3p3-shm Your choice: 1 screen-4.0.3p3: complete
Voor sommige packages zal er belangrijke bijkomende informatie gegeven worden over de configuratie of het gebruik van de toepassing op een OpenBSD systeem. Aangezien ze belangrijk is, zal ze getoond worden ongeacht het gebruik van de -v vlag. Beschouw het volgende voorbeeld:
$ sudo pkg_add ghostscript-fonts-8.11 ghostscript-fonts-8.11: complete You may wish to update your font path for /usr/local/share/ghostscript/fonts --- ghostscript-fonts-8.11 ------------------- To install these fonts for X11, just make sure that the fontpath lists the 75dpi or 100dpi bitmap fonts before the ghostscript fonts, and make sure you have the string ":unscaled" appended to the bitmap font's fontpath. This way, the bitmap fonts will be used if they match, and the Type 1 versions will be used if the font needs to be scaled. Below is the relevant section from a typical xorg.conf file. FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" FontPath "/usr/local/lib/X11/fonts/ghostscript/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
Laat ons nu verder gaan met een voorbeeld van een package die dependencies heeft:
We voegden opnieuw de -v vlag toe om meer te zien van wat er gebeurt. Bij het onderzoeken van de packing-informatie worden dependencies gevonden en die worden eerst ge´nstalleerd. Ergens halverwege kan u zien dat de gettext package ge´nstalleerd wordt, die afhangt van libiconv. Vˇˇr het installeren van gettext wordt de packing-informatie ervan onderzocht en wordt geverifieerd of libiconv reeds ge´nstalleerd is.$ sudo pkg_add -v tin-1.8.2p0 parsing tin-1.8.2p0 Dependencies for tin-1.6.2 resolve to: gettext-0.14.6, libutf8-0.8, pcre-6.4p1, libiconv-1.9.2p3 (todo: libiconv-1.9.2p3,gettext-0.14.6,pcre-6.4p1,libutf8-0.8) tin-1.8.2p0:parsing libiconv-1.9.2p3 tin-1.8.2p0:libiconv-1.9.2p3: complete tin-1.8.2p0:parsing gettext-0.14.6 Dependencies for gettext-0.14.6 resolve to: expat-2.0.0, libiconv-1.9.2p3 (todo: expat-2.0.0) tin-1.8.2p0:parsing expat-2.0.0 tin-1.8.2p0:expat-2.0.0: complete tin-1.8.2p0:gettext-0.14.6: complete tin-1.8.2p0:parsing pcre-6.4p1 tin-1.8.2p0:pcre-6.4p1: complete tin-1.8.2p0:parsing libutf8-0.8 tin-1.8.2p0:libutf8-0.8: complete tin-1.8.2p0: complete
Het is mogelijk om op ÚÚn lijn meerdere package-namen te specificeren, die dan allemaal ineens ge´nstalleerd worden, samen met mogelijke dependencies.
Als u om ÚÚn of andere reden beslist om PKG_PATH niet te gebruiken, is het ook mogelijk om de absolute locatie van een package op de commandoregel te specificeren. Deze absolute locatie kan een lokaal pad zijn, of een URL die verwijst naar FTP, HTTP of SCP locaties. Laten we een installatie vie FTP beschouwen in het volgende voorbeeld:
$ sudo pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/5.3/packages/`machine -a`/screen-4.0.3p3.tgz screen-4.0.3p1: complete
In dit voorbeeld werd de -v vlag niet gebruikt, dus worden enkel noodzakelijke boodschappen getoond. Merk op dat de volledige bestandsnaam ingegeven werd door een .tgz suffix toe te voegen. U kan dit suffix ook overslaan zoals in de vorige voorbeelden aangezien het automatisch wordt aangevuld door pkg_add(1).
Opmerking: Niet alle architecturen hebben dezelfde packages beschikbaar. Sommige ports werken niet op bepaalde architecturen, en prestatie beperkt het aantal packages dat op andere kan gebouwd worden.
Voor de veiligheid zal pkg_add(1), indien u een package installeert die u eerder al ge´nstalleerd had (of een oudere versie ervan) en weer verwijderd, configuratiebestanden die gewijzigd werden niet overschrijven. In plaats daarvan zal het u hierover informeren als volgt (echter alleen bij gebruik van de -v vlag!):
Soms kan u een fout krijgen zoals die in het volgende voorbeeld:$ sudo pkg_add -v screen-4.0.3p1 parsing screen-4.0.3p1 The existing file /etc/screenrc has NOT been changed** | 71% It does NOT match the sample file /usr/local/share/examples/screen/screenrc You may wish to update it manually screen-4.0.3p1: complete
Daar is pkg_add(1) netjes dependencies aan het installeren, wanneer het plotseling de installatie van xv afbreekt. Dit is nog een veiligheidsvoorzorg die beschikbaar is sinds OpenBSD 3.7. De packing-informatie die gebundeld is in de package bevat informatie over "shared libraries" waarvan de package verwacht dat ze ge´nstalleerd zijn, zowel systeem-libraries als externe libraries. Als ÚÚn van de vereiste libraries niet kan gevonden worden, wordt de package niet ge´nstalleerd omdat hij toch niet zou werken.$ sudo pkg_add xv-3.10ap4 xv-3.10ap4:jpeg-6bp3: complete xv-3.10ap4:png-1.2.14p0: complete xv-3.10ap4:tiff-3.8.2p0: complete Can't install xv-3.10ap4: lib not found X11.9.0 Even by looking in the dependency tree: tiff-3.8.2p0, jpeg-6bp3, png-1.2.14p0 Maybe it's in a dependent package, but not tagged with @lib ? (check with pkg_info -K -L) If you are still running 3.6 packages, update them.
Om dit type van conflict op te lossen, moet u te weten komen wat u moet installeren om de vereiste libraries op uw systeem te krijgen. Er zijn verscheidene dingen die u kan controleren:
$ pkg_info aterm-0.4.2p1 color vt102 terminal emulator with transparency support bzip2-1.0.4 block-sorting file compressor, unencumbered expat-2.0.0 XML 1.0 parser written in C fluxbox-0.9.15.1p0 window manager based on the original Blackbox code gettext-0.14.6 GNU gettext imlib2-1.3.0 image manipulation library jpeg-6bp3 IJG's JPEG compression utilities libiconv-1.9.2p3 character set conversion library libltdl-1.5.22p1 GNU libtool system independent dlopen wrapper libungif-4.1.4p0 tools and library routines for working with GIF images libutf8-0.8 provides UTF-8 locale support mutt-126.96.36.199i tty-based e-mail client pcre-6.4p1 perl-compatible regular expression library png-1.2.14p0 library for manipulating PNG images screen-4.0.3p1 multi-screen window manager tcsh-6.14.00p1 extended C-shell with many useful features tiff-3.8.2p0 tools and library routines for working with TIFF images tin-1.8.2p0 threaded NNTP and spool based UseNet newsreader
Wanneer u een naam van een ge´nstalleerde package (of een locatie van een package die ge´nstalleerd moet worden), zal pkg_info(1) meer gedetailleerde informatie tonen over die specifieke package.
$ sudo pkg_add -u unzip unzip-5.52p0 (extracting): complete unzip-5.52 (deleting): complete unzip-5.52p0 (installing): complete Clean shared items: complete
Wanneer een package dependencies heeft, worden die ook onderzocht op updates. Het aanroepen van pkg_add(1) met de -u vlag en zonder package-naam zal alle ge´nstalleerde packages proberen te updaten.
Opmerking: De -u optie steunt op de PKG_PATH omgevingsvariabele. Als die niet ingesteld is, zal pkg_add(1) geen updates kunnen vinden.
Het hebben van meerdere entries in PKG_PATH betekent niet dat alle entries zullen geprobeerd worden voor update operaties. In plaats daarvan zal pkg_add(1) stoppen bij het eerste path met overeenstemmende kandidaten.
Als u een configuratiebestand had dat toebehoorde aan de oude versie en dat u gewijzigd hebt, zal dit standaard onaangeroerd blijven. U kan het echter vervangen door het standaard configuratiebestand van de nieuwe versie door pkg_add(1) aan te roepen met de -c vlag.
Om een package te verwijderen, neemt u gewoon de juiste naam van de package zoals getoond door pkg_info(1) (zie Opsommen van ge´nstalleerde packages hierboven) en gebruikt u pkg_delete(1) om de package te verwijderen. In het onderstaande voorbeeld wordt de screen package verwijderd. Bemerk dat er soms instructies zijn van extra dingen die verwijderd moeten worden en die pkg_delete(1) niet voor u verwijderd heeft. Zoals bij de pkg_add(1) utility kan u de -v vlag gebruiken om meer uitgebreide uitvoer te krijgen.
$ sudo pkg_delete screen screen-4.0.3p1: complete Clean shared items: complete
Opmerking: Het is vaak niet nodig om de versienummers en flavors bij de package-naam te specificeren, aangezien pkg_delete(1) gewoonlijk zelf de volledige naam zal kunnen vinden. U moet de volledige package-naam specificeren (in het voorbeeld is dat screen-4.0.3p1) alleen als er dubbelzinnigheid mogelijk is wegens meerdere ge´nstalleerde packages met de gespecificeerde naam. In dat geval kan pkg_delete(1) niet weten welke package het moet verwijderen.
Voor de veiligheid zal pkg_delete(1) geen configuratiebestanden verwijderen als ze gewijzigd werden. In plaats daarvan zal het u hierover inlichten als volgt:
$ sudo pkg_delete screen screen-4.0.3p1: complete Clean shared items: complete --- screen-4.0.3p1 ------------------- You should also remove /etc/screenrc (which was modified)
Als u die configuratiebestanden liever automatisch verwijderd wil zien, kan u dat doen door de -c vlag te gebruiken.
$ sudo pkg_add screen-4.0.3p1 screen-4.0.3p1: complete 7% Adjusting md5 for /usr/local/info/screen.info-3 from 49fb3fe1cc3a3b0057518459811b6dac to 3b9c7811244fb9f8d83bb27d3a0f60d8 /usr/sbin/pkg_add: Installation of screen-4.0.3p1 failed , partial installation recorded as partial-screen-4.0.3p1
Het is altijd een goed idee om gedeeltelijke packages van uw systeem te verwijderen, en mogelijke problemen op te lossen die tot dit falen leidden. Het wijst er vaak op dat u geen zuiver systeem hebt waarbij alles via packages ge´nstalleerd werd, maar waar mogelijk packages vermengd zijn met andere software die rechtstreeks vanaf broncode ge´nstalleerd werd.
BELANGRIJKE OPMERKING: De ports tree is bedoeld voor gevorderde gebruikers. Iedereen wordt aangeraden de vooraf gecompileerde binaire packages te gebruiken. Stel GEEN beginnersvragen op de mailinglijsten zoals "Hoe kan ik de ports tree werkend krijgen?". Indien u vragen hebt over de ports tree, wordt verondersteld dat u de manual pagina's en deze FAQ gelezen hebt, en dat u in staat bent er mee te werken.
Naast de Makefile bevat iedere port ook tenminste het volgende:
Al deze informatie wordt bijgehouden in een directory-hiŰrarchie onder /usr/ports. Deze hiŰrarchie bevat drie speciale subdirectories:
Wanneer een gebruiker make(1) uitvoert in de subdirectory van een specifieke port, zal het systeem recursief de "dependency tree" aflopen, controleren of de vereiste dependencies ge´nstalleerd zijn, ontbrekende dependencies bouwen en installeren, en vervolgens verder gaan met het bouwen van de gewenste port. Al het bouwen gebeurt binnen de werkdirectory die de port aanmaakt. Dit is normaal onder ${WRKOBJDIR}, die standaard op /usr/ports/pobj staat, maar u kunt deze overschrijven (zie Configuratie van het ports systeem). Als WRKOBJDIR expliciet leeggemaakt is, dan zal in plaats daarvan een subdirectory van de hoofddirectory van de port worden gebruikt (de naam van het package voorafgegaan door "w-").
Opmerking: Ports worden nooit rechtstreeks op uw systeem ge´nstalleerd! Ze gebruiken een valse ("fake") installatiedirectory. Al wat daar ge´nstalleerd wordt, wordt samengebundeld in een package (die opgeslagen wordt in de packages/ subdirectory van de ports tree zoals eerder vermeld). Het installeren van een port betekent werkelijk: een package aanmaken, en vervolgens die package installeren!
Meer informatie over het ports systeem vindt u terug in deze manual pagina's:
|Bron||Form||"Flavor"|
|-release||-stable||snapshots||-current|
|CD-ROM||.tar.gz||x||-||-||-|
|FTP mirrors||.tar.gz||x||-||x||-|
|AnonCVS||cvs checkout||x||x||-||x|
Zoek op de CD-ROM en FTP mirrors naar een bestand met de naam ports.tar.gz. U wil dit bestand untarren in de /usr directory, wat /usr/ports zal aanmaken, en alle directories daaronder. Bijvoorbeeld:
$ cd /tmp $ ftp ftp://ftp.openbsd.org/pub/OpenBSD/5.3/ports.tar.gz $ cd /usr $ sudo tar xzf /tmp/ports.tar.gz
De snapshots beschikbaar op de FTP mirrors worden dagelijks gegenereerd vanaf de -current ports tree. U zal de snapshots terugvinden in de pub/OpenBSD/snapshots/ directory. Indien u een snapshot van de ports tree gebruikt, moet u een overeenstemmende snapshot van OpenBSD ge´nstalleerd hebben. Let erop dat u uw ports tree en uw OpenBSD systeem synchroon houdt!
Lees voor meer informatie over het bekomen van de ports tree via AnonCVS alstublieft de AnonCVS pagina die een lijst van beschikbare servers en een aantal voorbeelden bevat.
OPMERKING: Deze sectie introduceert enkele bijkomende globale instellingen om toepassingen vanuit ports te bouwen. U kan deze sectie overslaan, maar dan zal u veel van de make(1) opdrachten in de voorbeelden als root moeten uitvoeren.
Omdat het OpenBSD project niet de middelen heeft om de broncode van alle software in de ports tree na te kijken, kan u het ports systeem configureren om een aantal veiligheidsmaatregelen te nemen. De ports infrastructuur kan al het bouwen als een gewone gebruiker uitvoeren, en alleen die stappen die supergebruiker-privileges vereisen, als root uitvoeren. Voorbeelden zijn de fake en install make targets. Omdat root-privileges echter steeds vereist zijn op een bepaald ogenblik, zal het ports systeem u niet redden wanneer u beslist een kwaadwillige toepassing te bouwen.
SUDO=/usr/bin/sudo
# chgrp -R wsrc /usr/ports # find /usr/ports -type d -exec chmod g+w {} \;
Dit dwingt de bouwprocedure om binnen toegelaten directories te blijven, en verbiedt het schrijven op illegale plaatsen, waarbij het risico van een beschadigd systeem aanzienlijk verkleind wordt. Merk op dat het gebruik van systrace(1) ongeveer 20% overhead aan de bouwtijd toevoegt.USE_SYSTRACE=Yes
Het is mogelijk om een "read-only" ports tree te gebruiken door de directories waarnaar geschreven wordt tijdens het bouwen van ports, af te zonderen:
Indien gewenst kan u ook het eigendom van deze directories instellen op uw lokale gebruikersnaam en groep, zodat het ports systeem de onderliggende directories als een gewone gebruiker kan aanmaken.WRKOBJDIR=/usr/obj/ports DISTDIR=/usr/distfiles PACKAGE_REPOSITORY=/usr/packages
Het zoekresultaat geeft een fijn overzicht van elke toepassing die gevonden werd: de naam van de port, het pad naar de port, een 1-regel beschrijving, de maintainer van de port, sleutelwoorden die verband houden met de port, library/build/runtime dependencies, en architecturen waarvan bekend is dat de port er op werkt.$ cd /usr/ports $ make search key=rsnapshot Port: rsnapshot-1.3.1p0 Path: net/rsnapshot Info: remote filesystem snapshot utility Maint: Antoine Jacoutot <firstname.lastname@example.org> Index: net sysutils L-deps: B-deps: :net/rsync R-deps: :devel/p5-Lchown :net/rsync Archs: any
Dit mechanisme is echter vrij eenvoudig, het draait gewoon awk(1) op het ports indexbestand. Sinds OpenBSD 4.0 werd een nieuwe port, "sqlports" genaamd, aangemaakt, die toelaat heel nauwkeurig te zoeken met behulp van SQL. Het is een SQLite database, maar eigenlijk kan eender welk databaseformaat aangemaakt worden met de ports infrastructuur. De sqlports port bevat een script om de database te genereren, dat zou gebruikt kunnen worden als basis om databases in verschillende formaten te genereren.
Voeg gewoon de sqlports package toe met pkg_add(1) om van start te gaan. Een voorbeeldsessie zou er als volgt kunnen uitzien:
Het bovenstaande is nog steeds een heel eenvoudige zoekopdracht. Met SQL kan u ongeveer eender wat opzoeken, inclusief dependencies, configuratie-opties, shared libraries, enz.$ sqlite3 /usr/local/share/sqlports SQLite version 3.3.12 Enter ".help" for instructions sqlite> SELECT FULLPKGNAME,COMMENT FROM Ports WHERE COMMENT LIKE '%statistics%' Guppi-0.40.3p1|GNOME-based plot program with statistics capabilities mailgraph-1.12|a RRDtool frontend for Postfix statistics R-2.4.1|clone of S, a powerful math/statistics/graphics language py-probstat-0.912p0|probability and statistics utilities for Python darkstat-3.0.540p1|network statistics gatherer with graphs pfstat-2.2p0|packet filter statistics visualization tcpstat-1.4|report network interface statistics wmwave-0.4p2|Window Maker dockapp to display wavelan statistics diffstat-1.43p0|accumulates and displays statistics from a diff file sqlite>
$ cd /usr/ports/net/rsnapshot $ make install ===> Checking files for rsnapshot-1.2.9 >> rsnapshot-1.2.9.tar.gz doesn't seem to exist on this system. >> Fetch http://www.rsnapshot.org/downloads/rsnapshot-1.2.9.tar.gz. 100% |**************************************************| 173 KB 00:02 >> Size matches for /usr/ports/distfiles/rsnapshot-1.2.9.tar.gz >> Checksum OK for rsnapshot-1.2.9.tar.gz. (sha1) ===> rsnapshot-1.2.9 depends on: rsync-2.6.9 - not found ===> Verifying install for rsync-2.6.9 in net/rsync ===> Checking files for rsync-2.6.9 >> rsync-2.6.9.tar.gz doesn't seem to exist on this system. >> Fetch ftp://ftp.samba.org/pub/rsync/old-versions/rsync-2.6.9.tar.gz. 100% |**************************************************| 792 KB 00:31 >> Size matches for /usr/ports/distfiles/rsync-2.6.9.tar.gz >> Checksum OK for rsync-2.6.9.tar.gz. (sha1) ===> Verifying specs: c ===> found c.40.3 ===> Extracting for rsync-2.6.9 ===> Patching for rsync-2.6.9 ===> Configuring for rsync-2.6.9 [...snip...] ===> Building for rsync-2.6.9 [...snip...] ===> Faking installation for rsync-2.6.9 [...snip...] ===> Building package for rsync-2.6.9 Link to /usr/ports/packages/i386/ftp/rsync-2.6.9.tgz Link to /usr/ports/packages/i386/cdrom/rsync-2.6.9.tgz ===> Installing rsync-2.6.6p0 from /usr/ports/packages/i386/all/rsync-2.6.9.tgz rsync-2.6.9: complete ===> Returning to build of rsnapshot-1.2.9 ===> rsnapshot-1.2.9 depends on: rsync-2.6.9 - found ===> Extracting for rsnapshot-1.2.9 ===> Patching for rsnapshot-1.2.9 ===> Configuring for rsnapshot-1.2.9 [...snip...] ===> Building for rsnapshot-1.2.9 [...snip...] ===> Faking installation for rsnapshot-1.2.9 [...snip...] ===> Building package for rsnapshot-1.2.9 Link to /usr/ports/packages/i386/ftp/rsnapshot-1.2.9.tgz Link to /usr/ports/packages/i386/cdrom/rsnapshot-1.2.9.tgz ===> rsnapshot-1.2.9 depends on: rsync-2.6.9 - found ===> Installing rsnapshot-1.2.9 from /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz rsnapshot-1.2.9: complete
Zoals u kan zien, doet het ports systeem vele dingen automatisch. Het zal de broncode afhalen, uitpakken en patchen, de broncode configureren en bouwen (compileren), de bestanden in een valse ("fake") directory installeren, een package aanmaken (in overeenstemming met de inpaklijst) en deze package installeren op uw systeem (gewoonlijk onder /usr/local/). En het doet dit recursief voor alle dependencies van de port. Let gewoon op de "===> Verifying install for ..." en "===> Returning to build of ..." lijnen in de bovenstaande uitvoer, die het aflopen van de "dependency tree" aangeven.
Indien een vorige versie van de toepassing die u wil installeren, reeds ge´nstalleerd was op uw systeem, kan u make update gebruiken in plaats van make install. Dit zal pkg_add(1) aanroepen met de -r vlag.
Opmerking: Het bouwen van grote toepassingen zal veel systeemmiddelen vergen. Goede voorbeelden zijn compilers zoals GCC 4.0 of de Java 2 Software Development Kit. Indien u "out of memory" of gelijkaardige fouten krijgt bij het bouwen van zulke ports, heeft dit gewoonlijk ÚÚn van deze twee redenen:
Bijkomend kan u ook de werkdirectories van alle dependencies van de port opruimen met deze make target:$ make clean ===> Cleaning for rsnapshot-1.2.9
Indien u de broncode distributieset(s) van de port wenst te verwijderen, zou u dit gebruiken:$ make clean=depends ===> Cleaning for rsync-2.6.9 ===> Cleaning for rsnapshot-1.2.9
Wanneer u meerdere flavors van dezelfde port hebt gecompileerd, kan u de werkdirectories van al deze flavors ineens opruimen met$ make clean=dist ===> Cleaning for rsnapshot-1.2.9 ===> Dist cleaning for rsnapshot-1.2.9
U kan de dingen ook opruimen naarmate ze gebouwd worden door een speciale variabele in te stellen. Werkdirectories zullen automatisch verwijderd worden nadat packages zijn aangemaakt:$ make clean=flavors
$ make package BULK=Yes
Dit zal pkg_delete(1) aanroepen om de overeenstemmende package van uw systeem te verwijderen. Indien gewenst kan u ook de package van een port verwijderen en herinstalleren door gebruik van$ make uninstall ===> Deinstalling for rsnapshot-1.2.9 rsnapshot-1.2.9: complete Clean shared items: complete
Indien u de packages die u net gebouwd hebt, kwijt wil, kan dat als volgt:$ make reinstall ===> Cleaning for rsnapshot-1.2.9 /usr/sbin/pkg_delete rsnapshot-1.2.9 rsnapshot-1.2.9: complete Clean shared items: complete ===> Installing rsnapshot-1.2.9 from /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz rsnapshot-1.2.9: complete
$ make clean=packages ===> Cleaning for rsnapshot-1.2.9 rm -f /usr/ports/packages/i386/all/rsnapshot-1.2.9.tgz
Het eerste mechanisme heet flavors. Een flavor geeft gewoonlijk een bepaalde verzameling compilatie-opties aan. Sommige toepassingen hebben bijvoorbeeld een "no_x11" flavor die gebruikt kan worden op systemen zonder X. Sommige shells hebben een "static" flavor, die een statisch gelinkte versie zal bouwen. Er zijn ports die verschillende flavors hebben om ze te bouwen met verschillende grafische toolkits. Andere voorbeelden zijn: ondersteuning voor verschillende databankformaten, verschillende netwerkopties (SSL, IPv6, ...), verschillende papiergroottes, enz.
Samenvatting: Heel waarschijnlijk zal u flavors gebruiken wanneer een package niet beschikbaar gemaakt werd voor de flavor die u zoekt. In dit geval zal u de gewenste flavor specificeren en zelf de port bouwen.
De meeste port flavors zullen hun eigen werkdirectory hebben tijdens het bouwen en elke flavor zal gebundeld worden in een package met overeenstemmende naam om verwarring te vermijden. Om de verschillende flavors van een bepaalde port te zien, kan u in zijn subdirectory gaan staan en dit uitvoeren:
U kijkt best ook naar de DESCR bestanden van de port, aangezien die de beschikbare flavors verder toelichten.$ make show=FLAVORS
Het tweede mechanisme heet subpackages. Een porter kan beslissen om subpackages aan te maken voor verschillende onderdelen van dezelfde toepassing, indien ze logisch gescheiden kunnen worden. U zal vaak subpackages zien voor het clientgedeelte en het servergedeelte van een programma. Soms wordt uitgebreide documentatie gebundeld in een afzonderlijke subpackage omdat ze nogal veel schijfruimte inneemt. Extra functionaliteit die zware dependencies met zich meebrengt zal vaak afzonderlijk verpakt worden. De porter zal ook beslissen welke subpackage de hoofdpackage is die standaard zal ge´nstalleerd worden. Andere voorbeelden zijn: uitgebreide testpakketten die bij de software zitten, afzonderlijke modules met ondersteuning voor verschillende dingen, enz.
Samenvatting: Sommige ports worden in verschillende packages verdeeld. make install zal alleen de hoofdpackage installeren.
Om de verschillende packages te tonen die gebouwd worden door een port, gebruikt u
$ make show=PKGNAMES
make install zal slechts de eerste subpackage installeren. Om ze allemaal te installeren, gebruikt u
$ make install-all
Om de verschillende subpackages op te sommen die beschikbaar zijn voor een port, gebruikt u
Het is mogelijk om te selecteren welke subpackage(s) ge´nstalleerd moeten worden van binnen de ports tree. Na enkele tests zal deze procedure gewoon pkg_add(1) aanroepen om de gewenste subpackage(s) te installeren.$ make show=MULTI_PACKAGES
$ env SUBPACKAGE="-server" make install
Opmerking: Het subpackages mechanisme behandelt alleen packages, het wijzigt geen configuratie-opties vˇˇr het bouwen van de port. Voor dat doel moet u flavors gebruiken.
leest een lijst van pkgpaths (pkgpath(7)) in ~/localports en bouwt alle packages. Het kan de de packages ook installeren nadat ze zijn gebouwd. ~/localports kan er ongeveer zo uitzien:/usr/ports/infrastructure/bin/dpb -P ~/localports
Als u op de commandoregel of via -P of -I geen lijst van ports opgeeft om te bouwen, dan zal dpb(1) alle ports in de ports tree bouwen.net/cvsync www/mozilla-firefox net/rsync net/nfsen textproc/mupdf misc/magicpoint lang/sbcl editors/emacs23
Dit betekent dat al wat u moet doen is ervoor te zorgen dat u een checkout doet van de juiste branch van de ports tree, en dan de gewenste software er uit te bouwen. U kunt uw tree up-to-date houden met CVS en bijkomend inschrijven op de ports-security mailinglijst om beveiligingsaankondigingen i.v.m. software in de ports tree te ontvangen.
Natuurlijk bereiken beveiligingsupdates de -current ports tree alvorens ze opgenomen worden in de -stable branch.
Om te starten met het maken van gesigneerde packages moeten we eerst een root CA (certificate authority) certificaat en sleutel maken. In dit voorbeeld gebruiken we een geldigheid van 10 jaar.
Nu gaan we een build certificaat en sleutel maken die worden gebruikt om onze packages te signeren. In dit voorbeeld gebruiken we een geldigheid van 1 jaar. We maken ook een overeenkomstig Certificate Signing Request die door onze CA wordt gebruikt om het certificaat te signeren.# openssl req -x509 -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/pkgca.key -out /etc/ssl/pkgca.pem
Laten we nu het certificaat signeren met het CA dat we in de eerste stap hebben gemaakt.# openssl genrsa -out /etc/ssl/private/pkg.key 2048 # openssl req -new -key /etc/ssl/private/pkg.key -out /etc/ssl/private/pkg.csr
# openssl x509 -req -days 365 -in /etc/ssl/private/pkg.csr -CA /etc/ssl/pkgca.pem -CAkey /etc/ssl/private/pkgca.key -CAcreateserial -out /etc/ssl/pkg.crt # rm /etc/ssl/private/pkg.csr
We voegen tenslotte de volgende regel toe aan /etc/mk.conf om standaard gesigneerde packages te maken.
PKG_CREATE=/usr/sbin/pkg_create -s x509 -s /etc/ssl/pkg.crt -s /etc/ssl/private/pkg.key
Bij het installeren van gesigneerde packages zult u een extra regel zien op het einde van de uitvoer om u te informeren over het aantal gesigneerde package(s) dat zojuist is ge´nstalleerd.
$ sudo pkg_add vte-0.24.3.tgz vte-0.24.3: ok Packages with signatures: 1
Als u bij het werken met gesigneerde packages in de problemen komt (bv. door een verlopen certificaat...), dan kunt u (her-)installatie en/of verwijdering forceren met ÚÚn van de volgende commando's (afhankelijk van wat u wilt bereiken):
$ sudo pkg_add -r -D installed PKGNAME $ sudo pkg_add -D nosig PKGNAME $ sudo pkg_delete -q PKGNAME
Het is zeer waarschijnlijk dat u een systeem en ports tree gebruikt die niet synchroon zijn.
Excuseer?
Een andere veel voorkomende fout is een ontbrekende X11 installatie. Zelfs als de port die u probeert te bouwen niet rechtstreeks afhangt van X11, kan een subpackage ervan of kunnen de dependencies ervan X11 headers en libraries vereisen. Ports bouwen op systemen zonder X11 wordt niet ondersteund, dus als u er op aandringt om dit toch te doen, moet u zelf maar uitzoeken hoe het werkt. Voor heel wat ports zijn er echter "no_x11" ge-"flavor"de packages beschikbaar, die u kan installeren zonder dat u X11 nodig hebt op uw systeem.
WAARSCHUWING: Meng GEEN versies van Ports en OpenBSD!
Dit toch doen zal u vroeg of laat (waarschijnlijk zelfs erg vroeg) hoofdpijn bezorgen wanneer u allerlei fouten probeert op te lossen!
Maar hey, ik ben hier helemaal -current!
De ports verzameling is een vrijwilligersproject. Soms heeft het project gewoon niet de mankracht wat betreft ontwikkelaars om alles up-to-date te houden. Ontwikkelaars pikken eigenlijk gewoon op wat ze interessant vinden en kunnen testen in hun omgeving. Sommige individuele ports kunnen hierom achter lopen op de hoofdversies. Belangrijker, niet updaten naar de laatste versie is vaak een bewuste beslissing. De nieuwe versie kan problemen hebben die de maintainer probeert op te lossen, of die de toepassing gewoon slechter gemaakt hebben dan de oude versie. OpenBSD kan ook andere doelstellingen hebben dan de ontwikkelaars in andere projecten, wat soms leidt tot functionaliteiten of implementatiekeuzes die niet wenselijk zijn vanuit het standpunt van OpenBSD ontwikkelaars. De update kan ook uitgesteld worden omdat de nieuwe versie niet beschouwd wordt als een cruciale update.
Als u echt een nieuwere versie van een port nodig hebt, kan u best aan de maintainer vragen de port te updaten (zie hieronder om te weten te komen wie de maintainer van de port is). Als u kunt helpen, des te beter.
U kan helpen. Overweeg uw eigen port te creŰren. Er is hierover wat documentatie beschikbaar: het OpenBSD Porter's Handbook. Lees ze, en lees ze opnieuw. Vooral het gedeelte over het onderhouden van uw port. Probeer vervolgens een nieuwe port te maken, en test hem zorgvuldig en stap voor stap. Als hij uiteindelijk goed werkt voor u, dien hem dan in op de ports mailinglijst op email@example.com. Er is een goede kans dat u van andere mensen wat feedback en tests zal krijgen. Als het testen succesvol gebeurt, zal het in overweging genomen worden om uw port op te nemen in de ports tree.
Verdere antwoorden op deze vraag vindt u ook in FAQ 1.
Een complexe toepassing vanaf broncode bouwen is niet triviaal. Niet alleen moet de toepassing gecompileerd worden, maar de tools die gebruikt worden om ze te bouwen, moeten ook gebouwd worden. Jammer genoeg zijn OpenBSD, de tools en de toepassing allemaal bezig te evolueren, en vaak is het een uitdaging om alle stukken te laten samenwerken. Zodra alles werkt, kan een herziening in gelijk welk onderdeel de volgende dag er voor zorgen dat het niet meer werkt. Iedere zes maanden, wanneer een nieuwe uitgave van OpenBSD gemaakt wordt, wordt er moeite gedaan om het bouwen van elke port op elk platform te testen, maar tijdens de ontwikkelingscyclus is het waarschijnlijk dat er enkele ports zullen breken.
Bovenop het laten samenwerken van alle onderdelen, is er nog de kwestie van tijd en middelen die vereist zijn om bepaalde toepassingen vanaf broncode te bouwen. Toepassingen als producten van Mozilla of KDE kunnen uren tijd en enorme hoeveelheden schijfruimte en RAM/swap vergen om te bouwen. Waarom zoveel tijd en moeite besteden, wanneer programma's reeds gecompileerd zijn en klaar zitten op uw CD-ROM of FTP mirror, wachtend om gebruikt te worden?
Natuurlijk zijn er enkele goede redenen om in sommige gevallen toch ports te gebruiken en niet packages:
$ cd /usr/ports/archivers/unzip $ make show=MAINTAINER
Anders, als er geen maintainer is, of als u hem/haar niet kan bereiken, zend dan een e-mail naar de OpenBSD ports mailinglijst, firstname.lastname@example.org. Gebruik alstublieft NIET de email@example.com mailinglijst voor vragen over ports.
Geef in elk geval alstublieft:
Hierna zou u in uw ~/portslogs directory van het bouwen een logbestand moeten hebben dat u naar de maintainer van de port kan sturen. Zorg er ook voor dat u geen speciale opties gebruikt bij het bouwen, bijvoorbeeld in /etc/mk.conf.$ mkdir ~/portslogs $ cd /usr/ports/archivers/unzip $ make clean install 2>&1 | /usr/ports/infrastructure/bin/portslogger \ ~/portslogs
Anders kan u ook
Hardware donaties kunnen helpen bij het testen van ports op de verschillende platformen waar OpenBSD op draait.
Opmerking: Voor al het aanmaken van nieuwe ports en het daaropvolgende testen, of voor het testen van port updates, moet u een -current systeem draaien! In het algemeen is dit geen wenselijke omgeving door haar voortdurend evoluerende aard, dus ga alleen verder als u zeker bent dat u -current wil blijven volgen.
[FAQ Index] [Naar Sectie 14 - Inrichting van de Schijf]