OpenWrt auf TL-MR3040: Enge Platzverhältnisse

Hintergrund: OpenWrt auf TP-Link TL-MR3040

Das ist der Beschrieb, wie man eine minimalen OpenWrt-Installation, angepasst an die eigenen Bedürfnisse, erreichen kann.
Als Plattform dient Linux (Fedora 19), jede andere (Linux-)Plattform eignet sich genauso so gut.

Die Aufgabe oder das Problem

Der TP-Link TL-MR3040 mit der Hardware Revision >2 läuft nur auf den aktuellen Snapshots (genannt trunk). Sein Flashspeicher ist bedauerlicherweise auch nur 4MB gross. Aber die Trunk-Versionen sind minimal. Sie lassen zwar ssh zu, haben aber keine Weboberfläche dabei. Diese muss dazu installiert werden. Doch das raubt beinahe den gesamten restlichen Speicherplatz. Statt 816K sind dann nur noch 280K frei. Wenn luci aber schon im "Rom" (squash-fs) wäre, würde weniger Platz verloren gehen. Die Pakete sind im squash-fs komprimiert. Wenn sie dazu installiert werden, sind sie im knappen Flash-Speicher nur unkomprimiert abgelegt.

Um die Pakete in die Image-Datei zu bringen muss aber mit Image Generator (Image Builder) ein "flashable image" erstellt werden. Dieser Weg ist zwar nicht sehr aufwändig, aber nur auf Linux Systemen und mit etwas Shell Kenntnissen durchführbar. Wie man das macht, wird hier beschrieben: & Image Builder: Optimiertes Firmware Image und eigene Pakete">OpenWrt: Build Root & Build Image

Der Artikel soll vorerst zeigen, ob es möglich ist, genügend freien Flashspeicher für die Installation weiterer Pakete zu bewahren. Um es vorweg zu nehmen: Um das eigene Erstellen einer flashbaren Image Datei kommt man in der Praxis eigentlicht nicht herum. Dazu dann unten mehr.

Den Router mit OpenWrt versehen und zwei Möglichkeiten der Wiederherstellung.

Auf dem Router wird die aktuelle trunk version installiert (wenn man will inkl. Luci). Dazu lädt man sich die Image-Datei herunter:

http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-mr3420-v2-squashfs-factory.bin

Dann wird der Router ganz normal über das TP-Link Webinterface wie hier beschrieben, installiert und minimal eingerichtet (Netzwerk und Wireless). Anschliessend wird via Weboberfläche ein Backup erstellt (das auf dem lokalen PC gesichert wird. Format tar.gz).

Die wichtigste Datei ist /etc/config/network. Der Autor hat folgende Einstellungen verwendet ('lan'):

config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config globals 'globals'
    option ula_prefix 'fd9f:1775:86ae::/48'

config interface 'lan'
    option ifname 'eth0'
    option type 'bridge'
    option proto 'static'
    option netmask '255.255.255.0'
    option ip6assign '60'
    option gateway '192.168.0.3'
    option broadcast '255.255.255.0'
    option dns '192.168.0.3'
    option ipaddr '192.168.0.230'

Wenn man Luci installiert hat, ist es einfach. Dann lädt man via Webinterface die Update-Version des trunk files:

http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-mr3420-v2-squashfs-sysupgrade.bin

in den Flashspeicher. Luci hilft sehr, es bleiben alle Einstellungen vorhanden, nicht jedoch die Pakete.

Manuell geht es auch einfach: Nach jedem Installationsversuch und dem Löschen aller Einstellungen kann mit folgenden Schritten alles wieder hergestellt werden:

Falls die IP des Rechners nicht im Netz 192.168.1.0/24 liegt, zuerst auf das entsprechende interface (ifconfig):

ifcfg wlp3s0:0 add 192.168.1.5

Dann:

telnet 192.168.1.1

Nach dem Einloggen auf dem Router das root Passwort setzen und damit ssh (dropbear) aktivieren:

passwd

In einer weiteren Shell kopiert man dann nach dem Versuch via ssh einzuloggen die ausgepackten Konfigurationsdateien zurück. Evtl. muss aus ~/.ssh/know_hosts auf dem lokalen PC der Hostkey der vorhergehenden Installation gelöscht werden.

Also: Auspacken des Webarchives und Wechel in das Verzeichnis etc/config. Die IP-Nummer des Routers ist default unter OpenWrt 192.168.1.1

cd verzeichnis_mit_backup_datei
tar xvf backup-Persephone-2014-03-21.tar.gz
cd ./etc/config
scp system network wireless root@192.168.1.1:/etc/config

In der ersten Shell:

/etc/init.d/network reload # oder
reboot

Nun kann ganz normal wieder auf die gewohnte IP mit SSH eingeloggt werden.

Zurücksetzen des TL-MR3040

Der Router wird im Notfall mit:

mtd -r erase rootfs_data

wieder zurück gesetzt oder per Hardware:

Hintergrundinformationen: OpenWrt: Debricking (TL-WDR3600 / TL-WDR4300 / TL-MR3040)

  1. WLAN-Router einschalten
  2. WLAN-Router ausschalten, alle USB-Geräte entfernen.
  3. Fast 5 Sekunden warten
  4. "Reset" für ungefähr 3 Sekunden drücken, das Gerät ist nun im Failsafe-Modus
  5. PC LAN auf fix 192.168.1.10 einstellen
  6. mit 'telnet 192.168.1.1' auf dem Router einloggen.

Ausgangslage

Nachdem der Router mit der OpenWrt-Firmware (trunk: "Barrier Breaker") ausgestattet wurde, nach firstboot oder initial install und der primären Netzwerkkonfiguration (-4K) zeigt er folgenden freien Speicher im rootfs / an:

df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.0M    208.0K    816.0K  20% /

Eine Weboberfläche ist erwünscht. Wer will schon immer via ssh konfigurieren, vor allem nicht von einem Tablet ohne richtige Tastatur aus. Doch Luci braucht viel Platz.

Installation der Weboberfläche Luci

Vorweg genommenes Fazit: Die Ersparnis ist minimal (8K) wenn die Packete zum Installieren angegeben werden, statt der regulären Installation. Wirklich wertvolles Flash-RAM lässt sich nur durch eigene Images einparen. Später dazu dann mehr. Hier wird am Beispiel Luci (die Weboberfläche, ohne die man OpenWirt nicht wirklich betreiben möchte) gezeigt, wieviel sich damit einsparen lässt.

Luci: reguläre Installation

Standard und anschliessende Entfernung. Es bleibt einiges "unbereinigt".

opkg install luci

Wieviel Speicher bleibt im root-fs / nach der Installation von Luci übrig:

df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.0M    860.0K    164.0K  84% /

Reicht ein "einfaches" (man muss erst mühsam alle abhängigen Pakete herausfinden)? Nein:

opkg --force-dependes remove  luci-lib-sys liblua libuci-lua lua libubus-lua luci-lib-core \
luci-lib-nixio luci-sgi-cgi luci-lib-web luci-proto-core luci-i18n-english luci-mod-admin-core \
libiwinfo-lua luci-theme-base luci-theme-bootstrap luci-app-firewall luci-lib-ipkg \
luci-proto-ppp luci-mod-admin-full uhttpd uhttpd-mod-ubus luci

Man sieht, es bleibt einiges übrig von der Installation.

df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.0M    252.0K    772.0K  25% /

Den Router wieder zurück setzen und neu beginnen.

Luci: Ausgewählte Installation

Neuer Versuch: Luci "minimal" installieren. Immer noch sehr wenig Platz übrig.

opkg install luci-mod-admin-full luci-theme-openwrt uhttpd libiwinfo-lua
df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.0M    752.0K    272.0K  73% /

Luci: minimale Installation

http://wiki.openwrt.org/doc/howto/luci.essentials#minimalistic.offline.installation

mkdir -p /tmp/luci-offline-packages; cd /tmp/luci-offline-packages
opkg update; opkg -t . --download-only  install liblua lua libuci-lua libubus-lua uhttpd \
 luci-lib-ipkg luci-i18n-english luci-sgi-cgi luci-lib-core luci-lib-nixio luci-lib-sys \
 luci-lib-web luci-proto-core luci-theme-base luci-theme-openwrt \
 luci-mod-admin-core luci-mod-admin-full
for pkg in liblua lua libuci-lua libubus-lua uhttpd luci-lib-ipkg luci-i18n-english \
 luci-sgi-cgi luci-lib-core luci-lib-nixio luci-lib-sys luci-lib-web luci-proto-core \
 luci-theme-base luci-theme-openwrt luci-mod-admin-core luci-mod-admin-full; \
do opkg install /tmp/luci-offline-packages/$pkg*.ipk; done
df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.0M    744.0K    280.0K  73% /

Es bleibt wohl nur übrig, selber ein Image zu bauen.

Was ist mit DSLRDashboard / ddserver ?

In der Zwischenzeit schnell ddserver (DSLRDashboard) für den remote Betrieb von SLRs installiert. Die Konfiguration ist die selbe wie in der Trunk-Version.

ATTITUDE ADJUSTMENT (Attitude Adjustment, r39408),

Fast kein Speicher ist mehr frei:

df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                  320.0K    224.0K     96.0K  70% /

uname -a
Linux Persephone 3.3.8 #1 Tue Feb 18 18:11:28 CET 2014 mips GNU/Linux

Ziel ist, den ddserver selber auf einem angepassten Image zu installieren. Das Ziel wurder hier erreicht: