Ein extern (z. B. bei Belwü) gehostetes Moodle kann man an die Benutzerverwaltung des LMN-Servers anflanschen. So kann man erreichen:
Das Vorgehen ist bei der LMN 6.2 und der LMN 7 ähnlich, Unterschiede bestehen vor allem bei den Einstellungen.
Im Folgenden werden die Schritte der Reihe nach beschrieben. Dann gibt es noch Tipps zum Feintuning und zur Kurserstellung per CSV-Upload.
Im ersten Schritt richtet man ein, dass man bei der Anmeldung an Moodle seine Benutzerdaten aus der Schule verwenden kann.
Anleitung für die LMN 6.2: Externes Moodle via LDAP gegen LML 6.2 authentifizieren
Anleitung für die LMN 7: https://docs.linuxmuster.net/de/latest/external-services/moodle/index.html.
Bei den Einstellungen Site administration / Plugins / Authentication / LDAP server sind abweichend von den Anleitungen folgende Einstellungen sinnvoll bzw. für das hier beschriebene Vorgehen erforderlich:
LMN 6.2: ou=accounts,dc=schule,dc=lan;ou=groups,dc=schule,dc=lan
(anderenfalls werden die Gruppen nicht gefunden)
LMN 7: ou=teachers,ou=default-school,ou=schools,dc=schule,dc=lan;ou=students,ou=default-school,ou=schools,dc=schule,dc=lan;ou=projects,ou=default-school,ou=schools,dc=schule,dc=lan
(so werden nur SuS, LuL sowie bei den Gruppen die Klassen und Projekte gefunden)
Hier und im Folgenden muss man das „dc=schule,dc=lan“ natürlich an die eigene Schule anpassen.
Damit nicht alle Accounts, sondern nur die von echten Personen gefunden werden, kann man hier einen filter eingeben. Wen dies nicht stört, der kann auch den Standardwert belassen.
LMN 7: user
Bei der LMN 6.2 ist es etwas komplizierter. Man trägt hier einen passenden Filter für ldapsearch ein. Hier ein Beispiel:
(&(|(gidNumber=10000)(gidNumber=10103)(gidNumber=10105))(objectClass=posixAccount))
Was sind das für Werte? Zunächst werden über die Filter mit gidNumber die Suche auf diese gidNumbers beschränkt. 10000 steht für die Lehrer, 10103 ist bei uns die 5a, 10105 die 5b. Diese Werte muss man an seine Installation anpassen und natürlich die Werte für die anderen Klassen ergänzen, sodass der endgültige Filter natürlich deutlich länger ist.
Hierzu zwei Tipps:
Auf dem Server kann man sich diese Gids so ausgeben lassen:
getent group | grep ^[1-9] | cut -d „:“ -f 1,3 | sort
Den Filter kann man so testen:
ldapsearch -x -w "" -H "ldaps://localhost" -b "ou=accounts,dc=schule,dc=lan" "(&(|(gidNumber=10000)(gidNumber=10103)(gidNumber=10105))(objectClass=posixAccount))" cn
Hier sollte eine lange Ausgabe kommen. Zuletzt wird die Zahl der Treffer angezeigt, das sollte die Zahl der echten User sein (LuL, SuS - also Anzahl Zeilen in lehrer.txt und schueler.txt, ggf. extraschueler.txt).
Hier noch ein Beispiel, wie man alle Accounts ausschließen kann, die mit „eltern“ beginnen:
(&(|(gidNumber=10000)(gidNumber=10103)(gidNumber=10105))(!(uid=eltern*))(objectClass=posixAccount))
Diese Option bestimmt, was passiert, wenn ein User nicht mehr in der LDAP-Datenbank zu finden ist:
Keep internal: Der User bleibt in Moodle erhalten (kann sich aber nicht mehr anmelden)
Full delete Internal: Der User wird in Moodle komplett gelöscht
Wir lassen dies während des Schuljahres sicherheitshalber auf „Keep internal“. In den Sommerferien schalten wir nach dem Versetzen um auf löschen, warten, bis die User gelöscht sind (siehe unten), und stellen dann wieder zurück.
Mit den bisherigen Einstellungen werden die User in Moodle erst bei der ersten Anmeldung angelegt. Insbesondere für die unten erklärte Synchronisation mit den globalen Gruppen ist es aber sinnvoll, wenn die User regelmäßig abgeglichen werden und so immer in Moodle verfügbar sind. Dazu dient „LDAP-Sync“.
Auf der Seite Site administration / Server / Tasks / Scheduled tasks sucht man den Task „LDAP users sync job (auth_ldap\task\sync_task)“ und aktiviert ihn in den Einstellungen. Zum Testen stellt man eine Uhrzeit in wenigen Minuten ein, wenn alles läuft, geht man wieder auf den Standard.
Wenn der Task gelaufen ist, sieht man im Log, was passiert ist. Es sollten nun alle User im System vorhanden sein.
Dies ist mit Moodle-Bordmitteln nicht möglich, aber es gibt passende Plugins. Ich empfehle die LDAP syncing scripts (local_ldap).
Für eine differenzierte Auswahl der Gruppen habe ich das Plugin ein wenig erweitert, Grund siehe unten im Abschnitt „Feintuning“. Das erweiterte Plugin gibt es (basierend auf der Version 3.11.1) hier.
Man lädt die Zip-Datei (die originale oder die erweiterte) herunter und packt sie aus. Den Ordner „ldap“ kopiert man in den Ordner „moodle/local/“ im Moodle-Webroot (bei Belwü z. B. mit WinSCP, nach der Anmeldung zu Website-root / moodle / local navigieren.
Nun meldet man sich als Administrator an Moodle an, um die Installation und Erstkonfiguration abzuschließen.
Bei der Erstkonfiguration wird man automatisch nach den Einstellungen gefragt, später findet man sie hier:
Site administration / Plugins / Local plugins / LDAP syncing scripts
Es sind nur wenige Einstellungen vorzunehmen:
Group attribute: cn
Autocreate missing cohorts: Aktivieren
Group class (LMN 6.2): posixGroup
Group class (LMN 7): group
Die Option „Autocreate missing cohorts“ gibt es zweimal, die erste ist die richtige (cohort_synching_ldap_groups_autocreate_cohorts).
Bei der erweiterten Version des Plugins gibt es noch die Option „Group Filter“ – dazu weiter unten mehr.
Das Plugin erledigt seine Arbeit durch einen geplanten Task, den man noch aktivieren muss. Das geht wieder hier:
Site administration / Server / Tasks / Scheduled tasks
Der Task heißt „Synchronize cohorts from LDAP groups“ (Achtung, es gibt einen ganz ähnlichen Task mit „attributes“ statt „groups“!). Wieder wählt man zunächst einen Zeitpunkt in naher Zukunft, und wenn alles läuft, richtet man den Task nach seinen Wünschen ein.
Achtung: Vor dem Aktivieren bitte den Abschnitt „Feintuning“ lesen und gegebenenfalls den „Group filter“ konfigurieren
Achtung: Nicht vergessen, vor dem Starten den Cache zu leeren (siehe obigen Warnhinweis)!
Nun kann man die globalen Gruppen in Kurse einschreiben, Näheres dazu siehe unten.
Wenn man eine globale Gruppe in einen Kurs einschreibt, dann werden die momentanen Mitglieder dieser Gruppe in den Kurs eingeschrieben. Ändert sich später die Zusammensetzung der Gruppe, so ändert dies zunächst nichts an den eingeschriebenen Teilnehmern.
Man kann allerdings die eingeschriebenen Teilnehmer mit den Mitgliedern der globalen Gruppe synchron halten. Dies erledigt „Cohort Sync“.
Site administration / Plugins / Enrolments / Manage enrol plugins
Hier aktiviert man die Einschreibemethode „Cohort sync“ bzw. auf Deutsch „Globale Gruppe“.
Site administration / Plugins / Enrolments / Cohort sync
(Auf Deutsch wieder „Globale Gruppe“)
Hier kann man eine Standardrolle für die Einschreibung zuweisen – sinnvollerweise Schüler/in. Vor allem aber kann man festlegen, was passiert, wenn jemand nicht mehr in einer Globalen Gruppe ist: Hier ist die Option „Disable course enrolment“ (Kurseinschreibung deaktivieren) zu empfehlen, da im anderen Fall sämtliche Aktivitäten des Users gelöscht werden. Mit der empfohlenen Einstellung bleiben sie aber erhalten, und wenn man den Teilnehmer wieder in den Kurs einschreibt, sind sie wieder verfügbar.
Wieder auf dieser Seite:
Site administration / Server / Tasks / Scheduled tasks
aktiviert man den Task „Cohort enrolment sync task“.
Möchte man in einen Kurs z. B. die Klasse 10a einschreiben, so fügt man eine entsprechende Einschreibemethode hinzu.
Man navigiert bei der Kursverwaltung zu den Einschreibemethoden Kurs-Administration / Nutzer/innen / Einschreibemethoden) und wählt „Methode hinzufügen“. Hier wird nun schon „Globale Gruppe“ (englisch: Cohort) angeboten.
Bei den Einstellungen muss man nun die globale Gruppe auswählen. Das Drop-Down-Menü fasst eventuell nicht alle Gruppen, aber wenn man in dem Feld anfängt zu tippen, so wird die Liste entsprechend aktualisiert.
Die anderen Felder belässt man bzw. nimmt Einstellungen nach den eigenen Wünschen vor.
Es sollten nun alle Mitglieder der globalen Gruppe in dem Kurs eingeschrieben sein. Durch Cohort-Sync wird dies synchron gehalten, und durch die LDAP-Syncing-Skripte wird die globale Gruppe mit dem Schulserver abgeglichen.
Vor allem bei der LMN 6.2 stören noch zwei Dinge:
Wir syncen deshalb mit den LDAP-syncing-Skripts nur die Projektgruppen und verwenden für die Klassen ein bei Belwü schon vorinstalliertes Plugin, dass die globalen Gruppen aus Profilfeldern generiert.
Wen dies nicht stört, der kann diesen Abschnitt überspringen.
Hierfür benötigt man die modifizierte Version des Plugins „Ldap syncing scripts“, das eine zusätzliche Option „Group filter“ bereitstellt. Auf der Einstellungsseite:
Site administration / Plugins / Local plugins / LDAP syncing scripts
ergänzt man folgende Option:
Group filter: (cn=p_*)
Dieser Filter sorgt dafür, dass nur noch die Projektgruppen übernommen werden. Selbstverständlich kann man auch eigene LDAP-Filter angeben.
Und nicht vergessen: Vor dem Testen den Moodle-Cache leeren!
Hierzu verwenden wir das Plugin "Profile field based cohort membership (local_profilecohort)". Mit diesem Plugin ist es möglich, Moodle-User anhand eines Profilfeldes in globale Gruppen einzutragen.
Das Plugin ist bei Belwü schon installiert, ansonsten lädt man es herunter und installiert es genau so wie oben für das Plugin local_ldap beschrieben.
Vorab muss man dafür sorgen, dass jeder User in seinem Profil irgendwo seine Klasse stehen hat. Dies stellt man bei der Konfiguration der LDAP-Authentifizierung ein:
Site administration / Plugins / Authentication / LDAP server
Ganz unten auf der Seite im Abschnitt „Data mapping“ kann man ein Profilfeld mit dem Homeverzeichnis befüllen. Bei Belwü kann man dazu das Feld „Klasse/Lerngruppe“ nutzen, bei anderen Installationen legt man vorher ein entsprechendes benutzerdefiniertes Profilfeld an:
Data mapping (Klasse/Lerngruppe): sophomorixAdminClass (LMN 7) oder homeDirectory (LMN 6.2)
Update local (Klasse/Lerngruppe): On every login
Update external (Klasse/Lerngruppe): Never
Lock value (Klasse/Lerngruppe): Locked
Nun wird bei jeder Anmeldung das Homeverzeichnis der User in dieses Feld geschrieben. Das passiert auch gleich für alle User, wenn man wie oben beschrieben LDAP-Sync aktiviert hat, aber nur, wenn man jetzt den Moodle-Cache leert.
Die globalen Gruppen muss man hier händisch anlegen. Das geht auf dieser Seite:
Site administration / Users / Accounts / Cohorts
(auf Deutsch wieder „Globale Gruppe“ statt „Cohorts“)
Bei „Add new Cohort“ legt man eine Gruppe für jede Klasse (5a, 5b, …) und eine für die Lehrer an. Die Namen sind frei wählbar, man kann also tatsächlich z. B. „Lehrer/innen“ statt „teachers“ nehmen.
Außer dem Namen der Gruppe muss man nichts angeben.
Man navigiert zur Plugin-Übersicht:
Site administration / Plugins / Plugins overview
und aktiviert das Plugin „Profile field based cohort membership (local_profilecohort)“ – bei unserem Belwü-Moolde fast ganz unten auf der Seite.
Die Konfigurationsseite des Plugins befindet sich hier:
Site administration / Users / Accounts / Profile field based cohort membership
Zunächst wäht man bei „Select cohorts to be managed“ alle Klassengruppen und die Gruppe für die Lehrer/innen aus.
Bei „Add new rule“ legt man dann für jeder Klasse und die Lehrergruppe eine Regel nach folgendem Schema an:
„If Klasse/Lerngruppe Contains 5a the user will be added to cohort 5a“
Die Zuordnung geschieht sofort bzw. bei der Anmeldung, trotzdem muss man einen geplanten Task aktivieren. Das geht wieder hier:
Site administration / Server / Tasks / Scheduled tasks
Und der Task heißt „Update cohorts from custom user profile fields“. Man aktiviert den Task und belässt ansonsten die Einstellungen.
Viele Kurse kann man in einem Rutsch per CSV-Upload anlegen (offizielle Dokumentation). Das geht hier:
Site administration / Courses / Upload courses
Eine solche Datei könnte z. B. so aussehen:
category_idnumber,shortname,fullname,format Klassen,9aMathe,9a Mathematik,weeks Klassen,9aBio,9a Biologie,weeks
Die „category_idnumber“ kann man bei den Einstellungen der Kurskategorien vorgeben – es muss keine Zahl sein.
Leider kann man nicht gleich die Klasse 9a einschreiben (dafür gäbe es aber wieder ein Plugin).
Die Kurse haben noch keine Lehrer/innen. Das kann man aber nachholen:
Möchte man bestehenden Kursen einen oder mehrere Lehrer/innen zuordnen, so legt man eine CSV-Datei nach folhendem Format an:
username,course1,type1 mueller,9aMathe,2 mueller,9aBio,2
Wie man sieht kann man denselben Usernamen mehrfach auflisten. Alternativ könnte man auch Spalten „course2,type2,course3,type3…“ ergänzen.
Der Typ ist immer eine 2 – das steht für Lehrer/in.
Diese CSV-Datei lädt man hier hoch:
Site administration / Users / Accounts / Upload users
Etwas verwirren: der Button „Upload Users“ führt erst zu einer Preview-Seite. Hier muss man noch einstellen:
Upload type: Update existing useres only
Die Parameter für die LDAP-Konfiguration kann man gut mit dem Tool ldapsearch
testen. Eine für die LMN angepasste Anleitung findet sich hier.
Beim Upgrade von Moodle auf eine neuere Version ist eine erneute Installation des Plugins erforderlich. Dazu kopiert man einfach den Ordner „ldap“ wieder nach „moodle/local“, anschließend meldet man sich als Administrator an, worauf die Datenbank aktualisiert wird. Die Einstellungen bleiben dabei erhalten.
Bei Belwü findet man nach einem Upgrade im Ordner „Website root“ ein Verzeichnis „moodle_old“, das ist die alte Moodle-Installation – bei Bedarf kann man sich hier schnell den Ordner „ldap“ herkopieren.