Raspberry Amok Installation: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| Zeile 283: | Zeile 283: | ||
echo "wrote '$INVOKE_SCRIPT'" | echo "wrote '$INVOKE_SCRIPT'" | ||
</source> | </source> | ||
==Fertige Images== | |||
Fertig eingerichtete SD-Karten-Images sind auf dem Fileserver im Ordner "Amok" zu finden. | |||
Version vom 30. Januar 2013, 09:45 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">
- !/bin/bash
- 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"
- 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
- 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
- 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
- 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'"
- 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
- 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
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>
Fertige Images
Fertig eingerichtete SD-Karten-Images sind auf dem Fileserver im Ordner "Amok" zu finden.