Dieses Tutorial bezieht sich auf fun_plug 0.5, welches veraltet ist und daher nicht mehr genutzt werden sollte! Dieses Tutorial ist daher ebenfalls veraltet! Bitte sehe hier nach den aktuellen Tutorials! Diese Anleitung wurde auf den folgenden NAS getestet: Conceptronic CH3SNAS, D-Link DNS-323 Tutorials zu anderen Geräten sind hier zu finden. Wie ich schon des öfteren berichtet hatte, gibt es die Möglichkeit, das Conceptronic CH3SNAS oder das D-Link DNS-323 mittels eines sog. “fun_plug” um Zusatzfunktionalitäten zu erweitern. “fonz”, der Entwickler des bekanntesten fun_plug-Scripts “FFP”, hat mittlerweile die Version 0.5 released, die viele Neuerungen mit sich bringt. Da mein USB-Stick sowieso immer am NAS hängt, habe ich mich gleichzeitig mit dem Update auch für ein Betreiben des ffp auf den USB-Stick entschieden. Doch was bringt eigentlich das neue “FFP”?

Ich zitiere hier einfach mal die Release Notes:

[spoiler /Release Notes zeigen/ /Release Notes verstecken/]

  • By default, the 0.5 funplug is installed to /mnt/HD_a2/ffp, but compiled with /ffp as prefix. The fun_plug script creates a symbolic link /ffp -> /mnt/HD_a2/ffp that allows the programs to run. If you move the funplug (e.g. to run off a USB key), adjust the FFP_PATH variable in the fun_plug script accordingly (and add code to mount the USB key).
  • The 0.5 version is built with a custom toolchain based on binutils-2.18, gcc-4.1 and uClibc-0.9.29. Consequently, the 0.5 funplug comes with its own set of runtime libraries in /ffp/lib. (Earlier fun-plugs used a toolchain created from the GPL sources tarball provided by D-Link and were linked against the firmware libraries in /lib.)
  • Native binutils and gcc packages are available. Programs compiled with these tools will depend on /ffp/lib/ld-uClibc.so.0 as dynamic linker and cannot be used without this funplug (unless you know how to change the dynamic linker path at compile-time). Compiler and linker will also search the /ffp/include and /ffp/lib directories for include files and libraries.
  • All development files (include files, static libraries, etc) are included in the respective package files. There are no binary-only or development packages. For some packages to compile successfully, it may be necessary to relink /bin/sh to /ffp/bin/bash.
  • The included dns323-utils (dns323-temp, -fan, …) will use libraries in /ffp, too. If you want them to run with firmware libraries (e.g. to prevent disk accesses), use a package from here: http://www.inreto.de/dns323/utils/ 

[/spoiler]

Das ffp an sich ist perfekt, um direkt auf einen USB-Stick gepackt zu werden. Ich hatte bereits schon einmal demonstriert, wie dies für bestimmte Programme funktioniert, jetzt ist das gesamte fun_plug dran, da dann Probleme, wie sich nicht abschaltende Festplatten und lange Antwortzeiten beim ersten Aufrufen einer Webseite (lighttpd auf der ausgeschalteten Festplatte) endlich der Vergangenheit angehören.

Im nun folgenden Tutorial gelten diese Abkürzungen:

  • NAS: Conceptronic CH3SNAS oder D-Link DNS-323, funktioniert auf beiden Geräten
  • ffp: fun_plug 0.5 von fonz
  • “#:” bedeutet Konsoleneingabe (ohne die Zeichen #:)
  • [enter] bedeutet Das Drücken der Return-Taste auf der Tastertur

Ich bitte darum das Tutorial erst einmal KOMPLETT zu lesen, BEVOR man es durchführt! Viele Fragen kommen dann erst gar nicht auf und manche Probleme klären sich so von selbst!

Für dieses Tutorial braucht man oh wunder einen USB-Stick. Dieser wird im laufen dieses Beitrag komplett formatiert, d.h. alle Daten gehen verloren! Größenmäßig sollte der Stick oberhalb von 512MB, besser bei einem 1GB liegen. Eine komplett-Installation des fun_plug benötigt etwa 500MB inklusive Paketverzeichnis (Größe ~100MB, wobei man das auch auf der Festplatte halten kann, da man es eh nur einmal braucht). Wichtig in diesem Tutorial ist die Menge der Festplatten im NAS. Je nach dem wird der USB-Stick anders angesprochen. Bei einer Festplatte wird der USB-Stick als “sdb”, bei zwei Festplatten als “sdc” angesprochen. Ich spreche im Tutorial und in allen Dateien immer von sdc, ich bitte dies selbstständig auf sdb zu ändern, wenn nur eine Festplatte im Gehäuse steckt! Eventuell (bei genug Nachfrage) kann ich dies automatisieren, sodass immer nur der richtige USB-Stick (egal ob sdb oder sdc) angesprochen und eingebunden wird. Zudem braucht das NAS eine Internetverbindung, sonst wird meine Anleitung in der momentanen Form nicht laufen!

Bitte jetzt den USB-Stick anstecken! Das grundlegende Problem ist zunächst das Dateisystem des USB-Sticks. Ich rate zu ext2 , da dies bereits im NAS selbst eingesetzt wird und als relativ robust anerkannt ist. Das Problem ist nun, dass die meisten Leser vermutlich kein Programm (z.B. Partition Magic) oder auch keine Umgebung (Linux) installiert haben um den Stick auf ext2 zu formatieren.

Zunächst muss sichergestellt sein, dass das NAS über eine gültige Netzwerkkonfiguration (“Setup” -> “LAN”) mit Gateway & DNS-Server verfügt. Wird die IP-Adresse automatisch bezogen, ist das im Regelfall korrekt eingestellt.

Wenn man noch Telnet oder SSH-Zugang zum NAS hat (z.B. durch ein existierendes fun_plug), kann man den folgenden Punkt überspringen und hier weitermachen.

Wir werden daher zunächst eine minimale Linux-Umgebung auf dem NAS einrichten, sodass wir die anschließend folgenden Schritte zur Formatierung auf dem NAS ausführen können. Wenn man keinen Zugang hat (z.B. neues NAS), dann bitte folgende drei Punkte befolgen:

  • Download dieser Datei
  • Als “fun_plug” (genau so benennen!) über das normale File-Share ins Hauptverzeichnis auf die erste Festplatte (Zumeist als “Volume_1” über Samba freigegeben) legen.
  • Beim Reboot wird das fun_plug automatisch heruntergeladen und initialisiert. (Es ist die Version 0.1 von fonz, wir brauchen da aber nix besonders)

Hat man noch Zugang zum NAS, jedoch noch nie einen USB-Stick daran betrieben, so benötigt man eine Datei namens “usb-storage.ko”, die die Einbindung von USB-Sticks in System erlaubt. Zunächst bootet man das NAS mit angestecktem Stick einmal frisch. Anschließend loggt man sich auf das NAS ein und lädt das USB-Modul:

1
2
3
4
mkdir -p /mnt/HD_a2/.bootstrap/
wget http://wolf-u.li/u/165/ -O /mnt/HD_a2/.bootstrap/usb-storage.ko
cp /mnt/HD_a2/.bootstrap/usb-storage.ko /lib/modules/
insmod /lib/modules/usb-storage.ko

Bitte vor dem ausführen der folgenden Schritte prüfen, ob der Stick wirklich dran steckt! Nun werden wir den Stick komplett plätten und frisch partitionieren. Dazu verbindet man sich mit Telnet auf das NAS.

FFP USB

Unter Windows verwendet man dazu am einfachsten das Tool PuttY  von hier . Nach dem Start muss man die Adresse des NAS unter “Host Name” angeben und auf “Open” klicken. Nun öffnet sich die Konsole, wo man direkt eingeloggt ist. Nun benötigt man fdisk zur Formatierung des USB-Sticks (der Befehl ist so korrekt, siehe Beitrag!):

1
cat|fdisk /dev/sdc

FFP USB
]

Dieses Tool zeigt nun die Zeile “Command (m for help):”. Zunächst lässt man sich mittels “p[enter]” die momentanen Partitionen anzeigen. Die Ausgabe sieht bei meinem 512MB Test-USB-Stick so aus:

1
2
3
4
5
6
Disk /dev/sdc: 519 MB, 519569408 bytes
16 heads, 62 sectors/track, 1022 cylinders
Units = cylinders of 992 * 512 = 507904 bytes

Device Boot Start End Blocks Id System
/dev/sdc1 1 1022 506881 c Win95 FAT32 (LBA)

Nun löschen wir diese eine Partition:

1
d[enter]

Und legen eine neue an:

1
2
3
4
5
6
7
n[enter]
p[enter]
1[enter]
[enter]
[enter]
t[enter]
83[enter]

Nun haben wir eine Partition erstellt, die die maximale Größe des USB-Sticks ausfüllt und als Linux-Partition markiert ist. DIe Änderungen sehen wir uns noch nochmal an und speichern diese anschließend:

1
2
3
4
5
6
7
8
9
p[enter]
w[enter][/code]

![FFP USB](/upload/2008/07/1318-ffpusb-3.png "1318-ffpusb-3")

Diese werden wir nun noch auf ext2 formatieren:

```bash
mke2fs /dev/sdc1

Damit ist der USB-Stick fertig vorbereitet.

FP USB

Der nächste Schritt ist nun, dass das endgültige fun_plug heruntergeladen werden muss. Das alte fun_plug wird direkt ersetzt. Das kann man nun noch direkt in der Konsole machen:

1
2
3
rm /mnt/HD_a2/fun_plug
wget http://www.inreto.de/dns323/fun-plug/0.5/fun_plug -O /mnt/HD_a2/fun_plug
chmod a+x /mnt/HD_a2/fun_plug

Wahlweise kann diese Datei auch direkt  heruntergeladen und gegen die momentan existierende Datei im Hauptverzeichnis der ersten Festplatte ausgetauscht werden. Nun brauchen wir noch das neue FFP_SETUP_SCRIPT, welches in einem Update von fun_plug 0.5 eingeführt wurde:

1
wget http://wolf-u.li/u/201 -O /mnt/HD_a2/.bootstrap/setup.sh

Zu guter letzt muss man das ganze noch aktivieren:

1
chmod +x /mnt/HD_a2/.bootstrap/setup.sh

Wenn man die obige minimal-umgebung gestartet hat, dann kann man diese nun vor dem Restart noch entfernen:

1
rm -R /mnt/HD_a2/funplugusbstick/

Nun muss das NAS einmal neu gestartet werden, was entweder über das Webinterface oder die Konsole möglich ist:

1
reboot

Kleiner Hinweis: Meine setup.sh regelt den gesamten Zugriff auf den USB-Speicher und die Initialisierung des fun_plug auf dem USB-Stick. Sollte der Zugriff nicht klappen und kein Log angelegt werden, bitte über die Kommentarfunktion melden.

FFP USB

Nach einem Reboot ist das neue fun_plug 0.5 von fonz geladen und automatisch telnet aktiviert. Zunächst sollte man sich nun mit einem geeigneten Telnet-Programm (unter Linux einfach nur “ssh”, unter Windows verwende ich Putty ,wie oben zu sehen) auf dem NAS einloggen. Bitte für den folgenden Schritt einfach mal das Bild links ansehen, damits klarer wird.

  • Login as: root
  • Passwort sollte keines verlangt werden

Wenn (oder direkt) “/mnt/HD_a2 #” erscheint, ist man eingeloggt und kann fortfahren.

Als eine der ersten Aktionen wird nun /etc/shadow mittels pwconv erstellt. Das Passwort wird anschließend mittels “passwd” geändert:

1
2
pwconv
passwd

Wenn das neue Passwort zweimal eingegeben wurde, muss man den root-User noch aktivieren und dessen Home-Verzeichnis verlegen:

1
2
3
usermod -s /ffp/bin/sh root
mkdir -p /ffp/home/root/
usermod -d /ffp/home/root/ root

Nun kann man den Login nun direkt testen. Hierzu gibt man im Anschluss:

1
login

ein. Wenns nicht klappt, einfach die Prozedur ab “passwd” wiederholen.

Wenn alles geklappt hat, dann muss das Passwort in den internen Flash-Speicher gespeichert werden.

1
store-passwd.sh

Nun wird der SSH-Server aktiviert, da telnet bereits als sehr unsicher (v.a. aufgrund des unverschlüsselten Verkehrs) bekannt ist (wird eine Weile dauern):

1
2
chmod a+x /ffp/start/sshd.sh
sh /ffp/start/sshd.sh start

Nun den Telnet-Client noch nicht schließen! Öffne gleichzeitig nochmals PuttY und verwende aber statt telnet nun SSH. Versuche eine Verbindung zum NAS. Diese wird erfolgreich sein.

Nun (und NUR wenn der Login erfolgreich war!) kann der Telnet-Server deaktiviert werden:

1
chmod -x /ffp/start/telnetd.sh

Auf dem usbstick ist unter “/mnt/usbstorage” ein Verzeichnis namens “ffp” angelegt worden. Darin befindet sich ein Unterverzeichnis “start”, in dem verschiedene Startdateien für diverse Dienste liegen. Typischerweise weisen davon nur wenige das Attribut X, also Executable. Nur diese werden auch beim Start des fun_plug ausgeführt. Ein paar Zeilen weiter oben habe ich “chmod +x sshd.sh” angeordnet. Diese Anweisung markiert eine Datei als ausführbar. Alle Dateien im Start-Ordner, die als executable markiert sind, werden vom fun_plug aufgerufen.

Weitere Software kann man nun einfach installieren. Hierzu muss man zunächst alle Pakete von fonz und mir auf das NAS syncronisieren. Ich habe das Verzeichnis auf dem USB-Stick angelegt, wenn es woanders sein, soll soltle das der versierte Nutzer selbst erledigen können ;)

1
2
3
4
5
mkdir /ffp/pkg/
cd /ffp/pkg/
wget http://wolf-u.li/u/173/ -O /ffp/pkg/updater.sh
chmod a+x /ffp/pkg/updater.sh
sh /ffp/pkg/updater.sh

Mit diesen Befehlen habe ich einen Ordner namens “pkg” im Ordner “ffp” erstellt. Zusätzlich wurde nun die Ordner “packages” (Fonz’ Repository) und “additional” (Uli’s Repository) angelegt, der alle kompilierten Pakete von Fonz und Uli enthält.

Nun kann man Pakete installieren. Entweder man installiert nun einzelne Pakete (Achtung abhängigkeiten beachten!):

1
funpkg -i paketname.tgz

Oder einfach alle aus Fonz’ Repository installieren, damit sind dann zunächst alle Abhängigkeiten gelöst:

1
2
cd /ffp/pkg/packages/
funpkg -i *.tgz

Zusätzliche Pakete (z.B. PHP & mysql) habe ich dann später im Verzeichnis /ffp/pkg/additional abgelegt.

Ein Wort noch zur Paketverwaltung, das Programm funpkg bedient man wie folgt:

1
2
3
4
5
6
7
8
9
Copyright (c) 2008 Tobias Poschwatta

Install: funpkg -i
Reinstall: funpkg -I
Upgrade: funpkg -u
Remove: funpkg -r

Other options:
 -D  System root directory (default: /)

Schlusswort: An diesem Tutorial bin ich relativ lange gesessen, damit es einigermaßen verständlich und leicht durchzuführen ist. Doch kein Tutorial ist perfekt und hier können sich aufgrund der Länge Fehler eingeschlichen haben. Ich bitte diese zu entschuldigen und unverzüglich zu melden! Gerne stehe ich über die Kommentarfunktion sowie per Mail (Adresse ist im Impressum zu finden) bei Fragen und Problemen zur Verfügung.

Changelog des Eintrags: 06.09.2008: Update für das FFP_SETUP_SCRIPT 21.12.2010: Update der Download-URLs, Einführung des Update-Scripts