Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| home-harmening:sicherheit:backup:rsync:grafischer_rsync_client [2024/10/29 08:45] – charmening | home-harmening:sicherheit:backup:rsync:grafischer_rsync_client [2024/11/12 14:08] (aktuell) – charmening | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ==== Rsync Client ==== | ==== Rsync Client ==== | ||
| {{ : | {{ : | ||
| - | Ich brauchte für ein kleine | + | Ich brauchte für ein kleines |
| - | \\ \\ \\ | + | Wenn das Skript aus einer GUI gestartet wurde wird mit yad ein Fortschrittsbalken |
| + | Falls ohne GUI gestartet wird kommt eine Prozent Angabe auf der Konsole. | ||
| + | Das Skript besitzt eine Konfigurationsdatei **sync.conf** in der einige Variablen konfiguriert werden können. Alternativ kann jede Variabe\\ | ||
| + | mittels Schalter übergeben werden. | ||
| + | |**Option**|| | ||
| + | |-s|Angabe des Servers| | ||
| + | |-q|Wo liegt der Client auf dem Server| | ||
| + | |-d|Wo sollen die Dateien lokal gespeichert werden| | ||
| + | |-i|Wo ist der SSH Schlüssel| | ||
| + | |-x|Welche Datei soll am Ende ausgeführt werden| | ||
| + | \\ | ||
| + | ==== Ordnerstruktur ===== | ||
| + | < | ||
| + | / | ||
| + | | ||
| + | | ||
| + | </ | ||
| + | \\ \\ | ||
| + | ==== sync.conf ==== | ||
| + | <code Bash> | ||
| + | # | ||
| + | |||
| + | str_server=SERVER | ||
| + | str_source=/ | ||
| + | str_dest=/ | ||
| + | str_user=rsyncuser | ||
| + | str_key=/ | ||
| + | str_icon=/ | ||
| + | str_title=" | ||
| + | str_infoTxt=" | ||
| + | str_start=/ | ||
| + | </ | ||
| + | \\ | ||
| + | ==== sync-client.sh ==== | ||
| <code Bash> | <code Bash> | ||
| #!/bin/bash | #!/bin/bash | ||
| - | # Skript verbindet sich zuerst mit dem WAG um die aktuelle | + | # Skript verbindet sich zuerst mit dem Server |
| - | # | + | |
| - | # 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 | # Christoph Harmening | ||
| # Variablen | # Variablen | ||
| - | str_server=144.7.131.254 | + | str_sourceBin=$(dirname " |
| - | str_source=/ | + | if [ -f ${str_sourceBin}/ |
| - | str_dest=/ | + | |
| - | str_user=rsyncuser | + | |
| - | str_key=/ | + | |
| - | str_icon=/ | + | |
| - | str_title="GeoMIA Client" | + | |
| - | str_infoTxt=" | + | |
| - | str_start=$1 | + | |
| - | if ! ping -4 -c3 ${str_server} &> /dev/null ; then yad --info --title="${str_title}" --text="Keine Verbindung | + | # Feste Variablen |
| + | RED=' | ||
| + | GREEN=' | ||
| + | YELLOW=' | ||
| + | NC=' | ||
| + | |||
| + | show_help() { | ||
| + | echo | ||
| + | echo " | ||
| + | echo "Es können feste Variablen unter \# Variablenin dem Skript selbst festgelegt werden. Alternativ können" | ||
| + | echo "auch Schalter übergeben werden um das Skript zu steuern." | ||
| + | echo | ||
| + | printf "${YELLOW}Vorraussetzungen die erfüllt sein müssen: | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " - Es muss möglich sein einen Ping vom Client zum Server zu senden" | ||
| + | echo | ||
| + | printf | ||
| + | echo " | ||
| + | echo | ||
| + | printf " | ||
| + | echo " | ||
| + | echo | ||
| + | printf | ||
| + | printf " | ||
| + | echo "-s | Angabe des Servers von dem die Dateien geladen werden" | ||
| + | echo "-q | Quellordner auf dem Server. Bitte mit einem * am Ende" | ||
| + | echo "-d | Zielorder auf dem lokalen System. Bitte abschließen mit /" | ||
| + | echo "-u | Benutzer der auf den Server zugreifen Darf" | ||
| + | echo "-i | Pfad zum Identity File bzw. SSH Key für den Benutzer" | ||
| + | echo "-x | Welche Datei soll nach Skript Ende ausgeführt werden" | ||
| + | echo | ||
| + | echo " | ||
| + | | ||
| + | } | ||
| - | # Wieviele Dateien müssen übertragen werden werden? | + | # Schalter |
| - | int_numberOfFiles=$(rsync | + | while getopts s: |
| + | case $opt in | ||
| + | s) if [ ! -z $OPTARG ]; then str_server=$OPTARG ; fi ;; # Welcher Server | ||
| + | q) if [ ! -z $OPTARG ]; then str_source=$OPTARG ; fi ;; # Ordner auf dem Server | ||
| + | d) if [ ! -z $OPTARG ]; then str_dest=$OPTARG ; fi ;; # Lokales Ziel | ||
| + | u) if [ ! -z $OPTARG ]; then str_user=$OPTARG ; fi ;; # Benutzer | ||
| + | i) if [ ! -z $OPTARG ]; then str_key=$OPTARG ; fi ;; # Keyfile | ||
| + | x) if [ ! -z $OPTARG ]; then str_start=$OPTARG ; fi ;; # Welches Programm wird gestartet | ||
| + | h) show_help ;; | ||
| + | *) show_help ;; | ||
| + | esac | ||
| + | done | ||
| - | # Wenn keine Dateien übertragen werden | + | # Serververbindung prüfen |
| - | if (( ${int_numberOfFiles} > 0 )) ; then | + | if ! ping -4 -c3 ${str_server} &> /dev/null ; then |
| - | | + | if [ -z $DISPLAY ]; then |
| - | { | + | printf " |
| + | else | ||
| + | yad --info --title=" | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | # Wieviele | ||
| + | int_numberOfFiles=$(rsync -auv --delete --dry-run --stats -e "ssh -o StrictHostKeyChecking=no -i ${str_key}" | ||
| + | int_numberOfFilesDelete=$(rsync -auv --delete --dry-run --stats -e "ssh -o StrictHostKeyChecking=no -i ${str_key}" ${str_user}@${str_server}: | ||
| + | |||
| + | # Prüfe ob der Zielordner existiert | ||
| + | if [ ! -d ${str_dest} ]; then mkdir -p ${str_dest}; | ||
| + | |||
| + | sync_files() | ||
| # Übertrage Dateien | # Übertrage Dateien | ||
| - | rsync -auv --delete --info=name -e "ssh -i ${str_key}" | + | rsync -auvh --chown=root: |
| ((count++)) | ((count++)) | ||
| #echo "Datei ${count} von ${int_numberOfFiles}: | #echo "Datei ${count} von ${int_numberOfFiles}: | ||
| # Berechne den Prozentwert | # Berechne den Prozentwert | ||
| - | int_progress=$(( (count * 100) / ${int_numberOfFiles} )) | + | |
| + | if (( ${int_numberOfFiles} == 0 )); then int_numberOfFiles=1 ; fi | ||
| + | int_progress=$(( (count * 100) / ${int_numberOfFiles} )) | ||
| # Lass über 100 dan bleibe bei 100 | # Lass über 100 dan bleibe bei 100 | ||
| - | if (( ${int_progress} >= 100 )) then int_progress=100; | + | if (( ${int_progress} >= 100 )); then int_progress=100; |
| - | echo ${int_progress} | + | |
| + | printf " | ||
| + | else | ||
| + | | ||
| + | fi | ||
| done | done | ||
| - | | + | } |
| + | |||
| + | # Wenn keine Dateien übertragen oder gelöscht werden müssen, dann starte direkt den Client | ||
| + | if (( ${int_numberOfFiles} > 0 )) || (( ${int_numberOfFilesDelete} > 0 )) ; then | ||
| + | count=0 | ||
| + | if [ -z $DISPLAY ]; then | ||
| + | printf " | ||
| + | else | ||
| + | sync_files | ||
| + | fi | ||
| fi | fi | ||
| - | # GeoMIA | + | # Client |
| - | ${str_dest}/${str_start} | + | if [ ! -z $DISPLAY ]; then |
| + | if [ ! -z ${str_start} ]; then | ||
| + | echo " | ||
| + | ${str_start} | ||
| + | fi | ||
| + | fi | ||
| </ | </ | ||
| + | \\ | ||
| + | Den passenden Rsync Server findet man [[home-harmening: | ||