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 26: Zeile 26:
#!/bin/bash
#!/bin/bash


# Name:      Raspberry Amok Installation
# Created by: Patrick Haßel
# Enterprise: Agilos GmbH
# Date:      2013-01-16




# CONFIG


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


WVDIAL_CONF="/etc/wvdial.conf"
WVDIAL_CONF="/etc/wvdial.conf"
APT_SOURCES="/etc/apt/sources.list"
USB_DEV="/dev/ttyUSB0"
USB_DEV="/dev/ttyUSB0"
USB_BAUD="9600"
USB_BAUD="9600"
Zeile 43: Zeile 39:
GSM_PASS="t-d1"
GSM_PASS="t-d1"
GSM_NUMBER="*99#"
GSM_NUMBER="*99#"
PPPD="/usr/sbin/pppd"
PPPD="/usr/sbin/pppd"
PAP_SECRETS="/etc/ppp/pap-secrets"
PAP_SECRETS="/etc/ppp/pap-secrets"
CHAP_SECRETS="/etc/ppp/chap-secrets"
CHAP_SECRETS="/etc/ppp/chap-secrets"
AMOK_PY="amok.py"


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




# CHECK PARAMETERS
# CHECK PARAMETERS


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


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


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


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


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


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


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


HTTP="$HTTP?user=$HTTP_USER\&pass=$HTTP_PASS\&button="
INVOKE_SCRIPT=$SCRIPT_PATH/$INVOKE_SCRIPT
AMOK_SCRIPT=$SCRIPT_PATH/$AMOK_SCRIPT




Zeile 122: Zeile 130:
# INSTALL PACKAGES
# INSTALL PACKAGES


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


Zeile 146: Zeile 154:
# WRITE CONFIG
# WRITE CONFIG


CONFIG=""
CONFIG='
CONFIG="${CONFIG}\n[Dialer Defaults]"
[Dialer Defaults]
CONFIG="${CONFIG}\nInit2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
CONFIG="${CONFIG}\nModem Type = Analog Modem"
Modem Type = Analog Modem
CONFIG="${CONFIG}\nISDN = 0"
ISDN = 0
CONFIG="${CONFIG}\nInit1 = ATZ"
Init1 = ATZ
CONFIG="${CONFIG}\nModem = $USB_DEV"
Modem = '$USB_DEV'
CONFIG="${CONFIG}\nBaud = $USB_BAUD"
Baud = '$USB_BAUD'
CONFIG="${CONFIG}\n"
 
CONFIG="${CONFIG}\n[Dialer pin]"
[Dialer pin]
CONFIG="${CONFIG}\nInit3 = AT+CPIN=$PIN"
Init3 = AT+CPIN='$PIN'
CONFIG="${CONFIG}\n"
 
CONFIG="${CONFIG}\n[Dialer connect]"
[Dialer connect]
CONFIG="${CONFIG}\nCarrier Check = no"
Carrier Check = no
CONFIG="${CONFIG}\nInit4 = AT+CGDCONT=1,\"IP\",\"$GSM_DST\""
Init4 = AT+CGDCONT=1,"IP","'$GSM_DST'"
CONFIG="${CONFIG}\nStupid Mode = 1"
Stupid Mode = 1
CONFIG="${CONFIG}\nPhone = $GSM_NUMBER"
Phone = '$GSM_NUMBER'
CONFIG="${CONFIG}\nDialer Command = ATD"
Dialer Command = ATD
CONFIG="${CONFIG}\nDial Attemps = 2"
Dial Attemps = 100
CONFIG="${CONFIG}\nUsername = $GSM_USER"
Username = '$GSM_USER'
CONFIG="${CONFIG}\nPassword = $GSM_PASS"
Password = '$GSM_PASS'
'


echo -e "$CONFIG" > $WVDIAL_CONF
echo -e "$CONFIG" > $WVDIAL_CONF
Zeile 187: Zeile 196:


# WRITE amok-script
# WRITE amok-script
SCRIPT='
#!/bin/bash
INVOKE="'$INVOKE_SCRIPT'"
while true
do
# 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'"
# WRITE invoke-script
SCRIPT='
#!/bin/bash
KEY=$1
if [ "$KEY" = "" ]; then
echo "missing input-key"
exit 1
fi


cd `dirname $0`
SCRIPT=""
SCRIPT="${SCRIPT}\n#!/usr/bin/env python"
SCRIPT="${SCRIPT}\n"
SCRIPT="${SCRIPT}\nfrom time import sleep"
SCRIPT="${SCRIPT}\nimport os"
SCRIPT="${SCRIPT}\nimport RPi.GPIO as GPIO"
SCRIPT="${SCRIPT}\n"
SCRIPT="${SCRIPT}\nGPIO.setmode(GPIO.BCM)"
SCRIPT="${SCRIPT}\nGPIO.setup(23, GPIO.IN)"
SCRIPT="${SCRIPT}\nGPIO.setup(24, GPIO.IN)"
SCRIPT="${SCRIPT}\nGPIO.setup(25, GPIO.IN)"
SCRIPT="${SCRIPT}\n"
SCRIPT="${SCRIPT}\nwhile True:"
SCRIPT="${SCRIPT}\n\tif ( GPIO.input(23) == False ):"
SCRIPT="${SCRIPT}\n\t\tos.system('curl ${HTTP}23 &')"
SCRIPT="${SCRIPT}\n\tif ( GPIO.input(24) == False ):"
SCRIPT="${SCRIPT}\n\t\tos.system('curl ${HTTP}24 &')"
SCRIPT="${SCRIPT}\n\tif ( GPIO.input(25)== False ):"
SCRIPT="${SCRIPT}\n\t\tos.system('curl ${HTTP}25 &')"
SCRIPT="${SCRIPT}\n\tsleep(1);"


echo -e "$SCRIPT" > $AMOK_PY
if [[ $KEY =~ ^[0-9]+$ ]]; then
chmod u=rwx,go= $AMOK_PY
URL="'$HTTP'?user='$HTTP_USER'&pass='$HTTP_PASS'&key=$KEY"
echo "wrote '$AMOK_PY'"
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>
</source>

Version vom 30. Januar 2013, 07:59 Uhr


Aufruf

./install-wvdial-amok.sh USERNAME GROUPNAME SIM-PIN HTTP HTTP-USER HTTP-PASS

Parameter

Feld Beschreibung
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 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 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>