Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[entwicklung:techsheets:sophomorix4_interna]] 

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
entwicklung:techsheets:sophomorix4_interna [2017/06/10 16:21]
jeffbeck [Hierarchie bei sophomorix-repair]
entwicklung:techsheets:sophomorix4_interna [2018/02/01 11:49] (aktuell)
jeffbeck
Zeile 1: Zeile 1:
 +{{tag> }}
  
 +
 +
 +
 +====== Sophomorix4 Interna ======
 +
 +
 +
 +===== Workflow sophomorix Datenabgleich bei den Usern =====
 +
 +In folgenden Schritten wird eine Exportieren Datei des Schulverwaltungsprogramms mit ''​sophomorix''​ ins AD eingepflegt:​
 +
 +==== Schritt 1A) Export-Datei auf den Server bringen (Cyanfarben in der Abbildung)====
 +
 +3  Mögliche Wege (von oben nach unten)
 +
 +  - Mit Webui hochladen + Human-Filter der Schulkonsole nutzen
 +    * Wenn noch Korrekturen in der Spaltenreihenfolge bzw. Spalten ausgewählt werden müssen  ​
 +    * Schulkonsole macht folgendes:
 +      * Lädt Datei von lokalen Rechner ins RAM
 +      * Human Filter anwenden:
 +        * Die Felder wählen, die sophomorix braucht
 +          * Klasse, Nachname, Vorname, Geburtsdatum und Unid(optional),​ Wunschlogin(optional)
 +        * Custom-Felder Wählen, die sophomorix (in Zukunft( kennt (Schuhgröße,​ ...)
 +        * Reihenfolge der Felder tauschen so dass es passt.
 +        * KEIN Editieren der Namen (Problem: in welchem Encoding wird gespeichert)
 +        * KEIN Zeilen löschen (bzw. auskommentieren)???​
 +      * Temporäres speichern der Datei unter korrektem Namen schule.students.csv (irgendwo)
 +      * Aufruf von ''​sophomorix-newfile schule.students.csv''​ (siehe nächster Schritt 1B)
 +  - Mit Webui hochladen
 +    * Schulkonsole macht folgendes:
 +      * Temporäres speichern der Datei unter korrektem Namen schule.students.csv (irgendwo)
 +      * Aufruf von ''​sophomorix-newfile schule.students.csv''​ (siehe nächster Schritt 1B)
 +  - Konsole: Kopieren der Datei mit z.B. ''​scp''​
 +    * Irgendwo temporär auf den Server legen unter korrektem Namen
 +    * Von Hand: Aufruf von ''​sophomorix-newfile schule.students.csv''​ (siehe nächster Schritt 1B)
 +
 +Nun liegt die Exportdatei irgendwo auf dem Server.
 +
 +==== Schritt 1B) Neue Datei registrieren (Magentafarben in der Abbildung)====
 +
 +Die Schulkonsole macht diesen Schritt zusammen mit Schritt 1A)
 +
 +Die Datei wird nach /​etc/​linuxmuster/​sophomorix gebracht
 +
 +  # shophomorix-newfile school.students.csv
 +  # sophomorix-newfile ​ --file school.students.csv irgendwas.txt
 +  # sophomorix-newfile --filter-only school.students.csv ​           (show filtered file in stdout)
 +
 +Dabei geschieht folgendes:
 +
 +  * Die zu überschreibende Datei in /etc wird weggeloggt, (falls sie nicht mit der neuesten im log übereinstimmt)
 +    * /​var/​log/​sophomorix/​etcfiles/​school ​   -> Sicherung der korrekten Dateien (aktiv bis Datum) ​
 +  * Die Datei wird mit dem Filterscript gefiltert(falls konfiguriert),​ oder einfach nur kopiert
 +  * Am Namen ''​school.students.csv''​ erkennt sophomorix, wohin nach ''/​etc/​linuxmuster/​sophomorix/​schools''​ die Datei kopiert werden muss
 +  * Datei wird Archiviert nach ''/​var/​log/​sophomorix/​newfiles''​ mit Name ''​Date_time_school.students.csv''​
 +    * /​var/​log/​sophomorix/​newfiles/​school ​   -> die unkorrigierten hochgeladnen Dateien, datum wie bei etcfiles
 +  * Datei wird dort wohin sie hochgeladen wurde entfernt.
 +  * Evtl. wird noch das Encoding ermittelt und in einem eigenen Extended file attribute gespeichert.
 +
 +
 +Nun liegt die Datei in ''/​etc/​linuxmuster/​sophomorix/​schools''​ mit passendem Namen in der passenden Schule. In der Datei sind:
 +
 +  * Felderreihenfolge OK
 +  * Felder-Anzahl OK
 +
 +
 +Schulen, die selten eine Exportdatei aus dem Schulverwaltungsprogramm bekommen, können nun unter ''/​etc''​ die Schülerdateine mit dem Schulkonsolen-Editor pflegen:
 +
 +  * Einzelne Schüler dazu
 +  * Einzelne Schüler entfernen
 +  * Namenskorrekturen
 +  * ??? Wie erkennt der Schulkonsolen-Editor das Encoding für Namensänderungen??? ​ (sophomorix-check nutzen???)
 +    * Idee:
 +      * sophomorix-newfile analisert das encoding und speichert es in einem erweiterten Filesystemattribut
 +        * Das wird tatsächlich so genutzt nach: https://​en.wikipedia.org/​wiki/​Extended_file_attributes ​
 +      * Beim Editieren weiß die Schulkonsole dann das Encoding und behält es bei  ​
 +  * usw.
 +
 +==== Schritt 2) sophomorix-check ====
 +
 +Änderungensdateien werden erzeugt mit:
 +
 +# sophomorix-check
 +
 +Dabei werden:
 +
 +  * Alle User und weitere relevante Daten aus dem AD gelesen ins RAM.
 +  * Alle Userdateien unter ''/​etc''​ nach UTF8 umcodiert und Plausibilitätstests unterzogen und im RAM gespeichert
 +  * Ein Datenabgleich gemacht, der vorhandene User mir anzulegende zusammenführt
 +  * Veränderungen an einem User werden in ''​sophomorix.update''​ gespeichert
 +  * Bei Versetzung wird zusätzlich ''​sophomorix.move''​ erzeugt
 +  * Neue User sind in ''​sophomorix.move''​ gespeichert
 +  * User die zu löschen sind, kommen nach ''​sophomorix.move''​
 +  * Am AD ändert ''​sophomorix-check''​ NICHTS.
 +
 +
 +==== Schritt 3) System anpassen (AD, Filesystem, ...)====
 +
 +Mit folgenden Befehlen wird das AD aktualisiert:​
 +
 +  * ''​sophomorix-update''​ spielt die Änderungen aus ''​sophomorix.update''​ ein
 +  * ''​sophomorix-move''​ versetzt die User aus ''​sophomorix.move''​ in andere Klassen bzw. andere Schulen
 +  * ''​sophomorix-add''​ legt die user aus ''​sophomorix.add''​ an
 +  * ''​sophomorix-kill''​ entfernt die User aus ''​sophomorix.kill''​ dauerhaft aus dem System
 +
 +
 +Die Abbildung zeigt den Workflow (seit 13.1.2017)
 +
 +{{:​entwicklung:​techsheets:​workflow.png|}}
 +
 +==== Typische Szenarien ====
 +
 +=== Szenario 1: Jedes Schuljahr bekommt man eine Schülerdatei ===
 +
 +Zum Schuljahresbeginn:​
 +
 +  * Schritt 1 A und B: Hochladen mit webui und Felderreihenfolge prüfen, speichern unter /etc
 +  * sophomorix-check
 +  * update,​move,​add,​kill
 +
 +Während des Schuljahres:​
 +
 +  * Editieren mit dem Editor in /etc während des Schuljahres
 +  * sophomorix-check
 +  * update,​move,​add,​kill
 +
 +
 +=== Szenario 2: Häufige Userliste aus dem Schulverwaltungsprogramm ===
 +
 +Konsole (Scriptbar):​
 +
 +  * scp ..... auf Server
 +  * sophomorix-newfile students.csv (wendet Filter an)
 +  * sophomorix-check
 +  * update,​move,​add,​kill
 +
 +Webui:
 +
 +  * Hochladen mit webui (wendet Filter an)
 +  * sophomorix-check
 +  * update,​move,​add,​kill
 +
 +
 +===== Ziele =====
 +
 +  * (komplexe oder sagar alle) LDAP abfragen sollten sophomorix überlassen werden
 +    * damit zeigt sophomorix, schulkonsole(n) usw. IMMER dieselben user/​projekte/​gruppen,​ ... an
 +  * andere programme kommen an diese Daten indem sie sohomorix mit der option ''​--porcelain''​ aufrufen, die eine kommaseparierte Liste der Abfrage-Ergebnisse zurückgibt
 +
 +
 +
 +===== User Status =====
 +
 +verschoben ins sophomorix4.wiki auf github
 +
 +
 +
 +===== sophomorix-repair und NTACL'​s =====
 +
 +==== Grundlagen ====
 +
 +
 +
 +Alle Owner,​permissions,​ NTACL'​s sind nur an einer Stelle Konfiguruiert.
 +
 +Sie werden beim anlegen eines Objektes hierarchisch ausgeführt.
 +
 +
 +==== Hierarchie bei sophomorix-repair ====
 +
 +{{:​entwicklung:​techsheets:​repdir-hierarchy.png|Hierachie bei der Dateisystem-Reparatur}}
 +
 +
 +
 +Die Grafik zeigt folgendes:
 +
 +  * ''​--school'':​ Bereich des Dateibaums der Schule mit Hilfe der Konfigurationsdatei ''​repdir.school''​
 +    * Beim Erstellen eine Schule wird - außer Einträgen im AD - der entsprechende (hellrote) Dateibaum erstellt ​
 +    * ''​repdir.school''​ beinhaltet:
 +       * Verzeichnisse,​ die erstellt werden müssen, wenn eine Schule erstellt wird (1 Verzeichnis pro Zeile)
 +       * Evtl. je Verzeichnis ein Dateiname für eine NTACL: z.B. wird beim Erstellen des Verzeichnisses ''/​srv/​samba/​schools/​bsz/​students''​ die NTACL ''​students.ntacl''​.template benutzt.  ​
 +  * ''​--teacherclass'':​ Bereich des Dateibaums der Lehrer mit Hilfe der Konfigurationsdatei ''​repdir.teacherclass'' ​
 +    *  Beim Erstellen der Lehrergruppe wird - außer Einträgen im AD - der entsprechende (dunkelgrüne) Dateibaum erstellt ​
 +  * ''​--teacher-home'':​ Bereich des Dateibaums eines Lehrers mit Hilfe der Konfigurationsdatei ''​repdir.teacher_home'' ​
 +    * Beim Erstellen eines Lehrers wird - außer Einträgen im AD - der entsprechende (dunkelviolette) Dateibaum erstellt
 +  * ''​--adminclass'':​ Bereich des Dateibaums einer Schülerklasse mit Hilfe der Konfigurationsdatei ''​repdir.adminclass''​
 +    * Beim Erstellen einer Klasse wird - außer Einträgen im AD - der entsprechende (dunkelrote) Dateibaum erstellt
 +  * ''​--student-home'':​ Bereich des Dateibaums einer Schülerin mit Hilfe der Konfigurationsdatei ''​repdir.student_home''​
 +    * Beim Erstellen einer Schülerin wird - außer Einträgen im AD - der entsprechende (magentafarbene) Dateibaum erstellt
 +
 +Beispiel:
 +
 +Anlegen einer Schülerin ''​hanna''​ in der Klasse ''​7a''​ in der Schule ''​abc'':​
 +
 +  - Anlegen der Schule ''​abc''​ (AD und Dateibaum)
 +  - Anlegen der Klasse ''​7a''​ (AD und Dateibaum)
 +  - Anlegen der Schülerin ''​hanna''​ (AD und Dateibaum)
 +  ​
 +===== users_file hash in sophomorix-check=====
 +
 +aus alles users in allen files wird diese hash aufgabaut
 +
 +Struktur:
 +
 +  file -> <​filename>​ -> identifier_list -> <​identifier1>,<​identifier2>,​ ...
 +  ​
 +  identifier -> <​identifier>​ -> BIRTHDATE => 12.09.1997
 +                                CLASS     => m1kk1t
 +                                ...
 +
 +
 +===== Alles aus ldap lesen hash =====
 +
 +Idee:
 +
 +  * Alle ldap abfragen werden mit einer zentralen funktion durchgeführt (''​AD_get_AD''​):​
 +    * diese Abfragedaten landen in dem Hash ''​%AD''​
 +
 +
 +
 +==== Struktur des Hashs ====
 +
 +
 +  %AD
 +    --> objectclass --> user         ​-->​ examaccount ​             --> <​examaccount> ​  -> name1|name2|name3,​ ...  --> ATTRIBUT->​ WERT
 +                    --> user         ​-->​ student ​                 ---> <​uidname> ​       -> data
 +                    --> group        --> room                     ​-->​ <​room> ​         ...
 +                    --> group        --> admins ​                  ​-->​ <​*-admins> ​     ...
 +                    --> group        --> internetaccess ​          ​-->​ <​*-internet> ​   ...
 +                    --> group        --> wifiaccess ​              ​-->​ <​*-wifi> ​       ...
 +                    --> dnsNode ​     --> sophomorixdnsNode ​       --> <​node> ​         ...
 +                    --> dnsZone ​     --> sophomorixdnsZone ​       --> <​zone> ​         ...
 +                    --> computer ​    ​-->​ computer ​                ​-->​ <​computer> ​     ...
 +  ​
 +  ​
 +   ​-->​ lookup ​      ​-->​ user_by_unid ​              ​-->​ <​unid> ​             --> <​uidname> ​   (Key-> Value, um in objectclass Daten zu finden)
 +                    --> identifier_ascii_by_unid ​  ​-->​ <​unid> ​             --> identifier_ascii
 +                    --> identifier_utf8_by_unid ​   --> <​unid> ​             --> identifier_utf8
 +                    --> user_by_identifier_ascii ​  ​-->​ <​identifier_ascii> ​ --> <​uidname>​
 +                    --> user_by_identifier_utf8 ​   --> <​identifier_utf8> ​  ​-->​ <​uidname> ​
 +                    --> status_by_identifier_ascii --> <​identifier_ascii> ​ --> <​status>​
 +                    --> status_by_identifier_utf8 ​ --> <​identifier_utf8> ​  ​-->​ <​status> ​
 +                    --> role_by_user ​              ​-->​ <​uidname> ​          ​-->​ <​role> ​  
 +   
 +   ​-->​ lists        --> by_school ​                 --> <​school> ​           --> users_by_group ​ --> <​group>​ --> <​user1>,<​user2>,​ ...
 +                                                                           ​-->​ users_by_type ​  ​-->​ <​type> ​ --> <​user1>,<​user2>,​ ...
 +                                                                           ​-->​ users_by_role ​  ​-->​ <​role> ​ --> <​user1>,<​user2>,​ ...
 +                                                                           ​-->​ groups_by_type ​ --> <​type> ​ --> <​group1>,<​group2>,​ ...
 +                                                                           ​-->​ groups_by_role ​ --> <​role> ​ --> <​group1>,<​group2>,​ ...
 +  ​
 +   ​-->​ result ​      ​-->​ user --> examaccount --> COUNT -> x   (je Objektklasse,​ für Überblickanzeigen,​ wieviele user gibts, .....
 +                    --> group  ​
 +  ​
 +   ​-->​ sam          --> <sam>
 +
 +Funktion %porcelain(hashref auf AD%, Attribute) gibt alle Ergebnisobjekte aus (alle, eins je Zeile, unsortiert)
 +
 +  * zuerst alles ausgeben (jedes attribut, bzw. im Quellcode angegebene),​ später aus performancegründen limitert (ist das überhaupt notwendig?)
 +  * sortierung wirklich weglassen (erspart viele sortieroptionen)
 +
 +===== config hash =====
 +
 +  %sophomorix_config
 +   
 +   ​GLOBAL ​          -> globale Einstellungen (Server Betreffend)
 +   ​SCHOOLS ​         -> default-school
 +                    -> <​schulname>​
 +                    -> ...
 +   ​SUB_OU ​          -> Anzulegende OU's unterhalb der Schule
 +   ​FILES ​           -> CLASS_FILE ​  -> <​filename>​
 +                    -> DEVICE_FILE ​ -> <​filename>​
 +                    -> USER_FILE ​   -> <​filename>​
 +   ​LISTS ​           -> SCHOOLS -> liste der Schulen
 +   ​ROLES ​           -> Einstellungen aus school.conf für Rollen
 +   ​MANAGEMENTGROUPS -> Einstellungen zur Zusammensetzung von Managementgroups
 +   ​REPDIR_FILES ​    -> repair directory configuration files
 +   ​samba ​           -> smb.conf ​ -> Parameter smb.conf
 +                    -> from_smb.conf -> Abgeleitete Parameter, z,B. "​DomainDNS"​ : "​DC=linuxmuster,​DC=local"​
 +                    -> net_conf_list -> Ausgabe von net conf list
 +                    -> domain_passwordsettings -> Ausgabe von samba-tool domain passwordsettings show
 [[entwicklung:techsheets:sophomorix4_interna]] entwicklung/techsheets/sophomorix4_interna.txt · Zuletzt geändert: 2018/02/01 11:49 von jeffbeck