Openwrt auf der Easybox 802
Ich musste mal wieder einen Router bauen, da ein Blitzschlag das gute Stück im Haus meiner Familie gegrillt hat. Da bei E-Bay gerade Unmengen an den technisch ziemlich verlockenden Easyboxen von Vodafone herumfliegen, habe ich mal versucht das alte Setup auf diese zu übertragen. Dazu gehört:
- OpenWrt mit Upgrade-Möglichkeit ( Attitude Adjustment )
- stabiles W-Lan
- USB-Speicher mit Raid-1
- nginx + OpenSSL
- Samba-Server
- genügend freier RAM um nicht bei der erst besten Belastung in die Knie zu gehen
Zuerst hatte ich eine 803, da ist das U-Boot wohl noch nicht so ganz fertig und nach einem missglückten Flash-Versuch konnte ich der Box auch mit UART kein Leben mehr einflößen. Für läppische 8 Euro hatte ich dann mit einer 802 mehr Glück. Die wichtigsten Punkte und Details zum Flashen finden sich ( oder werden sich finden) im OpenWrt Wiki.
Der grobe Installations-Weg ist folgender:
- Serielle Konsole anstoepseln
- Booten und brnboot u-boot als second stage bootloader im Ram starten.
- von diesem U-Boot aus flash u-boot flashen
- Neustarten und Daumen drücken, dass alles geklappt hat
- Autoboot schnell unterbrechen, da der httpd irgendwie das Netzwerk kaputt macht
- mit tftp das attitude adjustment Standard-Image installieren
Für das externe Root-Filesystem über USB mit Raid1 musste ich nachträglich noch einige Änderung durchführen. Prinzipiell ist auch hier das OpenWRT Wiki sehr hilfreich. Zuersteinmal musste ich die notwendigen Pakete installieren:
opkg update
opkg install block-mount kmod-usb-core kmod-usb-storage \
kmod-usb-dwc-otg kmod-fs-ext4 kmod-md-raid1 \
kmod-md-mod mdadm e2fsprogs
Das Raid-1 auf den beiden angeschlossenen USB-Sticks installieren und mdadm.conf erzeugen:
mdadm --create /dev/md0 --raid-devices 2 --level 1 /dev/sda1 /dev/sdb1
mkfs.ext4 -m0 /dev/md0
mdadm --examine --scan >> /etc/mdadm/mdadm.conf
Um das extroot dann zu aktivieren gibt es noch zwei Dinge zu tun. Die /etc/config/fstab um folgenden Eintrag ergänzen:
config mount
option target /overlay
option device /dev/md0
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 0
Leider startet OpenWRT Raid-Devices nicht automatisch und ich musste in /lib/preinit/ etwas herumpfuschen. Nach dem Laden der Module scannt determine_external_root() einfach nach Raid-Devices. Danach sollte /dev/md0 existieren und alles rund laufen:
--- /dev/null 2013-08-23 21:06:27.808249859 +0200
+++ 50_determine_usb_root2013-08-23 21:06:32.941570704 +0200
@@ -37,6 +37,8 @@
# /dev/root
[ "$root_device" = "/dev/root" ] && {
er_load_modules
+ sleep 5s
+ /tmp/overlay/sbin/mdadm --assemble --scan -c /tmp/overlay/etc/mdadm/mdadm.conf
[ -n "$extroot_settle_time" ] && [ "$extroot_settle_time" -gt 0 ] && {
sleep $extroot_settle_time
}
Und so sieht sieht der fertige Router dann aus:
root@router1:~# df -h
Filesystem Size Used Available Use% Mounted on
rootfs 3.7G 1.1G 2.6G 29% /
/dev/root 1.8M 1.8M 0 100% /rom
tmpfs 30.2M 268.0K 30.0M 1% /tmp
tmpfs 512.0K 0 512.0K 0% /dev
/dev/md0 3.7G 1.1G 2.6G 29% /overlay
Overlayfs:/overlay 3.7G 1.1G 2.6G 29% /