home-harmening:sicherheit:backup:rsync:grafischer_rsync_client

Dies ist eine alte Version des Dokuments!


Ich brachte für ein kleine Projekt einnen Rsyncclient der eine Clientsoftware von einem Server runterlädt. Danach sollte diese Clientsoftware gestartet werden. Der Benutzer sollte über den Fortschritt informiert werden. Hierzu erzeugte ich mit yad einen Fortschrittbalken.


#!/bin/bash
# Skript verbindet sich zuerst mit dem WAG um die aktuelle GeoMIA Client Version zu laden.
#
# Benötigt wird hierzu:
# - ein Benutzer auf dem WAG der Leserechte auf die Client Dateien hat
# - ein SSH Schlüssel um sich ohne Passwort auf dem WAG einzuloggen
# - rsync auf WAG und DAG
# - yad
# - ein Ping auf den Server muss möglich sein
# Christoph Harmening
 
# Variablen
str_server=144.7.131.254
str_source=/var/www/geomia-client/client/*
str_dest=/home/ldap/charmening/client/
str_user=rsyncuser
str_key=/home/ldap/charmening/id_rsyncuser_ecdsa
str_icon=/usr/share/icons/geoinfo/geomia-day.ico
str_title="GeoMIA Client"
str_infoTxt="\nPrüfe Version ... \n"
str_start=$1
 
if ! ping -4 -c3 ${str_server} &> /dev/null ; then yad --info --title="${str_title}" --text="Keine Verbindung mit dem Server ${str_server}" --window-icon="${str_icon}" ; exit 1 ; fi
 
# Wieviele Dateien müssen übertragen werden werden?
int_numberOfFiles=$(rsync -auv --delete --dry-run --stats -e "ssh -i ${str_key}" ${str_user}@${str_server}:${str_source} ${str_dest} | grep "Number of regular files transferred" | awk '{print $6}')
 
# Wenn keine Dateien übertragen werden müssen, dann starte direkt GeoMIA
if (( ${int_numberOfFiles} > 0 )) ; then
  count=0
  {
    # Übertrage Dateien
    rsync -auv --delete --info=name -e "ssh -i ${str_key}" ${str_user}@${str_server}:${str_source} ${str_dest} | while read -r line ; do
        ((count++))
        #echo "Datei ${count} von ${int_numberOfFiles}: $line"
        # Berechne den Prozentwert
        int_progress=$(( (count * 100) / ${int_numberOfFiles} ))
        # Lass über 100 dan bleibe bei 100
        if (( ${int_progress} >= 100 )) then int_progress=100; fi
        echo ${int_progress}
    done
  } | yad --progress --title="${str_title}" --text="${str_infoTxt}" --percantage=0 --auto-close --width=400 --height=100 --no-cancel --window-icon="${str_icon}"
fi
 
# GeoMIA Start
${str_dest}/${str_start}