Prezentacja statusu połączenia
Ostatnia zmiana: 2013-11-26 18:43

Proste HOWTO na temat pisania stron opartych na wbudowanym w busybox serwerze http. Wynikiem będzie prosta strona prezentująca status połączenia oraz adres ip interfejsu wan

Przeniesienie LuCI

Domyślnie interfejs graficzny słucha na porcie 80. Można przenieść go na inny port (np. na 8080) a ten domyślny wykorzystać do prezentowania statusu połączenia. Dzięki temu zostanie uruchomiony drugi proces serwera httpd. Jako katalog domowy wskazujemy np. /www1


    # uci set httpd.@httpd[0].port=8080
    # uci add httpd httpd
    # uci set httpd.@httpd[-1].port=80
    # uci set httpd.@httpd[-1].home=/www1
    # uci commit httpd
    # /etc/init.d/httpd restart

Aktualizacja - poniższe rozwiązanie działa także z uhttpd; jego plik konfiguracyjny to /etc/config/uhttpd.

Strona HTML

Niestety potrzeba jest znajomość HTML oraz pisania skryptów. Busybox może wykonywać skrypty zawarte w podkatalogu cgi-bin. Należy więc stworzyć plik HTML który nic nie będzie robił a wywoła taki plik.


    # touch /www1/index.html

Niech zawiera on następującą treść:


    <html>
    <head>
    <meta http-equiv="refresh" content="0; URL=cgi-bin/status.sh" />
    </head>
    <body style="background-color: white">
    </body>
    </html>

Zostaje już tylko stworzenie pliku status.sh. W najprostszej postaci - niech pinguje Google, jeżeli jest odpowiedź - niech wyświetli adres IP interfejsu WAN.


    # mkdir -p /www1/cgi-bin
    # touch /www1/cgi-bin/status.sh
    # chmod 755 /www1/cgi-bin/status.sh

Plik powinien przetworzyć żądane informacje a wynik powinien być czystą stroną html która zostanie zinterpretowana przez przeglądarkę:


    #!/bin/sh
    echo "Content-type: text/html"
    echo ""
    echo "
    <html>
    <style type=\"text/css\">
    .centered {
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        width: 50%;
        height: 50%;
        margin: auto;
        text-align: center;
    }
    h1 {
        color: red;
    }
    h2 {
        color: green;
    }
    </style>
    <head>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
    </head>
    <body><div class=centered>"
    if ping -c1 -W2 www.google.pl > /dev/null; then
        echo "<h2>Połączony</h2>"
        /sbin/ifconfig $(uci get network.wan.ifname) | awk -F"[ :]+" '/inet/ { print $4 " / " $8}'
    else
        echo "<h1>Brak połączenia</h1>"
    fi
    echo "</div></body></html>"

Test

Wpisać w przeglądarce


    http://adres_ip_rutera