So richten Sie ein Poudriere-Build-System ein, um Pakete für Ihre FreeBSD-Server zu erstellen

Einführung

Das Ports-System ist eines der größten Vorteile von FreeBSD für Benutzer, die Flexibilität und Kontrolle über ihre Software wünschen. Administratoren können auf einfache Weise quellbasierte Installationen mit einem System erstellen und warten, das robust und vorhersehbar ist.

Obwohl die Vorteile dieser Funktion groß sind, betreffen einige der häufigsten Beschwerden, die gegen die portbasierte Verwaltung erhoben werden, die Zeit und die Ressourcen, die zum Kompilieren der einzelnen Softwarekomponenten erforderlich sind. Dies wird noch problematischer, wenn Sie eine große Anzahl von Servern verwalten, von denen jeder seine eigenen Ports kompiliert. Während FreeBSD-Pakete eine Alternative bieten, die die Installation beschleunigt, wird die Kontrolle, die Ports gewähren, aufgegeben.

Um dieses Problem zu beheben, können Administratoren eine Anwendung namens * poudriere * verwenden, um benutzerdefinierte Pakete zu erstellen und zu verwalten. Während + poudriere + technisch für die Erstellung von Paketen für eine Vielzahl von Architekturen entwickelt wurde, wird es häufig als Paketbildungsumgebung verwendet, um Pakete für eine gesamte Infrastruktur von FreeBSD-Servern zu erstellen und zu hosten.

Durch die Nutzung von "+ poudriere " können Administratoren die Software mithilfe des Ports-Systems nach Bedarf anpassen und Pakete für eine einfache Installation und Softwareverwaltung kompilieren. Beliebig viele FreeBSD-Server können einen Host verwenden, auf dem ` poudriere +` als Paketquelle installiert ist, sodass sie schnell und einfach angepasste, vorkompilierte ausführbare Dateien herunterladen und installieren können.

In diesem Handbuch wird gezeigt, wie Sie einen Server mit "+ poudriere " als Build-Maschine einrichten. Wir können diesen Server dann als Repository für Pakete für zusätzliche Server verwenden. Während dieses Setup für einen einzelnen Server von Vorteil sein kann, werden die tatsächlichen Effizienzgewinne sichtbar, wenn zusätzliche Server beginnen, denselben " poudriere +" - Host als Paketquelle zu verwenden.

Da der Hafenbau ein ressourcenintensiver Prozess ist, kann es sich lohnen, ihn auf einem leistungsstärkeren System als üblich einzurichten.

Installieren Sie die erforderliche Ports-Verwaltungssoftware

Zu Beginn installieren wir alle benötigten Ports.

Wie immer aktualisieren wir unseren Ports-Baum, bevor wir mit den Ports-bezogenen Aufgaben beginnen, um sicherzustellen, dass die Referenzen auf dem Dateisystem aktuell sind:

sudo portsnap fetch update

Nachdem der Ports-Baum aktualisiert wurde, können wir mit der Installation der Software beginnen. Zuerst müssen wir + poudriere + selbst installieren. Dies ist in der Kategorie "+ ports-mgmt " des Ports-Baums zu finden. Wechseln Sie zum Erstellen und Installieren in dieses Verzeichnis und kompilieren und installieren Sie mit ` make +`:

cd /usr/ports/ports-mgmt/poudriere
sudo make install clean

Fühlen Sie sich frei, eine der angebotenen Optionen auszuwählen. Für eine Standardversion ist keine erforderlich.

Wenn Sie es noch nicht installiert haben, müssen Sie als Nächstes den Port "+ portmaster " installieren. Wir werden dies verwenden, um auf einfache Weise eine Liste von Software auf unserem Computer zu generieren, die wir ` poudriere ` erstellen möchten. Dies ist auch in der Kategorie " ports-mgmt +":

cd /usr/ports/ports-mgmt/portmaster
sudo make install clean

Zum Schluss wollen wir noch einen Webserver installieren. Dies dient zwei Zwecken. Zuerst wird dies die Methode sein, mit der unsere Maschinen die Pakete herunterladen können, die wir kompilieren werden. Zweitens bietet + poudriere + eine Webschnittstelle, mit der wir den Erstellungsprozess verfolgen und Protokolle überwachen können.

In diesem Handbuch wird "+ nginx " als Webserver verwendet. Dies ist in der Kategorie " www +" des Ports-Baums zu finden:

cd /usr/ports/www/nginx
sudo make install clean

Sie können die Standardwerte übernehmen oder anpassen, wenn Sie bestimmte Anforderungen für einen anderen Zweck haben.

Wenn Sie mit dem Kompilieren und Installieren der Software fertig sind, überprüfen Sie Ihren PATH erneut, wenn Sie die Standard-Shells "+ tcsh " oder " csh +" verwenden:

rehash

Nachdem unsere Software installiert ist, können wir mit der Konfiguration jeder unserer Komponenten beginnen.

Erstellen Sie ein SSL-Zertifikat und einen Schlüssel

Wenn wir Pakete mit + poudriere + erstellen, möchten wir sie mit einem privaten Schlüssel signieren können. Dies stellt sicher, dass alle unsere Computer die Berechtigung der erstellten Pakete haben und dass niemand die Verbindung zum Build-Computer abfängt, um böswillige Pakete zu verteilen.

Zunächst erstellen wir eine Verzeichnisstruktur für unseren Schlüssel und unser Zertifikat. Da unsere gesamte optionale Softwarekonfiguration im Verzeichnis "+ / usr / local / etc " stattfindet und andere Software den Speicherort " / usr / local / etc / ssl +" verwendet, werden unsere Dateien hier abgelegt.

Wir werden sicherstellen, dass wir ein "+ ssl" -Verzeichnis haben, das zwei Unterverzeichnisse namens "+ keys" und "+ certs +" enthält. Wir können dies in einem Befehl tun, indem wir Folgendes eingeben:

sudo mkdir -p /usr/local/etc/ssl/{keys,certs}

Unser privater Schlüssel, der geheim gehalten werden muss, wird im Verzeichnis "+ keys +" abgelegt. Dies wird verwendet, um die Pakete zu signieren, die wir erstellen werden. Dies zu schützen ist wichtig, um sicherzustellen, dass unsere Pakete nicht manipuliert werden. Wir können das Verzeichnis sperren, so dass Benutzer ohne root- oder sudo-Berechtigungen nicht mit dem Verzeichnis oder dessen Inhalten interagieren können:

sudo chmod 0600 /usr/local/etc/ssl/keys

Das Verzeichnis "+ certs +" enthält unser öffentlich zugängliches Zertifikat, das mit dem Schlüssel erstellt wurde. Daher können wir die Standardberechtigungen für dieses Verzeichnis beibehalten.

Als Nächstes generieren wir einen 4096-Bit-Schlüssel mit dem Namen "+ poudriere.key " und platzieren ihn in unserem " keys +" - Verzeichnis, indem wir Folgendes eingeben:

sudo openssl genrsa -out /usr/local/etc/ssl/keys/poudriere.key 4096

Nachdem der Schlüssel generiert wurde, können wir daraus ein öffentliches Zertifikat erstellen, indem wir Folgendes eingeben:

sudo openssl rsa -in /usr/local/etc/ssl/keys/poudriere.key -pubout -out /usr/local/etc/ssl/certs/poudriere.cert

Wir haben jetzt die SSL-Komponenten, die wir zum Signieren von Paketen und zum Überprüfen der Signaturen benötigen. Später werden wir unsere Clients so konfigurieren, dass sie das generierte Zertifikat für die Paketüberprüfung verwenden.

Poudriere konfigurieren

Nachdem wir unser SSL-Zertifikat und unseren SSL-Schlüssel haben, können wir anfangen, "+ poudriere +" selbst zu konfigurieren.

Die Hauptkonfigurationsdatei befindet sich unter + / usr / local / etc / poudriere.conf +. Öffnen Sie diese Datei mit den Privilegien "+ sudo +" in Ihrem Texteditor:

sudo vi /usr/local/etc/poudriere.conf

Die + poudriere + Konfigurationsdatei ist sehr gut kommentiert und hat die meisten Einstellungen, die wir vordefinieren müssen. Wir werden einige spezifische Änderungen vornehmen, aber den größten Teil davon intakt lassen.

Wenn Ihr FreeBSD-Server auf DigitalOcean läuft, ist das Dateisystem UFS. Es gibt ZFS-spezifische Optionen in + poudriere +, die wir nicht festlegen sollten. Um anzuzeigen, dass wir UFS verwenden, müssen wir das Flag "+ NO_ZFS +" auf "yes" setzen. Suchen und kommentieren Sie diese Option in der Datei:

NO_ZFS=yes

Wenn Ihr Server hingegen ZFS verwendet, können Sie "+ poudriere " so konfigurieren, dass ein bestimmter Pool verwendet wird, indem Sie die Option " ZPOOL " festlegen. In diesem Pool können Sie das Stammverzeichnis angeben, das " poudriere " für Pakete, Protokolle usw. verwendet. mit der Option ` ZROOTFS `. Beachten Sie, dass diese beiden Optionen * nicht * gesetzt werden sollten, wenn Sie die Option ` NO_ZFS +` auf “yes” gesetzt haben:

NO_ZFS=yes
ZPOOL=
ZROOTFS=

Beim Erstellen von Software verwendet + poudriere + eine Art Gefängnis, um das Build-System vom Hauptbetriebssystem zu trennen. Als nächstes müssen wir einen gültigen Host ausfüllen, auf dem die Build-Maschine die Software herunterladen kann, die sie für Jails benötigt. Dies wird mit der Option "+ FREEBSD_HOST +" konfiguriert.

Diese Option sollte bereits vorhanden sein, obwohl derzeit kein gültiger Host festgelegt ist. Sie können dies auf den Standardspeicherort "+ ftp: // ftp.freebsd.org +" ändern oder einen engeren Spiegel verwenden, wenn Sie einen kennen:

FREEBSD_HOST=

Als nächstes möchten wir sicherstellen, dass Ihr Datenverzeichnis im + poudriere-Stammverzeichnis korrekt eingestellt ist. Dies wird mit der Option "+ POUDRIERE_DATA +" gesteuert und sollte als Standardeinstellung verwendet werden. Wir werden die Option jedoch aus Sicherheitsgründen auskommentieren:

POUDRIERE_DATA=${BASEFS}/data

Die nächsten Optionen, die wir auskommentieren sollten, sind die Optionen + CHECK_CHANGED_OPTIONS + und + CHECK_CHANGED_DEPS +. Die erste Option weist + poudriere + an, Pakete neu zu erstellen, wenn sich die Optionen dafür geändert haben. Die zweite Option weist + poudriere + an, Pakete neu zu erstellen, wenn sich die Abhängigkeiten seit der letzten Kompilierung geändert haben.

Beide Optionen sind in der Form vorhanden, in der sie in der Konfigurationsdatei enthalten sein sollen. Wir müssen sie nur auskommentieren:

CHECK_CHANGED_OPTIONS=verbose
CHECK_CHANGED_DEPS=yes

Als Nächstes verweisen wir auf den von uns erstellten SSL-Schlüssel, damit er Pakete während der Erstellung signieren kann. Die dazu verwendete Option heißt "+ PKG_REPO_SIGNING_KEY +". Deaktivieren Sie diese Option und ändern Sie den Pfad, um den Speicherort des zuvor erstellten SSL-Schlüssels wiederzugeben:

PKG_REPO_SIGNING_KEY=

Schließlich können wir den String "+ URL_BASE " auf den Domainnamen oder die IP-Adresse setzen, unter der Ihr Server erreichbar ist. Dies wird von " poudriere +" verwendet, um Links in der Ausgabe zu erstellen, auf die geklickt werden kann. Sie sollten das Protokoll einschließen und den Wert mit einem Schrägstrich beenden:

URL_BASE=http:///

Wenn Sie mit den Änderungen fertig sind, speichern und schließen Sie die Datei.

Erstellen der Build-Umgebung

Als Nächstes müssen wir unsere Build-Umgebung erstellen. Wie bereits erwähnt, erstellt + poudriere + Ports in einer isolierten Umgebung mithilfe von Jails.

Wir müssen Ihr Jail erstellen und FreeBSD von + poudriere installieren lassen. Es ist möglich, mehrere Jails mit jeweils einer anderen FreeBSD-Version zu haben. Die eingesperrten FreeBSD-Versionen müssen mindestens der Version entsprechen, die der Server selbst ausführt. In diesem Handbuch konzentrieren wir uns auf ein einzelnes Jail, das die Architektur und die FreeBSD-Version des Hostsystems widerspiegelt.

Wir sollten einen aussagekräftigen Namen für das Gefängnis wählen, das wir erstellen. Dies ist wichtig, da es in unserer Repository-Konfiguration auf den Clients verwendet wird, was beim Erstellen für verschiedene FreeBSD-Versionen sehr wichtig sein kann. Die + man + Seiten weisen Sie auch an, Punkte im Namen aufgrund von Interaktionen mit anderen Werkzeugen zu vermeiden. In diesem Handbuch arbeiten wir zum Beispiel mit FreeBSD 10.1 auf einer 64-Bit-Architektur und nennen dies "freebsd_10-1x64".

Wir geben den Namen für unser Gefängnis mit + -j + an und wir geben die Version von FreeBSD an, die mit der Option + -v + installiert werden soll. Das Format für die unterstützten Releases finden Sie in der Spalte "Releases" der Tabelle auf der Seite this. Wenn Sie "+ -CURRENT " oder " -STABLE " anstelle der Version folgen, können Sie das Format verwenden, das sich auf der Seite "https://www.freebsd.org/snapshots/[this]" befindet (z. B. " 11-"). AKTUELL + `).

Für unsere Zwecke sieht unser Gefängnisaufbaubefehl folgendermaßen aus:

sudo poudriere jail -c -j freebsd_10-1x64 -v 10.1-RELEASE

Dies wird eine Weile dauern, seien Sie also geduldig. Wenn Sie fertig sind, können Sie das installierte Gefängnis sehen, indem Sie Folgendes eingeben:

poudriere jail -l
JAILNAME        VERSION         ARCH  METHOD TIMESTAMP           PATH
freebsd_10-1x64 10.1-RELEASE-p3 amd64 ftp    2015-01-06 20:43:48 /usr/local/poudriere/jails/freebsd_10-1x64

Sobald Sie ein Gefängnis erstellt haben, müssen wir einen Ports-Baum installieren. Es ist möglich, mehrere Port-Bäume zu verwalten, um unterschiedliche Entwicklungsanforderungen zu erfüllen. Wir werden einen einzigen Ports-Baum installieren, den unser Gefängnis nutzen kann.

Wir können das + -p + Flag verwenden, um unseren Ports-Baum zu benennen. Wir werden unseren Baum "KOPF" nennen, da er die Verwendung dieses Baums (den "Kopf" oder den aktuellsten Punkt des Baums) genau zusammenfasst. Wir werden es regelmäßig aktualisieren, um es an die aktuellste Version des verfügbaren Ports-Baums anzupassen:

sudo poudriere ports -c -p HEAD

Auch dieser Vorgang dauert eine Weile, da der gesamte Ports-Baum abgerufen und extrahiert werden muss. Wenn es fertig ist, können wir unseren Ports-Baum anzeigen, indem wir Folgendes eingeben:

poudriere ports -l

Nachdem dieser Schritt abgeschlossen ist, verfügen wir nun über die Strukturen, um unsere Ports zu kompilieren und Pakete zu erstellen. Als Nächstes können wir unsere Liste der Ports zusammenstellen, um die gewünschten Optionen für jede Software zu erstellen und zu konfigurieren.

Erstellen einer Port-Building-Liste und Festlegen von Port-Optionen

Beim Kompilieren mit + poudriere + geben wir die zu erstellenden Ports an, wenn Sie den Befehl build aufrufen. Es ist möglich, Ports einzeln anzugeben, dies ist jedoch keine gute Lösung für die langfristige Verwaltung. Stattdessen erstellen wir eine Liste von Ports, die wir direkt an den Befehl übergeben können.

Die Datei create sollte die Portkategorie, gefolgt von einem Schrägstrich und dem Portnamen, auflisten, um die Position in der Portstruktur widerzuspiegeln.

/
/
/

. . .

Erforderliche Abhängigkeiten werden ebenfalls automatisch erstellt. Machen Sie sich also keine Gedanken darüber, ob Sie den gesamten Abhängigkeitsbaum der zu installierenden Ports nachverfolgen müssen. Sie können diese Datei manuell erstellen, aber wenn Ihr Basissystem bereits die meisten Softwareprodukte enthält, die Sie erstellen möchten, können Sie diese Liste mit + portmaster + für Sie erstellen.

Bevor Sie dies tun, ist es normalerweise eine gute Idee, nicht benötigte Abhängigkeiten von Ihrem System zu entfernen, um die Portliste so sauber wie möglich zu halten. Sie können dies tun, indem Sie Folgendes eingeben:

sudo pkg autoremove

Anschließend können wir mit "+ portmaster " eine Liste der Software erhalten, die wir explizit auf unserem Build-System installiert haben. Der Befehl ` portmaster ` kann eine Liste explizit installierter Ports (keine Abhängigkeiten) im richtigen Format ausgeben, indem die Option ` - list-origins +` verwendet wird.

Wir können diese Ausgabe in "+ sort " umleiten, um die Liste zu alphabetisieren und die Suche nach Elementen zu vereinfachen. Wir können die Ergebnisse in eine Datei im Verzeichnis " / usr / local / etc / poudriere.d " ausgeben. Wir werden diese Datei " port-list" nennen:

portmaster --list-origins | sort -d | sudo tee /usr/local/etc/poudriere.d/port-list

Überprüfen Sie die Liste. Wenn es Ports gibt, die Sie nicht einschließen möchten, entfernen Sie die dazugehörige Leitung. Dies ist auch eine Gelegenheit, zusätzliche Ports hinzuzufügen, die Sie möglicherweise benötigen.

Wenn Sie bestimmte make.conf-Optionen verwenden, um Ihre Ports zu erstellen, können Sie eine cmake.conf-Datei für jedes Gefängnis in Ihrem Verzeichnis "+ / usr / local / etc / poudriere.d " erstellen. Für unser Gefängnis können wir zum Beispiel eine ` make.conf +` - Datei mit folgendem Namen erstellen:

sudo vi /usr/local/etc/poudriere.d/-make.conf

Im Inneren können Sie alle Optionen platzieren, die Sie beim Erstellen Ihrer Ports verwenden möchten. Wenn Sie beispielsweise keine Dokumentation, Beispiele, Muttersprachenunterstützung oder X11-Unterstützung erstellen möchten, können Sie Folgendes festlegen:

OPTIONS_UNSET+= DOCS NLS X11 EXAMPLES

Anschließend können wir jeden unserer Ports konfigurieren, wodurch Dateien mit den von uns ausgewählten Optionen erstellt werden.

Wenn Sie Ihre Ports auf Ihrem Host-System angepasst haben, können Sie die Konfigurationen nach "+ poudriere " kopieren, um diese Einstellungen zu verwenden. Erstellen Sie dazu ein neues Verzeichnis im Verzeichnis " / usr / local / etc / poudriere.d ", das nach Ihrem Gefängnis benannt ist und an das " -options +" angehängt ist. Für unseren Guide können wir dies erreichen, indem wir Folgendes eingeben:

sudo mkdir /usr/local/etc/poudriere.d/-options

Jetzt können Sie die Optionen kopieren, die Sie bereits auf Ihrem Host-System verwendet haben, indem Sie Folgendes eingeben:

sudo cp -r /var/db/ports/* /usr/local/etc/poudriere.d/-options

Wenn Sie den obigen Schritt ausführen, erhalten Sie eine Baseline für die zu konfigurierenden Optionen, aber viele Ihrer Abhängigkeiten müssen noch konfiguriert werden.

Sie können alles, was noch nicht konfiguriert wurde, mit dem Befehl + options + konfigurieren. Wir sollten sowohl den von uns erstellten Portbaum (mit der Option "+ -p ") als auch das Gefängnis übergeben, für das wir diese Optionen einstellen (mit der Option " -j "). Wir müssen auch die Liste der zu konfigurierenden Ports mit der Option ` -f +` angeben.

Unser Befehl wird so aussehen:

sudo poudriere options -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Sie sehen ein Dialogfeld für jeden der Ports in der Liste und alle Abhängigkeiten, für die im Verzeichnis "+ -options " keine entsprechenden Optionen festgelegt wurden. Die Angaben in Ihrer ` make.conf +` - Datei werden in den Auswahlbildschirmen vorausgewählt. Wählen Sie alle Optionen aus, die Sie verwenden möchten.

Wenn Sie die Optionen für Ihre Ports in Zukunft neu konfigurieren möchten, können Sie den obigen Befehl mit der Option "+ -c +" erneut ausführen. Dies zeigt Ihnen alle verfügbaren Konfigurationsoptionen, unabhängig davon, ob Sie in der Vergangenheit eine Auswahl getroffen haben:

sudo poudriere options -c -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Häfen bauen

Jetzt können wir endlich mit dem Bau von Häfen beginnen.

Das Letzte, was wir tun müssen, ist sicherzustellen, dass sowohl unser Gefängnis- als auch unser Hafenbaum auf dem neuesten Stand sind. Dies ist wahrscheinlich kein Problem, wenn Sie zum ersten Mal Ports erstellen, da wir gerade sowohl den Ports-Tree als auch das Jail erstellt haben. Es ist jedoch ratsam, sich daran zu gewöhnen, dies jedes Mal zu tun, wenn Sie einen Build ausführen.

Geben Sie Folgendes ein, um Ihr Gefängnis zu aktualisieren:

sudo poudriere jail -u -j freebsd_10-1x64

Geben Sie zum Aktualisieren Ihres Ports-Baums Folgendes ein:

sudo poudriere ports -u -p HEAD

Sobald dies abgeschlossen ist, können wir den Massenerstellungsprozess starten.

  • Hinweis *: Dies kann ein sehr langer Prozess sein. Wenn Sie über SSH mit Ihrem Server verbunden sind, empfehlen wir, "+ screen +" zu installieren und eine Sitzung zu starten:

cd /usr/ports/sysutils/screen
sudo make install clean

rehash
screen

Um den Build zu starten, müssen wir nur den Befehl "+ bulk +" verwenden und auf alle unsere Einzelteile verweisen, die wir konfiguriert haben. Wenn Sie die Werte aus diesem Handbuch verwendet haben, sieht der Befehl folgendermaßen aus:

sudo poudriere bulk -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Dies startet eine Reihe von Workern (abhängig von Ihrer Datei "+ poudriere.conf +" oder der Anzahl der verfügbaren CPUs) und beginnt mit dem Aufbau der Ports.

Während des Erstellungsprozesses können Sie jederzeit Informationen über den Fortschritt abrufen, indem Sie die STRG-Taste gedrückt halten und die Tastenkombination "+ t +" drücken:

CTRL-t

Bestimmte Teile des Prozesses produzieren mehr Output als andere.

Wenn Sie einen Schritt zurücktreten müssen, können Sie die Bildschirmsitzung trennen, indem Sie "+ STRG " mit " a " drücken, um die Steuerung auf " Bildschirm " zu verschieben, gefolgt von der Taste " d +", um die Sitzung zu trennen:

CTRL-a d

Wenn Sie zur Sitzung zurückkehren möchten, können Sie Folgendes eingeben:

screen -x

Einrichten von Nginx zur Bereitstellung von Front-End und Repository

Während Ihre Pakete erstellt werden, können wir die Gelegenheit nutzen, Nginx zu konfigurieren. Öffnen Sie ein anderes Terminal, trennen Sie Ihre "+ screen" -Sitzung wie oben gezeigt oder starten Sie ein neues "+ screen" -Fenster, indem Sie "+ STRG-a c " eingeben (Sie können zwischen den Fenstern wechseln, indem Sie " STRG-a n +" und "eingeben) + STRG-a p + `).

Der Webserver wird für zwei unterschiedliche Zwecke verwendet:

  • Es wird das eigentliche Paket-Repository bereitstellen, mit dem andere Hosts Ihre benutzerdefinierten kompilierten Pakete herunterladen können

  • Es dient dem Web-Frontend "+ poudriere +", mit dem der Erstellungsprozess überwacht werden kann

Wir haben Nginx zu Beginn dieses Handbuchs installiert, aber nicht konfiguriert.

Aktivieren Sie zunächst den Dienst, indem Sie der Datei "+ / etc / rc.conf " die Zeile " nginx_enable =" YES "" hinzufügen. Dies startet den Server beim Booten und ermöglicht es uns, die üblichen " service +" - Befehle zu verwenden, um den Prozess zu verwalten:

sudo sh -c "echo 'nginx_enable="YES"' >> /etc/rc.conf"

Jetzt können wir die Standardkonfigurationsdatei anpassen. Öffne es mit + sudo + Privilegien in deinem Texteditor:

sudo vi /usr/local/etc/nginx/nginx.conf

In dieser Datei entfernen wir alles aus dem + server {} + Block und ersetzen es durch unsere eigene Konfiguration. Stellen Sie sicher, dass Sie die entsprechenden Klammern ("\ {" und "}") intakt lassen, um sicherzustellen, dass Ihre Datei gültig ist.

Im Kontext "+ server " können wir einige grundlegende Anweisungen einrichten, die es unserem Webserver ermöglichen, auf konventionellen HTTP-Verkehr an Port 80 und auf den Domainnamen oder die IP-Adresse unseres Servers zu antworten. Wir werden auch den Dokumentenstamm des Servers auf das Webverzeichnis " poudriere " setzen, das sich unter " / usr / local / share / poudriere / html " befindet. Ändern Sie den Wert der Direktive " Servername +" so, dass er mit dem Domainnamen oder der IP-Adresse Ihres Servers übereinstimmt:

# http context

. . .

   server {
       listen 80 default;
       server_name ;
       root /usr/local/share/poudriere/html;
   }

}

Als nächstes werden wir zwei '+ location'-Blöcke hinzufügen.

Während die oben definierte grundlegende "+ root " - Direktive den Großteil der Weboberfläche abwickelt, müssen wir Nginx mitteilen, in welchem ​​Verzeichnis wir Protokolle und die tatsächlichen Daten speichern. Poudriere verwendet hierfür den Endpunkt " / data ". Unsere Protokolle werden alle in ein bestimmtes Verzeichnis geschrieben, sodass wir die Direktive " autoindex +" für diesen Speicherort aktivieren können, damit wir die Liste der Protokolle anzeigen können.

Am Ende sieht unser erster + location + Block so aus:

# http context

. . .

   server {
       listen 80 default;
       server_name ;
       root /usr/local/share/poudriere/html;

       location /data {
           alias /usr/local/poudriere/data/logs/bulk;
           autoindex on;
       }
   }
}

Dadurch sollte unser Webinterface korrekt funktionieren (nach einer zusätzlichen Änderung an der Datei "+ mime.types +", die wir in Kürze vornehmen werden). Als Nächstes müssen wir unseren zweiten Standortblock hinzufügen, der für die eigentlichen Pakete verwendet wird, die wir erstellt haben.

Die Pakete werden wieder in einem Verzeichnis unter + / usr / local / poudriere + gespeichert, diesmal unter + data / packages +. Wir können dies an der Position "+ / packages " zur Verfügung stellen. Auch hier können wir ` autoindex +` aktivieren, um den Inhalt des Verzeichnisses anzuzeigen, sodass wir die Dateien auch in einem Webbrowser anzeigen können.

Sobald diese letzte Änderung abgeschlossen ist, sollte der + server + Block so aussehen:

#http context

. . .

   server {
       listen 80 default;
       server_name ;
       root /usr/local/share/poudriere/html;

       location /data {
           alias /usr/local/poudriere/data/logs/bulk;
           autoindex on;
       }

       location /packages {
           root /usr/local/poudriere/data;
           autoindex on;
       }
   }
}

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Als nächstes nehmen wir eine kleine Modifikation an unserer Datei + mime.types vor. Wenn Sie mit den aktuellen Einstellungen im Webbrowser auf ein Protokoll klicken, wird die Datei heruntergeladen und nicht als einfacher Text angezeigt. Wir können dieses Verhalten ändern, indem wir Dateien, die mit "+ .log +" enden, als reine Textdateien markieren.

Öffnen Sie die Nginx-Datei + mime.types + mit sudo-Berechtigungen in Ihrem Texteditor:

sudo vi /usr/local/etc/nginx/mime.types

Suchen Sie den Eintrag, der den Inhaltstyp "+ text / plain " angibt, und hängen Sie " log +" an das Ende der aktuellen Liste der Dateitypen an, getrennt durch ein Leerzeichen:

. . .

text/mathml                         mml;
text/plain                          txt ;
text/vnd.sun.j2me.app-descriptor    jad;

. . .

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Überprüfen Sie nun die Syntax Ihrer Konfigurationsdateien, indem Sie Folgendes eingeben:

sudo service nginx configtest

Wenn Sie Fehler haben, beheben Sie diese, bevor Sie fortfahren. Wenn Ihr Konfigurationstest keine Syntaxfehler meldet, starten Sie Nginx, indem Sie Folgendes eingeben:

sudo service nginx start

Wenn Sie eine Firewall aktiviert haben, denken Sie daran, Ihre Regeln so zu konfigurieren, dass der Datenverkehr Port 80 zulässt, und starten Sie den Dienst neu.

Jetzt können Sie die "+ poudriere +" - Weboberfläche anzeigen, indem Sie in Ihrem Webbrowser den Domainnamen oder die IP-Adresse Ihres Servers aufrufen:

http://

Sie sollten die Hauptseite von + poudriere + sehen:

Wenn Sie sich durchklicken, sollten Sie in der Lage sein, den Prozess oder die Ergebnisse Ihres Hafenbaus anzuzeigen. Sie sollten auch in der Lage sein, die Protokolle aller abgeschlossenen Builds durchzuklicken.

Wenn Sie Ihre kompilierten Pakete im Browser anzeigen möchten, sollten diese über eine Hierarchie verfügbar sein, die mit "+ / packages +" beginnt:

Möglicherweise müssen Sie warten, bis der gesamte Build abgeschlossen ist, um die Pakete anzuzeigen. Durch Klicken auf die Links werden die kompilierten Pakete angezeigt, die Sie mit dem Massenerstellungsbefehl + poudriere + erstellt haben.

Paket-Clients konfigurieren

Nachdem Sie Pakete erstellt und ein Repository für die Bereitstellung Ihrer Pakete konfiguriert haben, können Sie Ihre Clients so konfigurieren, dass der Server als Quelle für ihre Pakete verwendet wird.

Konfigurieren des Build-Servers für die Verwendung seines eigenen Package Repo

Wir können damit beginnen, den Build-Server für die Verwendung der Pakete zu konfigurieren, die er erstellt hat.

Zuerst müssen wir ein Verzeichnis erstellen, in dem sich unsere Repository-Konfigurationsdateien befinden:

sudo mkdir -p /usr/local/etc/pkg/repos

In diesem Verzeichnis können wir unsere Repository-Konfigurationsdatei erstellen. Es muss auf "+ .conf " enden, also werden wir es " poudriere.conf +" nennen, um seinen Zweck zu widerspiegeln:

sudo vi /usr/local/etc/pkg/repos/poudriere.conf

Wir werden den Repository-Namen noch einmal als "+ poudriere +" definieren. Innerhalb der Definition verweisen wir auf den Speicherort auf der Festplatte, an dem unsere Pakete gespeichert sind. Dies sollte ein Verzeichnis sein, das Ihren Gefängnisnamen und den Namen des Portbaums mit einem Bindestrich kombiniert. Überprüfen Sie Ihr Dateisystem, um sicherzugehen. Wir richten auch die Signaturvalidierung unserer Pakete ein, indem wir auf das von uns erstellte Zertifikat verweisen.

Am Ende sollte Ihre Datei ungefähr so ​​aussehen:

poudriere: {
   url: "file:///usr/local/poudriere/data/packages/",
   mirror_type: "srv",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes
}

An diesem Punkt müssen Sie eine Entscheidung treffen. Wenn Sie Ihre kompilierten Pakete bevorzugen und auf die Pakete aus den wichtigsten FreeBSD-Repositorys zurückgreifen möchten, können Sie hier eine Priorität festlegen und festlegen, dass Pakete aus diesem Repository bevorzugt werden sollen. Dadurch hat unser lokales Repository Vorrang vor den offiziellen Repositorys.

Beachten Sie, dass das Mischen von Paketen auf diese Weise einige komplizierte Folgen haben kann. Wenn die offiziellen Repositorys eine Paketversion haben, die höher ist als Ihre lokale Repository-Version, wird Ihr kompiliertes Paket möglicherweise durch das generische Paket aus den offiziellen Repositorys ersetzt (bis Sie es mit "+ poudriere " neu erstellen und mit " pkg +" neu installieren). In den offiziellen Paketen wird möglicherweise davon ausgegangen, dass abhängige Pakete auf bestimmte Weise erstellt wurden und möglicherweise nicht funktionieren, wenn sie mit Ihren benutzerdefinierten Paketen gemischt werden.

Wenn Sie diese beiden Paketquellen kombinieren möchten, prüfen Sie jede Installation sorgfältig, um sicherzustellen, dass Sie nicht versehentlich unerwünschtes Verhalten verursachen.

Um Pakete zu mischen, fügen Sie Ihrer Repository-Definition die Einstellung "+ priority +" hinzu und geben an, dass das lokale Repository eine höhere Priorität hat:

poudriere: {
   url: "file:///usr/local/poudriere/data/packages/",
   mirror_type: "srv",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes,
   priority: 100
}

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Wenn Sie * nur * Pakete installieren möchten, die Sie selbst erstellt haben (die sicherere Route), können Sie die Prioritätseinstellung weglassen, möchten aber die Standard-Repositorys deaktivieren. Sie können dies tun, indem Sie eine andere Repo-Datei erstellen, die die Standard-Repository-Datei überschreibt und deaktiviert:

sudo vi /usr/local/etc/pkg/repos/freebsd.conf

Verwenden Sie im Inneren den Namen "+ FreeBSD +", um der Standard-Repository-Definition zu entsprechen. Deaktivieren Sie das Repository, indem Sie es folgendermaßen definieren:

FreeBSD: {
   enabled: no
}

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Unabhängig von Ihrer Konfigurationsauswahl sollten Sie jetzt bereit sein, Ihr Repository zu verwenden. Aktualisieren Sie Ihre Paketliste, indem Sie Folgendes eingeben:

sudo pkg update

Jetzt kann Ihr Server den Befehl "+ pkg +" verwenden, um Pakete aus Ihrem lokalen Repository zu installieren.

Konfigurieren von Remote-Clients für die Verwendung des Repository Ihres Build-Computers

Einer der zwingendsten Gründe für die Einrichtung von "+ poudriere +" auf einer Build-Maschine ist die Verwendung dieses Hosts als Repository für viele andere Maschinen. Dazu müssen wir lediglich das öffentliche SSL-Zertifikat von unserer Build-Maschine herunterladen und eine ähnliche Repository-Definition einrichten.

Um von unseren Client-Computern aus eine Verbindung zu unserem Build-Host herzustellen, sollten Sie einen SSH-Agenten auf Ihrem * lokalen Computer * starten, um Ihre SSH-Schlüssel-Anmeldeinformationen zu speichern.

OpenSSL wird mit einem SSH-Agenten geliefert, der durch Eingabe auf Ihrem Heimcomputer gestartet werden kann:

eval $(ssh-agent)

Als Nächstes müssen Sie Ihren SSH-Schlüssel hinzufügen, indem Sie Folgendes eingeben:

ssh-add

Anschließend können Sie Ihre lokalen SSH-Anmeldeinformationen an Ihre Clientcomputer weiterleiten, wenn Sie eine Verbindung herstellen, indem Sie das Flag "+ -A +" verwenden. Auf diese Weise können Sie von Ihrem Client-Computer aus auf jeden Computer zugreifen, als ob Sie von Ihrem Heimcomputer aus darauf zugreifen würden:

ssh -A @

Sobald Sie sich auf Ihrem Remote-Client-Computer befinden, müssen Sie zunächst die Verzeichnisstruktur erstellen (falls nicht vorhanden), in der Sie das Zertifikat speichern können. Wir werden auch ein Verzeichnis für Schlüssel erstellen, damit wir dieses für zukünftige Aufgaben verwenden können:

sudo mkdir -p /usr/local/etc/ssl/{keys,certs}

Jetzt können wir mit SSH eine Verbindung zu unserer Build-Maschine herstellen und die Zertifikatsdatei zurück zu unserer Client-Maschine leiten. Da wir unsere SSH-Anmeldeinformationen weitergeleitet haben, sollten wir dies tun können, ohne nach einem Kennwort gefragt zu werden:

ssh freebsd@ 'cat /usr/local/etc/ssl/certs/poudriere.cert' | sudo tee /usr/local/etc/ssl/certs/poudriere.cert

Dieser Befehl stellt von Ihrem Client-Computer mit Ihren lokalen SSH-Anmeldeinformationen eine Verbindung zum Build-Computer her. Sobald die Verbindung hergestellt ist, wird der Inhalt Ihrer Zertifikatdatei angezeigt und über den SSH-Tunnel zurück an Ihren Remote-Client-Computer geleitet. Von dort aus verwenden wir die Kombination "+ sudo tee +", um das Zertifikat in unser Verzeichnis zu schreiben.

Sobald dies abgeschlossen ist, können wir unsere Repository-Verzeichnisstruktur genau wie auf der Build-Maschine selbst erstellen:

sudo mkdir -p /usr/local/etc/pkg/repos

Jetzt können wir eine Repository-Datei erstellen, die der auf der Build-Maschine verwendeten sehr ähnlich ist:

sudo vi /usr/local/etc/pkg/repos/poudriere.conf

Die Unterschiede sind der URL-Speicherort und der Spiegeltyp. Auch hier können wir entweder Pakete mischen oder nur unsere benutzerdefinierten kompilierten Pakete verwenden. Die gleichen Warnungen gelten für das Mischen von Paketquellen.

Wenn Sie Ihre benutzerdefinierten Pakete mit denen der offiziellen Repositorys mischen möchten, sollte Ihre Datei ungefähr so ​​aussehen:

poudriere: {
   url: "http:///packages//",
   mirror_type: "http",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes,
   priority: 100
}

Wenn Sie nur Ihre kompilierten Pakete verwenden möchten, sollte Ihre Datei ungefähr so ​​aussehen:

poudriere: {
   url: "http:///packages//",
   mirror_type: "http",
   signature_type: "pubkey",
   pubkey: "/usr/local/etc/ssl/certs/poudriere.cert",
   enabled: yes

Wenn Sie nur Ihre eigenen Pakete verwenden, müssen Sie außerdem eine weitere Repository-Konfigurationsdatei erstellen, um die standardmäßige FreeBSD-Repository-Konfiguration zu überschreiben:

sudo vi /usr/local/etc/pkg/repos/freebsd.conf

Fügen Sie den folgenden Inhalt in die Datei ein, um die offiziellen Repositorys zu deaktivieren:

FreeBSD: {
   enabled: no
}

Wenn Sie fertig sind, aktualisieren Sie Ihre "+ pkg +" - Datenbank, um mit der Verwendung Ihrer benutzerdefinierten kompilierten Pakete zu beginnen:

sudo pkg update

Dieser Vorgang kann auf beliebig vielen FreeBSD-Client-Rechnern wiederholt werden.

Neuerstellen Ihrer Pakete, wenn Updates verfügbar sind

Sie sollten jetzt Ihr gesamtes Poudriere-Setup laufen haben. Sie müssen Ihre Pakete jedoch von Zeit zu Zeit neu erstellen, wenn neue Updates verfügbar werden, insbesondere wenn sie sicherheitsrelevant sind.

Glücklicherweise ist das Verfahren zum Neuerstellen von Paketen recht einfach. Zunächst sollten Sie Ihr FreeBSD-Gefängnis aktualisieren, damit Ihre Pakete mit dem aktuellen Betriebssystem kompatibel sind. Sie können dies tun, indem Sie Folgendes eingeben:

sudo poudriere jail -u -j freebsd_10-1x64

Als Nächstes sollten Sie Ihren Ports-Baum aktualisieren, damit die neueste Version jedes Ports für Ihr Gefängnis verfügbar ist. Sie können dies tun, indem Sie Folgendes eingeben:

sudo poudriere ports -u -p HEAD

Nachdem der Jail- und der Ports-Baum aktualisiert wurden, können Sie Ihre Port-Liste ändern, wenn Sie Änderungen vornehmen möchten:

sudo vi /usr/local/etc/poudriere.d/port-list

Wenn Sie irgendwelche + make.conf + - Optionen anpassen müssen, können Sie dies tun, indem Sie die Ihrem Build zugeordnete Datei bearbeiten:

sudo vi /usr/local/etc/poudriere.d/-make.conf

Sie können nach neuen Optionen für Ihre Ports suchen, indem Sie Folgendes eingeben:

sudo poudriere options -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Wenn Sie stattdessen alle Optionen für Ihre Ports überprüfen möchten, können Sie das Flag "+ -c +" hinzufügen. Dies kann bei der Behebung von Build- oder Laufzeitproblemen hilfreich sein:

sudo poudriere options -c -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Wenn Sie die obigen vorbereitenden Schritte ausgeführt haben, können Sie alle Ports neu kompilieren, die geändert oder aktualisiert wurden, indem Sie Folgendes eingeben:

sudo poudriere bulk -j freebsd_10-1x64 -p HEAD -f /usr/local/etc/poudriere.d/port-list

Fühlen Sie sich frei, um den Fortschritt in der Weboberfläche zu überwachen. Sobald die neuen Pakete kompiliert sind, können Sie die Pakete auf jedem Computer aktualisieren, indem Sie Folgendes eingeben:

sudo pkg upgrade

Auf diese Weise können Sie ganz einfach Ihre benutzerdefinierten Pakete auf Ihrer gesamten FreeBSD-Infrastruktur aktualisieren.

Fazit

In diesem Handbuch wurde beschrieben, wie Sie "+ poudriere +" konfigurieren, um einen benutzerdefinierten Satz von Ports sowohl für unsere Build-Maschine als auch für externe Clients zu kompilieren und zu verpacken. Der Prozess mag auf den ersten Blick langwierig erscheinen, ist jedoch recht einfach zu handhaben, sobald Sie ihn eingerichtet haben.

Wenn Sie + poudriere + einsetzen, können Sie beide optionalen Software-Management-Systeme von FreeBSD nutzen. Für viele Anwender ist dies das Beste aus beiden Welten. Mit einem Build-System von "+ poudriere " können Sie Software so anpassen, wie Sie es auf einem einzelnen Computer für richtig halten, während Sie das schnelle " pkg +" - System für die eigentliche Installation und Verwaltung verwenden.

Related