EXT4-USB-Storage sharing mit OpenWRT auf WL-600g
Um dauerhaft Speicherplatz und einen Drucker im Netzwerk freizugeben, ohne einen umfangreicheren Server einzusetzen, habe ich mich entschieden bei Ebay, für gerade mal ~15€, einen Asus WL-600g ADSL-Wifi-Router zu ersteigern. Gerade auch deshalb, um OpenWRT als offene Firmware darauf zu installieren, die es ermöglicht auch EXT4-Dateisysteme in Form einer angeschlossenen externen Festplatte einzubinden und freizugeben.
Angenommen, man hat gleich zu beginn den Router mit einer fehlerhaften Firmware-Version gebrickt, kann man relativ einfach im “Recieve-Mode” des Routers weiterhin unterschiedliche Images zum flashen ausprobieren.
Dazu hält man den Resetknopf des Routers wärend des anschalten eine Weile gedrückt, bis die Power-LED anfängt zu blinken. Mit einem per LAN angeschlossenen PC lassen sich dann folgende Befehle ausführen:
sudo ifconfig eth0 192.168.1.3
atftp 192.168.1.1
tftp>put openwrt-96348GW-generic-squashfs-cfe.bin
tftp>quit
In diesem Beispiel muss sich das Image openwrt-96348GW-generic-squashfs-cfe.bin von Backfire 10.03.1-rc4 im selben Ort befinden, in dem auch der atftp-Client ausgeführt wird.
Laut den gängigen Tutorials sollte man nun ca. 5 min. warten, bis das Image in den Flash-Speicher geschrieben wurde, danach kann man den Router neustarten und erreicht diesen nach kurzer Zeit auch über Telnet:
telnet 192.168.1.1
BusyBox v1.15.3 (2010-11-11 23:54:31 PST) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
Backfire (10.03.1-rc4, r24045) --------------------
* 1/3 shot Kahlua In a shot glass, layer Kahlua
* 1/3 shot Bailey's on the bottom, then Bailey's,
* 1/3 shot Vodka then Vodka.
---------------------------------------------------
root@OpenWrt:~# passwd root
Changing password for root
New password:
Retype password:
Password for root changed by root
exit
Als nächstes kann man sämtliche notwendige USB-Module installieren, nachdem der Internetzugang für das Gerät konfiguriert ist:
ssh root@192.168.1.1
root@OpenWrt:~# vi /etc/config/network
# in dieser Datei kann folgender Abschnitt wie folgt angepasst werden:
#config interface lan
# option type bridge
# option ifname eth1
# option proto static
# option ipaddr 192.168.1.2
# option netmask 255.255.255.0
# option gateway 192.168.1.1
# option nat 1
root@OpenWrt:~# echo "192.168.1.1 DSLMODEM" >> /etc/hosts
# der nameserver wird gesetzt, dazu sollte man auch noch ein startup-script anlegen!
root@OpenWrt:~# echo "nameserver 192.168.1.1" > /etc/resolv.conf
# ohne reboot schonmal routing setzen:
root@OpenWrt:~# route add default gw 192.168.1.1
root@OpenWrt:~# ifconfig br-lan 192.168.1.2
Trying to ping google …
ssh root@192.168.1.2
root@OpenWrt:~# ping google.com
PING google.com (209.85.148.104): 56 data bytes
64 bytes from 209.85.148.104: seq=0 ttl=56 time=46.284 ms
64 bytes from 209.85.148.104: seq=1 ttl=56 time=46.569 ms
^C
--- google.com ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 46.284/46.426/46.569 ms
# jetzt Paketquellen aktualisieren!
root@OpenWrt:~# opkg update
root@OpenWrt:~# opkg install kmod-usb2 kmod-usb-storage kmode-fs-ext4
# Sollte sich alles problemlos installiert haben, sollte in dmesg die Festplatte beim anschließen erkannt worden sein!
# Folgender Befehl sollte auch die ext4-Partition auflisten:
root@OpenWrt:~# fdisk -l
root@OpenWrt:~# mkdir /mnt/externe
root@OpenWrt:~# mount /dev/sda1 /mnt/externe
root@OpenWrt:~# ls -la /mnt/externe
# done! :)
Für die Installation des Samba-Servers hatte der Asus-Router selbst keinen Speicherplatz mehr, deswegen richten wir nun einen Platz für die Samba-Installation auf der externen Festplatte ein:
root@OpenWrt:~# mkdir /mnt/externe/openwrt
root@OpenWrt:~# echo "dest externe /mnt/externe/openwrt" >> /etc/opkg.conf
opkg -d externe -V2 install samba-common samba-server samba3
# nun müssen wir die externe Installation in unser Root-FS linken, dafür gibt es ein Script!:
root@OpenWrt:~# cd /bin
root@OpenWrt:~# wget http://onny.project-insanity.org/files/opkg-link
root@OpenWrt:~# chmod a+x opkg-link
root@OpenWrt:~# opkg-link add samba-server
root@OpenWrt:~# /etc/init.d/samba start
# done! ;)
Es kann vorkommen, dass sich opkg aus unerklärlichen Gründen “killed”, in dem Fall kann man die Pakete samt dessen abhängigkeiten auch manuell laden und installieren: http://downloads.openwrt.org/backfire/10.03.1-rc4/brcm63xx/packages/.
Und so sieht meine Samba-Konfigurationsdatei aus, wenn die komplette Festplatte mit Lese- und Schreibrechten für Gäste freigegeben werden soll:
root@OpenWrt:~# cat /etc/samba/smb.conf
[global]
syslog = 0
syslog only = yes
workgroup = LAN
server string = OpenWrtServer
security = share
encrypt passwords = yes
guest account = nobody
local master = yes
name resolve order = lmhosts hosts bcast
unix charset = UTF-8
[externe]
comment = /mnt/externe
path = /mnt/externe
browseable = yes
public = yes
writeable = yes
Es kann aber auch ein Benutzer angelegt werden, der sich bei der Samba-Freigabe authentifizieren muss:
root@OpenWrt:~# smbpasswd samba password
# die Freigabe in der Samba-Konfiguration würde dann so aussehen:
[externe]
users = samba
comment = /mnt/externe
path = /mnt/externe
browseable = yes
writeable = yes
# Die Änderungen werden dann übernommen mit:
root@OpenWrt:~# /etc/init.d/samba restart
Soweit so gut. Mal sehen ob ich diese Konfiguration, sobald sie sich im dauerhaften Einsatz bewährt, statisch eintrage, d.h. fstab-Eintrag anlegen und ein Startup-Script für opkg-link sowie den Samba-Daemon.
Aber als nächstes erstmal USB-Druckerfreigabe mit Cups, Blogeintrag folgt :)