[OpenBSD]

Die Ports- u. Packages-Kollektion


Inhaltsverzeichnis


Motivation

OpenBSD ist für sich schon ein ziemlich komplettes System, aber es gibt trotzdem noch eine Menge Software, die man vielleicht gerne trotzdem zusätzlich haben möchte. Leider gibt es da das Problem, wo die Grenze zu ziehen ist: was soll noch dabei sein, genauso wie die gelegentlich auftretenden Export- oder Lizenzbeschränkungen. Da OpenBSD als einzelnes Unix-artiges Betriebssystem gedacht ist, können einige Dinge einfach gar nicht Teil des Systems sein, wenn es ausgeliefert wird.

Die Ports- u. Packages-Kollektion wird KEINER Sicherheitsuntersuchung unterzogen, wie es bei OpenBSD selbst geschieht. Obwohl wir uns bemühen, die Qualität der Packages hoch zu halten, haben wir doch einfach nicht genügend Manpower, um den gleichen Level an Robustheit und Sicherheit sicherzustellen.

Die anfangs von FreeBSD geliehene Portskollektion füllt diese Lücke. Das Konzept ist, für jede Software aus dritter Hand ein Makefile zu haben, das Folgendes enthält:

Diese Informationen werden in einer Verzeichnishierarchie unterhalb /usr/ports vorgehalten.

Packages sind die ausführbaren (binären) Versionen der Ports. Ein kompilierter Port wird zum Package, das im System mittels pkg_add(1) registriert werden kann.

Packages sehen aus wie einfache .tgz-Archive, aber sie sollten immer mit Hilfe von pkg_add(1) hinzugefügt werden, da es noch weitere Informationen geben könnte, die nur pkg_add(1) sauber verarbeiten kann. Tipp: Du kannst zwischen Packages und .tgz-Archiven mit Hilfe von pkg_info(1) unterscheiden.

Wo man Packages herbekommt

Eine große Sammlung vorkompilierter Packages ist für die meisten Architekturen verfügbar. Ein Package hinzuzufügen geht einfach mit pkg_add pkgname. Wenn du Packages immer von einer einzigen Quelle beziehst (einem Packagerepository), setze PKG_PATH auf diese Repository-URL, um Abhängigkeiten aufzulösen.

Um zum Beispiel das Gimp-Package für das 4.3-Release auf einer i386-Maschine direkt von der FTP-Site (inklusive der Abhängigkeiten) zu installieren, gib Folgendes ein:

    # export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.3/packages/i386/
    # pkg_add gimp

Ports- und Packagesupdate für eine neue OpenBSD-Version

Zum ersten Mal gab es in der Version 2.7 einen stable-Branch für den Ports-Tree.

Um jetzt zum Beispiel den stable-Branch für das 4.3-Release zu holen:

    $ cd /usr/ports
    $ cvs -q -d anoncvs@some.anon.server:/cvs up -r OPENBSD_4_3 -Pd

Beginnend mit der Version 2.8 wurden ausgewählte Packages ebenfalls verfügbar gemacht. Bitte sieh dir die Seite Stable Packages an, um etwas über aktualisierte Packages und wichtige Updates für den stable-Branch herauszufinden. Wenn Du Sicherheitsankündigungen bekommen möchtest, kannst du dich auf der ports-security-Mailingliste eintragen.

Packagenamen werden immer verändert, sobald ein Package auf neueren Stand gebracht oder sonst wie verändert wird, um jegliche Verwirrung zwischen einem Package der Originalversion und einem Package zu vermeiden, in dem z. B. ein Fehler behoben wurde.

Installierte Packages verwalten

Die packages(7)-Manualseite enthält nützliche Informationen über verschiedene Wege, seine installierten Packages zu verwalten, Konflikte zu lösen (Dateien, die bereits existieren) und Abhängigkeiten zu behandeln.

Seit OpenBSD 3.9 stellt pkg_add(1) einen Updatemechanismus bereit. Um ein Package (und dessen Abhängigkeiten) zu aktualisieren muss der PKG_PATH auf eine URL zeigen, unter der Updates zu finden sind. Benutze dann folgenden Befehl: pkg_add -ui pkgname.

Ports benutzen

Wenn ein bestimmtes Package für deine Architektur nicht existiert, kannst du normalerweise den Port trotzdem kompilieren. Außerdem werden einige Anwender aus verschiedenen Gründen einfach alles aus dem Quelltext kompilieren wollen.

Du kannst die offizielle Version per FTP aus dem Verzeichnis pub/OpenBSD/[Version] (dabei ist [Version] die Versionsnummer) von allen FTP-Mirrors holen. Die Releaseversionen sind die, die wir mit unserer CD-ROM ausliefern und gründlicher als die Snapshots getestet wurden. Weitere Informationen gibt es in der ports(7)-Manualseite.

Der Lebenszyklus des Ports-Trees

Der Ports-Tree verändert sich ständig - wie der Rest von OpenBSD.

Der current-Ports-Tree kann nicht mit der zuletzt veröffentlichten Version benutzt werden. Das hängt mit Änderungen zusammen (typischerweise am port-make-Prozess), die Quelltexte des Sourcetrees von OpenBSD-current benötigen.

Der Ports-Tree arbeitet eigenständig. Die Aktualisierung eines einzelnen Verzeichnisses muss nicht zwangsläufig klappen, da Packageabhängigkeiten dich dazu zwingen können, große Teile deines Ports-Trees zu aktualisieren und neu zu kompilieren. Es wird daher allgemein empfohlen ports-current nicht zu folgen - es sei denn, man ist bereit, sich mit verschiedenen Problemen herumzuschlagen. Mailinglisten wie z. B. ports-changes@openbsd.org oder tech@openbsd.org sind vermutlich unverzichtbar.

Es wird dir geraten, auf einer Produktionsmaschine ports-stable zu verfolgen und einzusetzen: Wir werden versuchen, den stable-Ports-Tree in Bezug auf Probleme auf dem Laufenden zu halten, genauso mit Binarys.

Denk daran, dass verschwundene Distfiles kein Problem darstellen, da ftp.openbsd.org das komplette Repository vorhält. Nicht einmal die Änderung von Prüfsummen ist ein Problem: führe das Kommando

       make checksum REFETCH=true
aus, um sicherzustellen, dass du die korrekte Distfile für deinen Ports-Tree bekommst. Für Definitionen von current und stable siehe OpenBSDs Flavors.

Eine Liste der täglichen Änderungen an ports und ports-current ist verfügbar.

Den current-Ports-Tree kann man sich wie folgt holen:

Ports und das X Window System

Es gibt einige spezielle magische Dinge in den OpenBSD-X-Konfigurationsdateien, die es dem Ports-Tree erlauben, imake-basierte Anwendungen unter /usr/local zu installieren.

Beispielbenutzung des Ports-Trees

Gehen wir davon aus, du hast einen Ports-Tree und willst das Archivierungswerkzeug unzip installieren und kompilieren. Diese Befehle sollten dir weiterhelfen können:

    % cd /usr/ports/archivers/unzip
    % su
    # make install clean
    # exit
Einfach, oder? Insbesondere, wenn man bedenkt, was alles im Hintergrund passierte:

Mit OpenBSD 3.0 erzeugen die meisten Ports während der Installation Packages.

Wenn Ports erzeugt werden, wird das /usr/ports/distfiles-Verzeichnis mit Programmquelltext gefüllt und /usr/ports/packages wird mit Packages gefüllt. Anwender mit geringer Bandbreite sollten sich mirroring-ports(7) ansehen, um einen effizienten Weg kennenzulernen, alle Distfiles auf einmal herunterzuladen. In OpenBSD-current kannst du das Skript /usr/ports/infrastructure/fetch/clean-old benutzen, um alte Distfiles zu finden. Denk dran, dass die OpenBSD-CD nur den Ports-Tree und einige ausgewählte Packages enthält. Wenn du nur die Distfiles haben willst, musst du sie auf einem anderen Weg herunterladen.

Der Ports-Tree für Fortgeschrittene

Der Ports-Tree hat viele Funktionalitäten für den fortgeschrittenen Anwender, die ihn auch nach der Basisinstallation zu einem wertvollen Werkzeug machen. Fortgeschrittene Anwender wollen sich möglicherweise mit den Makefiles beschäftigen (sie sollten zuerst die make(1)-Manualseite lesen) oder auch mit den verschiedenen Variablen der make-Kommandozeile oder in /etc/mk.conf. Diese Variablen sind detailliert in der bsd.port.mk(5)-Manualseite beschrieben, so wie in den unten erwähnten Porting-Dokumenten.

Neue Ports erstellen

Wenn du gerne mithelfen möchtest, den OpenBSD-Ports-Tree zu erweitern, solltest du zuerst porting.html lesen. Diese Seite verweist auf das FreeBSD Porter's Handbook genauso wie auf OpenBSD-spezifische Verhaltensmaßregeln und Hinweise.

Wenn ein Port der Mainstream-Version hinterherhinkt

Die Portskollektion ist ein Projekt von Freiwilligen. Manchmal hat das Projekt einfach nicht genügend Entwicklerressourcen, um alles auf dem neuesten Stand zu halten. Die Entwickler kümmern sich um die Dinge, die sie interessant finden und in ihrer Umgebung testen können. Deine Spenden entscheiden darüber, auf welchen Plattformen die Ports getestet werden können.

Einige einzelne Ports können daher der allgemein üblichen Mainstream-Version hinterherhinken. Die Portskollektion könnte z. B. eine Version haben, die noch von Januar ist, obwohl die Entwickler im Mai eine neue Version herausgebracht haben. Oftmals ist das Absicht: die neue Version kann z. B. Probleme auf OpenBSD erzeugen, die der Maintainer erst lösen will, oder die neue Version ist einfach nur schlechter als die alte: OpenBSD kann auch ganz andere Ziele als die Mainstream-Entwickler in anderen Projekten haben, wodurch manchmal Features-, Design- oder Implementationsentscheidungen getroffen werden, die aus Sicht der OpenBSD-Entwickler nicht wünschenswert sind. Außerdem kann das Update verzögert sein, weil die neue Version nichts wirklich Neues bringt.

Wenn du unbedingt die neue Version eines Ports brauchst, kannst du den MAINTAINER des Ports darum bitten, ein Update durchzuführen (siehe unten wie man herausfindet, wer der Maintainer ist). Wenn du Patches schicken kannst, dann umso besser. Saubere Patches kannst du mit Hilfe der Dokumentation über das Erzeugen von Ports erstellen.

Probleme und Kontakte

Wenn du Probleme mit einem bereits existierenden Port hast, schicke bitte eine E-Mail an den Portmaintainer. Um herauszufinden, wer der jeweilige Maintainer des Ports ist, gib z. B. Folgendes ein:

       % cd /usr/ports/archivers/unzip
       % make show=MAINTAINER
Wenn es keinen Maintainer gibt oder du ihn nicht erreichen kannst, schicke eine E-Mail an die OpenBSD-Ports-Mailingliste ports@openbsd.org. Bitte benutze die misc@openbsd.org-Mailingliste nicht für Fragen über Ports. Verbesserungen sind jederzeit willkommen, aber in jedem Fall füge bitte Folgendes bei: Falls ein Port nicht richtig erzeugt wird, ist ein komplettes Buildtranscript fast immer notwendig. Du kannst das portslogger-Skript dafür benutzen, das sich in /usr/ports/infrastructure/build findet. Eine Beispielausgabe von portslogger sieht so aus:
       % cd /usr/ports/archivers/unzip
       % su
       # mkdir -p ~/portslogs
       # make clean install 2>&1 | /usr/ports/infrastructure/build/portslogger \
               ~/portslogs
Danach solltest du eine Logdatei deines Builds in deinem ~/portslogs-Verzeichnis haben, das du dem Portmaintainer schicken kannst. Stelle aber sicher, dass du keine speziellen Optionen in deinem Build benutzt, z. B. in /etc/mk.conf.

Alternativ dazu kannst du


OpenBSD www@openbsd.org
$OpenBSD: ports.html,v 1.64 2008/05/27 10:00:23 tobias Exp $