Wir bieten Ihnen für Ubuntu 20.04 sowie für 22.04 eine Desktop Musterlösung, die Sie mit wenigen Mausklicks und ein paar Terminalbefehlen für ihre Schule rasch umsetzen können.

Die Lösung basiert auf Ansible, ein Open-Source Automatisierungs-Werkzeug zur Orchestrierung und allgemeinen Konfiguration und Administration von Computern.

Durch die Verwendung von Ansible ergeben sich viele Vorteile:

  • Der Installationsvorgang und die auf dem Linux-Client durchzuführenden Installationen sind dabei völlig transparent und können klar nachvollzogen werden.
  • Möchten Sie Änderungen an der Installation vornehmen, ist dies jederzeit und sehr einfach möglich, weil der modulare Ansatz, Sie dabei gut unterstützt.
  • Das Aufsetzen eines oder vieler Clients geht sehr schnell, weil die Voraussetzungen und die notwendigen Vorarbeiten sehr gering sind.
  • Auch die geringe Komplexität der Ansible-Konfiguration ist beeindruckend. Die Playbooks erscheinen klar und strukturiert, sie sind selbst dann nachvollziehbar, wenn man mit Ansible noch nicht viel zu tun hatte, also auch für Neulinge gut geeignet.

Voraussetzungen:

Am besten stehen zwei Rechner zur Verfügung. Das können auch zwei virtuelle Maschinen sein. Den ersten Rechner nennen wir Sender, das ist der Rechner auf dem das Ansible-Skript gestartet wird. Den zweiten Rechner nennen wir Empfänger, das ist der Rechner auf dem das Ansible-Skript ausgeführt und die Installation vorgenommen wird. Der Empfänger ist also unsere Linux-Desktop Musterlösung. Für den Empfänger verwende ich eine frisch aufgesetzte 22.04 VM. Der Sender ist mein vorhandener Desktop. Auf beiden Rechnern muss Ansible installiert sein, das ist in den Standard-Repositories von Ubuntu dabei, aber auch bei Debian, Suse, Mint, Redhat,…

Am Empfänger braucht man neben Ansible auch zusätzlich einen SSH-Server. Ansible verbindet sich zum Client via SSH, um dort dann die Installation vornehmen zu können.

sudo apt install openssh-server ansible

Am Sender brauchen wir natürlich auch Ansible und das Programm sshpass, damit sich der Sender am Empfänger via ssh ohne Interaktion des Benutzers einloggen kann. Das Programm git installieren wir auch gleich mit.

sudo apt install ansible sshpass git

Jetzt ist ein guter Zeitpunkt eine Verbindung per ssh vom Sender zum Empfänger aufzubauen. Bitte ersetzen Sie die angeführte IP-Adresse (192.168.0.5) durch die des Empfängers und admin durch den bei der Installation erstellten Benutzer.

ssh admin@192.168.0.5

Wenn Sie zum ersten Mal über SSH eine Verbindung mit dem Empfänger herstellen, werden Sie aufgefordert, die Authentizität der Hosts zu bestätigen, mit denen Sie über Ansible eine Verbindung herstellen. Geben Sie in der Eingabeaufforderung yes ein und drücken Sie dann ENTER zur Bestätigung.

Repository herunterladen

Nachdem jetzt die Voraussetzungen erfüllt sind, können die Ansible-Skripte auf den Sender heruntergeladen werden. Der einfache und schnelle Weg wäre es, folgenden Befehl in der Shell auszuführen.

git clone https://gitlab.com/osos_client/osos_ansible.git

Wer lieber die Skripte für Ubuntu 20.04 verwendet kann anstelle des trunks auch den 20.04 branch clonen.

git clone --branch 20.04 https://gitlab.com/osos_client/osos_ansible.git

Falls Sie git nicht installiert haben – es ist nicht unbedingt notwendig – können Sie die Dateien auch unter folgendem Link herunterladen. https://gitlab.com/osos_client/osos_ansible/-/archive/main/osos_ansible-main.zip
Entpacken Sie das Zip-File und wechseln Sie in den entsprechenden Ordner (osos_ansible).

Änderungen – hosts

Jetzt müssen Sie ein paar Dateien an Ihre Bedürfnisse anpassen. Wir beginnen mit der Datei hosts. Diese Datei enthält verschiedene Abschnitte – EDV1, EDV2, EDV3 für 3 EDV-Säle, und KlassenPC für die KlassenPCs. Für’s erste wird es reichen die IP-Adresse des Empfängers in einen der Abschnitte einzutragen. Die bereits vorhandenen IP-Adressen bitte entfernen.
Im unteren Abschnitt [all:vars] muss eventuell der SSH-Benuterzname (ansible_user) noch angepasst werden.

Änderungen – global_vars.yml

Das Ansible Skript fügt einen neuen Benutzer hinzu (non_admin_user). Hier können wir den Login und das Passwort des neuen Benutzers einstellen. Sollte sich das Passwort in den KlassenPCs von jenem im EDV-Saal unterscheiden, kann hier ein zweites Passwort festgelegt werden. Dies wäre die einzig notwendige Änderung in dieser Datei. Wer ein paar zusätzliche Features haben möchte, kann noch ein paar weitere Adaptierungen vornehmen, die hier kurz erklärt werden.

ansible-pull

Falls Sie Ansible-pull verwenden wollen, dann bitte hier eine eigene Repository-URL eingeben. Ansible-pull wird nach jedem Neustart automatisch auf jedem Empfänger lokal ausgeführt und falls im Repository Änderungen vorliegen, werden diese dann umgesetzt. Damit kann man gewünschte Änderungen später jederzeit und automatisch auf die Clients bringen. Ein Beispiel wäre, dass nach dem Ausrollprozess eine Lehrkraft eine neue Software auf den Klassen-Pcs oder im EDV-Saal braucht, die wir noch nicht installiert haben. Ansible-Pull übernimmt dann die Installation.

Bleibt die URL auskommentiert, wird Ansible-pull auch nicht aktiviert. Mehr zu Ansible-pull etwas später.

rsyncServerURL und rsyncPassword

Auf unseren KlassenPCs gibt es Dateien, die allen Lehrkräften lokal zur Verfügung gestellt werden. Diese Dateien werden zentral auf einem Server eingespielt. Rsync übernimmt die Synchronisation dieser Dateien. Damit können zentral beliebige Dateien eingespielt werden, die dann automatisch nach jedem Reboot auf den Empfänger verteilt werden, falls sie noch nicht vorhanden sind. Damit die Synchronisation auch klappt, muss am Server ein entsprechender rsync-Dienst laufen, ist aber für Ansible nicht relevant. Warum werden diese Daten nicht mit Ansible verteilt. Das hat zwei Gründe. Es handelt sich um sehr viele zum Teil größere Dateien. Das würde die Installationsdauer deutlich verlängern. Es kommt sehr oft zu Änderungen dieser Dateien, vor allem zu Schulbeginn. Die LuL. können selbständig Daten hinzufügen oder ändern und wissen, dass diese dann am Klassenpc auftachen.

firefox_start_page und bookmarks

Wir verwalten Firefox zentral, sodass wir auch später URLs hinzufügen oder löschen können. Die Startseite(n) als auch die Bookmarks werden dann für den neu erstellten Benutzer in Firefox auftauchen. Wollen Sie noch weitere Einstellungen an Firefox vornehmen, dann müssen sie das Policy-File in roles/common/templates/policies.json.j2 anpassen.

Wenn jetzt alle gewünschten Änderungen gespeichert wurden, können wir die Installation vom Sender aus starten.

Ansible ausführen

ansible-playbook main.yml --ask-pass --ask-become-pass --extra-vars "@vars/global_vars.yml"

Wir starten also das playbook main.yml. Der Parameter „–ask-pass“ fragt uns nach dem SSH-Passwort, damit sich Ansible zum Empfänger verbinden kann und „–ask-become-pass“ ist das sudo Passwort, damit Ansible Prozesse als root ausführen kann. Man könnte das Passwort auch als Parameter direkt mitgeben, oder auch in der hosts Datei ablegen. Ansible empfiehlt Passworter verschlüsselt abzulegen. Infos dazu gibt es übrigens hier.

Die Datei main.yml ist relativ klein. Sie führt die zwei Rollen software und common aus und falls der Empfänger aus der Liste der EDV-Säle stammt, wird auch die Rolle cslab ausgeführt. Durch diese Unterscheidung kann man die Empfänger unterschiedlich konfigurieren, abhängig davon, in welche Gruppe sie fallen.

Das zeigt uns auch schon wie unsere Ansible-Struktur grundsätzlich aufgebaut ist. Es gibt Rollen (software, common, cslab) und diese wiederum bestehen aus Tasks. Die drei genannten Tasks haben wiederum ein main.yml, das dann die einzelnen Tasks importiert. Möchte man zum Beispiel eine bestimmte Aufgabe einer Rolle nicht ausführen, würde es reichen den Import im jeweiligen main.yml auszukommentieren.

Ansible zeigt, welche Tasks ausgeführt werden und welche Aufgaben ausgelassen (skipped) werden.

Am Ende sieht man eine kurze Zusammenfassung der Ausführung.

Loggt man sich am Empfänger als Benutzer ein, sieht das dann so aus.

Was kann jetzt diese Musterlösung?

Der erstellte und konfigurierte Client ist unabhängig von irgendwelchen Servern. Er setzt weder einen Samba-, NFS- oder LDAP-Server voraus. Sinnvollerweise gibt es irgendwo im Netz einen DHCP-Server, damit der Rechner eine IP-Adresse bekommt. Das wurde auch bewußt so umgesetzt. Mit geringem Aufwand kann die Lösung so erweitert werden, dass sich der Empfänger gegen einen zentralen LDAP-Server authentifizieren muss.

Der Client bzw. genau genommen der neu angelegte Benutzer ist „selbstheilend“, d.h. alle Änderungen die der Benutzer während des Arbeitens macht, egal ob erstellte Dokumente, Änderungen an der Auflösung/Hintergrundbild, Browser-Cookies… verschwinden nach einem Reboot, also alle Änderungen die innerhalb des Home-Verzeichnisses gemacht werden. Änderungen in anderen Bereichen sind nicht möglich, weil der Benutzer keine Administratorenrechte besitzt.
Möglich macht dies overlay-fs mit einem entsprechenden Eintrag in /etc/fstab, sowie das dazugehörige Skript /usr/local/bin/cleanup-students.sh, das via systemd nach jedem reboot aufgerufen wird. Das garantiert, dass jede Benutzerin/jeder Benutzer immer die gleiche Oberfläche/Struktur vorfindet, unabhängig davon, was eine Person vorher am Rechner gemacht hat. Genauers dazu gibt’s in diesem Blogbeitrag.

Mit dieser Musterlösung kann man auch relativ einfach Laptops aus der Geräteinitiative des 8-Punkte-Plans zentral verwalten, ohne dass für die Schülerinnen und Schüler ein Microsoft/Google/Apple-Account angelegt werden muss. Und nur eine solche Lösung ist 100% DSGVO-konform.
Darüberhinaus ist die Musterlösung transparent für alle Beteiligten. Sinnvolle Adaptierungen, die zum Beispiel andere Schulen gemacht haben, können einfach verglichen und auch in das eigene Repository übernommen werden. Mit MS-Intune oder Google-G-Suite ist ein Vergleich der Konfigurationen zweier Schulen ein Ding der Unmöglichkeit.

Software im Nachhinein installieren – ansible-pull

Wie kann jetzt Software später nachinstalliert werden? Dazu verwenden wir Ansible-pull. Wenn dies, wie oben beschrieben entsprechend eingerichtet wurde, also eine entsprechende URL angegeben wurde, dann ist Ansible-pull am Empfänger aktiv. Wichtig dabei ist, dass es dazu ein eigenes Git-Repository braucht. Ob das auf gitlab, githab oder irgendwo anders liegt ist egal, es muss nur vom Client entsprechend erreichbar sein. Am einfachsten klont man die Musterlösung in ein neues Repository und gibt die korrekte URL in der global_vars.yml an. Ansible-pull kopiert sich dieses Repository dann auf den Client und führt Ansible-pull mit der local.yml Datei aus. Dort finden wir den Eintrag:

- name: ansible-pull tasks
    include_role:
      name: ansible-pull
      tasks_from: main.yml

Es geht also in der ansbile-pull Rolle mit dem main.yml weiter. Dort findet sich folgender Eintrag, der dann htop auf den Clients installiert.

- name: install htop
  apt:
    pkg: htop
    state: present

Wer statt htop ein anderes Paket installieren möchte, braucht nur den Paketnamen ersetzen, oder kopiert die vier Zeilen und ändert dann den Namen des Pakets. Wichtig ist aber, dass dies dann in das Repository wieder eingecheckt wird/werden muss, da sonst Ansible-pull keine Änderungen vorfindet und somit nichts installieren kann.
Natürlich könnte das ganze auch mit Ansible selbst gemacht werden. Das Problem dabei ist aber, dass dazu immer alle Rechner, auf die man jetzt die Änderungen eingespielen möchte, eingeschaltet sein müssen. Das klappt ev. in einem EDV-Saal, aber auf den KlassenPCs verteilt auf mehrere Stockwerke wird das schnell zum Problem. Ansible-pull ist hier die Rettung – Turnschuhadministration war gestern…

Wie geht es weiter?

An unserer Schule ist das die Lösung für mehr als 150 Linux-Clients. Das hat sich seit mehr als 10 Jahren bewährt. Sowohl die Schülerinnen und Schüler als auch die LehrerInnen und Lehrer schätzen es, dass alle Clients immer gleich aussehen und die Einstellungen immer ident sind. Änderungen zentral vornehmen zu können erleichtert mir die Arbeit und ich muss selten einen Rechner persönlich aufsuchen.

Generell empfehle ich nach dem Deployment ein Image zu erstellen, siehe dazu auch unseren Beitrag zu FOG. Damit lässt sich die Installation dann relativ schnell verteilen, vor allem wenn man dazu Multicast nutzt. Ein Saal mit 30 Rechnern ist dann in weniger als 15 Minuten aufgesetzt.

Wir werden das Repository natürlich weiterhin pflegen und freuen uns auch auf Feedback dazu. Im Moment ist 22.04 noch nicht offiziell released, aber zu testzwecken kann man sich schon einen Daily Build herunterladen.

Literatur

https://docs.ansible.com/ansible/latest/user_guide/index.html

https://www.biteno.com/tutorial/ansible-tutorial-einfuehrung/

https://geekflare.com/de/ansible-basics/

https://www.digitalocean.com/community/conceptual_articles/an-introduction-to-configuration-management-with-ansible

https://www.digitalocean.com/community/tutorials/how-to-use-ansible-roles-to-abstract-your-infrastructure-environment

https://www.digitalocean.com/community/cheatsheets/how-to-execute-ansible-playbooks-to-automate-server-setup

Betragsbild: Pixabay


0 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert