Raspberry Amok Installation

Aus Agilos Wiki
Zur Navigation springen Zur Suche springen


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">

  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"

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


  1. CHECK INPUT #################################################################################

USAGE="USAGE: $0 USERNAME GROUPNAME SIM-PIN REMOTE-HOST REMOTE-USER REMOTE-PASS REMOTE-PATH 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_PATH=$7 if [ "$REMOTE_PATH" = "" ]; then echo "missing REMOTE-PATH" echo $USAGE exit 17 fi

DEVICE_ID=$8 if [ "$DEVICE_ID" = "" ]; then echo "missing DEVICE-ID" echo $USAGE exit 18 fi


  1. PREPARE VARIABLES ###########################################################################

EXECUTE=/home/$USERNAME/execute mkdir -p $EXECUTE 2> /dev/null

INVOKE_SCRIPT=$EXECUTE/$INVOKE_SCRIPT AMOK_SCRIPT=$EXECUTE/$AMOK_SCRIPT



  1. 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


  1. INSTALL PACKAGES ############################################################################

apt-get -y install $PACKAGES


  1. FIRST TEST CONNECTION TO ACCEPT SERVER-CA ###################################################

sshpass -p $REMOTE_PASS ssh $REMOTE_USER@$REMOTE_HOST "true"


  1. 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'"


  1. WRITE amok-script ###########################################################################

DATA='#!/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 "$DATA" > $AMOK_SCRIPT chown $USERNAME:$GROUPNAME $AMOK_SCRIPT chmod u=rwx,go= $AMOK_SCRIPT echo "wrote '$AMOK_SCRIPT'"


  1. 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

FILE='$DEVICE_ID'_`date +"%Y-%m-%d_%H:%M:%S.%N"` while ! sshpass -p '$REMOTE_PASS' ssh '$REMOTE_USER'@'$REMOTE_HOST' "echo '$DEVICE_ID'\|$KEY > '$REMOTE_PATH/'$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'"


  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 </source>

Fertige Images

Fertig eingerichtete SD-Karten-Images sind auf dem Fileserver im Ordner "Amok" zu finden.