5.6. Benutzen der Ports-Sammlung

Dieser Abschnitt stellt die grundlegenden Anweisungen vor, um Anwendungen aus der Ports-Sammlung zu installieren oder zu löschen. ports(7) enthält eine Auflistung aller verfügbaren make-Targets und Umgebungsvariablen.

Warnung:

Ende 2012 hat das FreeBSD Ports-Projekt eine Migration des Versionskontrollsystems von CVS auf Subversion durchgeführt. Die bevorzugte Methode zum Herunterladen der Ports-Sammlung ist Portsnap. Benutzer, die lokale Anpassungen der Ports vornehmen müssen, werden es wahrscheinlich bevorzugen, Subversion direkt zu verwenden. Der CVSup-Service wurde am 28. Februar 2013 eingestellt.

5.6.1. Installation der Ports-Sammlung

Die Ports-Sammlung ist eine Reihe von Makefiles, Patches und Beschreibungen, die unter /usr/ports gespeichert sind. Diese Dateien werden für den Bau und die Installation von Anwendungen unter FreeBSD verwendet. Die folgenden Anweisungen zeigen verschiedene Methoden zur Installation der Ports-Sammlung, falls diese nicht schon während der Installation von FreeBSD installiert wurden.

Prozedur 5.1. Installation mit Portsnap

Portsnap ist ein schnelles und benutzerfreundliches Werkzeug zur Installation der Ports-Sammlung und die bevorzugte Wahl für die meisten Benutzer.

  1. Laden Sie einen komprimierten Snapshot der Ports-Sammlung in /var/db/portsnap.

    # portsnap fetch
  2. Wenn Sie Portsnap das erste Mal verwenden, müssen Sie den Snapshot nach /usr/ports extrahieren:

    # portsnap extract
  3. Nach dem ersten Einsatz von Portsnap, kann /usr/ports wie folgt aktualisiert werden:

    # portsnap fetch
    # portsnap update
Prozedur 5.2. Installation mit Subversion

Wird mehr Kontrolle über die Ports-Sammlung benötigt (beispielsweise für der Pflege lokaler Änderungen), kann Subversion benutzt werden, um die Ports-Sammlung zu laden. Lesen Sie the Subversion Primer für eine detaillierte Beschreibung von Subversion.

  1. Subversion muss installiert sein, bevor damit die Ports-Sammlung geladen werden kann. Ist eine lokale Kopie der Ports-Sammlung bereits vorhanden, installieren Sie Subversion wie folgt:

    # cd /usr/ports/devel/subversion
    # make install clean

    Ist keine lokale Kopie der Ports-Sammlung vorhanden, kann Subversion als Paket installiert werden:

    # pkg_add -r subversion

    Wird pkgng für die Verwaltung von Paketen benutzt, kann Subversion darüber installiert werden:

    # pkg install subversion
  2. Laden Sie eine Kopie der Ports-Sammlung. Verwenden Sie anstatt svn0.us-east.FreeBSD.org einen Subversion Mirror in Ihrer Nähe. Committer sollten zuvor den Subversion Primer lesen, um sicherzustellen, dass das richtige Protokoll gewählt wird.

    # svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/ports
  3. Nach dem erstmaligen checkout mit Subversion kann /usr/ports wie folgt aktualisiert werden:

    # svn update /usr/ports
Prozedur 5.3. Installieren mit sysinstall

Nicht zuletzt ist es auch möglich, die Ports-Sammlung über sysinstall zu installieren. Beachten Sie dabei aber, dass bei dieser Methode nicht die aktuellste Version der Ports-Sammlung, sondern die Version, die zum Zeitpunkt der Veröffentlichung der installierten FreeBSD-Version aktuell war, installiert wird. Haben Sie Zugriff auf das Internet, so sollten Sie daher stets eine der weiter oben beschriebenen Methoden verwenden, um die Ports-Sammlung zu installieren.

  1. Führen Sie als root sysinstall aus:

    # sysinstall
  2. Wählen Sie den Punkt Configure aus und drücken Sie Enter.

  3. Wählen Sie dann Distributions aus und drücken Sie Enter.

  4. In diesem Menü wählen Sie ports aus und drücken die Leertaste.

  5. Danach wählen Sie Exit aus und drücken Enter.

  6. Legen Sie nun ein geeignetes Installationsmedium, wie CD-ROM oder FTP, fest.

  7. Wählen Sie nun Exit aus und drücken Enter.

  8. Verlassen Sie sysinstall mit X.

5.6.2. Migration von CVSup/csup zu portsnap

Warnung:

Seit dem 28. Februar 2013 wird die Ports-Sammlung nicht mehr nach CVS exportiert. Somit werden über CVSup und csup keine Updates für die Ports-Sammlung mehr zu Verfügung gestellt.

Prozedur 5.4. Migration zu portsnap

Für die Migration werden in /usr ca. 1 GB freier Speicher und in /var ca. 150 MB freier Speicher benötigt.

  1. Deaktivieren Sie alle automatischen Updates der Ports-Sammlung, wie beispielsweise cron(8) Jobs, die CVSup oder csup aufrufen.

  2. Verschieben Sie die bestehende Ports-Sammlung in ein temporäres Verzeichnis:

    # mv /usr/ports /usr/ports.old
  3. Laden Sie eine aktuelle Kopie Ports-Sammlung mit Portsnap herunter und extrahieren Sie diese nach /usr/ports:

    # portsnap fetch extract
  4. Verschieben Sie Distfiles und vorhandene Pakete in die neue Ports-Sammlung:

    # mv /usr/ports.old/distfiles /usr/ports
    # mv /usr/ports.old/packages /usr/ports
  5. Löschen Sie die alte Ports-Sammlung:

    # rm -rf /usr/ports.old
  6. Falls zuvor CVSup verwendet wurde, kann es nun deinstalliert werden:

    # pkg_delete -r -v cvsup-without-gui-\*
  7. Benutzer von pkgng können das folgende Kommando benutzen:

    # pkg delete cvsup-without-gui

Eine detaillierte Beschreibung von Portsnap und wie die Ports-Sammlung mit Portsnap aktualisiert wird, finden Sie in Portsnap: Ein Werkzeug zur Aktualisierung der Ports-Sammlung.

5.6.3. Ports installieren

Ein Port-Gerüst ist ein Satz von Dateien, die FreeBSD sagen, wie ein Programm zu kompilieren und zu installieren ist. Ein jeder Port beinhaltet:

  • Makefile: Das Makefile enthält Anweisungen, die spezifizieren, wie eine Anwendung kompiliert wird und wohin sie installiert werden sollte.

  • distinfo: Diese Datei enthält Informationen, welche Dateien heruntergeladen werden müssen sowie deren Prüfsummen (sha256(1)), um sicherzustellen, dass Dateien während des Herunterladens nicht beschädigt wurden.

  • files: Dieses Verzeichnis enthält Patches, welche das Übersetzen und Installieren der Anwendung unter FreeBSD ermöglichen. Zudem können noch weitere Dateien, die für die Übersetzung des Ports verwendet werden, enthalten sein.

  • pkg-descr: Diese Datei enthält eine ausführlichere Beschreibung der Anwendung.

  • pkg-plist: Das ist eine Liste aller Dateien, die durch diesen Port installiert werden. Außerdem sind hier Informationen enthalten, die zum Entfernen des Ports benötigt werden.

Einige Ports besitzen noch andere Dateien, wie pkg-message, die vom Portsystem benutzt werden, um spezielle Situationen zu handhaben. Wenn Sie mehr über diese Dateien oder das Port-System erfahren sollen, lesen Sie das FreeBSD Porter's Handbook.

Ein Port enthält nicht den eigentlichen Quellcode, der auch als Distfile bekannt ist. Der Autor der Software kann bestimmen, in welcher Weise die Software verteilt wird. Die beiden Methoden zur Installation eines FreeBSD-Ports werden nachfolgend beschrieben.

Anmerkung:

Zum Installieren von Ports müssen Sie als Benutzer root angemeldet sein.

Warnung:

Stellen Sie sicher, dass die Ports-Sammlung aktuell ist, bevor Sie einen Port kompilieren. Informieren Sie sich vorher zusätzlich unter http://vuxml.FreeBSD.org/ über mögliche Sicherheitsprobleme des zu installierenden Ports. Wenn ports-mgmt/portaudit installiert ist, führen Sie portaudit -F aus, um die aktuelle Sicherheitsdatenbank zu aktualisieren. Die täglich laufende Sicherheitsprüfung des Systems aktualisiert ebenfalls die Datenbank und prüft installierte Anwendungen auf vorhandene Sicherheitsprobleme. Für weitere Informationen lesen Sie die Manualpage portaudit(1) und periodic(8).

Die Ports-Sammlung geht davon, dass eine funktionierende Internetverbindung besteht. Ansonsten muss eine Kopie des zu installierenden Distfiles manuell nach /usr/ports/distfiles kopiert werden.

Dazu wechseln Sie als erstes in das Verzeichnis des Ports, den Sie installieren wollen:

# cd /usr/ports/sysutils/lsof

Um den Port zu übersetzen (auch Bauen genannt), geben Sie am Prompt make ein. Die Ausgabe sollte der in diesem Beispiel ähnlich sein:

# 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
...
[Ausgabe des Auspackens weggelassen]
...
>> 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
...
[configure-Ausgabe weggelassen]
...
===>  Building for lsof-4.57
...
[Ausgabe der Übersetzung weggelassen]
...
#

Ist die Übersetzungsprozedur beendet, landen Sie wiederum in der Kommandozeile und können das Programm im nächsten Schritt mit make install installieren:

# make install
===>  Installing for lsof-4.57
...
[Ausgabe der Installation weggelassen]
...
===>   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.
#

Nachdem die Installation abgeschlossen ist, können Sie die gerade installierte Anwendung starten. Da lsof eine Anwendung ist, die mit erhöhten Rechten läuft, wird eine Sicherheitswarnung angezeigt. Sie sollten alle Warnungen während des Baus und der Installation eines Ports beachten.

Es ist eine gute Idee, das Unterverzeichnis work nach erfolgter Installation wieder zu löschen. Einerseits gewinnen Sie dadurch Speicherplatz, andererseits könnte es sonst zu Problemen bei der Aktualisierung des Ports auf eine neuere Version kommen.

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

Anmerkung:

Sie können zwei Schritte sparen, wenn Sie gleich make install clean anstelle von make, make install und make clean eingeben.

Anmerkung:

Wird ein Port immer nur mit make install installiert, kann es möglicherweise zu mehreren Wartezeiten zwischen Benutzerinteraktionen kommen, da dem Benutzer standardmäßig Optionen angezeigt werden. Um dies bei einer hohen Anzahl an Abhängigkeiten zu vermeiden, starten Sie zuerst make config-recursive, um die Konfiguration der Optionen an einem Stück zu erledigen. Führen Sie anschließend make install [clean] aus.

Tipp:

Bei der Verwendung von config-recursive wird eine Liste von Ports, die konfiguriert werden, vom make(1)-Target all-depends-list erstellt. Es wird oft empfohlen, make config-recursive so lange auszuführen, bis alle Optionen der abhängigen Ports definiert sind und keine Optionen und dialog(1)-Masken mehr erscheinen. Damit soll sichergestellt werden, dass alle Optionen wie beabsichtigt konfiguriert wurden.

Anmerkung:

Um die Suche nach Kommandos zu beschleunigen, speichern einige Shells eine Liste der verfügbaren Kommandos in den durch die Umgebungsvariable PATH gegebenen Verzeichnissen. Wenn Sie die tcsh benutzen, müssen Sie eventuell rehash eintippen, um die neu installierten Kommandos benutzen zu können, ohne den vollständigen Pfad anzugeben. Unter Shells wie der sh benutzen Sie stattdessen das Kommando hash -r. Weitere Informationen finden Sie in der Dokumentation der jeweiligen Shell.

Einige von Dritten angebotenen DVD-Produkte wie das FreeBSD Toolkit von der FreeBSD Mall enthalten auch Distfiles. Diese lassen sich über die Ports-Sammlung installieren. Dazu hängen Sie die DVD unter /cdrom in den Verzeichnisbaum ein. Wenn Sie einen anderen Mountpunkt verwenden, setzen Sie die make-Variable CD_MOUNTPTS, damit die auf der DVD enthaltenen Distfiles automatisch verwendet werden.

Anmerkung:

Die Lizenzen einiger Ports verbieten die Einbeziehung auf der DVD. Das kann verschiedene Gründe haben. Beispielsweise ist eine Registrierung vor dem Herunterladen erforderlich, oder die Weiterverteilung ist verboten. Wenn Sie einen Port installieren wollen, der nicht auf der DVD enthalten ist, müssen Sie mit dem Internet verbunden sein.

Die Ports-Sammlung benutzt zum Herunterladen von Dateien fetch(3), das Umgebungsvariablen wie FTP_PASSIVE_MODE, FTP_PROXY und FTP_PASSWORD berücksichtigt. Wenn Sie durch eine Firewall geschützt werden, müssen Sie vielleicht eine oder mehrere dieser Umgebungsvariablen setzen, oder einen FTP oder HTTP Proxy verwenden. Eine Liste der unterstützten Umgebungsvariablen finden Sie in fetch(3).

Benutzer ohne eine ständige Internet-Verbindung können make fetch im Verzeichnis /usr/ports ausführen, um die benötigten Dateien herunterzuladen. Es ist auch möglich, make fetch nur in einem Teil des Baums, wie /usr/ports/net, aufzurufen. Die Dateien von allen abhängigen Ports werden mit diesem Kommando allerdings nicht heruntergeladen. Wenn Sie diese Dateien ebenfalls herunterladen wollen, benutzen Sie make fetch-recursive.

Anmerkung:

Sie können alle Ports einer Kategorie oder alle Ports bauen, indem Sie make im übergeordneten Verzeichnis ausführen. Dies ist jedoch eine gefährliche Methode, da einige Ports nicht nebeneinander existieren können. Weiterhin gibt es Fälle, in denen zwei Ports unterschiedliche Inhalte in derselben Datei speichern wollen.

In einigen seltenen Fällen ist es erforderlich, die benötigten Dateien von einem anderen Ort als den im Port definierten MASTER_SITES herunterzuladen. Sie können die Option MASTER_SITES mit dem folgenden Kommando überschreiben:

# cd /usr/ports/directory
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch

Im Beispiel wurde MASTER_SITES mit dem Wert ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ überschrieben.

Anmerkung:

Einige Ports bieten Optionen, mit denen zusätzliche Funktionen oder Sicherheitsoptionen eingestellt werden können. Zusätzliche Optionen können beispielsweise für www/firefox, security/gpgme und mail/sylpheed-claws angegeben werden. Wenn ein Port über zusätzliche Optionen verfügt, wird ein Menü beim Bau des Ports ausgegeben.

5.6.3.1. Vorgabe-Verzeichnisse ändern

Die Variablen WRKDIRPREFIX und PREFIX überschreiben das voreingestellte Bau- und Zielverzeichnis. Zum Beispiel:

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

Dieses Kommando baut den Port unter /usr/home/example/ports und installiert ihn unter /usr/local.

Die Variable PREFIX legt das Installations-Verzeichnis fest:

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

In diesem Beispiel wird der Port unter /usr/ports gebaut und nach /usr/home/example/local installiert.

Sie können beide Variablen auch zusammen benutzen:

# make WRKDIRPREFIX=../ports PREFIX=../local install

Alternativ können diese Variablen auch als Umgebungsvariablen gesetzt werden. In der Manualpage Ihrer Shell finden Sie Anweisungen, wie Umgebungsvariablen gesetzt werden.

5.6.3.2. Ports rekonfigurieren

Einige Ports enthalten ein ncurses-basiertes Menü, über dessen Optionen der Bau dieser Ports beeinflusst werden kann. Es gibt diverse Möglichkeiten, dieses Menü nach dem Bau eines Ports erneut aufzurufen, um beispielsweise Optionen zu entfernen, hinzuzufügen oder anzupassen. Sie können beispielsweise in das Verzeichnis des Ports wechseln und dort den Befehl make config eingeben. Eine andere Möglichkeit ist make showconfig. Eine weitere Alternative bietet make rmconfig, der alle ursprünglich gewählten Optionen zurücksetzt und es Ihnen dadurch ermöglicht, die Konfiguration erneut zu beginnen. Die eben erwähnten Optionen (und viele andere) werden ausführlich in der Manualpage ports(7) beschrieben.

5.6.4. Entfernen installierter Ports

Installierte Ports werden mit pkg_delete(1) wieder deinstalliert:

# pkg_delete lsof-4.57

5.6.5. Ports aktualisieren

Als erstes sollten sie sich alle installierten Ports anzeigen lassen, von denen eine aktuellere Version in der Ports-Sammlung existiert. Dazu verwenden Sie den Befehl pkg_version(1):

# pkg_version -v

5.6.5.1. Lesen Sie /usr/ports/UPDATING

Nachdem Sie die Ports-Sammlung auf den neusten Stand gebracht haben, lesen Sie bitte zuerst die Datei /usr/ports/UPDATING, bevor Sie einen Port aktualisieren. In dieser Datei werden Probleme und zusätzlich durchzuführende Schritte bei der Aktualisierung einzelner Ports beschrieben. Dazu gehören solche Dinge wie geänderte Dateiformate, verschobene Konfigurationsdateien, aber auch Inkompatibilitäten zu einer Vorgängerversion.

Sollte UPDATING etwas hier Gesagtem widersprechen, so gilt das in UPDATING Gesagte.

5.6.5.2. Ports mit Portupgrade aktualisieren

portupgrade wurde entwickelt, um die Aktualisierung von Ports zu vereinfachen. Sie können portupgrade über den Port ports-mgmt/portupgrade wie jeden anderen Port mit make install clean installieren:

# cd /usr/ports/ports-mgmt/portupgrade/
# make install clean

Durchsuchen Sie regelmäßig die Liste der installierten Ports mit pkgdb -F und beheben Sie alle gefundenen Probleme. Es ist eine gute Idee, dies vor jedem Update auszuführen.

Benutzen Sie portupgrade -a, um automatisch alle veralteten Ports auf dem System zu aktualisieren. Verwenden Sie den Schalter -i, wenn Sie individuell entscheiden wollen, ob ein Port aktualisiert werden soll:

# portupgrade -ai

Um nur eine spezifische Anwendung zu aktualisieren, verwenden Sie portupgrade Paketname. Geben Sie den Schalter -R an, wenn portupgrade zuvor alle Ports aktualisieren soll, die von dem gegebenen Paket abhängen.

# portupgrade -R firefox

Um Pakete anstelle von Ports zu installieren, verweden Sie den Schalter -P. Mit dieser Option durchsucht portupgrade die in der Umgebungsvariablen PKG_PATH aufgeführten Verzeichnisse nach Paketen. Sind lokal keine Pakete vorhanden, versucht portupgrade die Pakete über das Netz herunterzuladen. Gibt es die Pakete weder lokal noch auf entfernten Rechnern, werden die Ports verwendet. Um dies zu verhindern, benutzen Sie die Option -PP.

# portupgrade -PP gnome2

Wenn Sie nur die Quelldateien des Ports (oder die Pakete mit -P) herunterladen möchten, ohne die Anwendung zu bauen oder zu installieren, geben Sie die Option -F an. Weitere Möglichkeiten lesen Sie bitte in der Hilfeseite portupgrade(1) nach.

5.6.5.3. Ports mit portmaster aktualisieren

portmaster ist ein weiteres Werkzeug zum Aktualisieren von Ports. portmaster nutzt nur Werkzeuge, die bereits im Basissystem vorhanden sind, ohne dabei von weiteren Ports abhängig zu sein. Es verwendet Informationen in /var/db/pkg/, um festzustellen, welche Ports aktualisiert werden sollen. Sie können den Port wie folgt installieren:

# cd /usr/ports/ports-mgmt/portmaster
# make install clean

Portmaster teilt Ports in vier Kategorien ein:

  • Root ports: no dependencies and is not depended on by other ports

  • Trunk ports: no dependencies, but other ports depend upon it

  • Branch ports: have dependencies but are depended upon by other ports

  • Leaf ports: have dependencies but are not depended upon by other ports

Um eine Liste der installierten Ports anzuzeigen und nach neueren Versionen zu suchen, verwenden Sie -L:

# 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)
===>>> apache22-2.2.3
        ===>>> New version available: apache22-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
	

Um alle installierten Ports zu aktualisieren, verwenden Sie folgenden Befehl:

# portmaster -a

Anmerkung:

In der Voreinstellung erzeugt portmaster eine Sicherheitskopie, bevor ein installierter Port gelöscht wird. Ist die Installation der neuen Version erfolgreich, wird dieses Backup wieder gelöscht. Wollen Sie das Backup lieber manuell löschen, verwenden Sie die Option -b beim Aufruf von portmaster. Durch die Verwendung von -i wird portmaster im interaktiven Modus gestartet und fragt bei jedem zu aktualisierenden Port nach, wie weiter vorgegangen werden soll.

Treten während der Aktualisierung Fehler auf, können Sie die Option -f verwenden, um alle Ports zu aktualisieren beziehungsweise neu zu bauen:

# portmaster -af

portmaster ist auch in der Lage, neue Ports zu installieren, wobei zuvor alle abhängigen Ports aktualisiert werden:

# portmaster shells/bash

Weiterführende Informationen finden Sie in der Manualpage portmaster(8).

5.6.6. Platzbedarf von Ports

Die Nutzung der Ports-Sammlung wird im Laufe der Zeit viel Plattenplatz verschlingen. Nach dem Bau und der Installation eines Ports, wird make clean die temporären Arbeitsverzeichnisse work aufräumen. Um die gesamte Ports-Sammlung aufzuräumen, verwenden Sie folgenden Befehl:

# portsclean -C

Im Laufe der Zeit werden sich zahlreiche veraltete Distfiles in distfiles ansammeln. Mit dem folgenden Befehl werden alle Distfiles gelöscht, die vom keinem Port mehr benötigt werden:

# portsclean -D

Um alle Distfiles zu löschen, die von keinem derzeit installierten Port referenziert werden:

# portsclean -DD

Anmerkung:

Das Werkzeug portsclean wird automatisch bei der Installation von portupgrade mit installiert.

port-mgmt/pkg_cutleaves automatisiert die Deinstallation von installierten Ports, die nicht weiter benötigt werden.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.