Unser Weg zu Xenial

nine Team Jun 15, 2016

Ubuntu 16.04 LTS mit Codenamen Xenial Xerus ist die neueste LTS Version Ubuntu. Diese erschien, wie die Versionsnummer bereits andeutet, im April 2016. LTS steht hierbei für “Long Term Support” und bedeutet, dass diese Ubuntu Version über 5 Jahre hinweg supported wird bzw. Updates erfährt.

Da nine.ch auf genau die LTS Versionen von Ubuntu setzt, sind wir selbstverständlich bemüht, unseren Kunden zeitnah die aktuellste Version zur Verfügung zu stellen. Da jedoch nur alle zwei Jahre eine neue LTS Version erscheint, sind meist grössere Versionssprünge bei den Applikationen unumgänglich, welche uns bei der Einführung herausforderten.

#Erste Versuche mit Xenial

Um nach dem Erscheinen von Ubuntu Xenial umgehend bereit zur Installation auf Kundenservern zu sein, begannen wir bereits im Februar mit den ersten Vorbereitungen. Zu diesen gehörte vor allem das Vorbereiten eines Netinstall-Images, um Xenial direkt über das Netzwerk zu installieren. Sobald dies funktionierte, wurden die ersten Server mit Xenial aufgesetzt.

Die erste bemerkenswerte Änderung war die Benennung der Netzwerk-Interfaces, die nun nicht mehr “eth0”, “eth1” usw. genannt werden, sondern z.B. “enp5s0”. Damit für uns alles korrekt funktioniert, sind wir jedoch von der “alten” Namensgebung abhängig. Daher mussten wir zuerst eine Lösung finden, um diese auch auf den Xenial-Servern zum Laufen zu bringen. Nach einigen Versuchen gelang es uns schlussendlich, einen neuen Server mit den richtigen Netzwerk-Einstellungen zu installieren, sodass die Namen für uns wieder nutzbar waren.

Damit die Installation mittels Razor (unserem Service für die automatisierte Installation von Servern) dann endgültig fehlerfrei funktionierte, waren noch Anpassungen an den zu installierenden Paketen nötig. Nach deren Umsetzung konnten wir dann beliebige Server (egal ob virtuell oder physisch) völlig automatisiert aufzusetzen.

#Grundkonfiguration für Xenial vorbereiten

Nachdem wir Systeme automatisiert installieren konnten, war unser Konfigurationsmanagementsystem “Puppet” an der Reihe. Dort mussten wir zuerst die Grundkonfigurationen, welche wir auf all unseren Managed (V)Servern installieren, für Xenial vorbereiten.

Vieles funktionierte hier bereits von Haus aus unter Xenial, doch waren einzelne Einstellungen veraltet und mussten daher angepasst werden. Dies war wichtig, damit diese Einstellungen nur auf Xenial-Systemen, nicht aber auf älteren Systemen (z.B. Ubuntu Trusty) geändert wurden.

Weiterhin waren viele Konfigurationen so eingerichtet, dass sie z.B. nur auf Trusty (der letzten LTS Version) etwas anderes machten, als auf den vorherigen Distributionsversionen. Diese Konfigurationen konnten aber mehrheitlich komplett oder mit nur wenigen Anpassungen auf Xenial übernommen werden.

Zu diesen zählte zum Beispiel:

  • Das Installieren von Postfix auf Ubuntu 12.04 & 14.04
  • Das Installieren von unterschiedlichen Ruby Versionen
  • Die Konfiguration von Metriken, welche wir ab Ubuntu 12.04 sammelten

Bei den meisten dieser Einstellungen mussten wir vom Versionsvergleich mittels Namen (if $::lsbdistcodename == 'trusty') auf den Vergleich mittels Versionsnummer umsteigen (if versioncmp($::lsbdistrelease, '14.04') >= 0).

#Services auf Xenial vorbereiten

Da nun unsere Server installiert und mit der Grundkonfiguration versehen werden konnten, war es an der Zeit, unsere Services “xenialtauglich” zu machen.

Hierzu arbeiteten wir von Service zu Service und versuchten diese ohne Anpassungen zu installieren. Bei einzelnen Services war dies kein Problem und so konnten diese sofort auch unter Xenial verwendet werden. Viele unserer Managed Services benötigten ein wenig mehr Aufmerksamkeit, um sie zum Laufen zu bringen. Hierfür gab es unterschiedliche Gründe. Zum einen hatten die - zum Teil grösseren - Versionssprünge Einfluss, zum anderen war es nötig, unser Konfigurationsmanagement so umzustellen, dass alle nötigen Einstellungen für das Funktionieren mit systemd gemacht werden konnten. Die grösste Umstellung beim Anpassen der Konfgurationen für Xenial war dabei der Wechsel von Upstart zu systemd.

Zudem musste der Build Prozess unserer eigenen Softwarepakete angepasst werden, um diese auch unter Ubuntu Xenial nutzen zu können. Diese Anpassungen stellten uns vor neue Herausforderungen. Ein Beispiel dafür ist Ruby. So wurden einige unserer Pakete neu mit dem Support für mehrere Ruby-Versionen gebuildet, damit diese auf den “älteren” und auf Xenial-Servern installiert werden konnten. Dies nahmen wir als Anlass alle Ruby Versionen auf unseren Servern zu vereinheitlichen.

#Canonical veröffentlicht Ubuntu Xenial

Nach einigen Tests und Anpassungen in unserer Infrastruktur war die Mehrzahl unserer Services bereit für Xenial. Durch unseren frühen Start und der sorgfältigen Vorbereitung sahen wir dem Release am 21. April 2016 mit Freude entgegen. Unsere Aufgabe vor der Herausgabe an unsere Kunden lautete, die Abschlusstests auf der endgültig veröffentlichten Version zu wiederholen, um dann Ubuntu Xenial zeitnah ausliefern zu können. Leider wurden im letzten Moment wichtige Änderungen seitens Canonical vorgenommen, die es uns nicht gestatteten, unser geplantes Release-Datum einzuhalten. Beispielsweise wurde entschieden PHP 5.6 komplett zu entfernen und nur noch PHP 7.0 offiziell anzubieten.

#Der Feinschliff

Um Xenial trotz der Änderungen nun möglichst schnell anbieten zu können, starteten wir sofort mit den Anpassungen der nun wieder offenen Punkte. Es folgten Tests und Qualitätskontrollen, welche uns die noch zu bearbeitenden Tasks aufzeigten. Nach und nach konnten so Fehler und Probleme entdeckt, bearbeitet und behoben werden. Dazu zählten beispielsweise Probleme mit dem von uns eingesetzten Monit oder Fehler einzelner Services.

Nach der letzten Qualitätskontrolle war es dann endlich so weit und wir konnten unseren Kunden die gute Nachricht mitteilen: Ubuntu 16.04 LTS (Xenial Xerus) für Managed (V)Server ist bei nine.ch erhältlich. Seit dem 6. Juni 2016 installieren wir nun standardmässig Xenial auf allen neuen Servern.

Martin Wittwer arbeitet als Linux System Engineer im “Systems”-Team bei nine.ch. Zusammen mit den Kollegen aus dem „Systems“-Team war er für die Einführung von Xenial zuständig.