Raspberry Amok Installation
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 |
|---|---|
| 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 |
| REMOTE-HOST | IBS: Server für Datei-Ablage |
| REMOTE-USER | IBS: Benutzer für Server für Datei-Ablage |
| REMOTE-PASS | IBS: Passwort für Server für Datei-Ablage |
| REMOTE-FILE | IBS: Datei die auf dem Server abgelegt werden soll |
| DEVICE-ID | IBS: Geräte-ID |
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"
REPOS="deb http://security.debian.org testing/updates main contrib non-free" PACKAGES="wvdial screen sshpass"
- CHECK INPUT #################################################################################
USAGE="USAGE: $0 USERNAME GROUPNAME SIM-PIN REMOTE-HOST REMOTE-USER REMOTE-PASS REMOTE-FILE DEVICE-ID" if [ $UID != 0 ]; then echo "only root can execute this script!" exit 1 fi
USERNAME=$1 if [ "$USERNAME" = "" ]; then echo "missing USERNAME" echo $USAGE exit 11 fi
GROUPNAME=$2 if [ "$GROUPNAME" = "" ]; then echo "missing GROUPNAME" echo $USAGE exit 12 fi
PIN=$3 if [ "$PIN" = "" ]; then echo "missing SIM-PIN" echo $USAGE exit 13 fi
REMOTE_HOST=$4 if [ "$REMOTE_HOST" = "" ]; then echo "missing REMOTE-HOST" echo $USAGE exit 14 fi
REMOTE_USER=$5 if [ "$REMOTE_USER" = "" ]; then echo "missing REMOTE-USER" echo $USAGE exit 15 fi
REMOTE_PASS=$6 if [ "$REMOTE_PASS" = "" ]; then echo "missing REMOTE-PASS" echo $USAGE exit 16 fi
REMOTE_FILE=$7 if [ "$REMOTE_FILE" = "" ]; then echo "missing REMOTE-FILE" echo $USAGE exit 17 fi
DEVICE_ID=$8 if [ "$DEVICE_ID" = "" ]; then echo "missing DEVICE-ID" echo $USAGE exit 18 fi
- PREPARE VARIABLES ###########################################################################
EXECUTE=/home/$USERNAME/execute mkdir -p $EXECUTE 2> /dev/null
INVOKE_SCRIPT=$EXECUTE/$INVOKE_SCRIPT AMOK_SCRIPT=$EXECUTE/$AMOK_SCRIPT
- ADD REPOSITORIES ############################################################################
NEW_REPO=false 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 NEW_REPO=true fi done
if $NEW_REPO; then apt-get update apt-get upgrade fi
- INSTALL PACKAGES ############################################################################
apt-get -y install $PACKAGES
- FIRST TEST CONNECTION TO ACCEPT SERVER-CA ###################################################
sshpass -p $REMOTE_PASS ssh $REMOTE_USER@$REMOTE_HOST "true"
- WRITE WVDIAL-CONFIG #########################################################################
DATA=' [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 "$DATA" > $WVDIAL_CONF chmod u=rw,go=r $WVDIAL_CONF echo "wrote '$WVDIAL_CONF'"
- WRITE amok-script ###########################################################################
DATA='#!/bin/bash
INVOKE="'$INVOKE_SCRIPT'"
while true do
- clear
echo -n "press key > " read -n 1 KEY echo -e "" $INVOKE $KEY done '
echo -e "$DATA" > $AMOK_SCRIPT chown $USERNAME:$GROUPNAME $AMOK_SCRIPT chmod u=rwx,go= $AMOK_SCRIPT echo "wrote '$AMOK_SCRIPT'"
- WRITE invoke-script #########################################################################
DATA='#!/bin/bash
KEY=$1
if [ "$KEY" = "" ]; then echo "missing input-key" exit 1 fi
if [[ $KEY =~ ^[0-9]+$ ]]; then RESULT="" wvdial pin 2> /dev/null screen -dmS wvdial_screen wvdial connect 2> /dev/null
while ! sshpass -p '$REMOTE_PASS' ssh '$REMOTE_USER'@'$REMOTE_HOST' "echo '$DEVICE_ID'\|$KEY > '$REMOTE_FILE'"; do sleep 1 done
killall wvdial else
echo "\"$KEY\" is no number!" exit 2
fi '
echo -e "$DATA" > $INVOKE_SCRIPT chown $USERNAME:$GROUPNAME $INVOKE_SCRIPT chmod u=rwx,go= $INVOKE_SCRIPT echo "wrote '$INVOKE_SCRIPT'"
- 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 </source>
Fertige Images
Fertig eingerichtete SD-Karten-Images sind auf dem Fileserver im Ordner "Amok" zu finden.