164 lines
5.8 KiB
Bash
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
|