Ich bin gespannt, wie Leute die Ports von FreeBSD in ihrer Umgebung bereitstellen. Ich gehe davon aus, dass die meisten Leute, die FreeBSD verwenden, tatsächlich Ports verwenden (und Portupgrade häufig für Upgrades mit Binärdateien). Ich bin jedoch daran interessiert, wie Sie dieses Setup haben, da ich mit der Funktionsweise in neueren Versionen nicht zufrieden bin. Ich lasse jetzt FreeBSD 9.0 laufen und habe Probleme.
Ich habe die Dinge wie folgt eingerichtet:
- / usr / ports wird über NFS von einem Knoten aus gemeinsam genutzt (mit nächtlichem 'portsnap fetch update').
- Jeder Knoten stellt / usr / ports mit Lese- / Schreibzugriff bereit
- Ich habe "WRKDIRPREFIX = / usr / tmp" in /etc/make.conf auf allen Knoten gesetzt
- Ich habe den Portsnap so konfiguriert, dass er einen lokalen Index verwendet, indem ich Folgendes zu /usr/local/etc/pkgtools.conf hinzufüge:
ENV['LOCALINDICES'] ||= '/var/db'
ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'
Ich kann erfolgreich ausführen portupgrade -p package
, um ein Paket zu erstellen und dann portupgrade -P package
die Binärdatei auf den anderen Knoten zu installieren.
Manchmal erhalte ich jedoch das folgende Problem: /var/db/INDEX.local:23265:dbm_store failed
Ich kann mir keine anderen Optimierungen für das System vorstellen, da sich der Index jetzt lokal befindet und das einzige, was wirklich exportiert wird, der Ports-Tree ist und von den Knoten nie etwas darauf geschrieben wird.
Antworten:
Ich war mit dem Ports-System in einer großen Umgebung noch nie vollständig zufrieden. Es scheint immer so, als müssten Sie ein externes Management anwenden, damit es funktioniert.
Meine besten Tipps (in aufsteigender Reihenfolge, "schlechteste" Lösung zu "beste" Lösung):
Wenn Sie auf jedem Host aufbauen, tun Sie das nicht . Sie möchten wahrscheinlich die Paketkonfigurationsdateien (rsync oder ähnliches) von einem festgelegten "Konfigurationshost" synchronisieren, um die Konsistenz auf jedem Computer zu gewährleisten (Sie können sogar den gesamten Portbaum synchronisieren, anstatt csup auf jedem Knoten zu verwenden).
Wenn Sie dies tun müssen, tun Sie dies nicht über NFS mit Lese- / Schreib-Mounts, wie Sie es beschreiben: Normalerweise können Sie darauf vertrauen, dass die Ports das Richtige tun und nicht in der Ports-Struktur stampfen, wenn Sie alternative Arbeitsverzeichnisse bereitstellen, aber dies ist immer besser Gehen Sie auf Nummer sicher: Führen Sie einen lokalen CVS / csup-Spiegel aus und konfigurieren Sie alle Ihre Hosts von diesem Computer aus. Erstellen Sie dann lokal, als wären es einzelne Computer.
Ja, ich weiß, dies bedeutet mehr Speicherplatz auf den Hosts und einen zusätzlichen Schritt. Es ist auch fast garantiert problemlos.
Vorbehalt:
Verwenden Sie einen Build-Host, erstellen Sie Pakete und installieren Sie diese.
Eine viel bessere Lösung, als auf jedem einzelnen Computer zu bauen: Verwenden Sie einen Build-Host, um Pakete zu erstellen, und richten Sie Ihre Tools auf diese Pakete.
Dies bedeutet, dass Sie für jede Architektur, die Sie ausführen (oder die Sie übergreifend kompilieren), einen Build-Host bereithalten müssen. Letztendlich ist dies jedoch für Ihre Zielcomputer angenehmer (keine großen Kompilierungsaufträge, Garantie für Konsistenz).
Verwenden Sie ein Konfigurations- / Systemverwaltungstool.
Dies ist die Lösung, mit der ich zum Abschluss gekommen bin: Ich erstelle ein Standard-Server-Image und setze es in meiner Umgebung ein
radmind
. Sie können ähnliche Dinge mit Puppet oder Chef machen . Dies bietet alle Vorteile eines Build-Hosts (Konsistenz, geringere Belastung der einzelnen Server) und den Vorteil des Konfigurationsmanagements.Vorsichtsmaßnahme: Dies funktioniert nur dann sehr gut, wenn Ihre Computer "identisch" sind. Sie können also auf allen Computern die gleichen Ports installieren. Es kann funktionieren, wenn Sie verschiedene Portgruppen haben, aber dies erhöht den Verwaltungsaufwand erheblich.
Haftungsausschluss: Ich bin der Portbetreuer für
sysutils/radmind
. Ja, ich mag es so sehr, dass ich es adoptiert habe.All dies basiert auf meiner Erfahrung mit der Verwaltung von FreeBSD-Umgebungen unterschiedlicher Größe (von 1-2 Maschinen bis zu über 100). Nach meiner Erfahrung sind Konfigurations- / Systemverwaltungstools, die ein standardisiertes Image erstellen und beibehalten, der beste Weg, damit umzugehen.
quelle
Seltsam, dass niemand ports-mgmt / tinderbox erwähnt hat :
Der Wechsel zu pkgng vereinfacht die Paketbereitstellung erheblich.
Schau es dir auf github an: https://github.com/pkgng/pkgng
quelle
PACKAGEROOT
/PACKAGESITE
und verwenden Sie radmind oder Puppet / Chef).pkg_delete
erstellen oder Binärpakete verwenden - muss zuerst ausgeführt und dann die neue Version installiert werden. OpenBSD hat dies besser gemeistert, indem eine Upgrade-Option hinzugefügt wurdepkg_add
. Portupgrade ist nicht sicher, aber portmaster kann nur mit INDEX und nicht mit einem vollständigen Portbaum arbeiten.Ich habe mehr als 100 FreeBSD-Server verwaltet, indem ich einfach / usr schreibgeschützt über gut abgestimmtes NFS ausgetauscht, die Paketdatenbanken von / var nach / usr verschoben und mit ihnen verknüpft habe (nicht unbedingt erforderlich, aber pkg_info und so weiter aktiviert). Es gab vielleicht ein oder zwei andere Dateien, die in die eine oder andere Richtung verschoben und mit Symbolen verknüpft werden mussten, aber das gesamte Setup hat ungefähr eine Stunde gedauert, bis ich es herausgefunden habe. Es hat sehr, sehr gut funktioniert. Wenn ich auf Skalierungsprobleme gestoßen wäre, hätte ich zusätzliche NFS-Server hinzugefügt und die Arbeitslast aufgeteilt, aber es ist nie aufgetreten. Leistung war nie ein Problem für mich (in der Tat war es großartig), aber ich nehme an, Sie könnten den / usr des NFS-Servers (oder eine Kopie davon) auf einen MD setzen.
quelle
Es sieht so aus, als hätte dies leider niemand gut gelöst. Dies liegt höchstwahrscheinlich an Einschränkungen der Unterlegwerkzeuge.
Folgendes habe ich mir ausgedacht: Ich habe die Idee, den gesamten Ports-Tree exportieren zu lassen, verworfen. Stattdessen habe ich nachgegeben und jedem Knoten einen vollständigen Portbaum hinzugefügt. Ich habe dann "Pakete" über NFS eingehängt (um die Verteilung von Paketen zu ermöglichen).
Ich beabsichtige auch, einen Caching-Proxy (wahrscheinlich Squid) zu verwenden, um den Portnap-Prozess zu beschleunigen. Ich habe in meinem Blog einen kurzen Beitrag darüber geschrieben, wie man dies einrichtet .
Verweise:
quelle