Inhaltsverzeichnis

Stormforce Installation und Konfiguration unter CentOS 5.x

Pakete (nach)installieren

Für den reibungslosen Betrieb von Stormforce für unseren Blitzdedector benötigen wir noch neben der bereits vorhandenen Grundinstallation:

# yum list python mysql-server
python.i386                              installed
mysql-server.i386                        installed

Gemäß der README aus dem aktuellen stormforce-Paket installieren wir nun die für unsere Installationsumgebung benötigten Pakete nach.

# yum install MySQL-python python-game python-numeric ImageMagick

Für die beiden Pakete python-psyco und pyserial müssen wir etwas Hand anlegen. Zuerst laden wir uns diese auf unseren Rechner:

# cd /usr/local/src
# wget https://rpms.netmindz.net/el5/i386/RPMS.extras/pyserial-2.2-4.el5.noarch.rpm
# wget ftp://ftp.uni-bayreuth.de/pub/redhat.com/fedora/linux/extras/6/i386/python-psyco-1.5.1-4.fc6.i386.rpm

Dann installieren wir diese beiden Pakete:

# yum --nogpgcheck localinstall /usr/local/src/pyserial-2.2-4.el5.noarch.rpm
# yum --nogpgcheck localinstall /usr/local/src/python-psyco-1.5.1-4.fc6.i386.rpm

MySQL-Datenbank

Definition

Für den Betrieb von Stormforce legen wir uns nun einen User und eine Tabelle an. Dazu nutzen wir entweder direkt den Konsolenzugang, oder wir verwenden phpmyadmin.

CREATE DATABASE `stormforce`;
CREATE USER 'stormforceuser'@'localhost' IDENTIFIED BY 'Danny_Knaggs_is_a_geek';
GRANT all on stormforce.* to 'stormforceuser'@'localhost';
FLUSH PRIVILEGES;

Erfolgt der Zugriff auf den MySQL-Server über das Netzwerk legen wir unseren User entsprechend an:

CREATE USER 'stormforceuser'@'%' IDENTIFIED BY 'Danny_Knaggs_is_a_geek';
GRANT all on stormforce.* to 'stormforceuser'@'%';
FLUSH PRIVILEGES;

Zugangstest

Als nächstes überprüfen wir, ob der zuvor angelegt User/Zugang auch funktioniert.

 # mysql -D stormforce -u stormforceuser -h mysqluser -p
Enter password: ***Danny_Knaggs_is_a_geek***
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1886
Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> status;
--------------
mysql  Ver 08.15 Distrib 0.0.1, for redhat-linux-gnu (i686) using readline 5.0

Connection id:          1886
Current database:       stormforce
Current user:           stormforceuser@mysqlserver
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         0.0.00 Source distribution
Protocol version:       00
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 3 days 6 hours 7 min 55 sec

Threads: 4  Questions: 566224  Slow queries: 0  Opens: 53  Flush tables: 1  Open tables: 47  Queries per second avg: 2.013
--------------

mysql> use stormforce;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> quit
Bye 

Stormforce

Download

Als nächstes holen wir uns die aktuelle Stormforce von der Projektseite bei Google.

 cd /usr/local/src/
 wget https://stormforce.googlecode.com/files/stormforce-0.5.4.tar.bz2

Installation

Zu erst entpacken wir unser Paket.

# tar --bzip2 -xvf stormforce-0.5.3.tar.bz2
stormforce/
stormforce/png/
stormforce/ttf/
stormforce/ogg/
stormforce/README
stormforce/XML-README
stormforce/xmldevice.py
stormforce/netdevice.py
stormforce/LICENSE
stormforce/gpsdevice.py
stormforce/stormforce.py
stormforce/boltek-stormtracker/
stormforce/boltek-stormtracker/st2sf/
stormforce/boltek-stormtracker/boltek-sdk/
stormforce/boltek-stormtracker/boltek-sdk/Documentation
stormforce/boltek-stormtracker/boltek-sdk/libboltek/
stormforce/boltek-stormtracker/boltek-sdk/driver/
stormforce/boltek-stormtracker/boltek-sdk/driver/boltek.c
stormforce/boltek-stormtracker/boltek-sdk/driver/Makefile
stormforce/boltek-stormtracker/boltek-sdk/driver/77-boltek.rules
stormforce/boltek-stormtracker/boltek-sdk/libboltek/Makefile
stormforce/boltek-stormtracker/boltek-sdk/libboltek/demo.c
stormforce/boltek-stormtracker/boltek-sdk/libboltek/libboltek.c
stormforce/boltek-stormtracker/boltek-sdk/libboltek/stormpci.h
stormforce/boltek-stormtracker/st2sf/stormpci.h
stormforce/boltek-stormtracker/st2sf/st2sf.c
stormforce/boltek-stormtracker/st2sf/Makefile
stormforce/boltek-stormtracker/st2sf/libboltek.c
stormforce/boltek-stormtracker/st2sf/LICENSE
stormforce/boltek-stormtracker/st2sf/README
stormforce/ogg/kde_click3.ogg
stormforce/ogg/kde_digital2.ogg
stormforce/ogg/kde_error2.ogg
stormforce/ttf/micron55.ttf
stormforce/ttf/aldo.ttf
stormforce/ttf/7linedigital.ttf
stormforce/ttf/lcd1.ttf
stormforce/ttf/lcd2.ttf
stormforce/png/blank.png

Für die spätere einfache Versionierung ändern wir den stormforce-Pfad auf /usr/local/src/stormforce-0.5.4 ab.

 mv /usr/local/src/stormforce /usr/local/src/stormforce-0.5.4

Wir haben es dann zukünftig leichter, wenn wir mehrere Versionen zum testen parallel vorhalten wollen. Anschließend setzen wir wieder einen symbolischen Link mit dem gewünschten Zielpfadnamen auf unser neues Verzeichnis.

 ln -s /usr/local/src/stormforce-0.5.4 /usr/local/src/stormforce

Berechtigungen

Damit unser user auch Zugriff auf alle Dateien bekommt, ändern wir noch die Dateirechte ab

 chown -R django:django stormforce

erster Programmstart

Nun ist es an der Zeit, stormforce das erste mal zu starten.

# python stormforce.py

#########################################################################
# Copyright/License Notice (Modified BSD License)                       #
#########################################################################
#########################################################################
# Copyright (c) 2008, Daniel Knaggs                                     #
# All rights reserved.                                                  #
#                                                                       #
# Redistribution and use in source and binary forms, with or without    #
# modification, are permitted provided that the following conditions    #
# are met: -                                                            #
#                                                                       #
#   * Redistributions of source code must retain the above copyright    #
#     notice, this list of conditions and the following disclaimer.     #
#                                                                       #
#   * Redistributions in binary form must reproduce the above copyright #
#     notice, this list of conditions and the following disclaimer in   #
#     the documentation and/or other materials provided with the        #
#     distribution.                                                     #
#                                                                       #
#   * Neither the name of the author nor the names of its contributors  #
#     may be used to endorse or promote products derived from this      #
#     software without specific prior written permission.               #
#                                                                       #
#   * This Software is not to be used for safety purposes.              #
#                                                                       #
#   * You agree and abide the Disclaimer for your Boltek LD-250.        #
#                                                                       #
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   #
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     #
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  #
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, #
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      #
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, #
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY #
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   #
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE #
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  #
#########################################################################

WARNING: If you do not agree to the above copyright/license notice, cease using the software immediately and remove from your system.



Information: Welcome to StormForce v0.5.4.
Information: Please report any bugs you find so I can fix them!

Warning: The XML settings file doesn't exist, create one...
Information: The XML settings file has been created using the default settings.  Please edit it and restart StormForce once you're happy with the settings.

Information: Closing down..

Wie uns das Programm freundlich mittteilte, müssen wir noch die XML-Konfigurationsdatei bearbeiten.

Konfiguration

Mit dem Editor unserer Wahl bearbeiten wir nun die stormforce-settings.xml

# vim stormforce-settings.xml
stormforce-settings.xml
<?xml version="1.0" ?>
<StormForce>
        <Setting DemoMode="False"/>
        <Setting DebugMode="False"/>
        <Setting DatabaseEngine="1"/>
        <Setting ConnectionString="mysqlserver/stormforce/stormforceuser/Danny_Knaggs_is_a_geek"/>
        <Setting Fullscreen="False"/>
        <Setting LD250Port="/dev/ttyUSB0"/>
        <Setting LD250PortCompression=""/>
        <Setting LD250PortType="XML"/>
        <Setting LD250SkewAmount="0.0"/>
        <Setting LD250SquelchLevel="0"/>
        <Setting LD250UseUncorrectedStrikes="False"/>
        <Setting StormTrackerPort=""/>
        <Setting StormTrackerPortCompression=""/>
        <Setting StormTrackerPortType="XML"/>
        <Setting StormTrackerSkewAmount="0.0"/>
        <Setting StormTrackerSquelchLevel="0"/>
        <Setting StormTrackerUseUncorrectedStrikes="False"/>
        <Setting EFM100Port=""/>
        <Setting EFM100PortCompression=""/>
        <Setting EFM100PortType="XML"/>
        <Setting GPSPort=""/>
        <Setting GPSPortCompression=""/>
        <Setting GPSPortType="XML"/>
        <Setting TRACEnabled="True"/>
        <Setting TRACSensitivity="10"/>
        <Setting TRACStormWidth="30"/>
        <Setting CloseAlarmArguments=""/>
        <Setting SevereAlarmArguments=""/>
        <Setting TCPListenerPort="0"/>
        <Setting TCPListenerPortCompression=""/>
        <Setting UDPListenerPort="0"/>
        <Setting UDPListenerPortCompression=""/>
        <Setting MulticastListenerAddress=""/>
        <Setting MulticastListenerPort="0"/>
        <Setting MulticastListenerPortCompression=""/>
        <Setting MulticastListenerTTL="0"/>
        <Setting StrikeShape="1"/>
        <Setting SmallCrosshair="True"/>
        <Setting ShowRedDotOnStrike="True"/>
        <Setting ReconstructionFile=""/>
        <Setting ShowRangeCircles="False"/>
        <Setting ServerModeImage=""/>
        <Setting SoundEnabled="False"/>
        <Setting CurlArguments=""/>
        <Setting UserCopyright="Lightning Data (c) 2008 - Django"/>
        <Setting ZoomDistance="300"/>
</StormForce>

Stormforce-Aufruf

Nachdem wir unsere Konfiguration erfolgreich abgeschlossen haben, rufen wir nunmehr stormforce zum ersten male richtig auf. ( Vorausgesetzt wir haben die Berechtigungen auf die Device-Datei entsprechend geändert, siehe hierzu Hardware LD-250 )

$ python stormforce.py
#########################################################################
# Copyright/License Notice (Modified BSD License)                       #
#########################################################################
#########################################################################
# Copyright (c) 2008, Daniel Knaggs                                     #
# All rights reserved.                                                  #
#                                                                       #
# Redistribution and use in source and binary forms, with or without    #
# modification, are permitted provided that the following conditions    #
# are met: -                                                            #
#                                                                       #
#   * Redistributions of source code must retain the above copyright    #
#     notice, this list of conditions and the following disclaimer.     #
#                                                                       #
#   * Redistributions in binary form must reproduce the above copyright #
#     notice, this list of conditions and the following disclaimer in   #
#     the documentation and/or other materials provided with the        #
#     distribution.                                                     #
#                                                                       #
#   * Neither the name of the author nor the names of its contributors  #
#     may be used to endorse or promote products derived from this      #
#     software without specific prior written permission.               #
#                                                                       #
#   * This Software is not to be used for safety purposes.              #
#                                                                       #
#   * You agree and abide the Disclaimer for your Boltek LD-250.        #
#                                                                       #
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   #
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     #
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR #
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  #
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, #
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      #
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, #
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY #
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   #
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE #
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  #
#########################################################################

WARNING: If you do not agree to the above copyright/license notice, cease using the software immediately and remove from your system.



Information: Welcome to StormForce v0.5.4.
Information: Please report any bugs you find so I can fix them!

Information: Reading XML settings...


Information: MySQL support is available.
Information: Using MySQL as the database backend.
Information: Connecting to database...
Information: Updating database structure...
Information: Initialising history...
Information: Closing database connection...
Information: Initialising COM port for LD-250 via /dev/ttyUSB0...
Information: Squelch level has successfully been set to 0.
Information: COM port opened! Waiting for lightning data from LD-250...
Information: Server mode without uploading enabled.
Information: Enabling Cron...
Information: Entering main loop...

Folgender Bildschirm wird uns bei erfolgreichem Programmstart gezeigt.

Mit der Taste „Q“ können wir das Programmm bei Bedarf beenden.

Individuelle Anpassungen

Startscript für Programmstart

Für den Porgrammstart verlinken wir das beim Programmpaket enthaltene Startscript.

# ln -s /usr/local/src/stormforce/bin/stormforce.sh /usr/local/bin/

Starter anlegen

Zum Starten von Stormforce legen wir uns am Desktop einen entsprechenden Starter an. Das Icon ⇒ Legen wir am besten unter /usr/share/pixmaps/ ab.

Automatischer Programmstart nach erfolgter Anmeldung

Damit unser Boltek LD-250 nun sofort nach einer erfolgreichen Useranmeldung von Stormforce ausgelesen werden kann, legen wir uns einen Autostarter an.

Hierzu legen wir zu erst folgendes Verzeichnis an:

 # mkdir /home/django/.config/autostart

Dort legen wir die Datei stormforce.desktop mit folgendem Inhalt an:

[Desktop Entry]
Name=Stormforce
Encoding=UTF-8
Version=1.0
Exec=stormforce-start.sh
X-GNOME-Autostart-enabled=true

Somit wird beim nächsten Anmelden am X-Gnome-Desktop das Programm stormforce automatisch gestartet.

Update des Bildes auf unserem Webserver/Vhost

storm2web.sh

Zum Kopieren unserer, von Stormforce alle 10 Sekunden akutalisierten, Bildschirmhardcopy auf unseren Webserver, legen wir ein kleines Shellscript an:

 # vim /usr/local/bin/storm2web.sh
storm2web.sh
#!/bin/sh 
# Script zum "Hochladen" des Strormforce-Bildes auf den
# virtuellen Host "Webcam"
# (c) Michael Nausch - 29.12.2008
 
WORKDIR="/usr/local/src/stormforce/"
QUELLE="/usr/local/src/stormforce/stormforce_picture.png"
ZIEL="/var/www/html/website/record/"
SLEEP=10
 
cd $WORKDIR
while true
do
# cd $WORKDIR_1
 rsync -av $QUELLE $ZIEL"stormforce_2.png"
 sleep $SLEEP
done

Anschließend versehen wir unser kleines shell-script noch mit dem „X“-Rechten.

 # chmod +x /usr/local/bin/storm2web.sh

Stormforce-Konfiguration

Die Dateibezeichnung stormforce_picture.png tragen wir auch in der Konfigurationsdatei von Stormforce stormforce-settings.xml ein:

# vim stormforce-settings.xml
stormforce-settings.xml
<?xml version="1.0" ?>
<StormForce>
        <Setting DemoMode="False"/>
        <Setting DebugMode="False"/>
 
...
        <Setting ServerModeImage="stormforce_picture.png"/>
        <Setting SoundEnabled="False"/>
        <Setting CurlArguments=""/>
        <Setting UserCopyright="Lightning Data (c) 2008 - Django"/>
        <Setting ZoomDistance="300"/>
</StormForce>

service stormforce

Damit nun beim Systemstart automatisch der automatische Bildsyncronisierungscopyjob legen wir uns nachfolgendes Systemstartscript unter /etc/init.d/ ab.

# vim /etc/init.d/stormforce
stormforce
 
#!/bin/sh
#
# chkconfig: 2345 79 31
# description: cyclic Stormforce-Map Update
#
# processname: stormforce
#
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
 
prog=storm2web.sh
stormforce_prg=/usr/local/bin/$prog
 
# Source an auxiliary options file if we have one, and pick up OPTIONS,                                                                                                     
if [ -r /etc/sysconfig/$prog ]; then
    . /etc/sysconfig/$prog
fi
 
start() {
    echo -n $"Starting $prog: "
#    $stormforce_prg start
    $stormforce_prg &
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
stop() {
    echo -n $"Stopping $prog: "
   /usr/bin/killall $prog
#    $stormforce_prg stop
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}
 
restart() {
    stop
    start
}
 
 
# See how we were called.
case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        restart
    ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac
 
exit $RETVAL

Damit der „service“ automatisch beim Systemstart anläuft, aktivieren wir diesen mit:

 # chkconfig stormforce on

Die Überprüfungung ob der Dienst (Daemon) stormforce wirklich bei jedem Systemstart automatisch mit gestartet werden, kann durch folgenden Befehle erreicht werden:

 # chkconfig --list | grep stormforce

stormforce 0:Aus 1:Aus 2:Ein 3:Ein 4:Ein 5:Ein 6:Aus

Den Daemon starten wir nun initial mit:

 # service stormforce start

Kartenhintergrund

Einen passenden Kartenhintergrund können wir uns entweder über das freie Kartenprojekt von Openstreetmap, bei den Blue Marble Satellitenbilder der NASA, oder mit Hilfe des MapCreator 2.0 von primap erstellen. Genau in der Reihenfolge bin ich vorgegangen, bei letzterem bin ich dann auf Grund er schnellen, einfachen und guten Ergebnisse hängen geblieben.

Die Karte hat eine Größe von 600 x 600 Pixel, mit dem Standort in der Bildmitte. Die Karte selbst hat dabei eine Ausdehnung (Radius um den Standort) von 300 Meilen bzw. ca. 480 Kilometer.

Unsere eigene neue Karte speichern wir dann als map-300.png im Verzeichnis png ab.

 #  ll /usr/local/src/stormforce/png/
 -rw-r--r-- 1 root root 362544 28. Sep 11:36 map-300.png