diff --git a/README.md b/README.md index 2a785c1..3d54abc 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,74 @@ -# 📂 SSHFS Mount/Unmount Skript +# SSHFS Automatisches Mount-Skript -Dieses Bash-Skript dient der einfachen Verwaltung eines `sshfs`-Mount-Punktes in das lokale Verzeichnis `/home/service/FILME`. Es prüft automatisch, ob das Verzeichnis bereits belegt ist, und bietet entweder das Mounten eines Servers oder das Unmounten des bestehenden Einhängepunktes an. +Dieses Bash-Skript automatisiert das Mounten und Unmounten eines Remote-Verzeichnisses über SSHFS. Es prüft den Status des Mount-Punkts, ermöglicht die interaktive Auswahl eines Servers und verwendet ein benutzerdefiniertes Logging-System. ---- +## Inhaltsverzeichnis +- [Features](#features) +- [Voraussetzungen](#voraussetzungen) +- [Konfiguration](#konfiguration) +- [Verwendung](#verwendung) +- [Skript-Logik](#skript-logik) +- [Logging](#logging) -## 🚀 Funktionen +## Features +* **Mount-Punkt-Prüfung:** Überprüft, ob der angegebene Mount-Punkt bereits belegt ist. +* **Interaktive Serverauswahl:** Nutzt `gum` für die Auswahl eines Servers aus einer vordefinierten Liste. +* **SSHFS-Mount:** Stellt eine SSHFS-Verbindung zu einem Remote-Verzeichnis her. +* **Unmount-Option:** Bietet die Möglichkeit, einen bereits gemounteten Punkt bei Bedarf zu entladen. +* **Umfassendes Logging:** Protokolliert alle Schritte und Fehler in einer Logdatei. -* **Automatisierte Prüfung:** Stellt fest, ob `/home/service/FILME` bereits gemountet ist. -* **Interaktive Server-Wahl:** Verwendet das `gum`-Tool, um interaktiv zwischen den Servern **80** und **81** zu wählen (entsprechend den IP-Adressen `100.87.87.80` und `100.87.87.81`). -* **SSHFS Mount:** Führt den Mount-Vorgang mit einem spezifischen IdentityFile (`id_80` oder `id_81`) durch. -* **Unmount:** Stellt den Mount-Punkt frei, falls er bereits belegt ist. -* **Logging:** Verwendet ein externes Logging-Skript (`logger.sh`) zur Protokollierung aller Aktionen. +## Voraussetzungen +Stellen Sie sicher, dass die folgenden Tools auf Ihrem System installiert und konfiguriert sind: ---- +* **`sshfs`:** Für das Mounten von Remote-Dateisystemen über SSH. + ```bash + sudo apt install sshfs # Für Debian/Ubuntu + # Oder andere Paketmanager + ``` +* **`gum`:** Ein nützliches Tool für interaktive Prompts. + Installationsanweisungen finden Sie auf der [GitHub-Seite von Gum](https://github.com/charmbracelet/gum). +* **SSH-Schlüssel:** Entsprechende SSH-Schlüssel (`id_$SERVER` im Home-Verzeichnis des Benutzers) müssen vorhanden sein, um eine passwortlose Anmeldung auf den Remote-Servern zu ermöglichen. Der Port 2222 wird verwendet. +* **`logger.sh`:** Ein benutzerdefiniertes Logging-Skript, das im unter `GIT` definierten Pfad (`$GIT/logger/logger.sh`) erwartet wird. Dieses Skript ist für die Log-Initialisierung und das Schreiben von Log-Nachrichten verantwortlich. -## ⚙️ Voraussetzungen +## Konfiguration +Passen Sie die folgenden Variablen am Anfang des Skripts an Ihre Umgebung an: -Für die korrekte Ausführung des Skripts sind folgende Abhängigkeiten erforderlich: +* `GIT`: Pfad zum Haupt-Git-Verzeichnis, wo sich das `logger`-Skript befindet. + * *Beispiel:* `/home/service/Gitea` +* `USER`: Der Benutzername auf dem Remote-SSH-Server. + * *Beispiel:* `alf` +* `IPWURZEL`: Die statische Basis der IP-Adresse, die mit der `SERVERWAHL` kombiniert wird. + * *Beispiel:* `100.87.87` (ergibt IPs wie `100.87.87.80`, `100.87.87.81`) +* `MOUNTPUNKT`: Der lokale absolute Pfad, in den das Remote-Verzeichnis gemountet werden soll. + * *Beispiel:* `/home/service/FILME` +* `SERVERWAHL`: Eine durch Leerzeichen getrennte Liste der numerischen Endungen der Server-IP-Adressen, die für die Auswahl zur Verfügung stehen. Diese werden auch verwendet, um den Namen der SSH-Identitätsdatei zu bestimmen (`id_$SERVER`). + * *Beispiel:* `80 81` -1. **Bash:** Eine lauffähige Bash-Umgebung. -2. **`sshfs`:** Muss auf dem System installiert sein. -3. **`gum`:** Das Tool zur interaktiven Eingabe (`gum choose`) muss installiert sein. -4. **SSH Keys:** Die privaten SSH-Schlüssel (`id_80` und `id_81`) müssen im `$HOME`-Verzeichnis des ausführenden Benutzers vorhanden sein. -5. **Logging-Struktur:** - * Das Verzeichnis für das Git-Repository muss unter **`/home/service/Gitea`** liegen. - * Die Logger-Dateien müssen unter **`/home/service/Gitea/logger/logger.sh`** und **`/home/service/Gitea/logger/Logs/`** verfügbar sein. +## Verwendung +1. Stellen Sie sicher, dass alle [Voraussetzungen](#voraussetzungen) erfüllt und die [Konfigurationsvariablen](#konfiguration) im Skript angepasst sind. +2. Machen Sie das Skript ausführbar: + ```bash + chmod +x dein_skriptname.sh + ``` +3. Führen Sie das Skript aus: + ```bash + ./dein_skriptname.sh + ``` -## 🛠️ Konfiguration +## Skript-Logik +Das Skript führt die folgenden Schritte aus: -Passen Sie die folgenden Pfade und Variablen bei Bedarf an Ihre Umgebung an: +1. **Logging-Initialisierung:** `log_init` wird aufgerufen, um die Logdatei `$GIT/logger/Logs/sshfs.log` vorzubereiten. +2. **Mount-Punkt-Prüfung:** Es wird geprüft, ob `$MOUNTPUNKT` bereits gemountet ist. + * **Wenn frei (`MOUNTET=1`):** + * Der Benutzer wählt interaktiv einen Server aus der `SERVERWAHL` mit `gum`. + * Das Remote-Verzeichnis (`/srv/`) des ausgewählten Servers wird über SSHFS in `$MOUNTPUNKT` gemountet. Es wird `IdentityFile="$HOME/id_$SERVER"` und Port `2222` verwendet. + * **Wenn belegt (`MOUNTET=0`):** + * Der Benutzer wird gefragt, ob das Verzeichnis entladen werden soll (`ja`/`nein`) mit `gum`. + * Bei Auswahl von `ja` wird der `$MOUNTPUNKT` entladen (`umount`). + * Bei Auswahl von `nein` wird der Vorgang abgebrochen. + * **Bei unerwartetem Status:** Eine Fehlermeldung wird protokolliert. +3. **Logging-Abschluss:** `log_end` wird aufgerufen, um die Logging-Session zu beenden. -| Variable | Beschreibung | Standardwert im Skript | -| :--- | :--- | :--- | -| `GIT` | Pfad zum Git-Hauptverzeichnis (enthält den Logger). | `/home/service/Gitea` | -| **Mountpoint** | Das lokale Verzeichnis, in das gemountet wird. | `/home/service/FILME` | -| **Remote-User** | Der SSH-Benutzername auf den Servern. | `alf` | -| **Remote-Pfad** | Der freizugebende Pfad auf den Servern. | `/srv/` | - -## 💡 Funktionsweise (Ablauflogik) - -1. **Initialisierung:** Lädt die `logger.sh` und startet die Protokollierung. -2. **Mount-Prüfung:** Führt `mount | grep "FILME"` aus. Der Rückgabewert (`$?`) wird in der Variablen `$MOUNTET` gespeichert: - * **Fall 1 (`$MOUNTET` = 1):** Das Verzeichnis `/home/service/FILME` ist frei. - * Der Benutzer wählt interaktiv einen Server (80 oder 81) über `gum choose`. - * `sshfs` mountet das Remote-Verzeichnis (`alf@100.87.87.$SERVER:/srv/`) in den lokalen Pfad. - * **Fall 2 (`$MOUNTET` = 0):** Das Verzeichnis ist bereits belegt. - * Das Skript führt automatisch ein `umount /home/service/FILME` aus. - * **Anderer Fall:** Eine Fehlermeldung wird protokolliert. -3. **Ende:** Die Protokollierung wird beendet. +## Logging +Alle Aktionen, Entscheidungen und Fehler während der Skriptausführung werden in der Logdatei protokolliert, die durch die Variable `GIT` und den festen Pfad `logger/Logs/sshfs.log` definiert ist. Dies ist nützlich für die Fehlerbehebung und zum Nachvollziehen der Skriptaktivitäten.