diff --git a/symlink_manager/ip_name_map.txt b/symlink_manager/ip_name_map.txt new file mode 100644 index 0000000..01f5f60 --- /dev/null +++ b/symlink_manager/ip_name_map.txt @@ -0,0 +1,5 @@ +192.168.176.12 kladow-archiv +192.168.176.13 kladow-laufend +192.168.174.11 hetzner-ausgelagert +192.168.174.12 hetzner-archiv +192.168.174.13 hetzner-laufend diff --git a/symlink_manager/symlink_manager.sh b/symlink_manager/symlink_manager.sh new file mode 100644 index 0000000..cb6ad01 --- /dev/null +++ b/symlink_manager/symlink_manager.sh @@ -0,0 +1,163 @@ +#!/bin/bash + +# Konfigurationsdateien +SERVER_FILE="ip_name_map.txt" +TARGET_FILE="symlink_targets.txt" +BASE_DIR="$HOME" + +# Überprüfen der Existenz von Konfigurationsdateien +check_files() { + [[ ! -f "$SERVER_FILE" ]] && touch "$SERVER_FILE" + [[ ! -f "$TARGET_FILE" ]] && touch "$TARGET_FILE" +} + +# Menü anzeigen +main_menu() { + local choice=$(zenity --list \ + --title="Symlink Manager" \ + --text="Wählen Sie eine Option:" \ + --column="Option" --column="Beschreibung" \ + "1" "Symlinks erstellen" \ + "2" "Symlinks löschen" \ + "3" "NFS-Freigaben aktualisieren" \ + "4" "Server-Einträge bearbeiten" \ + "5" "Beenden") + + case $choice in + 1) create_symlinks ;; + 2) delete_symlinks ;; + 3) update_symlink_targets ;; + 4) manage_servers ;; + 5) exit 0 ;; + *) zenity --error --text="Ungültige Auswahl. Bitte versuchen Sie es erneut." ;; + esac +} + +# Symlinks erstellen +create_symlinks() { + echo "[INFO] Starte die Erstellung von Symlinks." + + # Auswahl der Server + local server_selection=$(awk '{print $2}' "$SERVER_FILE" | \ + zenity --list \ + --title="Server auswählen" \ + --text="Wählen Sie die Server aus, für die Symlinks erstellt werden sollen:" \ + --checklist \ + --column="Auswahl" \ + --column="Server" \ + $(awk '{print "FALSE", $2}' "$SERVER_FILE" | tr '\n' ' ')) + + if [ -z "$server_selection" ]; then + zenity --error --text="Keine Server ausgewählt." + echo "[INFO] Keine Server ausgewählt. Vorgang abgebrochen." + return + fi + + # Verarbeitung der ausgewählten Server + while IFS= read -r line; do + local ip_address=$(echo "$line" | awk '{print $1}') + local server_name=$(echo "$line" | awk '{print $2}') + + if [[ "$server_selection" == *"$server_name"* ]]; then + local target_dir="$BASE_DIR/$server_name" + mkdir -p "$target_dir" # Stammverzeichnis erstellen + echo "[INFO] Stammverzeichnis erstellt oder vorhanden: $target_dir" + + # NFS-Freigaben des Servers + grep "/net/$ip_address" "$TARGET_FILE" | while IFS= read -r nfs_path; do + local symlink_name="$target_dir/$(basename "$nfs_path")" + + # Symlink erstellen + ln -sfn "$nfs_path" "$symlink_name" && \ + echo "[INFO] Symlink erstellt: $symlink_name -> $nfs_path" || \ + echo "[ERROR] Fehler beim Erstellen des Symlinks: $symlink_name -> $nfs_path" + done + fi + done < "$SERVER_FILE" + + zenity --info --text="Symlinks erfolgreich erstellt." + echo "[INFO] Symlinks-Erstellung abgeschlossen." +} + +# Symlinks löschen +delete_symlinks() { + echo "[INFO] Starte das Löschen von Symlinks." + find "$BASE_DIR" -type l -exec rm -v {} \; + zenity --info --text="Alle Symlinks wurden gelöscht." + echo "[INFO] Alle Symlinks wurden erfolgreich gelöscht." +} + +# NFS-Freigaben aktualisieren +# NFS-Freigaben aktualisieren +update_symlink_targets() { + echo "[INFO] Aktualisiere die Liste der NFS-Freigaben..." + > "$TARGET_FILE" # Alte Datei leeren + + while IFS= read -r line; do + local ip_address=$(echo "$line" | awk '{print $1}') + local server_name=$(echo "$line" | awk '{print $2}') + echo "[DEBUG] Scanne NFS-Freigaben für Server: $ip_address" + + # Führe den showmount-Befehl aus und überprüfe auf Erfolg + local exports=$(showmount -e "$ip_address" 2>/dev/null | awk '/^\// {print $1}') + if [[ -z "$exports" ]]; then + echo "[ERROR] Keine NFS-Freigaben gefunden für $ip_address ($server_name)." + else + echo "$exports" | while IFS= read -r export; do + echo "/net/$ip_address$export" >> "$TARGET_FILE" + echo "[DEBUG] Hinzugefügt: /net/$ip_address$export" + done + fi + done < "$SERVER_FILE" + + zenity --info --text="NFS-Freigaben erfolgreich aktualisiert." + echo "[INFO] NFS-Freigaben wurden in $TARGET_FILE aktualisiert." +} + +# Server-Einträge bearbeiten +manage_servers() { + local action=$(zenity --list \ + --title="Server-Verwaltung" \ + --text="Wählen Sie eine Aktion:" \ + --column="Aktion" --column="Beschreibung" \ + "1" "Neuen Server hinzufügen" \ + "2" "Existierenden Server entfernen" \ + "3" "Zurück zum Hauptmenü") + + case $action in + 1) + local new_ip=$(zenity --entry --title="Neuer Server" --text="Geben Sie die IP-Adresse des Servers ein:") + local new_name=$(zenity --entry --title="Neuer Server" --text="Geben Sie den Namen des Servers ein:") + if [[ -n "$new_ip" && -n "$new_name" ]]; then + echo "$new_ip $new_name" >> "$SERVER_FILE" + zenity --info --text="Server hinzugefügt: $new_ip -> $new_name" + echo "[INFO] Server hinzugefügt: $new_ip -> $new_name" + else + zenity --error --text="Ungültige Eingabe. Server wurde nicht hinzugefügt." + fi + ;; + 2) + local remove_name=$(awk '{print $2}' "$SERVER_FILE" | \ + zenity --list \ + --title="Server entfernen" \ + --text="Wählen Sie den Server aus, den Sie entfernen möchten:" \ + --column="Server") + + if [ -n "$remove_name" ]; then + sed -i "/ $remove_name$/d" "$SERVER_FILE" + zenity --info --text="Server entfernt: $remove_name" + echo "[INFO] Server entfernt: $remove_name" + else + zenity --error --text="Kein Server ausgewählt. Vorgang abgebrochen." + fi + ;; + 3) return ;; + *) zenity --error --text="Ungültige Auswahl. Bitte versuchen Sie es erneut." ;; + esac +} + +# Hauptteil des Skripts +check_files +while true; do + main_menu +done diff --git a/symlink_manager/symlink_targets.txt b/symlink_manager/symlink_targets.txt new file mode 100644 index 0000000..ed2be28 --- /dev/null +++ b/symlink_manager/symlink_targets.txt @@ -0,0 +1,36 @@ +/net/192.168.176.12/srv/fileserver/dokumente +/net/192.168.176.12/srv/fileserver/aufmasse +/net/192.168.176.12/srv/fileserver/software +/net/192.168.176.12/srv/fileserver/musik +/net/192.168.176.12/srv/fileserver/hausverwaltung +/net/192.168.176.12/srv/fileserver/fotografie +/net/192.168.176.12/srv/fileserver/feldrechner +/net/192.168.176.12/srv/fileserver/datensicherung +/net/192.168.176.12/srv/fileserver/buchhaltung +/net/192.168.176.12/srv/fileserver/bilder +/net/192.168.176.12/srv/fileserver/aufmasse-archiv +/net/192.168.176.13/srv/fileserver/scripte +/net/192.168.176.13/srv/fileserver/scandaten +/net/192.168.176.13/srv/fileserver/hausverwaltung +/net/192.168.176.13/srv/fileserver/feldrechner +/net/192.168.176.13/srv/fileserver/dokumente +/net/192.168.176.13/srv/fileserver/buchhaltung +/net/192.168.176.13/srv/fileserver/aufmasse +/net/192.168.174.11/srv/fileserver/dokumente-ausgelagert +/net/192.168.174.11/srv/fileserver/aufmasse-ausgelagert +/net/192.168.174.12/srv/fileserver/software +/net/192.168.174.12/srv/fileserver/musik +/net/192.168.174.12/srv/fileserver/hausverwaltung +/net/192.168.174.12/srv/fileserver/fotografie +/net/192.168.174.12/srv/fileserver/feldrechner +/net/192.168.174.12/srv/fileserver/datensicherung +/net/192.168.174.12/srv/fileserver/buchhaltung +/net/192.168.174.12/srv/fileserver/bilder +/net/192.168.174.12/srv/fileserver/aufmasse-archiv +/net/192.168.174.13/srv/fileserver/dokumente +/net/192.168.174.13/srv/fileserver/feldrechner +/net/192.168.174.13/srv/fileserver/hausverwaltung +/net/192.168.174.13/srv/fileserver/scandaten +/net/192.168.174.13/srv/fileserver/scripte +/net/192.168.174.13/srv/fileserver/buchhaltung +/net/192.168.174.13/srv/fileserver/aufmasse