Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
satellite:generisches_modul [2016/09/12 14:55 CEST] – angelegt simonsatellite:generisches_modul [2020/08/05 16:02 CEST] sritter
Zeile 1: Zeile 1:
-====== Generisches Modul ======+====== Generisches Modul / Konfigmodul ======
  
 'Generische Module' ermöglichen es, beliebige Dateien in das Linux-Grundsystem der Clients einzubringen bzw. vorhandene Dateien zu überschreiben. Notwendig ist dies, wenn Sie z.B. spezielle iptables-Regeln, Druckkonfigurationen oder ähnliche Anpassungen innerhalb des Grundsystems vornehmen möchten.  'Generische Module' ermöglichen es, beliebige Dateien in das Linux-Grundsystem der Clients einzubringen bzw. vorhandene Dateien zu überschreiben. Notwendig ist dies, wenn Sie z.B. spezielle iptables-Regeln, Druckkonfigurationen oder ähnliche Anpassungen innerhalb des Grundsystems vornehmen möchten. 
Zeile 5: Zeile 5:
 Um Generische Module anzulegen sind folgende Schritte nötig: Um Generische Module anzulegen sind folgende Schritte nötig:
  
-===== 1. Archiv vorbereiten =====+===== 1. Archiv erzeugen =====
  
 Legen Sie ein Archiv an, dessen gegebene Verzeichnisstruktur eins zu eins in das gebootete Linux extrahiert wird - eine im Archiv enthaltene Datei etc/beispiel.conf wird im gebooteten System also auch unter /etc/beispiel.conf erscheinen.   Legen Sie ein Archiv an, dessen gegebene Verzeichnisstruktur eins zu eins in das gebootete Linux extrahiert wird - eine im Archiv enthaltene Datei etc/beispiel.conf wird im gebooteten System also auch unter /etc/beispiel.conf erscheinen.  
Zeile 11: Zeile 11:
 Fangen Sie zunächst mit der nötigen Ordnerhierarchie für unser Beispiel an: Fangen Sie zunächst mit der nötigen Ordnerhierarchie für unser Beispiel an:
 <code bash> <code bash>
-mkdir -p ~/generic_module/etc/ +mkdir -p ~/gen_modul/etc/ 
-cd ~/generic_module/etc/+cd ~/gen_modul/etc/
 </code> </code>
  
Zeile 24: Zeile 24:
 Wechseln Sie dann in das von Ihnen angelegte Verzeichnis ~/generic_module: Wechseln Sie dann in das von Ihnen angelegte Verzeichnis ~/generic_module:
 <code bash> <code bash>
-cd ~/generic_module+cd ~/gen_modul
 </code> </code>
  
Zeile 40: Zeile 40:
 ++++So sollte das Archiv aussehen (Ausklappen)| ++++So sollte das Archiv aussehen (Ausklappen)|
 <code bash> <code bash>
-[student ~/generic_module]$ tar tvf beispiel.tgz+[student ~/gen_modul]$ tar tvf beispiel.tgz
 drwxr-xr-x student/users     0 2016-08-12 16:51 etc/ drwxr-xr-x student/users     0 2016-08-12 16:51 etc/
 -rw-r--r-- student/users    26 2016-08-12 16:51 etc/beispiel.conf -rw-r--r-- student/users    26 2016-08-12 16:51 etc/beispiel.conf
Zeile 48: Zeile 48:
 Dieses tgz-Archiv kann dann im nächsten Schritt als Generisches Modul auf den Satellitenserver geladen werden. Dieses tgz-Archiv kann dann im nächsten Schritt als Generisches Modul auf den Satellitenserver geladen werden.
  
-===== 2Neues Modul hochladen =====+<note important>Das Archiv wird im MiniLinux über das Rootverzeichnis entpacktAchten Sie darauf, dass Sie für Ihre Ordner und Dateien korrekte Berechtigungen setzen.\\ \\ Sie können Archive wie oben beschrieben auch unter Windows erstellen. Beachten Sie jedoch unbedingt, daß manche Windows-Packer dazu tendieren, bei Erstellung eines Archives im .tar- oder .tar.gz-Format, die Datei- und Verzeichnisberechtigungen („Permissions“) innerhalb des Archivs unerwünscht zu setzen((Beispiel: Ein mit 7zip erstelltes Archiv zur etc-Hierarchie enthielt (/)etc mit den Berechtigungen 777, was für SSH störende Auswirkungen hat (Schlüsselablehnung). )). Überprüfen Sie daher im Zweifelsfall resultierende Verzeichnis- und Dateirechte per Archivansicht oder auf einem Clientrechner!</note>
  
-Das Archiv muss anschließend über das Webinterface Ihres Satellitenservers hochgeladen werden. Wechseln Sie dazu zur Seite 'Lokalisierung + Integration' und wählen 'Neues Modul'. Dort können Sie als letzten Punkt ein 'Generisches Modul' hinzufügen. Wählen Sie dort Ihr vorbereitetes Archiv aus und vergeben einen eindeutigen Namen. Nach dem Hochladen wird zur Kontrolle der Inhalt des Archivs angezeigt. 
  
-===== 3. Client neustarten und überprüfen =====+=== Automatischer Programmstart ===
  
-Starten Sie einen bwLehrpool-Clientloggen sich ein und wählen unter 'Natives Linux' die 'Openbox' ausWenn alles funktioniert hatsollte Ihre Datei nun verfügbar seinÜberprüfen Sie dies z.Bfolgendermaßen:+Sollten Sie in Ihrem generischen Modul ein Programm((Achtung: Im Falle von Skripten müssen Sie prüfen, on der passende Interpreter vorhanden ist, im Falle von Binaries müssen ggf. dynamisch gelinkte Bibliotheken eingeschlossen werden. Vergessen Sie auch nicht, ggf. das executable-Bit zu setzen.)) abgelegt haben, das automatisch gestartet werden soll, müssen Sie weitere Vorkehrungen treffen. Der empfohlene Weg geht über einen systemd-Serviceder zur Erreichung eines bestimmten systemd-Ziels („target“) gestartet wirdGewöhnliche Optionen sind hier etwa graphical.targetmulti-user.target, network-online.target usw.; unten genanntes Beispiel arbeitet mit multi-user.target. 
 + 
 +Erzeugen Sie zuerst die nötigen Unterverzeichnisse, wie oben auf Ihr Arbeitsverzeichnis gen_modul bezogen:
 <code bash> <code bash>
-cat /etc/beispiel.conf+mkdir -p etc/systemd/system/multi-user.target
 </code> </code>
  
 +... und legen eine Datei etc/systemd/system/programmstart.service folgenden Inhalts an:
  
-===== Spezialfall: Client-basierte Konfiguration =====+<code> 
 +[Unit] 
 +Description=Mein Programm XYZ
  
-Generische Module werden immer an alle Clients ausgeliefert. Manchmal möchten Sie jedoch nur bestimmte Clients mit Konfigurationen versorgen. Durch einen kleinen Umweg ist auch dies möglich.+[Service] 
 +Type=oneshot 
 +ExecStart=/Pfad/zu/Ihrem/Programm
  
-Alle Ordner für lokale Konfigurationen innerhalb Ihres vorbereiteten Archivs, müssen unter 'openslx-configs/<Modulname>' abgelegt werden. Im Beispiel heißt das Modul 'spezialfall1'+[Install] 
 +WantedBy=multi-user.target 
 +</code> 
 + 
 +Abschließend müssen Sie noch ein Link im target-Unterverzeichnis anlegen:
  
-Die Ordnerhierarchie verändert sich für unser Beispiel also fogendermaßen: 
 <code bash> <code bash>
-mkdir -p ~/generic_module/openslx-configs/spezialfall1/etc+cd etc/systemd/system/multi-user.target 
-cd ~/generic_module/openslx-configs/spezialfall1/etc/+ln -s ../programmstart.service 
 +cd -
 </code> </code>
  
 +Das Packen und Prüfen der tgz-Datei erfolgt analog zum obigen Beispiel.
  
-Zusätzlich müssen Sie die Datei '/srv/openslx/www/slx-admin/client_config_additional.php' im Satellitenserver anpassen bzw. anlegen  
-<file php client_config_additional.php> 
-<?php 
-$ip = $_SERVER['REMOTE_ADDR']; 
-if (substr($ip, 0, 7) === '::ffff:') { 
- $ip = substr($ip, 7); 
-} 
  
 +===== 2. Neues Modul hochladen =====
  
-// Client X +Das Archiv muss anschließend über das Webinterface Ihres Satellitenservers hochgeladen werden. Wechseln Sie dazu zur Seite 'Lokalisierung + Integration' und wählen 'Neues Modul'. Dort können Sie als letzten Punkt ein 'Generisches Modul' hinzufügen. Wählen Sie dort Ihr vorbereitetes Archiv aus und vergeben einen eindeutigen Namen. Nach dem Hochladen wird zur Kontrolle der Inhalt des Archivs angezeigt. 
-// Config = spezialfall1 + 
-if ($ip === '192.168.192.50') { +<note important>Denken Sie daran, dass Sie das Modul noch der aktiven Systemkonfiguration zuweisen müssen. Ansonsten wird dieses nicht verwendet!</note> 
-        echo "SLX_LOCAL_CONFIG='spezialfall1'\n"; +===== 3. Client neustarten und überprüfen ===== 
-}+ 
 +Starten Sie einen bwLehrpool-Client, loggen sich ein und wählen unter 'Natives Linux' die 'OpenboxausWenn alles funktioniert hat, sollte Ihre Datei nun verfügbar seinÜberprüfen Sie dies z.B. folgendermaßen: 
 +<code bash> 
 +cat /etc/beispiel.conf 
 +</code>
  
-// Raum A 
-// 192.168.192.[1-10] 
-// Config = spezialfall1 und spezialfall2 (es sind auch mehrere Konfigurationen kombinierbar) 
-if (preg_match('/^192\.168\.192\.(1|2|3|4|5|6|7|8|9|10)/', $ip)) { 
-       echo  "SLX_LOCAL_CONFIG='spezialfall1 spezialfall2'\n"; 
-} 
  
-// Client Y, Z 
-// Config = spezialfall2 
-if ($ip === '192.168.192.250' || $ip === '192.168.192.112') { 
-       echo "SLX_LOCAL_CONFIG='spezialfall2'\n"; 
-} 
-</file> 
  
-<note important>Achtung: Syntaxfehler in dieser Datei können bwLehrpool am Booten hindern. Überprüfen Sie nach dem Editieren auf jeden Fall mit „php -l /srv/openslx/www/slx-admin/client_config_additional.php“ die korrekte Syntax und veranlassen Sie ggf. einen Testboot eines Clienten.</note> 
Drucken/exportieren