Mittwoch, 11. Dezember 2013

OpenWRT: Backend erweitern mit dem "LuCI Shell Command Module"

Mit dem LuCI Shell Command Module bekommt man die Möglichkeit Shell-Befehle oder eigene Scripts aus dem Backend heraus abzusetzen und damit die vielseitige Routerdistribution OpenWrt individuell zu erweitern. Der Artikel erklärt zunächst die grundsätzliche Handhabung und zeigt dann ein Beispiel wie die OpenWrt-Konfiguration mit eigenen Scripts erweitert werden kann.

Installation und Handhabung

Nach der Installation des Pakets luci-app-commands (ggf. nach Neustart) steht unter System ein neuer Eintrag "Benutzerdefinierte Kommandos" im LuCi-Backend (für tiefergehende Informationen und Varianten der Paketinstallation verweise ich auf das OpenWrt-Wiki).
Der neue Unterpunkt ist wiederum in Übersicht und Konfigurieren unterteilt. Letzterer wird benötigt um zunächst einen Befehl zu hinterlegen. In diesem Beispiel wollen wir uns den verbleibenden Speicherplatz des Systems anzeigen lassen: df -h.

  1. Entsprechend tragen wir im ersten Feld einen sinnvollen, doch kurzen Namen ein, etwa "freier Speicherplatz".
  2. Im zweiten Feld steht der Befehl, hier "df -h". Die Standardbefehle stehen im Suchpfad und können direkt angesprochen werden. Bei eigenen Scripts muss das Verzeichnis mit genannt werden, z.B. "/meinOrdner/scripte/meinScript".
  3. Die Checkbox bei Argument bleibt in diesem Beispiel frei.

Nach dem Speichern und Anwenden können wir unser Werk in der Übersicht betrachten und auch Ausführen. Die Ausgabe erscheint umgehend und direkt unterhalb. Alternativ erhalten wir mit Herunterladen die Ausgabe als Textdatei.

Eigene Erweiterung: config-Dateien auflisten

Am Beispiel des Scripts "configList" soll die Verwendung eigener Scripts und die Handhabung von Argumenten gezeigt werden. Das Listing ist am Ende des Artikels zu finden.

Linux/Unix Systeme pflegen üblicherweise ihre Konfigurationen innerhalb des Ordners /etc in diversen Dateien und Ordnern. Um die Konfiguration zu zentralisieren und zu vereinheitlichen setzt OpenWrt das UCI (Unified Configuration Interface) ein und hält die wesentlichen Konfigurationsdateien mit einer einheitlichen Syntax im Ordner /etc/config vor.
Für ein komfortables Auflisten dieser Dateien hat der Autor ein Script configList erstellt. Das Script kennt zwei angehängte Parameter, Und zwar "configList all" was eine meist sehr lange Liste aller config-Dateien ausgibt oder "configList <config-Dateiname>" wobei der Dateiname für ein Datei aus dem Verzeichnis /etc/config steht. Diese Namen werden aufgelistet wenn das Script ohne ein Argument aufgerufen wird. Soweit das Verhalten wenn das Skript in einer Shell-Umgebung, beispielsweise via SSH oder Telnet, ausgeführt wird.
Befüllen wir nun eine zweite Zeile im Bereich Konfigurieren:

  1. Name: "show config's [filename|all]" enthält einen Hinweis auf mögliche Argumente
  2. Befehl: "/root/bin/configList". Zu Beachten ist das das Script im benannten Verzeichnis gespeichert ist und ausführbar sein muss (siehe chmod).
  3. Argumente: Das Häkchen setzen
Nach dem Speichern und Anwenden können wir unser Werk in der Übersicht betrachten. Ein zusätzliches Eingabefeld ist vorhanden. Das untere Bild zeigt die Ausgabe mit einem Parameter.

Listing: configList

#!/bin/sh
# Zeigt Inhalt der Config-Dateien
# Shell oder LUci-Backend
# Version 1.4

## Funktion:
listparam() {
    ls -1 /etc/config/
    echo -e "    Benutze <Name> als Parameter \n    oder Parameter <all>"
}


if [ "$1" = "" ]; then
    echo -e "\n    Folgende Config-Dateien gefunden:"
    listparam
    exit 0
fi

if [ "$1" = "all" ]; then
    for i in $(ls -1 /etc/config/); do
        echo -e "\n______\n### $i ###";
        cat /etc/config/$i
    done
    exit 0
fi

if [ ! -f /etc/config/$1 ]; then
    echo -e "\n    FEHLER! Datei nicht gefunden!"
    listparam
    exit 1
else
    echo -e "\n______\n### $1 ###";
    cat /etc/config/$1
fi

exit 0

1 Kommentar: