Ist es möglich, eine bestimmte Version von Paketen festzulegen, von der das Hauptpaket abhängt?

10

Wir haben eine Entwicklungsumgebung für FreeBSD 10.3. Ich habe gehört, dass FreeBSD Paketabhängigkeiten auf diese Weise verwaltet und immer nach der neuesten Version aller Pakete sucht, von der das Hauptpaket abhängt. Und es sieht aus wie wahr. Meine Fragen sind also:

  1. Ist das wahr? Gibt es offizielle Dokumente, die dies belegen?
  2. Der beste Weg, um dieses Problem zu überwinden?
Sergius
quelle
7
Ich vermute, Sie können das Paket der spezifischen Version installieren, die Sie zuerst benötigen, dann pkg lockes und dann alles andere installieren, was Sie wollen.
Menge
1
Es hängt auch davon ab, welchen Port / welches Paket Sie möchten und in welcher Version. Zum Beispiel können Sie verschiedene Python / Postgresql / PHP-Versionen haben. Manchmal sind mehrere Pakete für eine Software verfügbar, manchmal können Sie Ihr spezielles Paket aus Ports erstellen.
Raphael Ahrens
3
Wenn Sie blind freebsd-Updates (oder pkg upugrade) ausführen, wird es das neueste finden und versuchen, das zu installieren. Wie Arrowd bereits sagte (seit 9.2 oder so), können Sie pkg lock <pkg> verwenden, um das, was Sie installiert haben, und seine Abhängigkeiten vor Änderungen zu schützen. YMMV.
Quadruplebucky

Antworten:

1

Wie FreeBSD Pakete erstellt

Das FreeBSD-Projekt wurde verwendet, um Pakete nur für Releases und gelegentlich für die STABLE-Zweige zu erstellen. Die alten Paketersteller verwendeten ein verteiltes System namens Portbuild. Es würde einen großen Cluster kleinerer 2 GB-4 GB-Computer verwenden, um Pakete zu erstellen. Dies war fehleranfällig und langsam, hauptsächlich aufgrund der älteren Maschinen. Ein vollständiger Build kann noch eine Woche dauern. Heutzutage werden Pakete mit Poudriere auf einzelnen großen Maschinen erstellt. (Von der Webseite von Brian Drewery ).

Siehe auch: So aktualisieren Sie eine Mischung aus Paketen und Ports unter FreeBSD

FreeBSD hat ein sich entwickelndes ABI (und API), ebenso wie Solaris und Windows, während Linux ein stabiles (stagnierendes?) ABI (und eine API) hat. Unter Linux werden alte Binärdateien weiterhin auf einer neueren Betriebssystemversion ausgeführt, während dies unter Nicht-Linux-Betriebssystemen nicht der Fall ist. t immer der Fall (manchmal ist es).

Mit pkg locknoch zu Kopfschmerzen führen , während es sperrt (bietet eine Warnung) , wenn Sie versuchen , ein Upgrade mit pkg upgradeimmer noch davon aus, dass mit höheren Nummern Versionen sind besser (wünschenswert) , und dass es etwas , was Sie tun wollen würden - so es die Erlaubnis fragt, und Sie können zulassen, aber es garantiert nicht, dass etwas anderes nicht kaputt geht. Siehe obige URL oder diese Diskussion: " Möchten Sie, dass FreeBSD Versionen von über pkg verteilten Binärpaketen für eine Betriebssystemversion sperrt? ".

Wenn ein Paket manchmal gesperrt ist, müssen Sie die Erlaubnis geben, es zu entsperren und das Upgrade durchzuführen. Während dies für das eine Paket (und alle seine Abhängigkeiten) funktioniert , kann nicht garantiert werden, dass etwas anderes nicht mit den neuen Bibliotheken inkompatibel ist ( und benötigen daher auch ein Upgrade, falls eines derzeit verfügbar ist).

Brian Drewerys Blog: " FreeBSD Journal: Poudriere " meint:

"Verwenden Sie Portmaster, Portupgrade und Ports nicht mehr auf Ihren Servern und wechseln Sie zu Paketen.

Das Einrichten eigener Paket-Builds mit Poudriere dauert nur wenige Minuten und spart Ihnen in Zukunft viel Zeit.

...

Wenn Sie mehr als ein FreeBSD-System warten und noch keine Pakete verwenden, sollten Sie dies tun. Ich unterhalte nur 20 Server, aber das Erstellen von Ports auf jedem System hat viel Zeit in Anspruch genommen und Ressourcen auf Produktionsmaschinen verschwendet. Wenn Sie Ports auf mehreren Servern erstellen, ist es sehr einfach, deren Optionen oder Versionen nicht mehr synchron zu halten. Durch das einmalige Erstellen von Paketen auf einem System habe ich die Belastung meiner Systeme verringert, den Arbeitsaufwand verringert und alle meine Systeme konsistent gemacht. Anstatt auf jedem System den gleichen Fehler zu behandeln, muss ich ihn nur auf dem Build-System behandeln.

Aber das Problem ...

Warum sollten Sie von den offiziellen Paketen abweichen müssen? Das Ports-Framework bietet Optionsunterstützung für Ports zum Ändern der Build-Time-Konfiguration. Nicht alle Anwendungen unterstützen die Laufzeitkonfiguration. Einige Anwendungen müssen je nach aktivierten Funktionen unterschiedlich kompiliert werden. Andere haben Optionen, um einfach die Anzahl der Funktionen und Abhängigkeiten im Standardport zu verringern. Für Serveradministratoren kann dies schnell dazu führen, dass einige der Standardpakete ihre Anforderungen nicht erfüllen.

So ...

Es gibt verschiedene Möglichkeiten, um benutzerdefinierte Pakete zu erhalten. Pkg unterstützt die Verwendung mehrerer Repositorys. Es kann so eingerichtet werden, dass das offizielle FreeBSD-Repository als primäres und ein benutzerdefiniertes als sekundäres Repository verwendet wird. Pkg ist nicht durch die Anzahl der Repositorys begrenzt, die verfolgt werden können, und sie können nach Priorität neu angeordnet werden. Das Problem bei mehreren Repositorys besteht darin, dass die Wartung derzeit schwierig sein kann. Wenn Pkg feststellt, dass ein installiertes Paket andere Optionen oder Abhängigkeiten von einem Repository hat, das es verfolgt, wird das Paket von möglicherweise jeder Remote-Version neu installiert. Sie können das Paket entweder während eines Upgrades mit pkg lock PKGNAME und pkg entsperren PKGNAME sperren oder es mit pkg annotate -A PKGNAME repository REPONAME an ein bestimmtes Repository binden. Es gibt auch das subtile Problem, den Portbaum für Ihr benutzerdefiniertes Repository mit den FreeBSD-Paketen synchron zu halten. Da Pakete aus einem einmal wöchentlich erstellten Portbaum-Snapshot erstellt werden, kann es zu Konflikten kommen, wenn Ihr benutzerdefiniertes Repository nicht übereinstimmt. Es ist viel einfacher, mit den gewünschten Optionen ein komplettes Paket zu erstellen, das genau das enthält, was Sie benötigen.

Die Lösung:

Poudriere (grob ausgesprochen poo-dree-year, französisch für „Pulverfass“) wurde als schnellerer und einfacherer Ersatz für Tinderbox geschrieben. Es wurde vom Pkg-Autor Baptiste Daroussin geschrieben und wird jetzt hauptsächlich von mir zusammen mit Baptiste und einigen anderen Mitwirkenden gepflegt. Es hat sich schnell zum De-facto-Tool zum Testen und Erstellen von FreeBSD-Ports entwickelt. Es ist das offizielle Build-Cluster-Tool und wird auch vom FreeBSD Ports-Projekt zum Testen umfassender Patches in sogenannten "Exp-Runs" verwendet. Es ist in der POSIX-Shell geschrieben und wird langsam in C-Komponenten verschoben. Im Gegensatz zu Tinderbox hat es keine Abhängigkeiten und benötigt keine Datenbank. Es wurde stark optimiert, um in allen Operationen hochparallel zu sein. Es verwendet Jails, um Ports in Sandbox-Umgebungen unter sehr strengen Bedingungen zu erstellen. Die Erstellung des Gefängnisses erfolgt einmalig mit einem einfachen Befehl. Während der Erstellung wird das Gefängnis automatisch für jede CPU geklont, die verwendet wird, um den Ports einen sauberen Ort zum Erstellen zu geben. "

Durch das Einrichten eines eigenen Repositorys mit poudriere haben Sie die Flexibilität von Ports und die einfache Verwaltung von Paketen.

rauben
quelle