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 :)

No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

* Checkbox GDPR is required

*

I agree

Software
2
Bye bye Play Store! Mirroring Play Store Apks to private F-Droid repo

This small tutorial will show you how to setup your own F-Droid repository containing automatically mirrored Play Store apps. Using this private repo, you don’t have to relay on Google Play Store or third party stores anymore to keep non-free apps up-to-date. All you need to have is a Linux …

Software
Ebook reader app for Nextcloud

Because of lack of altenatives I decided to write a small ebook reader plugin for Nextcloud. The task of creating such an app was quite easy: I just forked the files_pdfviewer extension and replaced PDF.js with the Epub.js library. In the app template file, I used the reference ebook reader …

Software
Hacking replay gain audio normalization into Jellyfin

There is already a feature request for audio normalization in Jellyfin media server. This is important if you want to listen to your music collection while always having the same loudness level. Usually, in different recordings or music genres some tracks are louder and others are more quiet. The standard …