Um später nicht in irgendwelchen Schwierigkeiten beim Updaten der Pakete zu Landen, empfehle ich als aller erstes Paket aus den Ports PortUpgrade zu installieren.
Wichtig ist hierbei, dass man entweder alle Pakete nur mit make install oder nur mit PortUpgrade installiert bzw. später upgedated werden!
Alternativ kann man auch PortMaster für diese Zwecke einsetzen.
PortMaster verwendet nur Werkzeuge, die bereits im Basissystem vorhanden sind (ist also nicht von weiteren Ports abhängig). Es verwendet Informationen in /var/db/pkg/, um festzustellen, welche Ports aktualisiert werden sollen. Damit ist es weiterhin möglich Pakete mit make install zu installieren.
Mit cvsup kann man den Portstree aktualisieren/holen und die Systemquellen aktualisieren/holen um nicht nur die Programme sondern auch das Basissystem up to date zu halten. Aber wie werden die Programme aktuallisiert, die aus den Ports installiert oder in form von Paketen installiert wurden? Das kann man auf zwei Wegen machen. Nehmen wir das Beispiel „Apache 2“
# cd /usr/ports/ports-mgmt/portupgrade # make config # make # make install # make clean
Will man in einem bestehenden System ein installiertes Programm updaten oder ein neues Programm installieren, ist es in aller Regel so, dass das neue Programm zur Installation aktuellere Programme benötigt als bereits installiert sind. In soeinem Fall müssen natu:rlich vorher alle Programme ein Update erfahren, die von dem neuen Programm verwendet werden (Abhängige Programme), das kann richtig in Arbeit ausarten… aber auch für diese Arbeit gibt es einen Port (/usr/ports/sysutils/portupgrade/), nimmt man es ganz genau, ist dieses das einzige Programm, das mit „make install“ installiert wird.
Um also Updates oder weitere Installationen durchzuführen, nimmt man am besten „portupgrade“!
Portupgrade kann man über die Datei “/usr/local/etc/pkgtools.conf“ konfigurieren.
Um die Paketdatenbank (/var/db/pkg/pkgdb.db) der installierten Pakete zu erstellen (zu überprüfen), die portupgrade zur Arbeit braucht, genügt der folgende einfache Befehl.
# pkgdb -F
Bricht das Kommando „pkgdb -F“ ab und kann die Datenbank nicht reparieren, dann hilft nur das löschen der Datenbank und das erneute aufrufen des Befehls um eine neue Datenbank zu erstellen. (portupgrade lässt sich sonst nicht ausführen!)
# rm /var/db/pkg/pkgdb.db # pkgdb -aF
Nach dem die Ports aktualisiert wurden muss die Portsdatenbankdatei “/usr/ports/INDEX.db“ erstellt/aktuallisiert und der Ports-Index erstellt/aktuallisiert werden. Um die Portsdatenbank der aktuellen Pakete zu erstellen, sollte an dieser Stelle und nach jedem „cvsup“ ueber den Ports-tree das folgende Kommando einmal laufen. Damit portupgrade auch immer die richtigen Abhaengigkeiten erkennt!
# portsdb -ufU
Und ab jetzt sollten alle Pakete nur noch so installiert werden:
# portinstall -prO [Gruppe]/[Paket]
zum Beispiel wird Postfix so installiert:
# portinstall -prO mail/postfix
Ich würde es aber lieber mit „portupgrade -N“ machen, da es sonst zu schwierigkeiten kommen kann, wenn die installierten Pakete nicht mehr auf aktuellstem Stand sind, der Port's-Tree aber schon aktuallisiert wurde und man dann erstmal nur ein Programm neu installieren möchte.
In soeinem Fall würde „portinstall“ versuchen, die neue Version des in Abhängigkeit stehenden Programmes, dass aber schon installiert ist, zu installieren.
Dann bricht der Installationsversuch mit der Fehlermeldung ab, dass ein Paket schon installiert sein…
Besser ist es, grundsätzlich für einzelne Programme, egal ob zum installieren oder zum Updaten, das folgende Kommando zu verwenden:
# portupgrade -NROD sysutils/fusefs-ntfs sysutils/ntfsprogs
Will man dabei nicht mit Fragen belästigt werden und ist mit den Default-Einstellungen zufrieden, dann nimmt man noch den Schalter “–batch“ dazu:
# portupgrade -NROD --batch sysutils/fusefs-ntfs sysutils/ntfsprogs
Hier wird jedes in der Kette der Abhängigkeiten stehende Paket versucht upzudaten und sollte es nicht installiert sein, dann wird es installiert (das bewirkt der Schalter “-N“).
Die einzelnen Schritte am Beispiel von „Apache 2“ sehen dann so aus:
# /usr/local/etc/rc.d/apache2.sh stop
Die vorhandenen Konfigurationsdateien werden nicht ueberschrieben, daher sollte man sie vorher umbenennen, damit die aktuelle Konfigurationsdatei bei der Installation der neuen Version auch geschrieben wird.
# cd /usr/local/etc/apache2/ # mv httpd.conf httpd.conf_sik
Updaten:
# portupgrade -RN www/apache2
Jetzt muessen die Einstellungen an den neuen Apache von Hand angepasst werden. Im einfachsten Fall hängt man seine Erga:nzungen einfach hinten an die Standartdatei an.
# vi /usr/local/etc/apache2/httpd.conf
Wenn dann alles klar ist:
# /usr/local/etc/rc.d/apache2.sh start
Wenn Sie vor dem updaten die nötigen Dateien aus dem Netz ziehen wollen (was nötig ist, wenn der Rechner keinen direkten Internetzugang besitzt), dann verwenden Sie die folgende Kommandozeile um die benötigten Dateien auf einem anderen FreeBSD-Rechner zu saugen:
# portupgrade -aRF
Sollen alle Pakete aktualisiert werden, nur OpenOffice nicht (weil das zum kompilieren zu lange dauert oder weil es mehr Plattenplatz braucht als vorhanden ist…) dann verwenden Sie folgendes Kommando:
# portupgrade -aRx 'de-openoffice-*'
Um anschliessend das Ergebnis in einer Datei zu haben braucht man noch den Parameter “-l“.
# portupgrade -aRl /var/tmp/portupgrade.log -x 'de-openoffice-*'
Um bei diesem Update den Apache auch wieder mit SUEXEC zu bekommen gibt es den Parameter “-m“. (diesen Parameter braucht man nicht, wenn “/usr/local/etc/pkgtools.conf“ richtig konfiguriert wurde)
# portupgrade -aRl /var/tmp/portupgrade.log -x 'de-openoffice-*' -m 'WITH_SUEXEC=yes' www/apache2
Damit auch Pakete aktualisiert werden, für die nicht alle Abhängigkeiten aktualisiert werden konnten (wichtig wenn man es automatisieren will), braucht man noch den Parameter “-k“.
# portupgrade -aRkl /var/tmp/portupgrade.log -x 'de-openoffice-*'
Wollen Sie alle Pakete abwärts rekursiv updaten, dann verwenden Sie die folgende Kommandozeile:
# portupgrade -ar
Das bedeutet, das alle Pakete, die dieses Paket verwenden, in der Reihenfolge nach diesem Paket ebenfalls aktualiesiert werden.
Wollen Sie alle Pakete aufwärts rekursiv updaten, dann verwenden Sie die folgende Kommandozeile:
# portupgrade -aR
Das bedeutet, das alle Pakete, die von diesem Paket verwendet werden, in der Reihenfolge vor diesem Paket ebenfalls aktualiesiert werden.
Auch hier kann die Option “-n“ zum testen verwendet werden.
# portupgrade -arn
oder
# portupgrade -aRn
Sollen die Quelldateien nach der Installation aus dem Verzeichnis “/usr/ports/distfiles/“ gelöscht werden, muss der Parameter “-D“ mit dazu.
# portupgrade -arD
oder
# portupgrade -aRD
Sollte es beschädigte Pakete geben, dann müssen die natürlich auch repariert werden, dafür ist der Parameter “-O“ verantwortlich.
# portupgrade -aROD --batch
Wollen Sie bei jedem Paket einzeln gefragt werden, dann noch ein “-i“ ran. Dauert Ihnen das kompilieren zu lange, dann nehmen Sie den Parameter “-P“ (oder sogar -PP dann werden die Ports, fuer die es keine Pakete gibt, auch keinem Update unterzogen), so werden die Binaerpackete installiert (die sind oft aber nicht so aktuell). Haben Sie mehrere Maschinen upzudaten, dann verwenden Sie den Parameter “-p“, der bewirkt das erstellen eines Binaerpacketes nach dem kompilieren und installieren eines Ports. So haben Sie dann sehr aktuelle Binaerpackete fuer alle weiteren Maschienen.
# portsclean -C
alle Distfiles zu löschen, die nicht länger benötigt werden (veraltete):
# portsclean -D
nur alle Distfiles löschen, die von keinem derzeit installierten Port referenziert werden (überflüssige):
# portsclean -DD
Doppelte und veraltete Bibliotheken finden und löschen:
# portsclean -L
alles was veraltet ist entfernen (Probelauf):
# portsclean -LDCPn
alles was veraltet ist entfernen (Ernstfall):
# portsclean -LDCP
So kann man alle Dateien in den Verzeichnissen “/usr/local“ und “/usr/X11R6“ finden, die zu keinem Paket gehören:
# find /usr/local /usr/X11R6 -type f | xargs pkg_which -v | fgrep '?'