Handhabung von FreeBSD-Paket-Upgrades mit pkg_add

Handhabung von FreeBSD-Paket-Upgrades mit pkg_add

Ich versuche, den FreeBSD- pkg_addBefehl zu verwenden, um Binärpakete in einem Szenario zu installieren und zu aktualisieren, bei dem man einmal erstellt und auf mehreren Rechnern installiert. Das funktioniert gut, wenn ich ein neues Paket installiere, aber Aktualisierungen verwirren mich. Wenn ich beispielsweise ein Paket aktualisieren möchte, dasabhängig vondurch ein anderes Paket, ich kann es nicht einfach installieren:

# pkg_add /path/to/somepackage-2.0.tbz
pkg_add: package 'somepackage' or its older version already installed

An diesem Punkt kann ich die ältere Version des Pakets löschen, wenn ich -fden folgenden pkg_deleteBefehl eingebe:

# pkg_delete -f somepackage-1.0
pkg_delete: package 'somepackage-1.0' is required by these other packages
and may not be deinstalled (but I'll delete it anyway):
anotherpackage-1.0

Aber... und das ist das Schlimmste... jetzt sind die Abhängigkeitsinformationen weg! Ich kann das Upgrade installieren:

# pkg_add /path/to/somepackage-2.0.tbz

Und jetzt funktionieren Löschversuche ohne Fehler:

# pkg_delete somepackage-2.0

Wie gehe ich elegant damit um (wobei „elegant“ bedeutet „auf eine Weise, bei der Abhängigkeitsinformationen erhalten bleiben, ohne dass ich die gesamte Abhängigkeitskette neu erstellen/neu installieren muss“).

Danke!

Antwort1

Wie Sie festgestellt haben, pkg_addkönnen Ports nicht ordnungsgemäß aktualisiert werden. Das portupgradePaket erledigt dies jedoch recht gut und ist die Methode, die ich verwende und empfehle (es sind auch andere verfügbar, wenn Ihnen diese Methode nicht gefällt).

Sobald der Port installiert ist, können Sie ihn einfach ausführen portupgrade -aPPund er aktualisiert alle auf dem System installierten Ports mithilfe von Paketen. Wenn Sie nicht jeden Port aktualisieren möchten, können Sie portupgrade -RPP [category/port]einen bestimmten Port und die Ports, von denen er abhängt, aktualisieren. Wenn Sie das Programm ohne Argumente ausführen, wird der Port aktualisiert, der zum aktuellen Verzeichnis gehört (d. h. es cd /usr/ports/security/openssl ; portupgradewird aktualisiert openssl, ohne die -PPOption wird der Port aus der Quelle erstellt); und wenn Sie sich nicht in einem Port-Verzeichnis befinden, wird Hilfe angezeigt (dasselbe wie bei der -hOption).

Bearbeiten:
Standardmäßig installiert portupgrade Pakete, wenn diese in dem durch die PKG_PATHUmgebungsvariable definierten Verzeichnis vorhanden sind (standardmäßig $PACKAGES/All, $PACKAGESstandardmäßig $PORTSDIR/packages; der Standardpfad ist also /usr/ports/packages/All).

Wenn sie dort nicht vorhanden sind, werden die Pakete (vorzugsweise) von $PKG_SITES(nimmt eine URI mit Unterordnern Latestund All; kein Standardwert) oder $PACKAGEROOT(nimmt eine URI mit dem normalen Spiegelpfad darunter; Standard ist "ftp://ftp.freebsd.org") heruntergeladen.

Eine einfache Möglichkeit hierfür besteht darin, eine Maschine zum Erstellen/Zwischenspeichern von Paketen zu verwenden, die auf einer anderen Maschine installiert werden.

  • Sie können Pakete aus dem Ports-Baum im Verzeichnis des Ports erstellen make package(wodurch auch der Port installiert wird).
  • Sie können es verwenden, portupgradeum eine Maschine zu aktualisieren und die Paketdateien für die Verwendung auf anderen Maschinen zwischenzuspeichern. Die oben genannten Befehle speichern die Paketdateien im Standardverzeichnis (siehe oben).
  • portupgrade -aPPFSie können portupgrade mit oder verwenden, um die Pakete nur abzurufen, nicht aber, um sie zu installieren portupgrade -RPPF [category/port].

Sobald Sie die zwischengespeicherten Paketdateien haben, können Sie das Verzeichnis über NFS, FTP, HTTP usw. freigeben, solange die Dateien von den anderen Computern aus zugänglich sind. Legen Sie PACKAGESoder PKG_SITEmit den entsprechenden Werten fest, um auf den Caching-Server zu verweisen. Führen Sie den typischen portupgradeBefehl aus, er sollte die Pakete vom Caching-Server abrufen und installieren.

Hinweis: Damit der Port-Tree richtig funktioniert, muss er auf allen Servern auf dem neuesten Stand sein portupgrade(es wird versucht, auf die Version zu aktualisieren, die im lokalen Port-Tree vorhanden ist). Wenn Sie auf allen Computern dieselben Ports/Pakete installiert haben möchten, ist es möglicherweise am einfachsten, ein Serververzeichnis freizugeben /usr/ports(z. B. über NFS) und es auf allen anderen Servern zu mounten.

Antwort2

Vielleicht pkg_replaceist es das, wonach Sie suchen.

Ich benutze es jetzt schon eine ganze Weile. Einer meiner FreeBSD-Rechner fungiert als Build-Server und erstellt (unter Verwendung portmaster) alle Pakete für die anderen Rechner. Ich verwende es, pkg_replaceum diese vorgefertigten Pakete auf allen anderen Rechnern zu installieren.

http://www.FreeBSD.org/cgi/url.cgi?ports/ports-mgmt/pkg_replace/pkg-descr

Antwort3

Oder Sie verlassen sich auf Portsnap oder CVSup, die hier beschrieben werden:

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html

verwandte Informationen