Wir haben zum letzten Saisonbeginn mit dem probeweisen Betrieb von efaLive begonnen und der läuft soweit auch gut. Es scheint alles wie gewünscht zu funktionieren, wir haben lediglich folgenden Wunsch, der noch nicht gelöst werden konnte:
Unser Modifikationswunsch an efaLive ist, dass beim Autobackup auf einen angeschlossenen Stick zunächst nach einem Passwort gefragt wird und erst bei richtiger Eingabe das Backup auf den Stick beginnt.
Dazu habe ich versucht, das Skript "/opt/efalive/bin/autobackup.sh" so zu verändern, dass es um diese Funktion ergänzt wird. Dazu habe ich zunächst mit dem Fenstermanager Zenity einen Dialog geschrieben, der die gewünschte Passwortabfrage beinhaltet. Das dafür benötigte Passwort dafür beziehe ich aus einer als versteckt angelegten Datei.
Sollte das Passwort dann richtig eingegeben worden sein, so wird das normalerweise direkt ausgeführte Bacvkup gestartet.
Dieses Passwortskript habe ich nach der Erstellung auf efaLive erfolgreich ausprobieren können. Wenn ich es über den Spezial-Button gestartet habe, hat es das gewünschte Verhalten gezeigt. Auch mit dem "run_backup.sh" konnte ich damit dann manuell ein Backup erfolgreich ausführen.
Danach wollte ich diese Teillösung in das bestehende Werk einpflegen, wofür ich mehrere Varianten ausprobiert habe, die jedoch leider alle nicht zum gewünschen Ergebnis geführt habt.
Eine Lösung war, den Dialog zwischen das autobackup.sh-Skript und das run_backup.sh zu hängen, es heißt bei mir vorerst back2.sh und sieht folgendermaßen aus:
Code: Alles auswählen
#! /bin/bash
######################################
#
# B A C K U P
#
######################################
# Skript, dass nach einem Passwort fragt und dann das Backup ausführt.
#Variableninitialisierung (der Übersicht halber)
ziel="null"
benutzerpass="null"
#ziel ist das Vorgegebene Passwort, liegt in Datei /home/efa/.backuppassword/.backpass.txt
#Skriptablaufbeginn
zenity --info --text "USB-Laufwerk angeschlossen und erkannt." --title "USB-Port";
zenity --question --text "Soll das Backup auf das angeschlossene Laufwerk ausgeführt werden?" --title "USB-Backup";
if [ $? != 0 ]; then exit;fi;
#Benutzer wird mitgeteilt, dass ein USB-Laufwerk angerschlossen und erkannt wurde, Nachfrage, ob Backip erfolgen soll
read ziel < /home/efa/.backuppassword/.backpass.txt
#Passwort aus Datei /home/efa/.backuppassword/.backpass.txt wird eingelesen und auf die Variable ziel gelegt.
benutzerpass=$(zenity --entry --hide-text --text "Bitte das Passwort zum Ausführen des Backups eingeben!" --title "USB-Backup");
if [ $? != 0 ]; then exit;fi;
#erster Versuch der Passwortabfrage zum Backup
while [ "$benutzerpass" != "$ziel" ]
do
benutzerpass=$(zenity --entry --hide-text --text "Das eingegebene Passwort war nicht richtig!\nBitte das richtige Passwort eingeben." --title "Falsche Eingabe!");
if [ $? != 0 ]; then exit;fi;
done
#bei falscher erster Passworteingabe erfolgt hier die Wiederholung, bis zur richtigen Eingabe
if [ "$benutzerpass" = "$ziel" ]
then
zenity --info --text "Passwort war richtig!\nBackup wird ausgeführt..." --title "Backup";
/opt/efalive/bin/run_backup.sh /media/backup
backupergebnis=$?
exit $backupergebnis
#hier wird nun das normale Backup wie vorgesehen durchgeführt, wenn das Passwort vorher richtig war.
# if ! zenity --info --text "Backup erfolgreich!" --title "Backup";
# then exit;fi;
fi
#Bei korrektem Passwort wird das Backup ausgeführt!
Dieses Skript lasse ich durch folgende Änderung im autobackup.sh starten: (Rest unverändert, in diesem Ausschnitt habe ich nur die 2. Zeile angepasst.)
Code: Alles auswählen
/bin/echo "Creating backup to /media/backup..."
/opt/efalive/bin/back2.sh
BACKUP_RESULT=$?
/bin/echo "Unmounting $1..."
Da dieser Ansatz nicht funktionierte habe ich auch noch eine andere Verison versucht, wobei ich meinen Dialog zur Passwortabfrage in das autobackup.sh-Skript integriert habe.
Das sieht dann insgesamt folgendermaßen aus:
Code: Alles auswählen
#! /bin/bash
######################################
#
# B A C K U P
#
######################################
# Skript, dass nach einem Passwort fragt und dann das Backup ausführt.
#Variableninitialisierung (der Übersicht halber)
ziel="null"
benutzerpass="null"
#ziel ist das Vorgegebene Passwort, liegt in Datei /home/efa/.backuppassword/.backpass.txt
#Skriptablaufbeginn
#Hier beginnt das Originalskript... !/bin/bash
#
####
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Copyright 2008-2012 Kay Hannay <klinux@hannay.de>
#
###
#
# Automatic backup of efa data to an USB stick
# Usage: autobackup.sh <DEVICE>
#
BEEP_ERROR="/usr/bin/beep -f 2000 -r 5 -d 50 -l 1000"
BEEP_SUCCESS="/usr/bin/beep -f 1000 -r 3 -d 50"
AUTO_USB_BACKUP_DIALOG="TRUE"
export DISPLAY=:0.0
if [ -f ~/.efalive/settings.conf ]
then
. ~/.efalive/settings.conf
fi
if [ ! $1 ]
then
/bin/echo "Error, no backup device specified!"
$BEEP_ERROR
exit 1
fi
if [ ! -b $1 ]
then
/bin/echo "Error, specified device does not exist!"
$BEEP_ERROR
exit 1
fi
##########################
#
# Unterbrechung des normalen Backupskriptes!
#
##########################
if ! zenity --info --text "USB-Laufwerk angeschlossen und erkannt." --title "USB-Port";
then exit;fi;
if ! zenity --question --text "Soll das Backup auf das angeschlossene Laufwerk ausgeführt werden?" --title "USB-Backup";
then exit;fi;
#Benutzer wird mitgeteilt, dass ein USB-Laufwerk angerschlossen und erkannt wurde, Nachfrage, ob Backip erfolgen soll
read ziel < /home/efa/.backuppassword/.backpass.txt
#Passwort aus Datei /home/efa/.backuppassword/.backpass.txt wird eingelesen und auf die Variable ziel gelegt.
if ! benutzerpass=$(zenity --entry --hide-text --text "Bitte das Passwort zum Ausführen des Backups eingeben!" --title "USB-Backup");
then exit;fi;
#erster Versuch der Passwortabfrage zum Backup
while [ "$benutzerpass" != "$ziel" ]
do
if ! benutzerpass=$(zenity --entry --hide-text --text "Das eingegebene Passwort war nicht richtig!\nBitte das richtige Passwort eingeben." --title "Falsche Eingabe!");
then exit;fi;
done
#bei falscher erster Passworteingabe erfolgt hier die Wiederholung, bis zur richtigen Eingabe
if [ "§benutzerpass" != "$ziel" ]
then
if ! zenity --info --text "Passwort war falsch.\nAbbruch an dieser Stelle.\n\nAbbruch hier unvorhergesehen, bitte Torben informieren!"
exit
fi
#Abfangen eines eigentlich unmöglichen Falles: Passwort war falsch, Skript wurde aber trotzdem weiter ausgeführt.
if [ "$benutzerpass" = "$ziel" ]
then
if ! zenity --info --text "Passwort war richtig!\nBackup wird ausgeführt...\nBitte warten, bis Rückmeldung erfolgt!" --title "Backup";
then exit;fi;
fi
#Bei korrektem Passwort wird das Backup ausgeführt!
#######################
#
# Fortführung des normalen Backupskriptes bei richtigem Passwort!
#
#######################
/bin/echo "Mounting $1 to /media/backup..."
/usr/bin/pmount $1 backup
######################################
######################################
/bin/echo "Creating backup to /media/backup..."
/opt/efalive/bin/run_backup.sh /media/backup
BACKUP_RESULT=$?
/bin/echo "Unmounting $1..."
/usr/bin/pumount backup
if [ $BACKUP_RESULT -ne 0 ]
then
if [ $BACKUP_RESULT -eq 1 ] || [ $BACKUP_RESULT -eq 5 ]
then
/bin/echo "Login to efa2 server failed, please check that the efaLive administrator is created in efa2 configuration"
fi
/bin/echo "Error, backup failed!"
if [ "x$AUTO_USB_BACKUP_DIALOG" = "xTRUE" ]
then
/usr/bin/zenity --error --text="Backup failed, error code: $BACKUP_RESULT !\n\nView autobackup.log for details."
fi
$BEEP_ERROR
else
/bin/echo "Backup successful."
if [ "x$AUTO_USB_BACKUP_DIALOG" = "xTRUE" ]
then
/usr/bin/zenity --info --text="Backup successful."
fi
$BEEP_SUCCESS
fi
exit $BACKUP_RESULT
#Ende des Backupskriptes, hier wurde außer diesem Kommentar nichts weiter eingefügt.
Da ich selber Neuling bei dieser Art von Shell-Skripten war, bevor ich mich um dieses Problem gekümmert habe und es daher nun auch immernoch mehr oder weniger bin, wäre ich sehr froh über irgendwelche Hilfe zur Lösung unseres Problems. Sowohl für eine "Reparatur" einer meiner Lösungen als auch für einen anderen Ansatz wäre ich offen!
Also falls jemand mir sagen kann, warum die Anpassung des Skriptes nicht funktioniert hat, immer gerne!!
Andere Sache: Wenn ich es richtig gesehen habe, liegt die Statkstikauswertung nicht als Skrpit vor und ließe sich daher leider nicht in diese Anwendung einpflegen, oder? Das wäre unser nächstes Anliegen, damit wir für die Webseite eine HTML-Auswertung auch auf einen angesteckten Stick erstellen können. Dieses Problem ist aber erstmal nachrangig.
Mit rudersportlichen Grüßen aus Bad Schwartau,
Torben