{"id":5368,"date":"2015-03-12T03:33:28","date_gmt":"2015-03-12T02:33:28","guid":{"rendered":"http:\/\/blog.wenzlaff.de\/?p=5368"},"modified":"2021-11-22T17:15:01","modified_gmt":"2021-11-22T16:15:01","slug":"raspberry-pi-wie-kann-der-kismet-server-sauber-rauf-und-runter-gefahren-werden-zum-warwalking-wardriving","status":"publish","type":"post","link":"http:\/\/blog.wenzlaff.de\/?p=5368","title":{"rendered":"Raspberry Pi: Wie kann der Kismet-Server sauber rauf und runter gefahren werden zum WarWalking (WarDriving)?"},"content":{"rendered":"<p>Wenn ein Kismet-Server auf dem Raspberry Pi l\u00e4uft, muss der Server sauber rauf und runter gefahren werden, sonst werden die *NETXML Dateien wegen einem fehlenden sync nicht vollst\u00e4ndig auf die SD-Karte geschrieben. Das Problem ist aber, wie kann der Raspberry Pi eingerichtet werden, so das der gpsd und Kismet automatisch hoch und auch sauber wieder runter fahren, ohne das ein Bildschirm bzw. Konsole angeschlossen wird? Und wie kann vom GPS Empf\u00e4nger die Systemzeit gesetzt werden, da der Raspberry Pi ja keine Systemuhr hat und es beim WarWalking kein Internet mit NTP gibt ?<\/p>\n<p>Die L\u00f6sung des Problems wird in dieser Anleitung beschrieben.<\/p>\n<p>Wir brauchen ein Script zum automatischen hochfahren und ein Script das auf einen Tastendruck wartet.<!--more--><\/p>\n<p>Also zuerst ein autostart Verzeichnis erstellen und die drei unten angegebenen Scripte in der neuesten Version laden:<\/p>\n<pre class=\"lang:default decode:true \" >\r\nmkdir autostart\r\ncd autostart\r\nwget https:\/\/github.com\/IT-Berater\/tw-scripte\/blob\/master\/start-gps.sh\r\nwget https:\/\/github.com\/IT-Berater\/tw-scripte\/blob\/master\/warte.py\r\nwget https:\/\/github.com\/IT-Berater\/tw-scripte\/blob\/master\/an-warte.py\r\n# Scripte ausf\u00fchrbar machen\r\nchmod +x start-gps.sh\r\nchmod +x warte.py\r\nchmod +x an-warte.py\r\n# in crontab einf\u00fcgen\r\ncrontab -e\r\n# einf\u00fcgen am Ende der Zeile und speichern\r\n@reboot \/root\/autostart\/start-gps.sh &\r\n# Test\r\nreboot\r\n<\/pre>\n<p>Das automatisch starten \u00fcber crontab habe ich <a href=\"http:\/\/blog.wenzlaff.de\/?p=5190\" title=\"autostart\" target=\"_blank\" rel=\"noopener\">hier<\/a> schon mal beschrieben .<\/p>\n<p>Hier das <code>start-gps.sh<\/code> Script welches per <code>crontab<\/code> automatisch nach dem anschalten des Raspberry Pis startet:<\/p>\n<pre class=\"lang:sh decode:true \" >\r\n#!\/bin\/bash\r\n#\r\n# Dies start-gps.hs Script soll alles starten was f\u00fcr das wardrive n\u00f6tig ist.\r\n#\r\n# 14.02.15 Thomas Wenzlaff\r\n#\r\n# 1. gpsd starten\r\n# 2. LED an und warten auf Tastendruck\r\n# 3. Zeit von GPSD ermittelt und setzen\r\n# 4. Kismet Server starten\r\n# 5. Warten auf Tastendruck warten.py\r\n# 6. LED blinken\r\n# 7. Kismet sauber runterfahren\r\n# 8. gpsd runterfahren\r\n# 9. System runterfahren\r\n#\r\n# (C) 2015 Thomas Wenzlaff http:\/\/www.wenzlaff.de\r\n#\r\n# This program is free software: you can redistribute it and\/or modify\r\n# it under the terms of the GNU General Public License as published by\r\n# the Free Software Foundation, either version 3 of the License, or\r\n# (at your option) any later version.\r\n#\r\n# This program is distributed in the hope that it will be useful,\r\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n# GNU General Public License for more details.\r\n#\r\n# You should have received a copy of the GNU General Public License\r\n# along with this program. If not, see {http:\/\/www.gnu.org\/licenses\/}.\r\n#\r\n##############################################################################\r\necho 'Starte start-gps.sh Script ...'\r\n\/usr\/bin\/pkill gpsd\r\n\/usr\/bin\/pkill kismet_server\r\necho 'Starte gpsd D\u00e4mon im Hintergrund ...'\r\n\/etc\/init.d\/gpsd start\r\necho 'gpsd gestartet'\r\necho 'Warte bis GPS bereit ...'\r\n\/usr\/bin\/gpspipe -l -w -n 10 | grep -qm 1 '\"mode\":3'\r\necho 'Parse die aktuelle UTC Zeit von gpsd Ausgabe ...'\r\nUTCDATE=`\/usr\/bin\/gpspipe -w -n 10 | grep -m 1 \"TPV\" | sed -r 's\/.*\"time\":\"([^\"]*)\".*\/\\1\/' | sed -e 's\/^\\(.\\{10\\}\\)T\\(.\\{8\\}\\).*\/\\1 \\2\/'`\r\necho 'Die Zeit von gpsd:'\r\necho $UTCDATE\r\necho 'Setzt die aktuelle Systemzeit des Raspberry Pi'\r\n\/bin\/date -u --set=\"$UTCDATE\"\r\necho 'an-warte.py starten ...'\r\n\/root\/autostart\/an-warte.py\r\necho 'an-warte.py beendet, weiter ...'\r\necho 'Starte den Kismet Server im Hintergrund ...'\r\nkismet_server --daemonize\r\necho 'Kismet Server gestartet'\r\necho 'warte.py starten'\r\necho 'Warte auf l\u00e4ngeren Tastendruck bis die LED blinkt, zum sauberen runterfahren des Raspberry Pi ...'\r\n\/root\/autostart\/warte.py\r\necho 'warte.py beendet'\r\necho 'Warte bis der Kismet Server runtergefahren ist ...'\r\n\/usr\/bin\/pkill kismet_server\r\n# warten bis Kismet seine Dateien gespeichert hat\r\n\/usr\/bin\/pgrep kismet\r\nwhile [ $? = 0 ]\r\ndo\r\n\/bin\/sleep 1\r\n\/usr\/bin\/pgrep kismet\r\ndone\r\necho 'OK, der Kismet Server ist sauber beendet.'\r\necho 'System sauber runterfahren ...'\r\n\/usr\/bin\/pkill gpsd\r\n\/bin\/sleep 5\r\necho 'Starte nun shutdown now. Der Raspberry Pi kann gleich von der Stromversorgung getrennt werden.'\r\nsudo shutdown now\r\n<\/pre>\n<p>Das <code>warte.py<\/code> Script wartet auf einen Tastendruck und blinkt dann 10 mal und beendet sich.<br \/>\nDer Taster ist an Pin 11 und die LED an Pin 7 mit einem oder zwei Vorwiederst\u00e4nden angeschlossen.<\/p>\n<pre class=\"lang:sh decode:true \" >\r\n#!\/usr\/bin\/python\r\n# coding=ISO-8859-1\r\n\r\n# warte.py Script\r\n#\r\n# Thomas Wenzlaff (c) 2015 www.wenzlaff.info\r\n#\r\n# Dieses Script wartet bis die Taste einmal gedr\u00fcckt wird und dann\r\n# wird als Best\u00e4tigung die LED 10 mal blinken.\r\n#\r\n# (C) 2015 Thomas Wenzlaff http:\/\/www.wenzlaff.de\r\n#\r\n# This program is free software: you can redistribute it and\/or modify\r\n# it under the terms of the GNU General Public License as published by\r\n# the Free Software Foundation, either version 3 of the License, or\r\n# (at your option) any later version.\r\n#\r\n# This program is distributed in the hope that it will be useful,\r\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n# GNU General Public License for more details.\r\n#\r\n# You should have received a copy of the GNU General Public License\r\n# along with this program. If not, see {http:\/\/www.gnu.org\/licenses\/}.\r\n#\r\n##############################################################################\r\nimport RPi.GPIO as GPIO\r\nimport time\r\n\r\nSCHALTER = 11\r\nLED = 7\r\n\r\nGPIO.setwarnings(False)\r\n\r\nGPIO.setmode(GPIO.BOARD)\r\nGPIO.setup(LED, GPIO.OUT)\r\nGPIO.setup(SCHALTER, GPIO.IN, pull_up_down=GPIO.PUD_UP)\r\n\r\ndef blink( anzahl ):\r\n \"Methode blinkt so oft wie anzahl\"\r\n i = 0\r\n while (i &lt; anzahl):\r\n   GPIO.output(LED, True)\r\n   time.sleep(0.1)\r\n   GPIO.output(LED, False)\r\n   time.sleep(0.1)\r\n   i = i + 1\r\n\r\n\r\nprint \"Start warte.py um %s Warte nun auf Tastendruck...\" % time.ctime()\r\n\r\nwhile True:\r\n\tinput_state = GPIO.input(SCHALTER)\r\n\ttime.sleep(2)\r\n\tif input_state == False:\r\n\t\tprint \"Taste wurde gedr\u00fcckt\"\r\n\t\tprint \"10 mal blinken ...\"\r\n \t\tblink(10)\r\n\t\tbreak\r\n\r\nprint \"Das warten.py Script ist nun um %s zu Ende\" % time.ctime()<\/pre>\n<p>Und das an-warte.py Script, welches die LED anschaltet und auf einen kurzen Tastendruck wartet:<\/p>\n<pre class=\"lang:sh decode:true \" >#!\/usr\/bin\/python\r\n# coding=ISO-8859-1\r\n# an-warte.py Scrip\r\n#\r\n# Thomas Wenzlaff (c) 2015 www.wenzlaff.info\r\n#\r\n# Dieses Script schaltet die LED an und wartet bis die Taste einmal gedr\u00fcckt wird\r\n# dann geht die LED aus.\r\n#\r\n# (C) 2015 Thomas Wenzlaff http:\/\/www.wenzlaff.de\r\n#\r\n# This program is free software: you can redistribute it and\/or modify\r\n# it under the terms of the GNU General Public License as published by\r\n# the Free Software Foundation, either version 3 of the License, or\r\n# (at your option) any later version.\r\n#\r\n# This program is distributed in the hope that it will be useful,\r\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r\n# GNU General Public License for more details.\r\n#\r\n# You should have received a copy of the GNU General Public License\r\n# along with this program. If not, see {http:\/\/www.gnu.org\/licenses\/}.\r\n#\r\n##############################################################################\r\nimport RPi.GPIO as GPIO\r\nimport time\r\nSCHALTER = 11\r\nLED = 7\r\nGPIO.setwarnings(False)\r\nGPIO.setmode(GPIO.BOARD)\r\nGPIO.setup(LED, GPIO.OUT)\r\nGPIO.setup(SCHALTER, GPIO.IN, pull_up_down=GPIO.PUD_UP)\r\nprint \"Start an-warte.py um %s Warte nun auf Tastendruck ...\" % time.ctime()\r\nGPIO.output(LED, True)\r\ntime.sleep(0.1)\r\nwhile True:\r\ninput_state = GPIO.input(SCHALTER)\r\ntime.sleep(1)\r\nif input_state == False:\r\nprint \"Taste wurde gedr\u00fcckt\"\r\nbreak\r\nGPIO.output(LED, False)\r\ntime.sleep(0.1)\r\nprint \"Das an-warten.py Script ist nun um %s zu Ende\" % time.ctime()<\/pre>\n<p>Das ganze l\u00e4uft nun so ab: <\/p>\n<ul>\n<li>1. den Raspberry Pi mit Accu-Strom versorgen<\/li>\n<li>2. der rPi l\u00e4uft hoch und das <code>start-gps.sh<\/code> Script startet<\/li>\n<li>3. es wird der GPSD gestartet und die Uhrzeit gesetzt, dann geht die <strong>LED an<\/strong> <\/li>\n<li>4. will man nun das Wardriving starten, einfach <strong>kurz<\/strong> die Taste dr\u00fccken, die LED geht zur Best\u00e4tigung aus<\/li>\n<li>5. und gehen &#8230; und laufen &#8230; und fahren &#8230; Kismet zeichnet auf&#8230; Wardriving<\/li>\n<li>6. nun wollen wir die Aufzeichnung beenden, wir dr\u00fccken den Taster solange, biss die LED anf\u00e4ngt zu blinken<\/li>\n<li>7. wenn das blinken aufh\u00f6rt, k\u00e4nnen wir den rPi ausschalten oder aber mit dem Reset Taster wieder neu Starten und alles geht wieder mit 2 weiter\n<\/li>\n<\/ul>\n<p>Wer noch Details wissen will, einfach ein Kommentar und ein Like \ud83d\ude09 hinterlassen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn ein Kismet-Server auf dem Raspberry Pi l\u00e4uft, muss der Server sauber rauf und runter gefahren werden, sonst werden die *NETXML Dateien wegen einem fehlenden sync nicht vollst\u00e4ndig auf die SD-Karte geschrieben. Das Problem ist aber, wie kann der Raspberry Pi eingerichtet werden, so das der gpsd und Kismet automatisch hoch und auch sauber wieder &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.wenzlaff.de\/?p=5368\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eRaspberry Pi: Wie kann der Kismet-Server sauber rauf und runter gefahren werden zum WarWalking (WarDriving)?\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[220,808,79,1023,1319,7],"tags":[2010,1579,2009,2008,1725],"class_list":["post-5368","post","type-post","status-publish","format-standard","hentry","category-anleitung","category-linux-2","category-programmierung","category-raspberry-pi","category-sicherheit-2","category-tools","tag-gpsd","tag-kismet","tag-kismet-server","tag-kismet-server-sauber-runterfahren","tag-netxml"],"_links":{"self":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/5368","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5368"}],"version-history":[{"count":0,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=\/wp\/v2\/posts\/5368\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5368"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.wenzlaff.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}