Home » Ipkg und Docker für Synology DS218 & Co.

Ipkg und Docker für Synology DS218 & Co.

Allgemeines

Nun habe ich etwas mehr Geld für meine kleine Synology ausgegeben, damit ich auch Docker Container drauf laufen lassen kann. Leider habe nicht aufgepasst, meine DS218 hat zwar 2GB Hauptspeicher und 4 Cores, aber leider auch einen armv8 Prozessor und von Synology wird Docker offiziell nur auf NAS Systemen unterstützt, die auf einem x86/64 Prozessor laufen.

Nach ein wenig Recherche im Netz habe ich dann tatsächlich hier eine Docker Version gefunden, die wenigstens grundsätzlich mit meinem Synology Prozessor läuft.

Das musste ich dann natürlich mal testen!

Diese Version findet ihr hier.

Um es vorweg zu nehmen: Es gibt erhebliche Einschränkungen beim Betrieb von Docker auf kleinen Synologies, aber es geht!

Nach der erfolgreichen Installation währte die Freude leider nur kurt. Nach dem nächsten Versionsupdate der Synology Software war der Containerdienst wieder von meiner Platte gelöscht.

Docker als Paket

Um es beim zweiten Mal besser zu machen, habe ich ein Installations-Paket gebaut.

Meine Versuche ein *.spk Paket zu bauen sind leider gescheitert. Synology hat die Erstellung zwar gut dokumentiert und es gibt auch ein kostenfreies SDK dazu, jedoch müssen die Pakete seit einiger Zeit signiert werden. Dieser Schritt scheiterte bei mir und der Aufwand war es mir nicht wert, Energie reinzustecken, um hierfür eine Lösung zu finden.

Einbinden der IPKG Paketverwaltung

Ich habe mich daher entschlossen, das alternatives Paket in Form von IPKG zu bauen.

Die Installation der IPKG Paketverwaltung erfolgt als Admin innerhalb der Synology Weboberfläche.

Dort öffnet man das Synology Paket-Zentrum und geht in die Einstellungen.

Als unter “Allgemein” Vertrauensebene wird “Jeder Herausgeber” ausgewählt.

Alle Herausgeber zulassen

Als Paketquellen eignen sich:

  • Der Syno Community (http://packages.synocommunity.com/)
  • CPHub (http://www.cphub.net)
Orte der Paketquellen eintragen

Wenn das erledigt ist, die Einstellungen mit “OK” sichern.

Nun auf den “Community” Reiter gehen. Hier müsste sich jetzt einiges getan haben.

Bei der Suche nach “IPKG” findet und installiert man die beiden unten stehenden Pakete. Das wichtigste Paket ist der “Easy Bootstrap Installer”.

Das ist die eigentliche IPKG Paketverwaltung, die zur Installation von ipkg Paketen unbedingt benötigt wird.

Wenn dies installiert ist, können mittels SSH Konsole bereits Pakete installiert werden.

IPKG Paketverwaltung und grafische Oberfläche

Um es komfortabler zu machen, sollte das grafische Frontend ebenfalls installiert werden. Das ist das Paket “iPKGui‘”

Die iPKGui Oberfläche sieht installiert wie folgt aus:

Ansicht der grafischen IPKG Verwaltung

Bitte beachtet, dass bis hierher alles über die Synology Oberfläche funktioniert hat. Für die nächsten Schritte ist es erforderlich, sich als sudo bzw. root Nutzer auf der Kommandozeile zu bewegen. Wie man dahin kommt, wird hier nicht beschrieben.

Installation von Docker

Das ipkg Binary wird unter /opt/bin installiert. Bitte prüfe mit ipkg -v“, ob Du /opt/bin/ schon im Suchpfad hast. Wenn alles gut läuft, solltest die Versionsnummer von ipkg angezeigt werden. Andernfalls gibt es eine Fehlermeldung.

Wenn nein, in der “/etc/profile” den Pfad ergänzen, oder mit “export PATH=”$PATH:/opt/bin” manuell für diese Sitzung auf der Kommandozeile setzen.

Unter https://gitlab.com/derek.ziegler/synodocker/-/tree/master die fertige ipk Datei herunter laden und in einem beliebigen Verzeichnis auf der Synology speichern.

Installiert wir mit diesem Kommando:

sudo ipkg install syno-docker-19.03.09.ipk

Das Paket findet man später installiert unter /opt wieder. Die später erstellten Docker Container werden dann künftig unter /volume1/docker abgelegt.

Nach der Installation einmal ab- und dann wieder anmelden, um das Logging auf der Konsole loszuwerden.

Installieren von Containern

Ein erster Test könnte der Aufruf vom “Hello-World” Container sein.

sudo docker run -it --rm -host=net -v /dev:/dev hello-world

Bitte beachte dabei “-v /dev:/dev”. Dies es Volume ist immer nötig, wenn eine interaktive Sitzung erzeugt wird. Sonst gibt es eine Fehlermeldung.

Der Parameter “-host=net” ist für dieses Beispiel nicht nötig. Es wird benötigt, wenn ein Container von außen erreichbar sein soll (z.B. Webserver). Leider geht kein bridged Network auf der Synology. Man kann nur auf das Hostnetzwerk zugreifen. Mit diesem Eintrag wird dies sichergestellt.

Einschränkungen von Docker

Das installierte statische Binary von Docker hat auf der Synology zahlreiche Einschränkungen. Folgende prominente Probleme hatte ich mit dem Paket:

  • Fehlendes bridged und NAT Network. Nur das Host Network steht zur Verfügung.
  • Seccomp Profile funktionieren nicht. Hierdurch werden beliebige Syscalls auf den Kernel möglich (Sicherheit)
  • Nicht alle gängigen Prozessorfunktionen stehen zur Verfügung. Hierdurch endet das eine oder andere Paket mit einem Crash
  • Cgroups sind nicht anwendbar. Hierdurch können Limits für  CPU-, Memory- und I/O-Ressourcen nicht gesetzt werden
  • Devices müssen den Containern als Volume zur Verfügung gestellt werden, sonst startet kein interaktiver Container.

Neben den Einschränkungen von Docker hat mein ipk ebenfalls erhebliche Schwachstellen. Hier die Prominentesten:

  • Kein vernünftiges Logging der Docker Messages(von mir) implementiert
  • Nur sehr rudimentäre Start/Stopscripts

Zusammenfassung

Wie schon geschrieben, bekommt man mit dieser kleinen Anleitung zwar Docker Container auf kleinen Synologies zum Laufen, allerdings ist der Funktionsumfang doch sehr eingeschränkt. Nicht nur fehlende Isolation bzw. Sicherheitsfeatures stehen nicht zur Verfügung. auch einige Low Level Prozessor Instructions stehen nicht zur Verfügung.

Wer aber mal ein Softwarepaktet testen will, welches es für die Synology nicht gibt, oder aber durch die Installation von Software sein NAS nicht unnötig belasten möchte, hat durch diese Möglichkeit zusätzliche Optionen,

Ich wünsche Euch viel Spaß beim testen…