scripte/symlink_manager/symlink_manager.sh

164 lines
5.8 KiB
Bash

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