home-harmening:sicherheit:backup:rsync:grafischer_rsync_client

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
home-harmening:sicherheit:backup:rsync:grafischer_rsync_client [2024/10/29 10:38] charmeninghome-harmening:sicherheit:backup:rsync:grafischer_rsync_client [2024/11/12 14:08] (aktuell) charmening
Zeile 4: Zeile 4:
 Wenn das Skript aus einer GUI gestartet wurde wird mit yad ein Fortschrittsbalken erzeugt. \\ Wenn das Skript aus einer GUI gestartet wurde wird mit yad ein Fortschrittsbalken erzeugt. \\
 Falls ohne GUI gestartet wird kommt eine Prozent Angabe auf der Konsole. 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 ===== 
 +<code> 
 +/opt/sync_client/ 
 +                 sync_client.sh 
 +                 sync.conf 
 +</code> 
 +\\ \\ 
 +==== sync.conf ==== 
 +<code Bash> 
 +#!/bin/bash 
 + 
 +str_server=SERVER                                       # Server Adresse 
 +str_source=/share/client/                               # Ordner auf dem Server 
 +str_dest=/opt/client/client/                            # Ordner auf dem lokalen System 
 +str_user=rsyncuser                                      # Benutzer auf dem Server 
 +str_key=/opt/client/id_ecdsa_rsyncuser                  # SSH Key File 
 +str_icon=/usr/share/icons/client.png                    # Icon für die yad Anzeige 
 +str_title="Sync Client"                                 # Titel des Clients 
 +str_infoTxt="Prüfe Version ..."                         # Info Text des Clients 
 +str_start=/opt/client/client/client                     # Datei welche nach dem beenden gestartet werden soll 
 +</code> 
 +\\ 
 +==== sync-client.sh ====
 <code Bash> <code Bash>
 #!/bin/bash #!/bin/bash
Zeile 11: Zeile 42:
  
 # Variablen # Variablen
-str_server=SERVER         # Server Adresse +str_sourceBin=$(dirname "$(readlink -f "$0")") 
-str_source=/var/www/client/client/*         # Ordner auf dem Server +if [ -f ${str_sourceBin}/sync.conf ]; then source ${str_sourceBin}/sync.conf; fi
-str_dest=/home/USER/client/         # Ordner auf dem lokalen System +
-str_user=rsyncuser # Benutzer auf dem Server +
-str_key=/home/USER/.ssh/id_rsyncuser_ecdsa         # SSH Key File +
-str_icon=/usr/share/icons/client/client.ico         # Icon für die yad Anzeige +
-str_title="Client"         # Titel des Clients +
-str_infoTxt="Prüfe Version ..." # Info Text des Clients +
-str_start=start.sh         # Datei welche nach dem beenden gestartet werden soll+
  
 # Feste Variablen # Feste Variablen
Zeile 26: Zeile 50:
 YELLOW='\033[1;33m' YELLOW='\033[1;33m'
 NC='\033[0m' NC='\033[0m'
 + 
 show_help() { show_help() {
   echo   echo
Zeile 82: Zeile 106:
 fi fi
  
-# Wieviele Dateien müssen übertragen werden werden? +# Wieviele Dateien müssen übertragen und gelöscht 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}')+int_numberOfFiles=$(rsync -auv --delete --dry-run --stats -e "ssh -o StrictHostKeyChecking=no -i ${str_key}" ${str_user}@${str_server}:${str_source} ${str_dest} | grep "Number of regular files transferred" | awk '{print $6}') 
 +int_numberOfFilesDelete=$(rsync -auv --delete --dry-run --stats -e "ssh -o StrictHostKeyChecking=no -i ${str_key}" ${str_user}@${str_server}:${str_source} ${str_dest} | grep "Number of deleted files" | awk '{print $5}')
  
-# Prüfe over der Zielordner existiert+# Prüfe ob der Zielordner existiert
 if [ ! -d ${str_dest} ]; then mkdir -p ${str_dest}; fi if [ ! -d ${str_dest} ]; then mkdir -p ${str_dest}; fi
  
 sync_files() { sync_files() {
     # Übertrage Dateien     # Ü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+    rsync -auvh --chown=root:root --chmod=u+rwx,g+rwx,o+rwx --delete --info=name -e "ssh -o StrictHostKeyChecking=no -i ${str_key}" ${str_user}@${str_server}:${str_source} ${str_dest} | while read -r line ; do
         ((count++))         ((count++))
         #echo "Datei ${count} von ${int_numberOfFiles}: $line"         #echo "Datei ${count} von ${int_numberOfFiles}: $line"
         # Berechne den Prozentwert         # Berechne den Prozentwert
-        int_progress=$(( (count * 100) / ${int_numberOfFiles} ))+        # Fehlerunterdrückung falls es keine Dateien zum Kopieren gibt 
 +        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; fi+        if (( ${int_progress} >= 100 ))then int_progress=100; fi
         if [ -z $DISPLAY ]; then         if [ -z $DISPLAY ]; then
           printf "\r${GREEN}${int_progress}${NC} percent"           printf "\r${GREEN}${int_progress}${NC} percent"
Zeile 105: Zeile 132:
 } }
  
-# Wenn keine Dateien übertragen werden müssen, dann starte direkt GeoMIA +# Wenn keine Dateien übertragen oder gelöscht werden müssen, dann starte direkt den Client 
-if (( ${int_numberOfFiles} > 0 )) ; then+if (( ${int_numberOfFiles} > 0 )) || (( ${int_numberOfFilesDelete} > 0 )) ; then
   count=0   count=0
   if [ -z $DISPLAY ]; then   if [ -z $DISPLAY ]; then
Zeile 115: Zeile 142:
 fi fi
  
-GeoMIA Start +Client Start 
-if [ ! -z ${str_start} ]; then +if [ ! -z $DISPLAY ]; then 
-  ${str_start}+  if [ ! -z ${str_start} ]; then 
 +    echo "Starte ${str_start}..." 
 +    ${str_start} 
 +  fi
 fi fi
 </code> </code>
 \\ \\
 Den passenden Rsync Server findet man [[home-harmening:sicherheit:backup:rsync:syncen_von_verzeichnissen|hier]] Den passenden Rsync Server findet man [[home-harmening:sicherheit:backup:rsync:syncen_von_verzeichnissen|hier]]