Archiv für den Monat: Februar 2011

D-Link DNS-323 NAS

Das D-Link DNS-323 NAS enthält ein fertiges Linux, welches man ohne Änderungen an der Firmware und damit auch OHNE Garantieverlust mit eigener Software ausstatten kann. Diese Projektseite befasst sich mit den entsprechenden Erweiterungen, die ich erstellt habe.

Achtung, für alle auf dieser Webseite veröffentlichten Skripte gilt die GPL v2!

Buildroot Umgebung / Toolchain

Leider sind die Sourcen, die D-Link zur Verfügung stellt, nicht „direkt“ nutzbar, und müssen daher zunächst noch ein wenig angepasst werden, bevor man diese Produktiv auch nutzen kann. Um eine saubere Toolchain-Umgebung mit gcc-3.3 als Cross-Compiler für die DNS-323 zu erreichen, müssen erst noch Änderungen an den heruntergeladenen Sourcen durchgeführt werden. Diese Toolchain ist die Voraussetzung dafür, weitere Programme für das NAS zu „crosscompilen“.

Ich habe ein vorgefertigtes Shell-Script hierfür erstellt. Es kompiliert die Buildroot-Umgebung und führt notwendige Korrekturen durch. Außerdem lädt das Skript alle auf dieser Seite vorgestellten .mk-Dateien herunter.
ACHTUNG! Damit das Skript ordnungsgemaess funktioniert, MÜSSEN zunächst auch ein paar notwendige Programme installiert werden, die nicht bei allen Linux-Distributionen beigelegt sind:
gcc bison m4 flex gettext patch ncurses-devel
Auf einer Ubuntu/Debian-Umgebung reicht ein

apt-get update
apt-get install gcc bison m4 flex gettext patch libncurses5-dev

make108.sh (Stand 16.09.2010)

Die Sourcen werden von der DLink-Seite für die Firmware 1.08 der DNS-323 heruntergeladen. Leider ist das Paket 450 MB groß, man kann sich nicht nur die benötigten Teile herunterladen. Ausserdem ist die Build-Umgebung darin inkl. der Binaries schon vorhanden, was leider nur Platz verschwendet, denn die Pfade vom Entwickler sind leider in der Toolchain hartverdrahtet. Folgerichtig wird auch als erstes die „aktuelle“ Toolchain weggeworfen und eine neue erstellt

tor kompilieren

TOR ist ein Anonymisierungsnetzwerk. Da es ein leichtes ist, das NAS auch als „kleinen“ Server für tor zu betreiben, wollen wir uns diesen Luxus auch gönnen. Mit der oben angegebenen Toolchain kann man TOR nun auch kompilieren. Dazu fügen wir einfach folgende Dateien in das Verzeichnis

uclibc-toolchain-src-20040609/gcc-3.3.x/make

hinzu. Anschließend kann man das ganze mit einem

make tor

kompilieren. Die Skripte erkennen selbsttätig, welche vorausgesetzten Pakete noch zu erstellen sind und besorgen sich auch automatisch den korrekten Quellcode. Die fertige ausführbare Datei „tor“ liegt dann in diesem Verzeichnis:

uclibc-toolchain-src-20040609/gcc-3.3.x/toolchain_build_arm/tor-0.2.0.32/src/or

Damit das ganze auch halbwegs sinnvoll funktioniert, lohnt es sich, den Privoxy auch gleich mit zu kompilieren. Das Kompilieren funktioniert analog wie bei tor.

Die Dateien können hier heruntergeladen werden:
tor.mk
libevent.mk
openssl.mk
zlib.mk
privoxy.mk

samba kompilieren

samba ist der Schlüssel, um den Austausch von Dateien zwischen Linux und Windows bereits zu stellen. Dabei sind beide Richtungen möglich, ein Windows-Client kann auf die Verzeichnisse und Dateien auf einem Linux-Gerät zugreifen und auch umgekehrt kann Linux die Freigaben auf Windows-PCs nutzen.

Der samba-Server auf der DNS-323 (smbd und nmbd) ist völlig in Ordnung, den wollen wir hiermit nicht austauschen. Allerdings ist der „smbclient“ etwas kaputt, er kann auf Windows-Shares keine „tar“-Archive erzeugen. Da ich gerne BackupPC mit smbclient einsetzen wollte, musste eine Lösung her – eben das selbstkompilieren.

Mit der oben angegebenen Toolchain kann man samba nun auch kompilieren. Dazu fügen wir einfach die folgende Datei in das Verzeichnis

uclibc-toolchain-src-20040609/gcc-3.3.x/make

hinzu. Anschließend kann man das ganze mit einem

make smb35client

kompilieren. Das Skript erkennt selbsttätig, welche vorausgesetzten Pakete noch zu erstellen sind und besorgt sich auch automatisch den korrekten Quellcode. Die fertige ausführbare Datei „smbclient“ liegt dann in diesem Verzeichnis:

uclibc-toolchain-src-20040609/gcc-3.3.x/toolchain_build_arm/samba-3.5.5/bin/smbclient

Die „smb35client.mk“ kompiliert die 3.5.5, die „smbclient.mk“ hingegen die 3.0.34. (Ich selbst setze auf meiner DNS-323 die „ältere“ Version ein).

Die Dateien können hier heruntergeladen werden:
smb35client.mk
smbclient.mk

Linux Kernel Modules

Insbesondere das USB-Storage Modul, was man braucht, damit ein angesteckter USB-Stick auch als solcher erkannt wird und als Datenträger genutzt werden kann. Um das zu kompilieren, reicht auch unsere fertige toolchain aus. Das entsprecehnde Makefile (.mk) ist hier auch zu Download bereitgestellt:

linux.mk

rtorrent

Bei der DNS-323 kann man einen Bittorrent-Client auch „im Standard“ nutzen. Ich wollte lieber einen verwenden, den ich nach meinen belieben konfigurieren kann. Entsprechend schnell fiel die Wahl auf rtorrent. Das ist allerdings abhängig von „ncurses“ und der Torrent-Bibliothek „libtorrent“. Letztere Bibliothek hingegen braucht noch libsigc++-2.0 und sinniger Weise openssl. Daher bitte alle .mk-Dateien unter diesem Punkt herunterladen und anschließend mit einem „make rtorrent“ das Binary kompilieren lassen.

Um rtorrent „sinnvoll“ auf der DNS-323 nutzen zu können, braucht man noch das Programm screen. Da ich ansonsten sowieso das „fun-plug 0.5“ nutze, habe ich das Package screen installiert. (Weitere Infos auf der fun-plug 0.5 Homepage Damit screen auch sinnvoll funktioniert, muss man noch die TERMINFO-Dateien kopieren (siehe „Weitere Tools kompilieren“).

Ich rufe rtorrent entsprechend mit diesem Kommando auf (mache das noch nicht über die /ffp/start/*.rc Dateien):

stty stop undef
stty start undef
TERMINFO="/ffp/mybin/" /ffp/mybin/rtorrent

rtorrent.mk
libtorrent.mk
ncurses.mk
libsigcpp.mk
openssl.mk

Weitere Tools kompilieren

Es gibt noch ein paar weitere Tools, welche ich auf der DNS-323 einsetze, die dazu benötigten Make-Skripte stelle ich ebenfalls hier zur Verfügung. Sie können genauso eingesetzt werden wie die oben angegebenen Skripte.

Die Dateien können hier heruntergeladen werden:
fmirror.mk – ein Tool zum Abgleichen von FTP-Directories, auch mit Passwort.
wget.mk – die busybox-Variante kennt einige für mich wichtige Parameter nicht, daher hier die „volle“ Version.
jhead.mk – Kann sinnvoll ein „Autorotate“ durchführen.
jpegtran.mk – Dieses Tool wird von jhead benötigt.
exifprobe.mk – liefert wichtige EXIF-Daten
rsync.mk – Schneller Abgleich auch über SSH
bc.mk – Ein einfacher Rechner, ideal für Skripte (kann aber mehr als einfach nur expr)
mp3info.mk – Ein auf ncurses (s.o.) basierendes Programm, um ID3-Tags auszulesen und/oder zu manipulieren.
htop – Ein auf ncurses (s.o.) basierendes Programm, welches das klassische „top“ ersetzt.

Wer übrigens einen Fehler bzgl. des vt102-Terminals bei Programmen wie rtorrent oder htop erhält („Error opening terminal: vt102“), sollte einfach aus dem oben auch angegebenen ncurses die Datei toolchain_arm/share/terminfo/v/v102 an einen günstigen Platz auf dem Zielsystem kopieren, allerdings auch dort in einen Unterordner /v und auf den darüberliegenden Ordner die Variable TERMINFO setzen. So könnte es entsprechend aussehen:
Kopie nach /ffp/mybin/v/v102
Aufruf von htop:

TERMINFO="/ffp/mybin/" /ffp/mybin/htop

Das funktioniert natürlich auch mit dem Programm screen ganz genauso, hier muss die entsprechende Datei …/s/screen kopiert werden und anschließend funktionieren hier ebenfalls die Aufrufe von htop oder rtorrent unter screen.