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.
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.
Auf dem Router wird die aktuelle trunk version installiert (wenn man will inkl. Luci). Dazu lädt man sich die Image-Datei herunter:
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:
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)
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.
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.
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.
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% /
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.
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: