Raspberry Amok Installation: Unterschied zwischen den Versionen
| (7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 12: | Zeile 12: | ||
Des Weiteren wird das System so konfiguriert dass das Skript, das auf die Tastatureingaben wartet, beim Bootup auf tty1 gestartet wird. | 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=== | ||
| Zeile 20: | Zeile 20: | ||
{| class="wikitable" | {| class="wikitable" | ||
! Feld !! Beschreibung | ! Feld !! Beschreibung | ||
|- | |- | ||
| 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 29: | Zeile 27: | ||
| SIM-PIN || Pin der Sim-Karte für die GSM-Verbindung | | 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 | ||
|} | |} | ||
| Zeile 42: | Zeile 44: | ||
# CONFIG | # CONFIG ###################################################################################### | ||
APT_SOURCES="/etc/apt/sources.list" | APT_SOURCES="/etc/apt/sources.list" | ||
| Zeile 61: | Zeile 62: | ||
INVOKE_SCRIPT="invoke.sh" | INVOKE_SCRIPT="invoke.sh" | ||
REPOS="deb http://security.debian.org testing/updates main contrib non-free" | |||
PACKAGES="wvdial screen sshpass" | |||
USAGE="USAGE: $0 | |||
# 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 72: | Zeile 76: | ||
USERNAME=$1 | |||
if [ "$USERNAME" = "" ]; then | if [ "$USERNAME" = "" ]; then | ||
echo "missing USERNAME" | echo "missing USERNAME" | ||
| Zeile 86: | Zeile 83: | ||
fi | fi | ||
GROUPNAME=$ | GROUPNAME=$2 | ||
if [ "$GROUPNAME" = "" ]; then | if [ "$GROUPNAME" = "" ]; then | ||
echo "missing GROUPNAME" | echo "missing GROUPNAME" | ||
| Zeile 93: | Zeile 90: | ||
fi | fi | ||
PIN=$ | PIN=$3 | ||
if [ "$PIN" = "" ]; then | 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 | fi | ||
REMOTE_USER=$5 | |||
if [ "$ | if [ "$REMOTE_USER" = "" ]; then | ||
echo "missing REMOTE-USER" | |||
echo $USAGE | |||
exit 15 | |||
fi | fi | ||
REMOTE_PASS=$6 | |||
if [ "$ | if [ "$REMOTE_PASS" = "" ]; then | ||
echo "missing REMOTE-PASS" | |||
echo $USAGE | |||
exit 16 | |||
fi | fi | ||
REMOTE_PATH=$7 | |||
if [ "$ | 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 | 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 | echo "$REPOS" | while read REPO; do | ||
RESULT=`grep "$REPO" $APT_SOURCES 2> /dev/null` | RESULT=`grep "$REPO" $APT_SOURCES 2> /dev/null` | ||
| Zeile 135: | 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 | ||
NEW_REPO=true | |||
fi | fi | ||
done | done | ||
if $NEW_REPO; then | |||
apt-get update | |||
apt-get upgrade | |||
fi | |||
PACKAGES | # INSTALL PACKAGES ############################################################################ | ||
apt-get -y install $PACKAGES | |||
# FIRST TEST CONNECTION TO ACCEPT SERVER-CA ################################################### | |||
sshpass -p $REMOTE_PASS ssh $REMOTE_USER@$REMOTE_HOST "true" | |||
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 191: | Zeile 198: | ||
' | ' | ||
echo -e "$ | 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 197: | Zeile 204: | ||
# WRITE amok-script ########################################################################### | |||
DATA='#!/bin/bash | |||
# WRITE amok-script | |||
#!/bin/bash | |||
INVOKE="'$INVOKE_SCRIPT'" | INVOKE="'$INVOKE_SCRIPT'" | ||
| Zeile 219: | 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 225: | Zeile 222: | ||
' | ' | ||
echo -e "$ | 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 232: | Zeile 229: | ||
# WRITE invoke-script | # WRITE invoke-script ######################################################################### | ||
DATA='#!/bin/bash | |||
#!/bin/bash | |||
| Zeile 248: | Zeile 244: | ||
if [[ $KEY =~ ^[0-9]+$ ]]; then | if [[ $KEY =~ ^[0-9]+$ ]]; then | ||
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 | ||
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 | done | ||
killall wvdial | |||
else | else | ||
echo "\"$KEY\" is no number!" | |||
exit 2 | |||
fi | fi | ||
' | ' | ||
echo -e "$ | 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">
- !/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-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
- 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 > "
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'"
- 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'"
- 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.