NAS


QNAP TS-451

Ich nutze ein QNAP TS-451. Das NAS läuft out of the box erst einmal sehr gut. Ab und an ändern Updates etwas, dann ist etwas Suche angebracht, das Forum ist da sehr hilfreich.

An dieser Stelle nur Anmerkungen, wenn etwas vom Handbuch abweicht oder Erfahrungen aufgeschrieben werden sollen.

Mounten unter Ubuntu

Das funktioniert anders als im Handbuch beschrieben:

$> sudo mount -t cifs -o username=<login>,password=<pwd>,iocharset=utf8 //<NAS-IP>/<share> <mountpoint>

Beispiel für Share Public, der auf /mnt/Public gemountet werden soll, NAS-IP: 192.168.0.100:

$> sudo mount -t cifs -o username=<login>,password=<pwd>,iocharset=utf8 //192.168.0.100/Public /mnt/Public

Damit auch der normale Nutzer etwas ändern kann, sind noch einige Parameter nötig. Mounten auf ~/NAS/Public:

$> sudo mount -t cifs -o username=<login>,password=<pwd>,iocharset=utf8,rw,auto,nounix,dir_mode=0777,file_mode=0777,uid=1000,gid=1000 //192.168.0.100/Public ~/NAS/Public

Subversion-(svn)-Server

Die Anleitung von QNAP ist mit einem der letzten Updates tüchtig veraltet. Dort kann man m.E. nicht mehr reinschauen, höchstens, um einige Zusammenhänge zu verstehen. Das liegt daran, dass dort auf IPGK und Optware verwiesen wird, die beide nicht mehr zur Verfügung stehen. Die eigentliche Einrichtung des svn-Starts stimmt noch, habe ich aber auch unten beschrieben.

Zum Hintergrund meiner Installation: ich habe bereits svn-Repositories, muss diese also nicht per Kommandozeile anlegen. Das ist nicht das Problem, muss man sich anlesen, da hilft das SVN-Book. Die Repositories habe ich per Dateimanager auf das NAS in den Ordner Repositories/SVN/aktuell kopiert. Das wird jetzt als Beispiel dienen.

Die Repositories müssen jetzt per svn zugreifbar gemacht werden. Das heißt, es wird der mit svn mitgelieferte SVN-Server svnserve installiert und das NAS so konfiguriert, dass dieser automatisch beim NAS-Start mitgestartet wird.

Danach kann man auf die Repositories mit svn://<NAS-IP>/<reponame> zugreifen.

Wir müssen entware-ng und damit opkg installieren, um damit svn zu installieren

entware-ng installieren

entware-ng ist ein Software Repository für eingebettete Systeme, Router und NAS.

  • qpkg-Datei für das App-Center des NAS herunterladen, die Downloads liegen in:
  • App-Center im NAS starten
  • Menüpunkt “Install manually” (“Manuelle Installation”) raussuchen
    • in meinen NAS liegt das unter dem Zahnrad von “Settings” (“Einstellungen”), warum auch immer
  • dort die heruntergeladene qpkg-Datei eintragen und installieren
  • NAS neu starten

svn installieren

Wir haben jetzt entware-ng und damit das Programm opkg installiert, mit dessen Hilfe wir svn auf dem NAS installieren werden.

  • ssh-Verbindung als admin zum NAS aufbauen (mit der korrekten IP-Adresse)
$> ssh admin@192.x.x.x
...
[~] #
  • opkg-Daten updaten
[~] # opkg update
Downloading http://pkg.entware.net/binaries/x86-64/Packages.gz.
Updated list of available packages in /opt/var/opkg-lists/packages.
[~] #
  • Namen des zu installierenden Pakets heraussuchen (alle Pakete, die mit “subversion” anfangen, sind erst einmal interessant
[~] # opkg list
... sehr, sehr lange Liste
[~] # opkg list | grep subversion
subversion-client - ...
subversion-libs - ...
subversion-server - ...
wdfs - ...
[~] #
  • da ich nur einen Server betreiben will, reicht bei mir das Paket subversion-server
[~] # opkg install subversion-server
...
[~] #

svn einrichten

Zunächst probieren wir aus, ob der SVN-Server mit den Repositories gestartet werden kann:

[~] # svnserve -d -r <pfad zum repo>

Probleme: Aktualisieren oder Fehlersuche

Meine Repositories liegen im Ordner Repositories/SVN/aktuell, das bedeutet, auf dem NAS finde ich sie unter: /share/Repositories/SVN/aktuell/, also lautet der Befehl:

[~] # svnserve -d -r /share/Repositories/SVN/aktuell/

Wir prüfen, ob der Daemon läuft:

[~] # ps -A | grep svnserve
11839 admin       532 S   grep svnserve
13672 admin      1324 S   /opt/bin/svnserve -d -r /share/Repositories/SVN/aktuell
[~] #

Jetzt sollten die Repositories von außerhalb des NAS zugreifbar sein (gerne auch mit einem SVN-Client wie TortoiseSVN), mein Repository heißt internet, der absolute Pfad auf dem NAS wäre also /share/Repositories/SVN/aktuell/internet/, per svn verkürzt sich der Aufruf zu:

$> svn list svn://192.x.x.x/internet/
trunk/
$>

Wenn das klappt, müssen wir den Start den SVN-Servers nur noch automatisieren. Dafür benötigen wir den absoluten Pfad des Programms:

[~] # which svnserve
/opt/bin/svnserve
[~] #

Außerdem benötigen wir den absoluten Pfad des CACHEDEV-Verzeichnisses, in dem die qpkg-Konfigurationsdateien liegen. Glücklicherweise liegt das /share/Repositories/ im CACHEDEV-Verzeichnis:

[~] # ls -l /share/Repositories
lrwxrwxrwx    1 admin    administ        27 May  1 14:19 /share/Repositories -> CACHEDEV2_DATA/Repositories/
[~] # ls -la /share/CACHEDEV2_DATA/ | grep qpkg
drwxrwxrwx   10 admin    administ      4096 Apr 27 00:22 .qpkg/
[~] #

Im Konfigurationsverzeichnis legen wir ein Verzeichnis autorun an und dort eine ausführbare Datei autorun.sh.

[~] # cd /share/CACHEDEV2_DATA/.qpkg/
[/share/CACHEDEV2_DATA/.qpkg] # mkdir autorun
[/share/CACHEDEV2_DATA/.qpkg] # cd autorun
[/share/CACHEDEV2_DATA/.qpkg/autorun] # touch autorun.sh
[/share/CACHEDEV2_DATA/.qpkg/autorun] # chmod +x autorun.sh
[/share/CACHEDEV2_DATA/.qpkg/autorun]

Die Datei füllen wir wie folgt:

#!/bin/sh
sleep 10
/opt/bin/svnserve -d -r /share/Repositories/SVN/aktuell
  • sleep 10 - 10 Sekunden nach Start warten, dann starten, eine Sicherheitsmaßnahme, dass alle Verzeichnisse und Programme existieren und verlinkt sind
  • /opt… - der absolute Pfad des svnserve-Befehls

Jetzt definieren wir den automatischen Aufruf des autorun-Skripts, indem wir eine autorun-Section in die qpkg-config-Datei einfügen. Die Datei liegt unter:

/etc/config/qpkg.conf

Falls dort eine autorun-Section existiert, erweitern wir diese, ansonsten fügen wir eine neue am Ende mit folgendem Inhalt ein:

[autorun]
Name = autorun
Version = 0.1
Author = ekleinod
Date = 2016-02-29
Shell = /share/CACHEDEV2_DATA/.qpkg/autorun/autorun.sh
Install_Path = /share/CACHEDEV2_DATA/.qpkg/autorun
Enable = True
  • Name - muss so
  • Version - egal
  • Author - egal, man selbst
  • Date - auch egal, aktuelles Datum
  • Shell - Pfad zur autorun-Datei incl. Dateiname
  • Install_Path - Pfad zur autorun-Datei excl. Dateiname
  • Enable - true

Jetzt loggen wir uns aus dem NAS aus:

[~] # exit
logout
Connection to 192.x.x.x closed.
$>

Jetzt starten wir das NAS neu, warten mindestens 10 Sekunden nach dem Piep ab und testen, ob der SVN-Server funktioniert.

Fertig.

Aktualisieren

Wenn man die installierten Pakete auf den neuesten Stand bringen will, erledigt das der upgrade-Befehl.

[~] # opkg upgrade
...
[~] #

Danach sicherheitshalber das NAS neu starten.

Fehlersuche

Wenn SVN nicht ansprechbar ist, per ssh einloggen und sehen, ob der Prozess svnservegestartet wurde:

[~] # ps -A | grep svnserve

Wenn nicht, versuchen, manuell zu starten und auf Fehlermeldungen achten.

Fehlende Libraries

Nach dem letzten Upgrade wollte svnserve nicht mehr starten, in der Reihenfolge der Fehler:

error while loading shared libraries: libexpat.so.1
error while loading shared libraries: libiconv.so.2
error while loading shared libraries: libapr-1.so.0
error while loading shared libraries: libmagic.so.1

Also habe ich nach den fehlenden Libraries gesucht:

[~] # opkg list | grep libexpat
[~] # opkg list | grep libiconv
[~] # opkg list | grep libapr
[~] # opkg list | grep libmagic

und das erscheinende Paket installiert:

[~] # opkg install libexpat
[~] # opkg install libiconv-full
[~] # opkg install libapr
[~] # opkg install libmagic

Dann startete svnserve endlich wieder.

Deaktiviert in conf

Ebenfalls nach einem Upgrade wurde SVN nicht gestartet, sogar in der Weboberfläche im App-Center war das als Fehler vermerkt.

Es sieht so aus, als ob der Start von SVN fehlschlug, weil eine Library fehlte und daraufhin in der /etc/config/qpkg.conf der ganze Eintrag deaktiviert wurde:

Enable = FALSE
Incomplete_Conf = 1

Bisher habe ich noch keine Lösung dafür gefunden.