LuCI-Apps zu entwickeln hat einen gewissen Reiz: Man kann mit relativ wenig Code Oberflächen gestalten, die echt nach etwas ausschauen. Ein bisschen nervig fand ich aber immer das Coden und Austesten der LuCI-Apps.
Eigentlich gibt es nur zwei Möglichkeiten:
- Man schreibt den Code auf dem Zielsystem, wo er direkt ausführbar ist. Allerdings sind standardmäßig nur sehr minimale Editoren, wie
vi
, installiert. Das macht größere Editierungen teilweise umständlich. - Man codet auf dem eigenen PC, wo man jede beliebige IDE/Editor nutzen kann. Allerdings muss man die Dateien dann irgendwie auf das Zielsystem kopieren, z.B. per
scp
.
Diese beiden Ansätze sind eher umständlich. Aber es gibt einen dritten Weg, wo man die Dateien auf dem Router so bearbeiten kann, als seien sie auf dem lokalen Dateisystem.
Router-Dateisystem per ssh einbinden
sshfs
ist ein Programm, mit dem man Ordner von entfernten Rechnern transparent lokal einbinden kann. Im Ergebnis kann man die Dateien so bearbeiten, als seien sie im lokalen Dateisystem gespeichert.
Um sshfs
mit OpenWrt nutzen zu können, müssen wir ein Paket nachinstallieren:
opkg update
opkg install openssh-sftp-server
Anschließend können wir das Router-Dateisystem einfach mit dem Befehl sshfs
einbinden:
sshfs -f frei.funk:/ ~/tmp_sshfs/
Durch diesen Trick können wir nun mit jeder beliebigen IDE/Editor die entsprechenden Dateien direkt bearbeiten. Wir müssen nur die gewünschte Datei innerhalb des Ordners ~/tmp_sshfs/
öffnen, bearbeiten und dann abspeichern. Sie wird automatisch auf dem Router verändert.
Änderungen an LuCI-Apps sofort anzeigen
Wenn man UI-Entwicklung für LuCI macht, ist es sehr praktisch, wenn man die Änderungen, welche man gerade im Code gemacht hat, sofort sehen kann. Das kann man erreichen, indem man im Firefox die Entwickler-Konsole öffnet und darin den Cache deaktiviert. Wenn man nun die Konsole offen lässt und die Seite neu lädt, werden alle Änderungen aus dem Code sofort übernommen.
Ergänzung: SSHFS über einen Jumphost
Weil ich es letztens mal gebraucht hatte, ist es ganz sinvoll, das hier mal zu ergänzen. Da sshfs
leider keine Option für Jumphosts hat, kann man sich mit einem Eintrag in der ssh-config behelfen. Wie genau das geht, ist hier beschrieben.