Last active
April 5, 2016 11:50
-
-
Save raphiz/29dd1ed3145b06b9398d to your computer and use it in GitHub Desktop.
HSR Skripteserver Sync-Skript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
################### | |
## Konfiguration ## | |
################### | |
## Ersetze <your username> um nicht jedes mal nach deimem HSR Benutzername gefragt zu werden | |
# HSR_USERNAME="<your username>" | |
## Ersetze <your password> um nicht jedes mal nach deimem HSR Passwort gefragt zu werden | |
# HSR_PASSWORD="<your password>" | |
## Ersetze /home/user/HSR/skripte durch das Verzeichnis, in das synchronisiert werden soll | |
## um nicht jedes mal gefragt zu werden | |
# DESTINATION="/home/user/HSR/skripte" | |
## IP des HSR servers | |
SERVER='152.96.90.26' | |
## Name des samba shares | |
SHARE='skripte' | |
## Setze den Wert auf true, wenn du immer als root mit mount mounten möchtest | |
FORCE_USE_MOUNT=false | |
## Setze den Wert auf true, wenn der share in der fstab eingetragen ist | |
MOUNT_WITH_FSTAB=false | |
## Die Benutzer-ID wird für gvfs-mount benötigt | |
USER_ID="$(id -u)" | |
## Verzeichnis, welches genutzt werden soll, wenn 'mount' genutzt wird | |
MOUNTDIR='/mnt/hsr/' | |
## Das Kommando, welches zur Synchronisation genutzt wird | |
SYNC_COMMAND="rsync -ah --delete --out-format=%n%L" | |
############################ | |
## Ende der Konfiguration ## | |
############################ | |
## Frage nach Benutzername, wenn dieser nicht gesetzt ist | |
if [ ! -n "$HSR_USERNAME" ] && [ ! "$MOUNT_WITH_FSTAB" = true ]; then | |
read -p "Dein HSR Username: " HSR_USERNAME | |
fi | |
## Frage nach Passwort, wenn dieses nicht gesetzt ist | |
if [ ! -n "$HSR_PASSWORD" ] && [ ! "$MOUNT_WITH_FSTAB" = true ]; then | |
read -s -p "Dein HSR Passwort: " HSR_PASSWORD | |
echo | |
fi | |
## Frage nach Zielverzeichnis, wenn dieses nicht gesetzt ist | |
if [ ! -n "$DESTINATION" ]; then | |
read -p "In welches Verzeichnis soll synchronisiert werden (./skripte): " DESTINATION | |
if [ ! -n "$DESTINATION" ]; then | |
DESTINATION=$(realpath "./skripte") | |
fi | |
fi | |
## Erstelle Zielverzeichnis, wenn dieses noch nicht existiert | |
if [ ! -d "$DESTINATION" ]; then | |
mkdir -p $DESTINATION | |
fi | |
### Nutze gvfs-mount falls erwünscht und verfügbar - sonst nutze mount | |
if [ ! "$FORCE_USE_MOUNT" = true ] && [ -x "$(command -v gvfs-mount)" ]; then | |
SOURCE="/run/user/$USER_ID/gvfs/smb-share:server=$SERVER,share=$SHARE" | |
if [ ! -d "$SOURCE" ]; then | |
echo "Einhängen mit gvfs-mount...." | |
gvfs-mount "smb://$SERVER/$SHARE" > /dev/null << ANSWERS | |
$HSR_USERNAME | |
hsr.ch | |
$HSR_PASSWORD | |
ANSWERS | |
sleep 1 | |
if [ ! -d "$SOURCE" ]; then | |
# gvfs ist so grässlich langsam.... | |
sleep 3 | |
fi | |
if [ ! -d "$SOURCE" ]; then | |
echo "Einhängen ist fehlgeschlagen!" >&2 | |
exit 1 | |
fi | |
fi | |
else | |
echo "Einhängen mit mount..." | |
### Erstelle das Verzeichnis, in welches gemounted werden soll, falls dieses noch nicht existiert | |
if [ ! -d "$MOUNTDIR" ]; then | |
sudo mkdir -p $MOUNTDIR | |
fi | |
# Try to mount via fstab.... | |
if [ "$MOUNT_WITH_FSTAB" = true ]; then | |
mount $MOUNTDIR | |
else | |
mount -t cifs "//$SERVER/$SHARE" $MOUNTDIR -o user=$HSR_USERNAME,password=$HSR_PASSWORD,iocharset=utf8 | |
fi | |
SOURCE="$MOUNTDIR" | |
fi | |
function synchronize() { | |
# Baue --exculde parameter für rsync zusammen | |
EXCLUDE="" | |
for i in "${@:3}"; do | |
EXCLUDE="$EXCLUDE --exclude $i" | |
done | |
echo "Synchronisiere $2 -> $1..." | |
$SYNC_COMMAND $EXCLUDE $SOURCE/$2 $DESTINATION/$1 | tee -a "$DESTINATION/sync.log" | |
echo "Synchronisation $2 -> $1 abgeschlossen"; echo; echo | |
} | |
## Beginne mit der synchronisation | |
echo >> "$DESTINATION/sync.log" | |
echo "--------------------------------------------------------------------------------" | tee -a "$DESTINATION/sync.log" | |
echo "Startzeitpunkt: $(date +'%d.%m.%Y %T')" | tee -a "$DESTINATION/sync.log" | |
echo "Quelle: $MOUNTDIR" | tee -a "$DESTINATION/sync.log" | |
echo "Ziel: $DESTINATION" | tee -a "$DESTINATION/sync.log" | |
echo "--------------------------------------------------------------------------------" | tee -a "$DESTINATION/sync.log" | |
echo | tee -a "$DESTINATION/sync.log" | |
########################################################### | |
## Konfiguration der zu synchronisierenden Verzeichnisse ## | |
########################################################### | |
# synchronize <zielpfad relativ zum Zielverzeichnis> <Quellenpfad relativ vom Skripte-Share-Root> <zu ignorierender Pfad, relativ zur Quelle> <2. zu ignorierender Pfad> ... <n. zu ignorierender Pfad> | |
synchronize "InfSi1" "Informatik/Fachbereich/Informationssicherheit_1_-_Grundlagen/InfSi1/" "Archiv/" "Videos/" "*.exe" | |
### Aushängen | |
echo "Aushängen...." | |
if [ "$SOURCE" == "$MOUNTDIR" ]; then | |
umount $MOUNTDIR | |
else | |
sleep 2 | |
gvfs-mount -u "smb://$SERVER/$SHARE" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment