Poudriere Package-Repository

Warum wir ein eigenes Paketrepository betreiben, wie dieses aufgebaut ist und welchen Nutzen ihr daraus ziehen könnt, will ich euch in diesem Beitrag erläutern.

Lesedauer: ca. 3 Minuten

Wir betreiben unser Hosting aus Überzeugung auf Basis von FreeBSD und profitieren dabei neben der Stabilität und dem durchdachten Design von den langjährig erprobten Technologien ZFS und Jails. Beide sind Grundlage unseres proServers und ermöglichen eine leichtgewichtige flexible Virtualisierung als Hosting-Lösung in unserem eigenen Rechenzentrum.

Da punkt.de neben dem Hosting auch die Entwicklung komplexer Webseiten und -anwendungen auf Basis von Neos und TYPO3 anbietet, arbeiten Entwickler und Operator bei uns zwangsläufig seit jeher eng zusammen; nebenbei bemerkt länger als der Begriff DevOps existiert. Eine der großen Herausforderungen bezüglich des zugrundeliegenden Betriebssystems ist es folglich, die unterschiedlichen Interessen der jeweilgen Fraktion unter einen Hut zu bringen.

Auf der einen Seite stehen die hinsichtlich der Software meist progressiven Entwickler. In Zeiten, in denen beinahe jede Woche ein neues Javascript-Framework aus den Wolken fällt, sind die Rufe nach der neuen, heißen Software selbstverständlich laut: "Bitte nginx statt Apache auf den Servern und in meinen Entwicklerboxen." oder "Wir benötigen Varnish und PHP 7.1 für das Testsystem unseres Kunden, weil wir unbedingt mal testen wollen, wie NEOS sich damit verhält. Auf dem Produktivsystem muss aber bitte noch PHP 7.0 installiert und mit Minor Fixes aktualisiert werden." oder natürlich auch gerne "Auf meinem Lieblings-OS kann ich Redis einfach über meinen Paketmanager installieren. Wie geht das in meiner FreeBSD-Entwicklerbox?". Soweit einige exemplarische, aber durchaus nicht aus der Luft gegriffene Anforderungen seitens der Entwickler.

Diesen gegenüber stehen auf der anderen Seite die im besten Sinne konservativeren Operator. Deren Absicht ist es, stabile, konsistente und aktualisierbare Systeme zur Verfügung zu stellen; nicht mehr und nicht weniger.

Klar, dass es da zu Interessenskonflikten kommt. Im besten DevOps-Sinne haben wir Opse uns also mit unseren Entwicklern an einen Tisch gesetzt, Anforderungen und Einschränkungen geklärt und schließlich eine Lösung gefunden. Unser Ziel sollte es sein, ein zentrales Paket-Repository zur Verfügung zu stellen, das stets aktuelle Software-Pakete zur Verfügung stellt, die sich leicht installieren lassen.

Paketverwaltung unter FreeBSD

FreeBSD stellt Third-Party-Software wie nginx, PHP, usw. als sogenannte Ports zur Verfügung. Diese sind meist up-to-date, erfordern aber ein Übersetzen aus dem Quellcode zur Installation. Das erfordert jedoch bei großen Paketen jede Menge Rechenzeit und technisches Know-How, mit dem sich ein Entwickler verständlicherweise weder beschäftigen noch aufhalten will und sollte. Um die Bequemlichkeit einer Installation von Paketen nach Art von apt-get, yum oder brew zu erhalten, kann auf das FreeBSD-Pendant pkg zurückgegriffen werden. Analog zu den Paketmanagern anderer Betriebssysteme wird mit pkg install <PAKET> das entsprechende Paket von einem zentralen FreeBSD-Paketrepository heruntergeladen und installiert.

Damit haben Devs und Ops ihren ersten Schritt aufeinander zu getan. Was ist nun aber mit Major und Minor Updates der jeweiligen Software? Wie können wir Operator den Entwicklern aktuelle Pakete zur Verfügung stellen? Hier kommt das Tool poudriere ins Spiel, mit dem man automatisiert und reproduzierbar installierbare Pakete bauen kann. Nun sollte auch geklärt sein, warum wir unser Paketrepository Poudriere nennen.

Pakete bauen mit poudriere

poudriere ist ein Kommandozeilentool, das auf Basis eines FreeBSD-Betriebssystem-Releases ausgewählte Pakete erstellt. Dazu wird das jeweilige Paket aus dem FreeBSD Portstree ausgewählt und innerhalb eines Containers, eines sogenannten Jails, gebaut. Der Portstree ist eine hierarchisch kategorisierte Verzeichnisstruktur aus Paket-Build-Informationen, die auf einem FreeBSD-System üblicherweise unter /usr/ports/ abgelegt wird:

...
lang/php56
lang/php70
lang/php71
www/apache22
www/apache24
www/nginx
...

Bei Jails handelt es sich um eine FreeBSD-eigene Container-Lösung, d.h. eine vom Host-System gekapselte Umgebung, die beim Bauen der Pakete eine immer gleiche Umgebung garantiert.

Ein Beispiel:

poudriere bulk -j 110 -p 2017Q3 -z ap24-php70 www/nginx

erstellt das Paket nginx aus dem Portstree des 3. Quartals 2017 in einem Container mit FreeBSD 11.0-Release. Wenn nötig können natürlich auch Paketabhängigkeiten definiert und paketspezifische Build-Parameter angegeben werden. Beispielsweise muss der Apache Webserver aufgrund von mod-php beim Kompilieren an genau eine dedizierte PHP-Version gebunden werden. Die Angabe sogenannter Sets, hier ap24-php70, ermöglicht dies.

Somit werden multidimensionale Paketlisten generiert, die über einen Webserver verfübar gemacht werden können. punkt.de hosting stellt diese unter http://packages.pluspunkthosting.de/packages/ bereit, sortiert nach FreeBSD-Release, Portstree-Quartal und Set:

...
110-2017Q3-ap22-php56
110-2017Q3-ap24-php56
110-2017Q3-ap24-php70
110-2017Q3-ap24-php71
110-HEAD-ap24-php70
110-HEAD-ap24-php71
111-2017Q3-ap22-php56
111-2017Q3-ap24-php56
111-2017Q3-ap24-php70
111-2017Q3-ap24-php71
111-HEAD-ap24-php70
111-HEAD-ap24-php71
...

Die Pakete stehen nun bereit. Aus Operator-Sicht eine tolle, weil fundierte und wartbare Lösung. Aber was ist mit den Entwicklern? Wie kommt ein Entwickler in den Genuss der Repositories?

Entwickler und die Poudriere

Damit Entwickler die Pakete eines Repositories installieren können, müssen zum Einen das offizielle FreeBSD-Repository abgeklemmt werden, indem in die Datei /usr/local/etc/pkg/repos/FreeBSD.conf die Zeile

FreeBSD: { enabled: no }

eingetragen wird. Zusätzlich muss die Datei /usr/local/etc/pkg/repos/punkt.de.conf angelegt und mit folgendem Inhalt befüllt werden:

punkt.de: { url: https://packages.pluspunkthosting.de/packages/110-2017Q3-ap24-php70, enabled: yes, mirror_type: NONE }

Das Repository 110-2017Q3-ap24-php70 ist lediglich beispielhaft gewählt und kann natürlich entsprechend ersetzt werden. Ein anschließendes

sudo pkg update
sudo pkg upgrade

aktualisiert die Paketdatenbank und die bereits installierten Pakete. Fertig.

Fazit

Als Hoster sehen wir uns in der Verantwortung, unseren Kunden und Entwickler-Teams aktuelle und sichere Software zur Verfügung zu stellen. So bezieht sich unser Credo "Wir hosten wovon wir Ahnung haben" nicht nur auf die Applikationen Neos und TYPO3, sondern darüber hinaus ebenso auf die Software-Pakete und das zugrunde liegende Betriebssystem.

Übrigens: Die punkt.de hosting Pakete sind öffentlich erreichbar. Installiert euch eine unserer proServer Vagrant-Boxen von https://boxes.hosting.punkt.de/ und probiert es aus. All unsere Pakete werden nächtlich aktualisiert. Ihr profitiert also von stabilen Paket-Versionen auf einer professionellen FreeBSD-Plattform.

Teilen:

Weitere Beiträge

:(){ :|:& };:
Wolfgang Medina-Erhardt, DevOps bei punkt.de
Arbeiten bei punkt.de