Neue Pakete für 7.4: linuxmuster-tools7 7.4.16, linuxmuster-api7 7.4.13, linuxmuster-webui7 7.4.12 und linuxmuster-cli7 7.4.9
Hallo zusammen,
soeben sind vier Pakete für die 7.4 veröffentlicht worden. Schwerpunkt ist diesmal die API: Host-Keys lassen sich auf einzelne Endpunkte einschränken, das Rate-Limit der Anmeldung ist konfigurierbar, und die LINBO-Verwaltung ist an mehreren Stellen erweitert worden.
Neue Funktionen
API-Schlüssel lassen sich auf einzelne Endpunkte einschränken
Bisher erreichte ein Host-Key immer die gesamte API mit den Rechten des hinterlegten Benutzers. In linuxmuster-webui7 (Einstellungen → Api Keys) kann jetzt pro Schlüssel ein Scope hinterlegt werden, also eine Liste von Endpunkten in der Form GET /linbo/hosts/*/status. * steht für genau ein Pfadsegment, ** für den Rest des Pfades, und die Methode darf ebenfalls * sein. Ohne Scope bleibt alles wie bisher. Ein Scope schränkt nur ein — die Rolle des hinterlegten Benutzers wird weiterhin geprüft. Einträge, die auf keine Route passen, werden beim Start von linuxmuster-api7 als Warnung protokolliert; dabei auf den abschließenden Schrägstrich achten, /users und /users/ sind nicht derselbe Pfad.
Kleiner persönnlicher Beispiel: in meinem AG IT-Sanitäter möchte ich dass die Helfer Zugang auf die letzte Synchronisation eines Computers haben (dafür habe ich angefangen eine kleine Django App zu bauen). Aber die Rechte von einem Host_Key als Admin will ich nicht geben, das wäre zu breit und zu gefährlich. Mit diesem „scoping“ ist es nun möglich (die Django App wird nur den Endpunkt /linbo/hosts/{hostname}/status erreichen können).
Die Schlüssel werden nur beim Start der API gelesen. linuxmuster-webui7 startet den Dienst nach jeder Änderung neu und meldet jetzt auch, wenn das nicht geklappt hat — bis dahin ist die gerade gespeicherte Änderung nicht aktiv.
Rate-Limit der Anmeldung konfigurierbar
GET /v1/auth/ war fest auf 5 Anfragen pro 60 Sekunden begrenzt, gezählt pro Client-Adresse. Eine Oberfläche, die alle ihre Benutzer von einer einzigen Adresse aus anmeldet, hatte dieses Kontingent nach fünf Anmeldungen aufgebraucht: alle weiteren bekamen 429 und wurden wieder abgemeldet. Über den neuen Abschnitt rate_limit in der config.yml lassen sich jetzt Anzahl, Zeitfenster und eine Whitelist von Adressen setzen, requests: 0 schaltet die Begrenzung ganz ab. Aufrufe vom Server selbst werden weiterhin nicht gezählt. Danke an @Pasemesan für die genaue Beschreibung (Issue #41).
LINBO: VDI-Konfiguration, start.conf-Sicherungen, ISO und Beispiele über die API
Die API kann jetzt auch das, was der Server ohnehin schon vorhält:
- die VDI-Konfiguration einer Gruppe (
start.conf.<gruppe>.vdi) lesen, schreiben und löschen (Issue #38)
- die vorhandenen start.conf-Sicherungen auflisten, zurückspielen und löschen; vor dem Zurückspielen wird die aktuelle Datei gesichert, ein Restore lässt sich also selbst wieder rückgängig machen
linbo.iso herunterladen sowie die mitgelieferten Beispielkonfigurationen aus /srv/linbo/examples auflisten und lesen (Issue #39)
Danke an @TomlDev für die Vorschläge.
LINBO-Routen für Schuladministratoren
Die LINBO-Routen waren global-admin-only, obwohl die Schulkonsole Schuladministratoren seit jeher dieselben Möglichkeiten gibt. Sie stehen jetzt auch Schuladministratoren offen. Routen, die auf Geräte wirken (WOL, Boot-Logs), werden dabei über die devices.csv auf die eigene Schule gefiltert. Die Dateien unter /srv/linbo kennen dagegen keine Schule — dort gilt weiterhin ein serverweiter Bestand, und jeder kritische Endpunkt sagt das in seiner Beschreibung auch. Eine echte schulweise Trennung der LINBO-Dateien ist separat geplant. Nur /server-info bleibt global-admin-only. Danke an @TomlDev (Issue #37).
lmncli linbo lastsync filtert nach Status
lmncli linbo lastsync kennt jetzt -w/--warning und -d/--danger und zeigt dann nur die Geräte im jeweiligen Zustand an (gelb: seit mehr als 7 Tagen nicht synchronisiert, rot: nie oder seit mehr als 30 Tagen). Ein Gerät bleibt in der Liste, sobald eines seiner Images passt; die übrigen Images werden zum Vergleich weiterhin mit angezeigt.
Behobene Fehler
Nach dem Umbenennen oder Duplizieren eines Images fehlte der Torrent
Ein Torrent enthält den Dateinamen, den er ausliefert, und die .hash-Datei beschreibt diesen Torrent: beide überstehen eine Umbenennung nicht. Bisher wurden sie gelöscht und nicht wieder erzeugt, sodass für das umbenannte Image kein Torrent mehr zur Verfügung stand. Jetzt werden beide nach dem Umbenennen oder Duplizieren im Hintergrund über linbo-torrent create neu gebaut — im Hintergrund, weil der Aufbau bei einem großen Image Minuten dauert. Die Image-Liste zeigt zusätzlich an, ob die Torrent-Datei vorhanden ist. Danke an @TomlDev (Issue #30).
configobj fehlte nach Installation oder Upgrade
Die Python-Abhängigkeiten von linuxmuster-tools7 standen in einer requirements.txt, die per pip in das venv unter /opt/linuxmuster installiert wurde. In einem venv mit --system-site-packages installiert pip aber nichts, was das System schon erfüllt — die Datei hat also nie garantiert, dass ein Paket wirklich vorhanden ist. configobj, jinja2, python-ldap, magic, pexpect und pyyaml sind jetzt reguläre apt-Abhängigkeiten des Pakets. Danke an @HappyBasher (Issue #32).
Nach einem Python-Upgrade importierte das venv nichts mehr
Ein venv schreibt seine Python-Version einmal in die pyvenv.cfg und aktualisiert sie nie, während bin/python3 dem System zur nächsten Version folgt. Nach einem Ubuntu-Upgrade liegt damit alles, was pip je installiert hat, in einem verwaisten site-packages außerhalb des Suchpfads: das venv sieht gesund aus und importiert nichts. linuxmuster-tools7 erkennt das jetzt und baut das venv neu auf; über einen neuen dpkg-Trigger installieren linuxmuster-api7, linuxmuster-cli7 und linuxmuster-webui7 anschließend ihre eigenen Anforderungen nach.
Systemweit installiertes Ajenti verdeckte die Kopie im venv
pip überspringt in einem venv mit --system-site-packages jede Anforderung, die das System schon erfüllt, auch eine mit fester Version. Eine systemweit installierte Ajenti-Kopie sorgte deshalb dafür, dass das venv nie eine eigene bekam und kein Update sie je erreicht hätte. linuxmuster-webui7 entfernt sie bei Installation und Upgrade.
Änderung an der API
Die Routen /v1/linbo/startconfs* und /v1/linbo/configs nehmen keinen Parameter school mehr entgegen: group_id adressiert einen serverweiten Bestand, der Parameter wurde nur geprüft und nie verwendet. Wer ihn weiterhin mitschickt, muss nichts ändern — er wird ignoriert.
Versionen
| Paket |
Version |
| linuxmuster-tools7 |
7.4.16 |
| linuxmuster-api7 |
7.4.13 |
| linuxmuster-webui7 |
7.4.12 |
| linuxmuster-cli7 |
7.4.9 |
Rückmeldungen wie immer gerne hier im Forum oder als Issue auf GitHub.
Gruß
Arnaud