Benutzer-Werkzeuge


    Warning: Undefined array key "REMOTE_USER" in /usr/local/www/wiki.freifunk-bielefeld.de/lib/tpl/starter/main.php on line 62
  • Admin

  • Warning: Undefined array key "REMOTE_USER" in /usr/local/www/wiki.freifunk-bielefeld.de/lib/tpl/starter/tpl_functions.php on line 50

    Warning: Undefined array key "REMOTE_USER" in /usr/local/www/wiki.freifunk-bielefeld.de/lib/tpl/starter/tpl_functions.php on line 77
  • Registrieren

Webseiten-Werkzeuge


Dies ist eine alte Version des Dokuments!


Installation der Statusseite

Eine kleine Statusseite die den Verkehr und den Status des Gateways anzeigt. Dafür wird lighttpd und ein CGI-Script verwendet.

apt-get install lighttpd
apt-get install gawk

gawk wird für das CGI-Script benötigt. Der Inhalt von /etc/lighttpd/lighttpd.conf:

server.document-root = "/etc/lighttpd/www/" 

server.port = 80
server.bind = "10.29.x.y"
$SERVER["socket"] == "10.207.x.y:80" {}

server.username = "www" 
server.groupname = "www"
mimetype.assign = (
  ".html" => "text/html", 
  ".txt" => "text/plain",
  ".jpg" => "image/jpeg",
  ".png" => "image/png", 
  ".css" => "text/css"
)

index-file.names = ( "index.html" )

In der Konfigurationsdatei muss anstatt 10.29.x.y die korrekte IP eingetragen werden unter der die Statusseite im Freifunknetz erreichbar sein soll.

Der Inhalt von /etc/lighttpd/generate.sh:

#!/bin/bash

dst="$1"
src="/tmp/freifunk_status"

vpn_if='fastd_bat'
wan_if='tun0'
avg_time=5


#write stdout to file
exec >"$src" 2>&1

convert() {
  echo $1 | awk '{
  split("B,KiB,MiB,GiB,TiB,EiB,PiB,YiB,ZiB", s, ",")
  c=1; x=$1
  while (x>=1024 && c<8) {x/=1024; c++}
  xf=(c==1)?"%d":"%.2f"
  printf(xf" %s\n", x, s[c])
  }'
}

vpn_tx1_bytes=`cat "/sys/class/net/$vpn_if/statistics/tx_bytes"`
vpn_rx1_bytes=`cat "/sys/class/net/$vpn_if/statistics/rx_bytes"`
wan_tx1_bytes=`cat "/sys/class/net/$wan_if/statistics/tx_bytes"`
wan_rx1_bytes=`cat "/sys/class/net/$wan_if/statistics/rx_bytes"`

sleep $avg_time

vpn_tx2_bytes=`cat "/sys/class/net/$vpn_if/statistics/tx_bytes"`
vpn_rx2_bytes=`cat "/sys/class/net/$vpn_if/statistics/rx_bytes"`
wan_tx2_bytes=`cat "/sys/class/net/$wan_if/statistics/tx_bytes"`
wan_rx2_bytes=`cat "/sys/class/net/$wan_if/statistics/rx_bytes"`

wan_tx_speed=$((($wan_tx2_bytes-$wan_tx1_bytes)/$avg_time))
wan_rx_speed=$((($wan_rx2_bytes-$wan_rx1_bytes)/$avg_time))
vpn_tx_speed=$((($vpn_tx2_bytes-$vpn_tx1_bytes)/$avg_time))
vpn_rx_speed=$((($vpn_rx2_bytes-$vpn_rx1_bytes)/$avg_time))

wan_tx_str="`convert $wan_tx2_bytes` (`convert $wan_tx_speed`/s)"
wan_rx_str="`convert $wan_rx2_bytes` (`convert $wan_rx_speed`/s)"
vpn_tx_str="`convert $vpn_tx2_bytes` (`convert $vpn_tx_speed`/s)"
vpn_rx_str="`convert $vpn_rx2_bytes` (`convert $vpn_rx_speed`/s)"

u=`uptime`
load="${u##*:}"
u="${u%%,*}"
uptime="${u##*up}"
hdd=`df -h | grep '/$' | cut -d' ' -f 20`

echo '<html>'
echo '<head>'
echo '<title>Gateway-Status</title>'
echo '<link rel="stylesheet" type="text/css" href="style.css">'
echo '</head>'
echo '<body>'

echo '<br /><br />'
echo '<h2>Statusseite des Gateways gateway-url</h2>'
echo '<center>('`date`')</center>'
echo '<table>'
echo '<tr style="vertical-align:bottom;">'
echo '<td id="left_top">'$wan_tx_str'</td>'
echo '<td id="middle_top"><b>Load:</b>'$load'<br><b>Uptime:</b>'$uptime'</td>'
echo '<td id="right_top">'$vpn_rx_str'</td>'
echo '</tr>'
echo '<tr>'
echo '<td colspan=3><img src="schema.png" class="schema"></td></tr>'
echo '<tr style="vertical-align:top;">'
echo '<td id="left_bottom">'$wan_rx_str'</td>'
echo '<td id="middle_bottom"><b>HDD:</b> '$hdd'<br><a href="vnstat/">Traffic Statistics</a></td>'
echo '<td id="right_bottom">'$vpn_tx_str'</td>'
echo '</tr>'
echo '</table>'
echo '</body>'
echo '</html>'

#move to final destiantion
mv "$src" "$dst"

exit 0

Für die Statusseite werde zusätzlich die beiden Dateien style.css und schema.png benötigt. Das obige Script generiert die Statusseite und soll alle zwei Minuten ausgeführt werden. Dafür wird ein Eintrag in die /etc/crontab vorgenommen:

*/2 *   * * *   www    /etc/lighttpd/generate.sh '/etc/lighttpd/www/index.html'

Das gewählte Inhaltsverzeichnis muss noch erstellt werden:

mkdir /etc/lighttpd/www

Bevor lighttpd gestartet wird wird dafür noch eine Nutzer und eine Gruppe angelegt:

groupadd www
useradd -g www -d /etc/lighttpd/www -s /sbin/nologin www

chown -R www:www /etc/lighttpd/www/
chmod -R 775 /etc/lighttpd/www/

Nun kann der Webserver gestartet werden.

/etc/init.d/lighttpd start

vnStat

vnStat protokolliert den Netzwerkverkehr auf mehreren Anschlüssen und listest das Volumen je Minute/Stunde/Tag/Monat auf.

apt-get install php5-cgi
apt-get install vnstat
vnstat -u -i fastd_bat
vnstat -u -i tun0
vnstat -u -i icvpn

In der /etc/vnstat.conf muss unter #default Interface:

Interface "tun0"
Interface "fastd_bat"
Interface "icvpn"

ergänzt werden
In /etc/lighttpd/lighttpd.conf muss dann hinzugefügt werden:

server.modules = ("mod_fastcgi")
fastcgi.server = ( ".php" => ((
                   "bin-path" => "/usr/bin/php-cgi",
                   "socket" => "/tmp/php.socket"
               )))

und

index-file.names = ( "index.html" )

wird durch

index-file.names = ( "index.html", "index.php" )

ersetzt

Nun muss nur noch das php-frontend (http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz) in den richtigen Pfad heruntergeladen und entpackt werden und die config.php angepasst werden: Alle Interfaces müssen als array aufgeführt sein:

    $iface_list = array('tun0', 'fastd_bat', 'icvpn', 'eth0');

und für jedes Interface wird noch ein Titel vergeben

  $iface_title['tun0'] = 'Exit-VPN';
  $iface_title['fastd_bat'] = 'Freifunk intern';
  $iface_title['icvpn'] = 'IC-VPN';
  $iface_title['eth0'] = 'Netzwerkkarte';