NAS network attached systems
Hier geht es um eine kleine NAS namens Syno - eine DS207+ von Synology. Seit Mitte Mai 2008 hat sie ihr Zuhause bei mir gefunden. Sie ist manchmal ein wenig störrisch, aber sie macht fast immer, was man von ihr verlangt.
Auf der DS (Disk Station) läuft eine aktuelle Linux-Version (2.6.15) und die wichtigsten Kommandos werden über die BusyBox (Version 1.1.0) zur Verfügung gestellt. Das ist recht praktisch, weil die BusyBox im Kernel residiert und für die Ausführung der Kommandos und Tools keine Ladezeiten anfallen.
Das Geniale der DS sind ihre mitausgelieferten Anwendungen. So ziemlich alle werden über ein Web-User-Interface verwaltet namens Disk Station Manager. Hierfür läuft im Hintergrund ein Apache-Web-Server (2.2.8), der ein wenig unterstützt wird durch eine Postgres-Datenbank (8.2.5).
Der Disk Station Manager ist ein AJAX-unterstützte Web-Anwendung, die alle wirklich wichtigen und interessanten Features der DS verwaltet. Über ihn lassen sich Informationen des System anzeigen, Dienste und Konfigurationen festlegen, Datensicherungen starten und viele anderen Dinge mehr. [Bild-0001]
Das Linux-Betriebssystem, die verschiedenen Server und die Web-Anwendungen zusammen, werden bei der DS Firmware genannt. Drei bis viermal im Jahr erscheint zur Zeit ein Firmware-Update, welches oft Fehler beseitigt und neue Funktionen offeriert.
So bleibt das System sehr aktuell und erfreut sich, dank der einfachen Benutzung, einer hohen Useability.
Telnet
2008-10-11Die DS ist ja ein richtige Linux-System mit so ziemlich allen TPC/IP-Protokollen und INET-Servern. Im Disk Station Manager [Bild-0002] lässt sich das Terminal-Protokoll aktivieren: Telnet-Dienst oder SSH Dienst. Nach dem Aktivieren, kann man sich über den Port 23 mit einem Telnet-Client-Programm anmelden.
In manchen Windows-Versionen ist der Telnet-Client bereits aktiviert. Manchmal muss man ihr aber erst über die 'Systemsteuerung' aktivieren. Da sich mittlerweile zwischen Windows XP und Vista die Namen und Orte für zusätzliche Windows-Funktionen ein wenig geändert haben, muss man die richtige Stelle suchen. Unter Vista wäre das 'Programme und Funktionen' -> 'Windows-Funktionen ein- oder ausschalten' und dann den Telnet-Client aktivieren. [Bild-0003]
Damit das Arbeiten im Netz immer zügig voran geht, sollte man der DS eine feste IP-Adresse geben. Um nun nicht immer per IP-Adressen-Eingabe den Zugang zur DS zu erhalten, sollte man sich zusätzlich entweder einen DNS-Server im lokalen Netz mit den Zugangsdaten der DS füttern oder falls nicht vorhanden, wenigstens in der der hosts-Datei einen Eintrag vorsehen (windows/system32/drivers/etc/hosts).
Meine DS heißt 'Syno' bzw. 'syno'. Daher kann ich den Telnet-Aufruf wie folgt vornehmen:
telnet syno
Damit auch der Zugang zu allen Linux-Ressourcen möglich ist, empfiehlt sich die Authentifikation mit dem Benutzer 'root'. Dieser hat das gleiche Kennwort wie der Benutzer 'admin', welches ja beim Aufsetzen des DS vergeben wurde.
Nach erfolgreichem Login steht man auf der Kommandozeile der ash. Die Almquist Shell (ash) von Kenneth Almquist ist eine kleine und schnelle Neuimplementierung der Bourne Shell. Und man ist im Verzeichnis '/root', dem Benutzerverzeichnis des Systemverwalters. In diesem Verzeichnis befindet sich eine Datei namens .profile, die man sich mit einem Editor (z. B. dem vi) anschauen sollte. Und zwar sollte man die PATH-Variable ein wenig bereinigen (stehen meist doppelte Pfadangabe drin) und zusätzlich die PATH-Variable um :. ergänzen. Damit man auch immer Shell-Skripte im aktuellen Verzeichnis ohne vorangestelltes ./ ausführen zu können.
Wenn auf der Kommandozeile ist, kann man Shell-Kommandos, Shell-Alias und Shell-Funktionen sowie Programme ausführen. Eine Übersicht über nützliche Tools und Kommandos findet man im Synology Wiki [Wiki]. Wenn man es ganz genau wissen will, dann kann sich auch die Linux man pages auf die.net ansehen [Linux man pages] .
Modding
2008-10-11Modifikationen und Erweiterungen der vorhandenen Hard- und Software werden kurz als 'Mods' bezeichnet. Im folgenden werden nur die Software-Modifikationen eine Rolle spielen.
Bis zur Firmware-Version 0640 konnte man den Telnet-Zugang nicht durch den Disk Station Manager aktivieren, sondern musste die Freischaltung über ein spezielles .pat-File vornehmen. Da mittlerweile der Telnet-Zugang zum offizielle Repertoire gehört, sind Shell-Skripte und Änderungen von Konfigurationsdateien einfach geworden. Auch die Installation von zusätzlichen Web-Anwendungen ist nicht allzu problematisch, so dass man davon ausgehen kann, dass bei dieser Art von Modifikationen keine Probleme mit der Gewährleistung bzw. Herstellergarantie gibt.
Auch die Installation weitere Anwendungen oder systemnaher Dienste wird kaum diesen Zustand beeinträchtigen. Allerdings wird man über den Synology-Support bei solchen zusätzlichen Anwendungen keine Unterstützung einfordern können; Hilfe wird man in vielen Fällen erhalten können. Die Community-Foren sind deswegen von großer Bedeutung, weil sich hier Hilfesuchende und Helfende austauschen können.
Trotzdem muss an dieser Stelle deutlich gesagt werden, dass durch Modifikationen, Datenverlust möglich ist. Auch sind Instabilität oder Stillstand des Systems möglich. Das heißt der Schaden wird nicht so sehr in der (Zer-)störung einer Funktionalität liegen, sondern im Aufwand der Wiederherstellung des alten Zustands.
Da auch Anleitungen Fehler enthalten können, sind alle hier auf dieser Website vorgestellten Skripte, Vorschläge und Tipps nur auf eigene Gefahr hin einzusetzen. Wie schon so häufig in Posts gesagt: Es geht alles auf eigene Kappe. Deswegen wird dringendst angeraten, die Daten vor Modifikationen zu sichern, sich gegebenenfalls vor Änderungen Kopien der Originale zu ziehen und Aufzeichnungen darüber zu führen, was man wann wo und warum modifiziert hat.
Itsy Package Management System
2008-10-11Um die Installation von zusätzlicher Software zu vereinfachen, verwendet man das Paketverwaltungssystem Itsy Package Management System, kurz: IPKG. IPKG verwendet dabei bereits prozessorspezifische Programmpakete, so dass bei der Installation zusätzlicher Software nicht mehr auf die Kompatibilität zum verwendeten Prozessor geachtet werden muss. IPKG ist nicht Bestandteil der Synology-Firmware und muss daher selbst installiert werden. Diesen Vorgang nennt man Bootstrapping [Wiki], das dazu gehörige Programm heißt bootstrap.
Da verschiedene Prozessortypen in der DS verbaut sind, gibt es auch verschiedene bootstrap-Skripte. Ein Anleitung zur Installation gibt es hier: [Wiki].
Die bootstrap-Skripte werden gelegentlich aktualisiert, das heißt, der Link kann sich leicht ändern (Versionsnummer). Deswegen macht es Sinn, falls der Link nicht mehr geht, per Browser auf die nächsthöhere Verzeichnisebene zu navigieren und sich die Dateiliste einfach genau anzusehen; dann findet man schnell die Änderung.
Das bootstrap-Skript installiert eine spezielle Datenstruktur auf der DS (Verzeichnis /opt) und legt einige zusätzliche Konfigurationsdateien an (z. B. /etc/rc.local). Durch eine Firmware-Update wird aber meist alles unverändert beibehalten.
Da sich die Liste der per IPKG zusätzlich zu installierenden Software-Pakete fast täglich ändert, ist ein Update der Softwareliste (ipkg update) als auch ein Update der bereits installierten Software (ipkg upgrade) sinnvoll.
Das Entfernen bereits installierter IPKG-Pakete lässt sich mit
ipkg remove paket-name
vornehmen. Ansonsten gibt es eine Vielzahl an weiteren Optionen, die das Arbeiten mit dem IPKG doch recht komfortabel gestaltet.
Toolchain
2008-10-11Mitte des Jahres 2008 veröffentlichte Synology eine Web-Seite mit dem Titel 'Synology NAS Server 3rd-Party Apps Integration'.
The Synology NAS Server (Disk Station series, Cube Station series, and Rack Station series) uses Linux as its operating system.
Due to frequent requests from Synology users and system integrators to install additional applications on the Synology NAS Server,
Synology has put together this development guide in order to help users install third-party applications on their Synology NAS Server.
With this integration guide, you will learn how to:
Genaue Auskunft und Anleitung sind in einer PDF-Datei enthalten, wie man mit dem Toolchain eigene Programme entwickeln kann und wie man Anwendungen in den Disk Station Manager integrieren kann.
Diese Anleitung hat zu mancher Verwirrung geführt, weil sie nicht genau genug gelesen wurde.
► Irrtum 1: Die Anleitung enthält eine Beschreibung, wie man auf der DS mit dem gcc kompiliert. Richtig: Die Anleitung enthält eine Beschreibung, wie man auf einem Linux-PC mit Hilfe einer spezielle Entwicklungsumgebung (Toolchain) Programme für die DS kompiliert (cross-compiling).
► Irrtum 2: Die Anleitung beschreibt wie man per Toolchain 3rd-Party-Applications schreibt. Richtig: Die Anleitung zeigt, wie man Webanwendungen (PHP-Skripte oder CGI-Programme oder einfach nur HTML-Dateien) in den Disk Station Manager in einen speziellen Anzeigebereich namens 'Third-party applications' integriert.
Doch zurück zum Toolchain. Mittlerweile braucht man ihn nicht mehr, weil sich der gcc mittels des IPKG installieren lässt, so dass man auch direkt auf der DS seine C, C++ usw. Programme kompilieren kann. Da die Performance und die Entwicklungsumgebung auf der DS eher mager sind, empfiehlt es sich trotzdem, mit dem Toolchain auf einem Linux-PC zu arbeiten. Die Installationsanleitung ist perfekt, so dass keine weiteren Anmerkungen braucht.
Wer auf seinem PC kein Linux installiert hat (z. B. auf einer zweiten Partition oder in einer virtuellen Umgebung), der kann sich andLinux installieren. andLinux läuft als Service unter Windows und hat einen X-Server dabei, der in einem normalen Windows-Fenster den Zugang erlaubt. Ich habe mir per NFS ein Verzeichnis der DS gemountet und kann nach der Kompilation direkt den Test auf der DS durchführen.
3rd-Party Applications
2008-10-11Third-Party Applications ist eine Bezeichnung von Synology für die Integration von weiteren Web-Anwendungen in das Menü des Disk Station Manager. Hierzu gibt es ein Interface, das beim Starten des Disk Station Managers ausgelesen wird und einen zusätzlichen Menü-Baum mit dahinter liegender Link-Struktur aufbaut. Für jedes Unterverzeichnis im Verzeichnis /usr/syno/synoman/webman/3rdparty wird, sofern im Unterverzeichnis eine gültige Datei namens application.cfg steht ein Menüeintrag aufgebaut.
Die Datei application.cfg hat folgenden Aufbau:
text = Name der Menüzeile*
description = Hilfstext*
icon_16 = kleine Icon Bilddatei
icon_32 = große Icon Bilddatei
type = embedded oder popup
protocol = http oder https
address = URL-Adresse
port = URL-Port
path = URL-Pfad*
adminonly = true oder false
* nur die beiden ersten Einträge sind notwendig - und natürlich der Pfad.
In vielen Beispielen und Skripten werden systemadministrative Funktionen eingesetzt. Damit sie funktionieren, müssen sie von einem Web-Server ausgeführt werden, der zum einem auf alle Verzeichnisse und Dateien der DS zugreifen kann und zum anderen auch die Berechtigung hat, Programme (auch Systemprogramme) auszuführen. Ein solcher Web-Server muss also mit der internen Linux-Identität des Systemverwalters 'root' ausgestattet sein; genauso wie der Web-Server des Disk-Station-Managers. Was liegt also näher, als diesen zu verwenden. Im Jargon der DS hießt diese Web-Server: sys-apache.
Da damit Tor und Tür auch für den Missbrauch geöffnet werden kann, empfiehlt sich der Zugang zu dem sys-Apache über https (Port 5001) zu konfigurieren. Auch sollte die adminonly-Eintragung in den application.cfg-Dateinen auf true gesetzt werden oder gänzlich fehlen, denn dann wird true angenommen.
Der sys-apache hat in seiner Konfigurationsdatei /usr/syno/apache/conf/httpd.conf-sys als Document-Root-Verzeichnis /usr/syno/synoman eingetragen. Sinnvollerweise legt man also die neuen 3rd-Party Applications mit den systemadminstrativen Funktionen in diesen Pfad. Bei den hier verwendeten Skripten wird deshalb fast immer das Verzeichnis /usr/syno/synoman/phpsrc genommen.
Beispiel einer einfachen 3rd-Party Application
Es wird eine Datei im Verzeichnis /usr/syno/synoman/phpsrc/phpinfo.php erstellt mit dem Inhalt:
<?php phpinfo() ?>
Die dazugehörige application.cfg-Datei wird ins neu erstellte Verzeichnis /usr/syno/synoman/webman/3rdparty/phpinfo geschrieben mit folgendem Inhalt:
text = phpinfo
description = phpinfo
type = embedded
path = /phpsrc/phpinfo.php
Anmerkungen: Damit das PHP-Skript auch ausgeführt werden kann, müssen noch einige Konfigurationserweiterung vorgenommen werden - siehe nächster Abschnitt. Mit der Anlegen der ersten application.cfg-Datei erscheint automatisch das 3rd-Party Application-Menü im Disk Station Manager (neu laden im Browser natürlich). Es muss also nichts besonderes installiert sein - außer Firmware ab Version 637.
Apache- und PHP-Konfiguration
2008-10-11Wie aus dem vorigen Abschnitt (3rd-Party Applications) schon angedeutet, werden die meisten 3rd-Party Applications von dem sys-apache ausgeführt werden, also kein Wechsel des Web-Servers vorgenommen. Die Web-Page in der die 3rd-Party Applications im Disk Station Manager beim Type 'embedded' (per iframe) ausgegeben wird, ist die Datei /usr/syno/synoman/webman/modules/appebd.html. Diese Datei kann man auch ein wenig anpassen, damit Größenverhältnisse und Rahmen (border) nicht allzu störend sind.
Eine Möglichkeit, interaktiv mit Web-(Apache-)Anwendungen umzugehen, sind Skript-Programme, die der Web-Server versteht. Was der Web-Server alles verstehen kann und könnte, wird per Konfigurationsdatei beschrieben. In diesem speziellen Fall (sys-Apache) ist es folgende Datei: /usr/syno/apache/conf/httpd.conf-sys. Wann immer man dort etwas ändert und hinzufügt, muss der Apache es lernen. Dafür muss er neu gestartet werden mit /usr/syno/etc/rc.d/S97apache-sys.sh restart.
Damit der sys-apache auch PHP-Skripte verstehen kann, muss er in der /usr/syno/apache/conf/httpd.conf-sys zwei zusätzliche Einträge erhalten:
AddType application/x-httpd-php .php
LoadModule php5_module /lib/libphp5.so
<Directory />
Options ExecCGI FollowSymLinks MultiViews Indexes
AllowOverride All
</Directory>
<Directory "/usr/syno/synoman">
Options ExecCGI FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<IfModule dir_module>
DirectoryIndex index.html index.htm index.cgi index.php
</IfModule>
<IfModule mime_module>
...
AddHandler cgi-script .cgi
...
</IfModule>
cgi-Dateien (common gateway interface) werden vom Web-Server über eine sogenannte Sub-Shell gestartet, d.h. binär-kompilierte Programme (C-Programme), oder Skripte (Shell, Perl usw.) sind möglich. Alle CGI-Programme müssen die Endung .cgi haben, weil sie sonst nicht ausgeführt werden (siehe vorherigen Punkt, wo das ja definiert wurde [theoretisch könnte man beliebige Endungen definieren]).
In Skripten ist in der ersten Zeile als Kommentar-Eintrag der jeweilige Interpreter einzutragen, der von der Sub-Shell für die weitere Ausführung geladen werden soll:
#!/bin/ash
cgi-Skripte/Programme können so ziemlich alles enthalten, was man auch sonst mit der Shell oder Perl oder was-weiß-ich geht. Sie müssen allerdings, damit sie vom Web-Server auch ausgeführt werden, als aller erstes einen gültigen Header ausgeben. Dieser kann in einem .cgi-Shell-Skript so aussehen:
echo "Content-type: text/html"
echo ""
oder auch so:
cat <
EOT
Der Apache will unbedingt die Leerzeile nach dem Text-Header, sonst mag er nicht. Der Rest in dem Skript sollte/muss Zeugs ausgeben, was der Browser verknusen kann und das ist in der Regel gültiges HTML.
Für PHP-Skripte muss eine weitere Konfigurationsdatei angepasst werden: /usr/syno/etc/php.ini. Da diese Konfigurationsdatei auch für den user-apache verwendet wird und sich dort Änderungen auch auf das Verhalten der normalen PHP-Skripte auswirkt, ist höchste Aufmerksamkeit bei Änderungen gefordert. Eine Sicherung der php.ini vor Änderungen ist angebracht! Auch hier gilt, nach jeder Änderung muss der/die Web-Server wieder neu gestartet werden.
Folgende Änderungen sind bei einigen 3rd-party-Application notwendig, damit sie auf das Linux-Dateisystem richtig zugreifen können bzw. auch Linux-Kommandos ausführen können:
safe_mode = Off
safe_mode_exec_dir =
open_basedir =
doc_root =
allow_url_fopen = On
register_globals = On
Einige dieser Eintragungen sind wahrscheinlich schon richtig gesetzt gewesen.
spk Paket-Management
Mit der Firmware 722 für die Synology Disk Stations ist ein neues Software-Paket-Management eingeführt worden. Damit lassen sich - ähnlich wie mit dem ipkg - zusätzliche Anwendungen installieren und verwalten.
Bei den Paket-Dateien (spk-Files) handelt es sich um einfache tar-Bibliotheken (.tar), in denen
- eine INFO-Datei die Meta-Informationen über das Paket enthält;
- die zu installierende Software in Form einer komprimierten tgz-Bibliothek und
- einen script-Verzeichnis, in dem 5 Skripte ablegt sind, die die Installation und Deinstallation sowie eine Steuerung-Funktion enthalten.
Bei der Installation werden die INFO-Datei und die Skripte in das Verzeichnis /var/packages/Paketname bzw. /var/packages/Paketname/scripts kopiert. Außerdem wird eine Kopie des start-stop-status-Skripts in das Verzeichnis /usr/local/etc/rc.d als Paketname.sh abgelegt, um ein automatisches Starten des Pakets beim Systemstart zu ermöglichen. Die eigentliche Software wird in das Verzeichnis /volume1/@appstore/Paketname entpackt. Ein symbolischer Link wird von /var/packages/Paketname/target auf dieses Verzeichnis gelegt.
Im Paketmanagment des DS Managers gibt es neben der Installation und Deinstallation noch die Möglichkeit das start-stop-status-Skript zu nutzen, um das Starten und Stoppen zu ermöglichen, falls es sich bei der Software eventuell um einen Dienst (Service) handelt. Die Informationsanzeige sowie eine Protokollanzeige, runden die Möglichkeiten ab. Hierfür sind entsprechenden Vorbereitungen im start-stop-status-Skript zu treffen.
Ein start-stop-status-Skript könnte wie folgt aussehen:
#!/bin/sh
LOG="/var/packages/${SYNOPKG_PKGNAME}/log"
case $1 in
start) date +"%c started" >> $LOG;;
stop) date +"%c stopped" >> $LOG ;;
status) if tail -1 $LOG | grep started; then exit 0; else exit 1; fi ;;
log) echo "$LOG" ;;
esacEin INFO-Datei könnte wie folgt aussehen:
package="Paketname" version="1.0" description="Paketbeschreibung" maintainer="itari" adminport="" arch="noarch"
Die Abarbeitung der Skripte erfolgt über das Tool /usr/syno/bin/synopkg mit root-Privilegien, so dass auch System-nahe Aufgaben angewickelt werden können bzw. Dateizugriffe möglich sind.
Für die einfache Vorbereitung der Installation von 3rd-party-Applikationen habe ich das Init_3rdparty-spk-Paket geschrieben, welches die weiter oben angesprochenen Voraussetzungen (Änderung der httpd.conf-sys und php.ini) schafft, damit installierte 3rd-party-Applikationen zum einen lauffähig sind und auch systemnah eingesetzt werden können. Zudem wird das phpinfo-Skript als 3rd-party-apps installiert.
[Download]