Benutzer-Werkzeuge

Webseiten-Werkzeuge


freebsd:freebsd_-_portupgrade

FreeBSD - PortUpgrade

Vorbereitungen

Allgemeines

    • Hints & Tips
      • portsclean -D löscht alte Distfiles.
      • portsclean -C bereinigt alle Arbeitsverzeichnisse.
      • portsclean -L bereinigt nicht verwendete Bibliotheken in /usr/local/lib/compat/pkg.
      • portsclean -P bereinigt veraltete Pakete.
      • Wenn Sie befürchten, dass nach dem Upgrade etwas schief gehen könnte, können Sie alte Pakete mit der Option -b beibehalten.
      • Es kann hilfreich sein, einige Pakete vom Upgrade auszuschließen. Mit der Option -x ist das ganz einfach. Dieser Befehl aktualisiert alle Pakete außer Ruby*-Paketen und Portupgrade:
        • portupgrade -a -x ruby -x portupgrade
      • Mit diesem Befehl können Sie leicht erkennen, wie viel Speicherplatz von Ruby und allen abhängigen Ports belegt wird:
        • pkgdu -tr ruby
      • Die Verwendung der Optionen -c/-C für portupgrade ist hilfreich, wenn Sie planen, viele Ports zu aktualisieren. poruptgrade führt make config für alle Ports aus, die Sie aktualisieren möchten, bevor der Upgrade-Prozess durchgeführt wird. Sie können also alle konfigurieren und sich ausruhen, während die Ports aktualisiert werden.
        • portupgrade editors/vim
      • Mit pkg_glob '>=2024-01-01' können Sie ältere oder neuere Pakete eines bestimmten Datums abrufen - es zeigt die Daten älterer Pakete an. Es kann sehr nützlich sein, alle Pakete, die älter sind, mit dem folgenden Befehl zu aktualisieren:
        • portupgrade -fa -x '>=2024-01-01'
Option -a - Machen es mit allen installierten Paketen.
Option -N - Wenn die installierten Pakete nicht mehr auf aktuellstem Stand sind, der Port's-Tree aber schon aktualisiert wurde und man dann erstmal nur ein Programm, neu installieren möchte, würde "portinstall" versuchen, die neue Version des in Abhängigkeit stehenden Programmes, dass aber schon installiert ist, zu installieren.
Option -R - Machen Sie es auch mit allen, die in den angegebenen Paketen erforderlich sind / Rekursiv abrufen, wenn "-F" angegeben ist.
Option -r - Tun Sie dies auch je nach den angegebenen Paketen.
Option -F - Nur Distfiles runterladen, bauen oder installieren Sie nichts.
Option -O - Lassen Sie Plausibilitätsprüfungen für Abhängigkeiten weg.
Option -D - Fehlgeschlagene Distfiles löschen und erneut versuchen, wenn die Prüfsumme fehlschlägt. Zweimal angegeben, „make distclean“ vor jedem Abruf oder Build ausführen.
Option -c - Führen Sie für alle Aufgaben vorher „make config-conditional“ aus.
Option -C - Führen Sie für alle Aufgaben vor allem „make config“ aus.
Option -p - Erstellen Sie ein Paket, wenn jeder Port installiert ist.

> portupgrade -RCar
> portupgrade -RF
> portupgrade -NDRcpr editors/vim
> portupgrade -NDDRpr --batch editors/vim

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-recursive
# 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 aktualisiert 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 Ergä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

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.

mein Update-Skript

#!/usr/bin/env bash

PKGOPT="-4"

VERSION="v2015121100"

#------------------------------------------------------------------------------#

freebsd-update fetch
freebsd-update install
#
portsnap fetch update
 
#------------------------------------------------------------------------------#
### Update der Pakete aus dem Repository

BASISPKGS="shells/bash misc/mc-light sysutils/screen dns/bind910 ports-mgmt/pkg ports-mgmt/portupgrade net/rsync sysutils/ezjail editors/vim ftp/wget www/links ports-mgmt/portupgrade www/apache24 www/mod_php56 www/dokuwiki sysutils/e2fsprogs mail/fetchmail print/cups-client print/cups-image print/ghostscript9-base print/pstotext ports-mgmt/psearch net/samba36"
#
pkg ${PKGOPT} install ${BASISPKGS}
pkg ${PKGOPT} update -f
pkg ${PKGOPT} check -Ba
pkg ${PKGOPT} updating | tee updating.txt
pkg ${PKGOPT} upgrade -y

#------------------------------------------------------------------------------#
### Update der Pakete aus dem Ports-Tree
#
# damit diese Pakete in jedem Fall aus dem Ports-Tree installiert sind
#
pkg ${PKGOPT} remove -y mail/postfix
pkg ${PKGOPT} remove -y mail/dovecot
pkg ${PKGOPT} remove -y multimedia/ffmpeg
pkg ${PKGOPT} remove -y multimedia/libdvdread
#
portinstall mail/dovecot
portinstall mail/postfix
#
### pkg-static: gettext-runtime-0.19.3 conflicts with gettext-0.18.3.1_1 (installs files into the same place).  Problematic file: /usr/local/bin/envsubst
#
#portinstall multimedia/ffmpeg          # leider gibt es hier z.Z. Probleme
#portinstall multimedia/libdvdread      # mit libdvdcss-Support, damit MPlayer2 die DVDs richtig rippen kann
cd /usr/ports/multimedia/ffmpeg && make clean ; make && make install && make clean
cd /usr/ports/multimedia/libdvdread && make clean ; make && make install && make clean
#
MMPKGS1="multimedia/x264 multimedia/mplayer2 multimedia/mkvtoolnix multimedia/mediainfo sysutils/dvd+rw-tools audio/vorbis-tools"
#MMPKGS2="multimedia/mencoder"
#MINIDLNA="net/minidlna graphics/libexif"
#SERVIIO="net/serviio"
#LINUXEMUPKG="emulators/linux_base-f10"
#GCC="lang/gcc"
#
pkg ${PKGOPT} install ${BASISPKGS}
pkg ${PKGOPT} install ${MMPKGS1} ${MMPKGS2} ${MINIDLNA} ${SERVIIO} ${LINUXEMUPKG} ${GCC}

pkg ${PKGOPT} info | egrep 'ffmpeg|dvd|mencoder|mplayer'

#------------------------------------------------------------------------------#

service postfix stop
service dovecot stop

sleep 3

service postfix restart
service dovecot restart
service named restart

#killall -9 minidlnad
#service minidlna restart

service dovecot status ; service postfix status ; service minidlna status

#------------------------------------------------------------------------------#

PortsClean

alle Programm-SRC-Verzeichnisse säubern:

# 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 '?'
/home/http/wiki/data/pages/freebsd/freebsd_-_portupgrade.txt · Zuletzt geändert: von manfred