PortUpgrade

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.

updaten und installieren von Programmen

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“

Erstinstallation

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

Paket-Datenbank

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

ein Paket installieren

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

ein Update an einem Beispiel

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

ALLE PROGRAMME aktualisieren

Quelldateien ermitteln

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

komplette Aktualisierung

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-*'

eine Logdatei erzeugen

Um anschliessend das Ergebnis in einer Datei zu haben braucht man noch den Parameter “-l“.

# portupgrade -aRl /var/tmp/portupgrade.log -x 'de-openoffice-*'

Variablen temporär setzen

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

bei Fehlern nicht abbrechen

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-*'

abwärts rekursiv

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.

aufwärts rekursiv

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.

nur ein Test

Auch hier kann die Option “-n“ zum testen verwendet werden.

# portupgrade -arn

oder

# portupgrade -aRn

mit zusätzlichem distclean

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

das Standardupdatekommando

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

weitere Optionen

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

# 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

Bastarde mit pkg_which finden

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 '?'
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki