Raspberry Amok Installation: Unterschied zwischen den Versionen

Aus Agilos Wiki
Zur Navigation springen Zur Suche springen
Patrick (Diskussion | Beiträge)
Patrick (Diskussion | Beiträge)
Zeile 12: Zeile 12:
Des Weiteren wird das System so konfiguriert dass das Skript, das auf die Tastatureingaben wartet, beim Bootup auf tty1 gestartet wird.
Des Weiteren wird das System so konfiguriert dass das Skript, das auf die Tastatureingaben wartet, beim Bootup auf tty1 gestartet wird.


'''Deshalb ist das Skript auch nur mit "root"-Rechten startbar!'''
'''Wegen diesen Konfigurations-Schritten ist das Installations-Skript auch nur mit "root"-Rechten startbar!'''


===Aufruf===
===Aufruf===

Version vom 30. Januar 2013, 08:17 Uhr


System-Voraussetzungen

Voraussetzung ist ein Raspbian "wheezy" (ein für das Raspberry Pi zugeschnittenes Debian auf ARM-Architektur).

Aktuell läuft usere Installation mit komplett deinstallierter grafischer Oberfläche um Resourcen zu sparen.

Das Installations-Skript

Das Skript installiert alle nötigen Pakete, erstellt die notwendigen Skripte und setzt die Rechte.

Des Weiteren wird das System so konfiguriert dass das Skript, das auf die Tastatureingaben wartet, beim Bootup auf tty1 gestartet wird.

Wegen diesen Konfigurations-Schritten ist das Installations-Skript auch nur mit "root"-Rechten startbar!

Aufruf

/path/to/script USERNAME GROUPNAME SIM-PIN HTTP-URL HTTP-USER HTTP-PASS

Parameter

Feld Beschreibung
SCRIPT-PATH Pfad in dem die Scripte abgelegt werden sollen
USERNAME Name des Benutzers der später die GSM-Verbindung nutzen soll
GROUPNAME Name der Gruppe die später die GSM-Verbindung nutzen soll
SIM-PIN Pin der Sim-Karte für die GSM-Verbindung
HTTP-URL http-Adresse für die Alarmierung
HTTP-USER Benutzername für die http-Alarmierung
HTTP-PASS Passwort für die http-Alarmierung

Skript

<source lang="bash">

  1. !/bin/bash


  1. CONFIG

APT_SOURCES="/etc/apt/sources.list"

WVDIAL_CONF="/etc/wvdial.conf" USB_DEV="/dev/ttyUSB0" USB_BAUD="9600" GSM_DST="internet.t-d1.de" GSM_USER="internet" GSM_PASS="t-d1" GSM_NUMBER="*99#"

PPPD="/usr/sbin/pppd" PAP_SECRETS="/etc/ppp/pap-secrets" CHAP_SECRETS="/etc/ppp/chap-secrets"

AMOK_SCRIPT="amok.sh" INVOKE_SCRIPT="invoke.sh"


  1. CHECK PARAMETERS

USAGE="USAGE: $0 SCRIPT-PATH USERNAME GROUPNAME SIM-PIN HTTP-URL HTTP-USER HTTP-PASS" if [ $UID != 0 ]; then echo "only root can execute this script!" exit 1 fi


SCRIPT_PATH=$1 if [ "$SCRIPT_PATH" = "" ]; then echo "missing SCRIPT_PATH" echo $USAGE exit 10 fi

USERNAME=$2 if [ "$USERNAME" = "" ]; then echo "missing USERNAME" echo $USAGE exit 11 fi

GROUPNAME=$3 if [ "$GROUPNAME" = "" ]; then echo "missing GROUPNAME" echo $USAGE exit 12 fi

PIN=$4 if [ "$PIN" = "" ]; then echo "missing SIM-PIN" echo $USAGE exit 13 fi

HTTP=$5 if [ "$HTTP" = "" ]; then echo "missing HTTP" echo $USAGE exit 14 fi

HTTP_USER=$6 if [ "$HTTP_USER" = "" ]; then echo "missing HTTP-USER" echo $USAGE exit 15 fi

HTTP_PASS=$7 if [ "$HTTP_PASS" = "" ]; then echo "missing HTTP-PASS" echo $USAGE exit 16 fi

INVOKE_SCRIPT=$SCRIPT_PATH/$INVOKE_SCRIPT AMOK_SCRIPT=$SCRIPT_PATH/$AMOK_SCRIPT


  1. ADD REPOSITORIES

REPOS="deb http://security.debian.org testing/updates main contrib non-free"

echo "$REPOS" | while read REPO; do RESULT=`grep "$REPO" $APT_SOURCES 2> /dev/null` if [ "$RESULT" != "$REPO" ]; then echo "adding '$REPO' to $APT_SOURCES" echo -e "\n$REPO" >> $APT_SOURCES else echo "'$REPO' already in $APT_SOURCES" fi done


  1. INSTALL PACKAGES

PACKAGES="wvdial python-dev python-rpi.gpio curl screen" INSTALL=""

for PACKAGE in $PACKAGES; do if ! dpkg --get-selections $PACKAGE > /dev/null 2>&1; then echo "'$PACKAGE' is not installed" INSTALL="$INSTALL $PACKAGE" else echo "'$PACKAGE' is already installed" fi done

if [ "$INSTALL" != "" ]; then echo "installing$INSTALL" apt-get update apt-get install -y $INSTALL else echo "nothing new to install" fi


  1. WRITE CONFIG

CONFIG=' [Dialer Defaults] Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Modem Type = Analog Modem ISDN = 0 Init1 = ATZ Modem = '$USB_DEV' Baud = '$USB_BAUD'

[Dialer pin] Init3 = AT+CPIN='$PIN'

[Dialer connect] Carrier Check = no Init4 = AT+CGDCONT=1,"IP","'$GSM_DST'" Stupid Mode = 1 Phone = '$GSM_NUMBER' Dialer Command = ATD Dial Attemps = 100 Username = '$GSM_USER' Password = '$GSM_PASS' '

echo -e "$CONFIG" > $WVDIAL_CONF chmod u=rw,go=r $WVDIAL_CONF echo "wrote '$WVDIAL_CONF'"


  1. CHANGE SOME PERMISSIONS TO BE ABLE TO EXECUTE AS NON-ROOT

adduser $USERNAME dip adduser $USERNAME dialout

echo "changing permissions of ppp-files" chmod o+x,g+s $PPPD chown $USERNAME:$GROUPNAME $PAP_SECRETS chown $USERNAME:$GROUPNAME $CHAP_SECRETS


  1. WRITE amok-script

SCRIPT='

  1. !/bin/bash

INVOKE="'$INVOKE_SCRIPT'"

while true do

  1. clear

echo -n "press key > " read -n 1 KEY echo -e "" $INVOKE $KEY done '

echo -e "$SCRIPT" > $AMOK_SCRIPT chown $USERNAME:$GROUPNAME $AMOK_SCRIPT chmod u=rwx,go= $AMOK_SCRIPT echo "wrote '$AMOK_SCRIPT'"


  1. WRITE invoke-script

SCRIPT='

  1. !/bin/bash


KEY=$1

if [ "$KEY" = "" ]; then echo "missing input-key" exit 1 fi


if [[ $KEY =~ ^[0-9]+$ ]]; then URL="'$HTTP'?user='$HTTP_USER'&pass='$HTTP_PASS'&key=$KEY" RESULT="" wvdial pin 2> /dev/null screen -dmS wvdial_screen wvdial connect 2> /dev/null

while true; do RESULT=`curl --connect-timeout 3 -s $URL` STATUS=`echo "$RESULT" | cut -d";" -f1` MESSAGE=`echo "$RESULT" | cut -d";" -f2` echo $MESSAGE case "$STATUS" in "ok") killall wvdial 2> /dev/null exit 0 ;; "error")

               killall wvdial 2> /dev/null

exit 99 ;; *) sleep 1 ;; esac done else

       echo "\"$KEY\" is no number!"
       exit 2

fi '

echo -e "$SCRIPT" > $INVOKE_SCRIPT chown $USERNAME:$GROUPNAME $INVOKE_SCRIPT chmod u=rwx,go= $INVOKE_SCRIPT echo "wrote '$INVOKE_SCRIPT'" </source>