#!/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