[OpenBSD]

Die Ports & Packages Kollektion


Index


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 & 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 'Man-Power', um den gleichen Level an Robustheit und Sicherheit sicherzustellen.

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

Diese Information wird in einer Verzeichnishierarchie unterhalb /usr/ports vorgehalten.

Packages sind die ausführbaren (binären) Versionen der ports. Ein kompilierter port wird zur package, die im System mittels pkg_add(1) registriert werden kann.

Packages sehen aus wie einfache .tgz Bündel, 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. Tip: du kannst zwischen packages und .tgz Bündeln mit Hilfe von pkg_info(1). unterscheiden.

Wie und woher bekommt man packages

Eine grosse Sammmlung vor-kompilierter Pakete ist für die meisten Architekturen verfügbar. Ein package hinzuzufügen geht einfach mit pkg_add pkgname.tgz. Wenn du packages immer aus einer einzigen Quelle beziehst (ein package repository), setze PKG_PATH auf diese repository URL, um Abhängigkeiten aufzulösen.

Um zum Beispiel das gimp package für die Version 3.6 auf einer i386 Maschine direkt von der ftp-Site (inklusive von Abhängigkeiten) zu installieren, gib folgendes ein:

    # setenv PKG_PATH ftp://ftp.openbsd.org/pub/OpenBSD/3.6/packages/i386/
    # pkg_add ${PKG_PATH}gimp-1.2.5.tgz

Ports und packages Update 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 die Version 3.6 zu holen:

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

Beginnend mit der Version 2.8 wurden ausgewählte Binär-Pakete ebenfalls verfügbar gemacht. Bitte sieh dir die stable packages Seite an, um etwas über 'updated 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.

Package Namen werden immer verändert, sobald ein Paket auf neueren Stand gebracht oder sonstwie verändert wird, um jegliche Verwirrung zwischen einem Paket der Original-Version und einem Paket zu vermeiden, in dem z. B. ein Bug gefixed wurde.

Die Verwaltung installierter packages

Die packages(7) manual page 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 2.8 solltest du folgendes tun, um ein package upzudaten:

Das ist etwas unbequem, da packages Abhängigkeiten haben können, und du möglicherweise eine grosse Menge von anderen Programmen/packages entfernen musst, um ein update ausführen zu können.

ports benutzen

Wenn ein bestimmes package für deine Architektur nicht existiert, kannst du normalerweise den port trotzdem kompilieren. Außerdem werden einige User aus verschiedenen Gründen einfach alles aus dem Source kompilieren wollen.

Du kannst die offizielle Version per FTP aus dem pub/OpenBSD/[version] (dabei ist [version] die Versionsnummer) Verzeichnis von allen FTP Mirror Sites holen. Die 'release versions' sind die, die wir mit unserer CD-ROM ausliefern, und die mehr Tests als die von den snapshots hinter sich haben. Weitere Informationen gibt es in der ports(7) man page.

Der Lebenszyklus des Ports tree

Der ports tree verändert sich, wie der Rest von OpenBSD, ständig.

Der current ports tree kann nicht mit der zuletzt veröffentlichten Version benutzt werden. Das hängt mit Änderungen, typischerweise des port make Prozesses, zusammen, die code basierend auf dem OpenBSD-current Sourcetree benötigen.

Der ports tree arbeitet als einzelnes Wesen. Das Updaten eines einzelnen Verzeichnisses muss nicht zwangsläufig klappen, da package-Abhängigkeiten dich dazu zwingen können, grosse Teile deines port trees upzudaten 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 Produktions Maschine ports-stable zu verfolgen und einzusetzen: Wir werden versuchen, den stable ports tree in Bezug auf Probleme auf dem laufenden zu halten, genauso mit Binaries.

Denk daran, dass verschwundene distilfes kein Problem darstellen, da ftp.openbsd.org das komplette repository vorhält. Nicht einmal das Ändern von Checksummen ist ein Problem: führe das Kommando

       make checksum REFETCH=true 
aus, um sicherzustellen, dass du das 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 ports-current 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.

Beispiele für die Benutzung des Ports tree

Gehen wir davon aus du hast einen ports tree und willst das Archivierungs-Werkzeug unzip installieren und kompilieren. Du solltest etwas wie das hier tun können:

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

Mit OpenBSD 3.0 erzeugen die meisten der ports beim Installieren packages.

Wenn ports erzeugt werden, wird das /usr/ports/distfiles Verzeichnis mit Programmquellcode gefüllt, und /usr/ports/packages wird mit 'binary packages' gefüllt. User 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 entdecken. Denk dran, daß die OpenBSD CD nur den ports tree und einige ausgewählte packages enthät. 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 Features für den fortgeschrittenen User, die ihn auch nach der Basis-Installation zu einem wertvollen Werkzeug machen. Fortgeschrittene User wollen sich möglichweise mit den Makefiles beschäftigen (sie sollten zuerst die make(1) Manual page 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) Manual page beschrieben, so wie in den unten erwähnten porting documents.

Erzeugen neuer ports

Wenn du daran interessiert bist mitzuhelfen beim Erweitern des OpenBSD ports tree, solltest du zuerst porting.html lesen. Diese Seite referenziert das FreeBSD Porter's Handbook genauso wie OpenBSD spezifische Verhaltensmassregeln und Hinweise.

Wenn ein Port hinter der Mainstream Version hinterherhinkt

Die ports collection ist ein Projekt von Freiwilligen. Manchmal hat das Projekt einfach nicht genügend Entwickler-Ressourcen, 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 hinter der allgemein üblichen Mainstream-Version hinterherhinken. Die ports collection 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 schlicht schlechter als die alte: OpenBSD kann auch ganz andere Ziele als die Mainstream Entwickler in anderen Projekten haben, was manchmal zu Features, Design- oder Implementierungsentscheidungen führt, 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 port maintainer. 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 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 'build transcript' fast immer notwendig. Du kannst das portslogger script dafür benutzen, was sich in /usr/ports/infrastructure/build findet. Eie Beispielausgabe des 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 ein Logfile deines build in deinem ~/portslogs Verzeichnis haben, das du dem port maintainer 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.49 2005/11/04 20:24:22 jufi Exp $