Raspberry Amok Installation: Unterschied zwischen den Versionen

Aus Agilos Wiki
Zur Navigation springen Zur Suche springen
Patrick (Diskussion | Beiträge)
Patrick (Diskussion | Beiträge)
 
(17 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[category:Raspberry]]
[[category:Raspberry]]
[[category:Installations-Scripts]]
[[category:Installations-Scripts]]
==System-Voraussetzungen==
Voraussetzung ist ein [http://www.raspbian.org/ 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===
===Aufruf===
./install-wvdial-amok.sh USERNAME GROUPNAME SIM-PIN HTTP HTTP-USER HTTP-PASS
/path/to/script USERNAME GROUPNAME SIM-PIN HTTP-URL HTTP-USER HTTP-PASS


===Parameter===
===Parameter===
{| class="wikitable"
{| class="wikitable"
! Feld        !! Beschreibung
! Feld        !! Beschreibung
|-
| SCRIPT-PATH || Pfad in dem die Scripte abgelegt werden sollen
|-
|-
| USERNAME    || Name des Benutzers der später die GSM-Verbindung nutzen soll
| USERNAME    || Name des Benutzers der später die GSM-Verbindung nutzen soll
Zeile 17: Zeile 27:
| SIM-PIN    || Pin der Sim-Karte für die GSM-Verbindung
| SIM-PIN    || Pin der Sim-Karte für die GSM-Verbindung
|-
|-
| HTTP-URL    || http-Adresse für die Alarmierung
| 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
|-
|-
| HTTP-USER  || Benutzername für die http-Alarmierung
| REMOTE-FILE || IBS: Datei die auf dem Server abgelegt werden soll
|-
|-
| HTTP-PASS   || Passwort für die http-Alarmierung
| DEVICE-ID   || IBS: Geräte-ID
|}
|}


Zeile 30: Zeile 44:




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


Zeile 48: Zeile 61:
AMOK_SCRIPT="amok.sh"
AMOK_SCRIPT="amok.sh"
INVOKE_SCRIPT="invoke.sh"
INVOKE_SCRIPT="invoke.sh"
REPOS="deb http://security.debian.org testing/updates main contrib non-free"
PACKAGES="wvdial screen sshpass"




# CHECK PARAMETERS


USAGE="USAGE: $0 SCRIPT-PATH USERNAME GROUPNAME SIM-PIN HTTP-URL HTTP-USER HTTP-PASS"
# CHECK INPUT #################################################################################
USAGE="USAGE: $0 USERNAME GROUPNAME SIM-PIN REMOTE-HOST REMOTE-USER REMOTE-PASS REMOTE-PATH DEVICE-ID"
if [ $UID != 0 ]; then
if [ $UID != 0 ]; then
echo "only root can execute this script!"
echo "only root can execute this script!"
Zeile 60: Zeile 76:




SCRIPT_PATH=$1
USERNAME=$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"
Zeile 74: Zeile 83:
fi
fi


GROUPNAME=$3
GROUPNAME=$2
if [ "$GROUPNAME" = "" ]; then
if [ "$GROUPNAME" = "" ]; then
echo "missing GROUPNAME"
echo "missing GROUPNAME"
Zeile 81: Zeile 90:
fi
fi


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


HTTP=$5
 
if [ "$HTTP" = "" ]; then
 
echo "missing HTTP"
REMOTE_HOST=$4
echo $USAGE
if [ "$REMOTE_HOST" = "" ]; then
exit 14
echo "missing REMOTE-HOST"
echo $USAGE
exit 14
fi
fi


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


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


INVOKE_SCRIPT=$SCRIPT_PATH/$INVOKE_SCRIPT
REMOTE_PATH=$7
AMOK_SCRIPT=$SCRIPT_PATH/$AMOK_SCRIPT
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
# PREPARE VARIABLES ###########################################################################
EXECUTE=/home/$USERNAME/execute
mkdir -p $EXECUTE 2> /dev/null
INVOKE_SCRIPT=$EXECUTE/$INVOKE_SCRIPT
AMOK_SCRIPT=$EXECUTE/$AMOK_SCRIPT




# ADD REPOSITORIES


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


# ADD REPOSITORIES ############################################################################
NEW_REPO=false
echo "$REPOS" | while read REPO; do
echo "$REPOS" | while read REPO; do
RESULT=`grep "$REPO" $APT_SOURCES 2> /dev/null`
RESULT=`grep "$REPO" $APT_SOURCES 2> /dev/null`
Zeile 123: Zeile 153:
echo "adding '$REPO' to $APT_SOURCES"
echo "adding '$REPO' to $APT_SOURCES"
echo -e "\n$REPO" >> $APT_SOURCES
echo -e "\n$REPO" >> $APT_SOURCES
else
NEW_REPO=true
echo "'$REPO' already in $APT_SOURCES"
fi
fi
done
done


if $NEW_REPO; then
apt-get update
apt-get upgrade
fi




# INSTALL PACKAGES


PACKAGES="wvdial python-dev python-rpi.gpio curl screen"
# INSTALL PACKAGES ############################################################################
INSTALL=""
apt-get -y install $PACKAGES


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


# FIRST TEST CONNECTION TO ACCEPT SERVER-CA ###################################################
sshpass -p $REMOTE_PASS ssh $REMOTE_USER@$REMOTE_HOST "true"




# WRITE CONFIG


CONFIG='
# WRITE WVDIAL-CONFIG #########################################################################
DATA='
[Dialer Defaults]
[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Zeile 179: Zeile 198:
'
'


echo -e "$CONFIG" > $WVDIAL_CONF
echo -e "$DATA" > $WVDIAL_CONF
chmod u=rw,go=r $WVDIAL_CONF
chmod u=rw,go=r $WVDIAL_CONF
echo "wrote '$WVDIAL_CONF'"
echo "wrote '$WVDIAL_CONF'"
Zeile 185: Zeile 204:




# CHANGE SOME PERMISSIONS TO BE ABLE TO EXECUTE AS NON-ROOT
# WRITE amok-script ###########################################################################
 
DATA='#!/bin/bash
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'"
INVOKE="'$INVOKE_SCRIPT'"
Zeile 207: Zeile 213:
# clear
# clear
echo -n "press key > "
echo -n "press key > "
setleds -D +num < /dev/tty1
read -n 1 KEY
read -n 1 KEY
echo -e ""
echo -e ""
$INVOKE $KEY
$INVOKE $KEY
Zeile 213: Zeile 222:
'
'


echo -e "$SCRIPT" > $AMOK_SCRIPT
echo -e "$DATA" > $AMOK_SCRIPT
chown $USERNAME:$GROUPNAME $AMOK_SCRIPT
chown $USERNAME:$GROUPNAME $AMOK_SCRIPT
chmod u=rwx,go= $AMOK_SCRIPT
chmod u=rwx,go= $AMOK_SCRIPT
Zeile 220: Zeile 229:




# WRITE invoke-script
# WRITE invoke-script #########################################################################
SCRIPT='
DATA='#!/bin/bash
#!/bin/bash




Zeile 236: Zeile 244:


if [[ $KEY =~ ^[0-9]+$ ]]; then
if [[ $KEY =~ ^[0-9]+$ ]]; then
URL="'$HTTP'?user='$HTTP_USER'&pass='$HTTP_PASS'&key=$KEY"
RESULT=""
RESULT=""
wvdial pin 2> /dev/null
wvdial pin 2> /dev/null
screen -dmS wvdial_screen wvdial connect 2> /dev/null
screen -dmS wvdial_screen wvdial connect 2> /dev/null
 
while true; do
FILE='$DEVICE_ID'_`date +"%Y-%m-%d_%H:%M:%S.%N"`
RESULT=`curl --connect-timeout 3 -s $URL`
while ! sshpass -p '$REMOTE_PASS' ssh '$REMOTE_USER'@'$REMOTE_HOST' "echo '$DEVICE_ID'\|$KEY > '$REMOTE_PATH/'$FILE"; do
STATUS=`echo "$RESULT" | cut -d";" -f1`
sleep 1
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
done
killall wvdial
else
else
        echo "\"$KEY\" is no number!"
    echo "\"$KEY\" is no number!"
        exit 2
    exit 2
fi
fi
'
'


echo -e "$SCRIPT" > $INVOKE_SCRIPT
echo -e "$DATA" > $INVOKE_SCRIPT
chown $USERNAME:$GROUPNAME $INVOKE_SCRIPT
chown $USERNAME:$GROUPNAME $INVOKE_SCRIPT
chmod u=rwx,go= $INVOKE_SCRIPT
chmod u=rwx,go= $INVOKE_SCRIPT
echo "wrote '$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>
</source>
==Fertige Images==
Fertig eingerichtete SD-Karten-Images sind auf dem Fileserver im Ordner "Amok" zu finden.

Aktuelle Version vom 6. Februar 2013, 09:38 Uhr


System-Voraussetzungen

[Bearbeiten]

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

[Bearbeiten]

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

[Bearbeiten]

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

Parameter

[Bearbeiten]
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

[Bearbeiten]

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

setleds -D +num < /dev/tty1 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

[Bearbeiten]

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