pixel
Seite wählen

Leap(p) to Red Hat Enterprise Linux 9

von | Nov 3, 2022 | Automation, Foreman, Ansible

Ich muss mich direkt für das Wortspiel im Titel entschuldigen, aber es lag so nahe als ich mich für das Thema entschieden hatte, denn ich möchte einen neuen Blick auf Leapp werfen mit dem Upgrades von Red Hat Enterprise Linux (RHEL) durchgeführt werden können. Der Blick soll wie gewohnt etwas ausführlicher sein, daher wird Blog-Post als erstes die Frage „Replace or In-Place“ aufgreifen, die ähnlich alt ist wie „Henne oder Ei“. Als nächstes geht es um den Status des Projekts, bevor ich die Nutzung auf Kommando-Zeile erläutere. Dann ein kleiner Abstecher über Foreman-Upgrades bevor es mit dem Cockpit-Plugin graphisch wird und am Ende das Foreman-Plugin und die Ansible-Rolle das ganze Thema massentauglich machen.

Replace or In-Place?

Vermutlich stand bereits jeder Nutzer mal vor der Frage ob sich ein Upgrade lohnt oder nicht doch besser das System direkt mit der neusten Version des Betriebssystems neu zu installieren ist. Bei ersterem ist der Aufwand natürlich entsprechend geringer, denn man liest sich die Neuerungen durch, achtet dabei auf besondere Hinweise, macht nochmal ein aktuelles Backup (das tun doch hoffentlich alle?), startet das Upgrade, neustartet, lässt die Nacharbeiten laufen, neustartet und erfreut sich eines schönen glänzenden neuen Systems. Zumindest bis man merkt, dass manche Schraube immer noch locker, der Müll auf der Rückbank nicht verschwunden ist, der Motor weiter leckt und falsch eingestellt ist, um einen Autovergleich zu bemühen. Oder in unserem Fall bleibt vielleicht die oder andere Einstellung beibehalten, die sich negativ auswirkt, eine Software-Lösung wird vielleicht nicht durch eine modernere Lösung ersetzt und alles was wir mal ausprobiert haben und danach nie wieder genutzt haben nimmt weiterhin Plattenplatz weg.
Das ist dann auch meist das Argument für die Befürworter von Neuinstallationen statt Upgrades. Ein weiteres war zumindest früher oft das Thema es gibt kein einfaches, geeignetes Werkzeug und der Vorgang ist nicht supportet. So musste man früher für Updates von RHEL immer über die Installationsabbilder gehen, damit auch Änderungen an Einstellungen sowie Software möglich waren, wodurch der Aufwand quasi bis auf das Wiederherstellen von Daten der einer Neuinstallation gleicht. Der alternative Weg über den Packagemanager war oft mit manuellen Nacharbeiten verbunden und absolut nicht durch den Support abgedeckt. Hier setzt Leapp an um einen Mittelweg aus Einfachheit für den Benutzer und der Möglichkeit für Anpassungen durch die Distribution zu finden.

Das Projekt

Das Projekt Leapp hat Red Hat 2017 gestartet und es besteht aus einem Framework und den sogenannten Actors, die die eigentliche Arbeit ausführen. Das erste Mal zum Einsatz kam es dann als Upgrade von RHEL 7 auf 8. Weitere Bekanntheit bekam das Projekt unter dem Namen ELevate, was ein Fork der Actor durch die Distributoren von AlmaLinux ist. Der Fork enthält dann Actors um CentOS Linux 7 auf AlmaLinux OS 8, CentOS Stream 8, EuroLinux 8, Oracle Linux 8 oder Rocky Linux 8 zu aktualisieren. Auch wenn die Intention sicher ein einfacher Wechsel von CentOS zu AlmaLinux war, ist der Open-Source-Gedanke hier mit der zusätzlichen Unterstützung der anderen Distributionen sehr löblich umgesetzt, insbesondere nachdem CentOS selbst die Unterstützung von Leapp ausgeschlossen hatte. Für ein Upgrade von RHEL 8 auf 9 gibt es mittlerweile vom Leapp-Projekt selbst auch Actors, was der Grund für mich war mich erneut mit dem Projekt zu beschäftigen, da bei einem Kunden genau dieses Update ansteht.

Die Kommandozeile

Im Prinzip besteht das Upgrade mit Leapp aus zwei Befehlen leapp preupgrade und leapp upgrade. Davor muss vielleicht noch das Repository eingebunden und die Packages installiert werden. Dazwischen müssen im Bedarfsfall noch weitere Befehle als Remediation für einen Inhibitor ausgeführt werden, sprich erkannte Problem, die einem Upgrade im Weg stehen, behoben werden. Danach müssen vielleicht noch weitere Befehle als Nacharbeit ausgeführt werden.

Wird nun leapp preupgrade ausgeführt, sieht man die ausgeführten Checks durchlaufen und am Ende ungefähr diese Ausgabe:

============================================================
                     UPGRADE INHIBITED            
============================================================

Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Firewalld Configuration AllowZoneDrifting Is Unsupported
Consult the pre-upgrade report for details and possible remediation.

============================================================
                     UPGRADE INHIBITED                  
============================================================


Debug output written to /var/log/leapp/leapp-preupgrade.log

============================================================
                           REPORT
============================================================

A report has been generated at /var/log/leapp/leapp-report.json
A report has been generated at /var/log/leapp/leapp-report.txt

============================================================
                       END OF REPORT        
============================================================

Answerfile has been generated at /var/log/leapp/answerfile

In meinem Fall wurde also ein Inhibitor gefunden und es gibt direkt einen Verweis auf den erstellten Report. Schaut man nun in diesen, findet sich als Remediation der Befehl sed -i s/^AllowZoneDrifting=.*/AllowZoneDrifting=no/\" /etc/firewalld/firewalld.conf, welchen ich einfach ausführen kann. Neben Remediations könnten auch Antworten auf Fragen nach gewisse Optionen beim Upgrade nötig sein. Danach einfach erneut den Preupgrade-Check ausführen und wenn alles erfolgreich behoben ist kann es weiter gehen.

Das eigentliche Update wird dann mit leapp upgrade ausgeführt und man sieht wieder die einzelnen Schritte durchlaufen bis es an den Punkt kommt, dass für die nächsten Schritte ein Neustart benötigt wird. Sobald dieser ausgeführt wird startet das System in einen entsprechend vorbereiteten Boot-Menü-Eintrag und führt die Änderungen durch für die das System nicht aktiv sein darf. Im Anschluss daran startet es erneut neu und führt selbstständig die Abschlussarbeiten beim dann aktualisierten System durch. Sobald dies fertig ist können die manuellen Nacharbeiten aus dem Report durchgeführt werden. Wer auf Nummer sicher gehen will, startet nochmal neu und hat spätestens dann ein aktuelles System.

Foreman-Upgrades

Was das Projekt möglich macht, sieht man daran, dass natürlich verbunden mit entsprechendem Entwicklungsaufwand auch komplexe Upgrades wie bei Foreman realisiert werden können. Die Schwierigkeit beim Upgrade des zugrundeliegenden Betriebssystems von EL (für Enterprise Linux was alle Red Hat Derivate meint) 7 auf 8 ist nicht nur der komplexe Software-Stack von Foreman bzw. Katello, sondern auch der Wechsel zwischen den Packaging-Modellen „Software Collections“ und „Modularity“. Foreman hat von den Software Collections stark Gebrauch gemacht um neuere Versionen benötigter Software nutzen zu können, sei es Ruby als verwendete Programmiersprache oder die PostgreSQL-Datenbank als Backend.
Sogar so stark, dass auch die eigentliche Anwendung in dieser Form ausgeliefert wurde. Beim Upgrade müssen nun also entsprechende Pakete durch ihre normalen Äquivalente ersetzt werden, was wiederum andere Pfade bedeutet, dabei gegebenenfalls auch Versionssprünge berücksichtigt werden und so weiter. Wer hierzu noch mehr Details wissen will, vielleicht weil er das Upgrade seiner eigenen Anwendung auch entsprechend unterstützen will, kann sich gerne den Vortrag „Migrating Foreman/Katello from EL7 to EL8 using LEAPP/ELevate“ von Evgeni Golov anschauen, den er auf der Fosdem 2022 gehalten hat.

Cockpit-Plugin

Zwar ist in meinen Augen auch heutzutage immer noch die Kommandozeile eine adäquate Umgebung für den Administrator (und mir persönlich immer noch die liebste), aber ich verstehe auch den Nutzen von graphischen Werkzeugen wie Cockpit. Sei es als Vereinfachung für jemand der nicht nur Linux-Systeme administriert oder als Option wo möglicherweise kein Zugriff mit SSH auf ein Terminal möglich ist, Cockpit habe ich schon sehr zu schätzen gelernt. Die Plugin-Fähigkeit ist dabei nur noch ein weiterer Pluspunkt und die Installation des Plugins „cockpit-leapp“ bringt uns auch eine Integration von Leapp.
Wurde ein Preupgrade ausgeführt und man greift mit administrativen Rechten auf den Menü-Punkt „Upgrade Report“ zu, erhält man einen graphisch aufbereiteten Report, kann Remediations zu einem Remediation Plan zusammenfassen und ausführen, Fragen beantworten. Das erneute Preupgrade und das eigentlich Update können dann wieder ganz beruhigt über das Terminal (in Cockpit) ausgeführt werden. Danach erhält man wieder einen Report angezeigt, damit man die Nacharbeiten falls nötig durchführen kann.

Cockpit-Leapp: Upgrade Report

Mehr Details finden sich im entsprechenden Abschnitt der RHEL-Upgrade-Dokumentation, aber die Nutzung ist eigentlich so intuitiv, dass es einfach zum Ausprobieren einlädt.

Foreman-Plugin

Etwas komplexer ist dagegen das Foreman-Plugin. Dieses setzt auf dem Plugin für Remote Execution und sowohl den Provider SSH als auch Ansible dafür auf. Hat man diese eh schon im Einsatz und einen SSH-Key für den Zugriff verteilt, reicht aber schon foreman-installer --enable-foreman-plugin-leapp um die Integration zu bekommen. Damit erhält man auf den ersten Blick einfach zwei neue Jobs die man ausführen kann, das bekannte Preupgrade und das Upgrade. Im Detail versteckt sich hier aber noch mehr. Zum einen noch eine Prüfung ob Leapp installiert ist, um die entsprechende Meldung auszugeben. Falls es fehlt lässt es sich mit einem der Standard-Jobs nachinstallieren. Zum anderen erkennt das Modul den ausgeführten Preupgrade-Job, bietet dort einen zusätzlichen Tab zur Darstellung des Reports, Auswahl von anzuwendenden Remediations und die Möglichkeiten diese anzuwenden oder das Upgrade auszuführen.

Foreman-Leapp: Upgrade Report

Der Upgrade-Job kann dann auf Wunsch direkt inklusive Neustart gestartet werden. Wenn nun nach dem Neustart der erste Report eintrudelt, wird das System im Foreman auch gleich als frisches Red Hat 9.0 angezeigt. Leider müssen anfallende Nacharbeiten dann durch einen eigenen Job realisiert werden. Trotzdem ist das Plugin und damit die Option die komplette Umgebung auf einmal zu aktualisieren und transparent graphisch dargestellt zu bekommen ein weiterer Plus-Punkt für Foreman. Wenn jemand noch mehr Details dazu lesen und noch ein paar mehr Screenshots sehen will, dem empfehle ich den Blogpost Leapp Upgrade using Red Hat Satellite 6. Wenn sich jemand erst noch mal mit dem Plugin für Remote Execution allgemein befassen will, will ich auf meinen etwas älteren Blogpost „Orchestration mit Foreman“ zum Einstieg verweisen.

Ansible-Modul

Aber wie gesagt so sehr ich eine graphische Aufbereitung schätze, ich bin auf der Kommandozeile zu hause, darum will ich zum Abschluss noch eine Ansible-Rolle vorstellen. Mit der Rolle leapp von Josh Preston, bekommt man nicht nur Tasks für das Preupgrade und Upgrade, sondern auch alle zusätzlichen Schritte. Leider werden nicht alle Remediations aus dem Report ausgeführt sondern die häufigsten und die Rolle ist aktuell nur für das Upgrade von 7 auf 8 ausgelegt. Aber die Basis ist so gut, dass hier hoffentlich eine Weiterentwicklung und Aktualisierung stattfindet.

Dann könnte wieder mit diesem einfachen Playbook, das Update durchgeführt werden:

---

- name: Perform an in-place upgrade of a EL System
  hosts: all
  become: yes

  vars:
    # Provide a list of repository IDs that exist in /etc/yum.repos.d
    # Default []
    leapp_custom_repositories: []

    # Skip Red Hat Subscription Manager? Default no
    leapp_skip_rhsm: no

    # Skip the validation pre-flight checks? Default no
    leapp_skip_validate: no

    # Skip the prepare tasks? Default no
    leapp_skip_prepare: no

    # Skip cockpit installation? Default no
    leapp_skip_prepare_cockpit_install: no

    # Skip package installation?  Default no
    leapp_skip_prepare_package_install: no

    # Skip actual package updates?  Default yes
    leapp_skip_prepare_update: yes

    # Skip the leapp preupgrade? Default no
    leapp_skip_preupgrade: no

    # Skip removing previous reports?  Defaults no
    leapp_skip_preupgrade_cleanup: no

    # Skip the actual leapp upgrade? Default yes
    leapp_skip_upgrade: yes

    # How long to wait (in seconds) for reboot after upgrade? Default 1200
    leapp_reboot_timeout: 1200

  roles:
    - mrjoshuap.leapp

Fazit

Aufgrund des noch lange vorhanden Supports für RHEL 8 ist ein Upgrade vielleicht noch nicht nötig, aber sobald die ersten Systeme mit RHEL 9 in der eigenen Umgebung laufen wird sich die Frage danach stellen. Mit Leapp hat man eine sehr gute Antwort parat und mit den aufgezeigten Optionen hoffentlich auch für jede Umgebung. Gerne unterstützen wir im Rahmen von Consulting und Betriebsunterstützung auch beim Upgrade oder dem Aufbau von Foreman oder Ansible um Admins die Arbeit zu erleichtern.

Das Beitragsbild kombiniert Boy Thinking of Question by rejon mit den Logos genannter Projekte

Dirk Götz
Dirk Götz
Principal Consultant

Dirk ist Red Hat Spezialist und arbeitet bei NETWAYS im Bereich Consulting für Icinga, Puppet, Ansible, Foreman und andere Systems-Management-Lösungen. Früher war er bei einem Träger der gesetzlichen Rentenversicherung als Senior Administrator beschäftigt und auch für die Ausbildung der Azubis verantwortlich wie nun bei NETWAYS.
Mehr Beiträge zum Thema Automation | Foreman | Ansible

Automate Icinga for Windows with Ansible

This article will cover how to automate the monitoring of your windows infrastructure with Ansible and Icinga for Windows. For that, I developed a new Ansible role which you can find here: https://github.com/DanOPT/ansible-role-ifw The role will allow you to manage...

Ansible Continuous Deployment without AWX/Tower/AAP

Why Ansible? Ansible is a configuration management tool to automate tasks in your IT infrastructure. It offers a rather low barrier of entry, when compared to other tools. A local Ansible installation (i.e. on your machine) with SSH access to the infrastructure you...

Schulungsnotebooks in neuem Gewand

In diesem Jahr konnten wir endlich wieder mehr Vor-Ort Trainings durchführen als in den vergangenen Jahren und sogar vereinzelte Inhouse-Trainings bei Kunden waren möglich. Bisher haben wir bei unseren Präsenztrainings oder auch -workshops auf Notebooks mit CentOS 7...

Ansible – Testing roles with Molecule

Ansible is a widely used and a powerful open-source configuration and deployment management tool. It can be used for simple repetitive daily tasks or complex application deployments, therefore Ansible is able to cover mostly any situation. If used in complex or...