A.6. Portsnap einsetzen

A.6.1. Einführung

Bei Portsnap handelt es sich um ein System für die sichere Distribution der FreeBSD-Ports-Sammlung. Dazu wird in der Regel stündlich ein “Snapshot” des Ports-Baumes erzeugt, der anschließend komprimiert und kryptografisch signiert wird. Die dabei erzeugten Dateien werden danach über HTTP verteilt.

Analog zu CVSup verwendet auch auch Portsnap das Pull-Prinzip, um die Ports-Sammlung zu aktualisieren: Der komprimierte und signierte Ports-Baum wird auf einem Webserver abgelegt, der danach passiv auf Client-Anforderungen wartet. Ein Anwender muss daher portsnap(8) manuell starten, um seine Ports-Sammlung zu aktualisieren. Eine Alternative ist das Erstellen eines cron(8) -Jobs, der den Ports-Baum regelmäßig automatisch aktualisiert.

Beachten Sie, dass Portsnap nicht mit der “echten” Ports-Sammlung unter /usr/ports/, sondern mit einer komprimierten Kopie des Ports-Baumes arbeitet, die in der Voreinstellung unter /var/db/portsnap/ angelegt wird. Diese komprimierte Version wird danach dazu verwendet, den tatsächlichen Ports-Baum zu aktualisieren.

Anmerkung: Haben Sie Portsnap über die FreeBSD-Ports-Sammlung installiert, wird der komprimierte Ports-Baum statt unter /var/db/portsnap/ unter /usr/local/portsnap/ angelegt.

A.6.2. Installation

Seit FreeBSD 6.0 ist Portsnap im FreeBSD-Basissystem enthalten. Verwenden Sie eine ältere FreeBSD-Version, können Sie zur Installation den Port ports-mgmt/portsnap verwenden.

A.6.3. portsnap konfigurieren

portsnap kann über die Datei /etc/portsnap.conf konfiguriert werden. In der Regel kann allerdings die Standardkonfiguration unverändert übernommen werden. Wollen Sie die Datei dennoch anpassen, sollten Sie zuvor portsnap.conf(5) lesen.

Anmerkung: Wurde Portsnap über die FreeBSD-Ports-Sammlung installiert, so wird statt /etc/portsnap.conf /usr/local/etc/portsnap.conf als Konfigurationsdatei verwendet. Diese Datei wird während der Installation nicht angelegt, allerdings wird eine Beispielkonfigurationsdatei mitgeliefert, die Sie in dieses Verzeichnis kopieren können:

# cd /usr/local/etc && cp portsnap.conf.sample portsnap.conf

A.6.4. Der erste Aufruf von portsnap

Wenn Sie portsnap(8) das erste Mal aufrufen, müssen Sie einen komprimierten Snapshot des kompletten Ports-Baumes nach /var/db/portsnap/ herunterladen (oder nach /usr/local/portsnap/ Sie Portsnap über die Ports-Sammlung installiert haben). Die ungefähre Größe des komprimierten Ports-Baumes beträgt derzeit (Anfang 2006) etwa 41 MB.

# portsnap fetch

Nachdem der komprimierte Snapshot heruntergeladen wurde, kann eine “Live-Version” des Ports-Baumes nach /usr/ports/ extrahiert werden. Dieser Schritt ist selbst dann nötig, wenn sich bereits ein Ports-Baum in diesem Verzeichnis befindet (der beispielsweise von CVSup angelegt wurde), weil portsnap einen Ausgangszustand des Ports-Baumes benötigt, um festzustellen, welche Teile des Baums aktualisiert werden müssen:

# portsnap extract

Anmerkung: Bei einer FreeBSD-Standardinstallation wird das Verzeichnis /usr/ports nicht angelegt. Verwenden Sie FreeBSD 6.0-RELEASE, sollten Sie dies vor der ersten Ausführung von portsnap nachholen. Verwenden Sie hingegen eine aktuellere FreeBSD-Version oder eine aktuellere Version von Portsnap, wird dies beim ersten Aufruf von portsnap automatisch erledigt.

A.6.5. Den Ports-Baum aktualisieren

Nachdem der originale komprimierte Snapshot des Ports-Baumes heruntergeladen und nach /usr/ports/ extrahiert wurde, können Sie den Ports-Baum aktualisieren. Dazu sind zwei Schritte nötig: Mit fetch laden Sie Aktualisierungen herunter, mit update aktualisieren Sie die Live-Version des Ports-Baumes. Beide Parameter können gleichzeitig an portsnap übergeben werden:

# portsnap fetch update

Anmerkung: Einige ältere portsnap-Versionen unterstützen diese Syntax nicht. In diesem Fall gehen Sie wie folgt vor:

# portsnap fetch
# portsnap update

A.6.6. Portsnap als cron-Job starten

Um eine Überlastung der Portsnap-Server zu vermeiden, kann portsnap fetch nicht als normaler cron(8)-Job ausgeführt werden. Als Alternative gibt es den Befehl portsnap cron, der eine zufällige Zeitspanne (bis zu 3600 Sekunden) wartet, bevor Aktualisierungen heruntergeladen werden.

portsnap update sollte ebenfalls nicht als cron-Job ausgeführt werden, da es zu massiven Problemen kann, wenn parallel zur Aktualisierung ein Port gebaut oder installiert wird. Die Aktualisierung des Portsindex stellt hingegen kein Problem dar. Um die INDEX-Datei zu aktualisieren, übergeben Sie zusätzlich die Option -I an portsnap. (Wenn Sie portsnap -I update als cron-Job definiert haben, müssen Sie portsnap update ohne die Option -I aufrufen, um den Rest des Ports-Baumes zu aktualisieren.)

Wenn Sie die folgende Zeile in /etc/crontab aufnehmen, aktualisiert portsnap den komprimierten Snapshot sowie die INDEX-Dateien unter /usr/ports/ und verschickt eine E-Mail, wenn Ihre installierten Ports veraltet sind:

0 3 * * * root portsnap -I cron update && pkg_version -vIL=

Anmerkung: Ist Ihre Systemuhr nicht auf Ihre lokale Zeitzone eingestellt, ersetzen Sie bitte 3 durch eine beliebige Zahl zwischen 0 und 23, damit die Last der Portsnap-Server gleichmäßiger verteilt wird.

Anmerkung: Einige ältere portsnap-Versionen unterstützen die Angabe von mehreren Befehlen (etwa cron update) für einen einzigen portsnap-Aufruf nicht. Ist dies bei Ihnen der Fall, ersetzen Sie bitte portsnap -I cron update durch portsnap cron && portsnap -I update.

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