AdminTool AdminTool Usage Notes

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ein paar Hintergrundinformationen zum AdminTool.

Das AdminTool ist wie der DiskStation-Manager eine AJAX-Anwendung, welche intensiv von der ExtJS-Bibliothek Gebrauch macht. Eine AJAX-Anwendung arbeitet nach dem ersten Laden asynchron im Hintergrund mit dem Web-Server zusammen und lädt bei Bedarf Daten nach und bereitet sie via JavaScript und CSS darstellungstechnisch auf.

Im AdminTool werden alle Skripte (.css und .js) zentral in der Datei adm.html eingebunden.

Die Funktionen des AdminTools liegen im Unterverzeichnis modules. In der Datei menu.conf (JSON-Format) werden Menüstruktur und Modulname miteinander verknüpft. Die JavaScript-Steuerdatei adm.js liest die menu.conf ein und versucht dann die Modulnamen den Menüeinträgen zuzuordnen. Die Module sind (javatechnisch gesprochen) Objekte, welche die extJS-Klassen in der Datei adm.js erweitern.

Immer dann, wenn betriebssystemnahe Daten oder Datenbanken als Zulieferer für das AdminTool benötigt werden, werden über AJAX-Aufrufe PHP-Skripte gestartet. Diese haben auf dem sys-Apache die Ausführungsrechte des (Linux-)Benutzers 'root' und dürfen so ziemlich alles auf der DiskStation anstellen. (Deswegen sollte man sich auch immer im Klaren darüber sein, was man mit dem AdminTool treibt.) Diese Freizügigkeit des sys-Apache wird durch die Aktivierung des Pakets Init_3rdparty.spk erzeugt. Hier werden die folgenden PHP-Eigenschaften eingestellt:
Rich (BBCode):
php_admin_flag  safe_mode off
php_admin_value safe_mode_exec_dir none
php_admin_value safe_mode_include_dir none
php_admin_value open_basedir none
php_admin_value doc_root none
php_admin_flag  allow_url_fopen on
php_admin_flag  magic_quotes_gpc off

Das AdminTool arbeitet also typischer Weise so, dass es für die Aktionen und Ermittlung von Informationen per extJS-AJAX-Aufruf das PHP-Skript adm.php aufruft und diesem Skript die gewünschte Anforderung mitteilt. Das Skript adm.php führt dann mit 'root'-Rechten einen Shell-Aufruf (PHP-Funktion exec()) durch und übergibt der Shell die gewünschten Kommandos und Optionen. Die Ausgaben bzw. Ergebnisse des exec()-Aufrufs werden dem AJAX-Aufruf im Hintergrund zurückgegeben und dann im AdminTool mehr oder weniger aufbereitet angezeigt.
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Man kann recht einfach das AdminTool erweitern:

Schritt 1:
Man legt eine neues Unterverzeichnis im Verzeichnis modules an. Bei der Vergabe des Verzeichnisnamens gilt bei mir das Grundparadigma 'Convention Over Configuration", d. h. der Verzeichnisname muss so heißen, wie das Modul selbst. Der Modulname darf nur aus großen und keinen Buchstaben bestehen. Also z. B.

[/volume1/@appstore/] adm/modules/myModule

[Ich habe mal den Pfad dazu geschrieben, wenn man es auf der Kommandozeile finden müsste. In dem 'AdminTool Configuration' fällt ja der erste Teil des Pfades fort.]

Schritt 2:
Man legt eine JavaScript-Datei mit dem Namen des Moduls in dem unter 1] angelegten Unterverzeichnis an. Also z. B.

[/volume1/@appstore/] adm/modules/myModule/myModule.js

Die Datei enthält das Modul-Objekt und die Integration in die aufrufende Klasse:

Rich (BBCode):
var myModule = { 
  id:'myModule', title:'Meine selbstgemachte Funktion',
  ...
  }

contentPanel.items = contentPanel.items.concat(myModule);

Schritt 3:
Damit die Datei myModule.js auch dem AdminTool zugänglich ist, muss die Java-Script-Datei in die adm.html aufgenommen werden (wenn man sich sich die adm.html anschaut, sieht man das dann schon, welche Stelle gemeint ist):

Rich (BBCode):
<script type="text/javascript" src="modules/myModule/myModule.js"></script>

Schritt 4:
Nun muss noch der Menü-Eintrag als JSON-Zeile in der menu.conf vorgenommen werden; das Attibut 'id' stellt die Verbidung zwischen dem Menü-Text 'Meine selbstgemachte Funktion' und dem Objekt 'myModule' her:

Rich (BBCode):
{text:"Meine selbstgemachte Funktion", id:"myModule", icon:"icons/my_best_icon.png", leaf:true, qtip:"myModule_0_1"}

Wer möchte, kann es sich ja im AdminTool selbst über die Funktion 'AdminTool Configuration' anschauen, wie das mit den bisherigen Modulen so gemacht wurde. Und keine Sorge, es kommt demnächst ein kleines Beispiel zum Selbermachen. ;)

Installations-Automat:
Die Schritte 1, 3 und 4 kann man bei geeignete Vorbereitungsarbeiten automatisieren. Dies ist bereits in der Funktion 'AdminTool Configuration' enthalten. Man kann eine zip-Datei (in der die js-Datei des Modul enthalten ist plus der Menü-Konfigurations-Zeile) auf diesem Weg hochladen und installieren. Damit man zwischen verschiedenen Versionen eines Moduls unterscheiden kann, sind allerdings noch weitere Namenskonventionen einzuhalten. Auf diese Weise könnte man auch alle (bisherigen) Module auf neue Versionsstände bringen.

Soviel erst einmal für jetzt. Damit der Thread hier jetzt nicht auseinandergerissen wird, bitte Fragen und Diskussionsbeitrage hier führen: http://www.synology-forum.de/showthread.html?t=10968
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Verfeinerung des Schritt 2:

Ziel wäre es, das Kommando /sbin/blockdev für das 1. Laufwerk auszuführen. In einem Shell-Fenster würde das so aussehen:

Rich (BBCode):
Synology> /sbin/blockdev --report /dev/sda
RO    RA   SSZ   BSZ   StartSec     Size    Device
rw   256   512  4096          0  976773168  /dev/sda

Unsere Datei myModule.js würde dies wie folgt nutzen:
Rich (BBCode):
var myModule = {
  id:'myModule', title:'Meine selbstgemachte Funktion',
  //
  // ein Panel ist eine Anzeigefläche, die Inhalte oder weitere Unterelemente enthalten kann  
  xtype:'panel',
  //
  // der zur Anzeige verwendete Zeichen-Style
  style:{fontFamily:'Monospace'},
  //
  // ob bei einem Overflow der Anzeigefläche auch ein Scrollbalken erscheinen soll
  autoScroll:true,
  //
  // Abstand der Anzeigen innerhalb der Anzeigefläche
  padding:'0 5 5 5',
  //
  // AJAX-Aufruf der URL adm.php mit der Übergabe des Parameters 'cmd'
  autoLoad:{url:'adm.php', params:{cmd:'/sbin/blockdev --report /dev/sda'}},
  //
  // Einblendung eines 'refresh'-Button im Panel-Rahmen oben rechts
  tools:[{id:'refresh', qtip:'re-read', 
          handler:function(event, toolEl, panel, tc){panel.load(panel.autoLoad)}}]
}

contentPanel.items = contentPanel.items.concat(myModule);
 

Anhänge

  • myModule1.jpg
    myModule1.jpg
    34,4 KB · Aufrufe: 1.390
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Installations-Automat

Wie kann man nun die Installation von Modulen vereinfachen?

1. Schritt:
Anfertigen einer .zip-Datei, die neben der in Schritt 2 angefertigen JavaScript-Datei mit dem Modul-Objekt auch noch mindestens eine Menü-Konfigurations-Datei enthält.

Auch hier gelten wieder Namenskonventionen: die Menü-Konfigurations-Datei für das Modul myModule heißt myModule_menu.conf und enthält (vergleiche Schritt 3):

Rich (BBCode):
,{text:"Meine selbstgemachte Funktion", id:"myModule", leaf:true, icon:"icons/eye.png", qtip:"myModule_0_1"}
] // %fin%

Einfach jetzt die beiden Dateien myModule.js und myModule_menu.conf zippen (ohne Pfade) zur myModule_0_1.zip (wenn es sich um die Version 0_1 handeln soll). Ein Muster dieser zip-Datei hängt anbei.

2. Schritt:

Klicken des Upload-Buttons und Auswahl der Datei myModule_0_1.zip (siehe Bild 1) Jetzt wird das Verzeichnis für das Modul angelegt, die zip-Datei entpackt und die beiden Dateien adm.html und menu.conf mit den neuen Modul-Informationen angereichert. Wenn die Nachricht ' ' erscheint, dann ist der Installations-Vorgang (hoffentlich) erfolgreich abgeschlossen worden (Bild 2).

3. Schritt:

Kontrolle via AdminTool configuration der beiden Dateien adm.html und menu.conf, ob auch jeweile eine Zeile zu myModule existiert (siehe Bild 3 und 4)

Bitte den Installations-Automat erst ab Version 0.91 verwenden.

Itari

.
 

Anhänge

  • myModule_0_1.zip
    853 Bytes · Aufrufe: 17
  • adm_modul1.jpg
    adm_modul1.jpg
    30,6 KB · Aufrufe: 1.364
  • adm_modul2.jpg
    adm_modul2.jpg
    21,1 KB · Aufrufe: 1.352
  • adm_modul3.jpg
    adm_modul3.jpg
    66,2 KB · Aufrufe: 1.354
  • adm_modul4.jpg
    adm_modul4.jpg
    84,8 KB · Aufrufe: 1.357

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Wie kann man den Funktionsumfang des AdminTools reduzieren? Also zum Beispiel nur die Panels für den 'Cron', den 'Explorer' und die 'AdminTool configuration' verwenden (siehe Bild 1).

Ganz einfach. Man nimmt alle Menü-Einträge bis auf die 3 heraus (siehe Bild 2):

Rich (BBCode):
[{text:"Cron", id:"cron", leaf:true, icon:"icons/alarm.png", qtip:"cron_0_1"}
,{text:"Explorer", id:"explorer", leaf:true, icon:"icons/explorer.png", qtip:"explorer_0_3"}
,{text:"AdminTool Configuration", id:"admintoolconfig", leaf:true, icon:"icons/hammer_screwdriver.png", qtip:"admintoolconfig_0_1"}
] // %fin%

Wer möchte, kann zusätzlich in der Datei adm.html die Funktionen auskommentieren, die man nicht haben möchte:

Rich (BBCode):
    <!-- modules_intro -->
<!--
    <script type="text/javascript" src="modules/myModule/myModule.js"></script>
    <script type="text/javascript" src="modules/systemTopic/systemTopic.js"></script>
    <script type="text/javascript" src="modules/cpuinfo/cpuinfo.js"></script>
    <script type="text/javascript" src="modules/memory/memory.js"></script> 
    <script type="text/javascript" src="modules/flashmemory/flashmemory.js"></script>
    <script type="text/javascript" src="modules/linux/linux.js"></script>
    <script type="text/javascript" src="modules/ipkg/ipkg.js"></script>
    <script type="text/javascript" src="modules/user/user.js"></script>
    <script type="text/javascript" src="modules/processes/processes.js"></script>
    <script type="text/javascript" src="modules/daemons/daemons.js"></script>
-->
    <script type="text/javascript" src="modules/cron/cron.js"></script>
<!--
    <script type="text/javascript" src="modules/syslog/syslog.js"></script>
    <script type="text/javascript" src="modules/sysstats/sysstats.js"></script>  
    <script type="text/javascript" src="modules/disksTopic/disksTopic.js"></script>
    <script type="text/javascript" src="modules/devices/devices.js"></script>
    <script type="text/javascript" src="modules/partitions/partitions.js"></script>
...

Itari

.
 

Anhänge

  • adm_redux.jpg
    adm_redux.jpg
    76,6 KB · Aufrufe: 1.285
  • adm_redux1.jpg
    adm_redux1.jpg
    43,2 KB · Aufrufe: 1.277

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Im DS-Manager lassen sich einige Dinge zum Gebrauch des DS-Managers einstellen. Die Einstellungen werden in den folgenden Dateien gespeichert:

- "Benutzeranpassung" des Menüs -> /usr/syno/etc/webman.cfg
- "Überspringen Sie den Desktop und gehen Sie nach der Anmeldung direkt zur Anwendung" -> /usr/syno/etc/webman.cfg
- "Meine Favoriten" im DS-Manager -> /usr/syno/etc/webman.cfg
- "Optionen" des DS-Managers (z.B. Mini-Header) -> /etc/synoinfo.conf
- "Berechtigungen"->"Anwendungseinstellungen" -> /etc/synouser.conf

Im AdminTool kann man diese Einstellungen sehen und ggf. anpassen im Panel: Firmware->Configuration.

Itari

PS. Ab der Version 0.95b ist auch die Datei '/usr/syno/etc/webman.cfg' dabei.
.
 

Anhänge

  • adm_configuration.jpg
    adm_configuration.jpg
    65,7 KB · Aufrufe: 1.236

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ein Beitrag hier im Forum zum Thema 'Wie kann ich die DS-Manager Protokolle vermailen?' liegt diesem Beitrag hier zu Grunde.

Im AdminTool werden es an verschiedenen Stellen Server-Abfragen per PHP-Skript oder cgi-Skript gestellt und als JSON-Stream dem AdminTool Frontend zugespielt. Natürlich kann man diese Server-Abfragen auch ohne das AdminTool zu verwenden, benutzen. Nun ist JSON nicht unbedingt das Format, um damit in Shellskripten sofort weiter arbeiten zu können und es ist auch nicht gerade das Lesbarste für einen Ausdruck. Einfacher wäre plain-HTML oder plain-Text.

Meist liegen die Ergebnisse als Array im PHP-Skript vor, so dass eine veränderte Ausgabe leicht zu implementieren ist.

Beispiel: adm/modules/logfiles/logfiles.php wird am Ende des Skriptes ergänzt (ab Version 0.96 verfügbar bzw. wenn man die Zeilen gerade kopiert, sofort ;) ):

PHP:
if (!isset($_REQUEST['log'])) { 
  $jsonresult = json_encode($t);
  print '{"results":'.$jsonresult.'}';
  }
else if ($_REQUEST['log'] == '1'){
  $out='<style>td{font:10px arial}</style><table>';
  foreach($t as $line) {$out.='<tr>'; foreach($line as $item) $out.='<td>'.$item.'</td>'; $out.='</tr>';}
  print $out.'</table>';
  }
 else if ($_REQUEST['log'] == '2'){
  $out='';
  foreach($t as $line) {foreach($line as $item) $out.=$item.chr(9); $out.=chr(10);}
  print $out;
}

Im Browser könnte man mit
Rich (BBCode):
https://syno:5001/webman/3rdparty/adm/modules/logfiles/logfiles.php?file=/var/log/synosys.log&log=1
eine einfache Tabelle des Protokolls /var/log/synosys.log erhalten.

In der Shell könnte man mit
Rich (BBCode):
wget -O - http://localhost:5000/webman/3rdparty/adm/modules/logfiles/logfiles.php?file=/var/log/synosys.log\&log=2 2>/dev/null
eine einfache Liste des Protokolls /var/log/synosys.log nach stdout erzeugen. Diese kann man per crontab periodisch abrufen und natürlich auch an eine Mail-Adresse mailen (ein Mail-Versender wie z. B. nail vorausgesetzt).

Man kann also das AdminTool anzapfen und eigene Verwendungszwecke und Formate erzeugen ;)

Itari
 
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Screencasts

Screencast-Anleitungen lassen sich am besten anschauen, wenn man das Browser-Fenster auf die Größe von 800 x 450 Pixel einstellt. Dann ist alles super gut lesbar.

Commands Reference
In dem Screencast geht es darum, wie man sich über die installierten Linux-Kommandos und -Tools informieren kann. Auch wird gezeigt, wie man an Hinweise zu den Optionen und Links zum Linux-Referenz-Manual kommt.
AdminTool -> Information -> Commands Reference

My System Report
Die Idee ist es, einen kleinen Systemreport zu erzeugen. Die Anleitung zeigt wie man auch zusätzliche Informationen über das System integriert. Den Report kann man ausdrucken oder per Zwischenablage auch an einen Forumsbeitrag anhängen, um so die Fehleranalyse zu vereinfachen.
AdminTool -> Information -> My System Report

Itari
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat