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