diff --git a/README.md b/README.md index 3d54abc..579d0d8 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,136 @@ -# SSHFS Automatisches Mount-Skript +# SSHFS-Mount-Skript mit Logging -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. +Dieses Bash-Skript ermöglicht das komfortable Ein- und Aushängen eines entfernten Dateisystems über **SSHFS**. +Es nutzt **Gum** zur interaktiven Auswahl und ein eigenes **Logging-System**, um alle Aktionen nachvollziehbar zu protokollieren. -## Inhaltsverzeichnis -- [Features](#features) -- [Voraussetzungen](#voraussetzungen) -- [Konfiguration](#konfiguration) -- [Verwendung](#verwendung) -- [Skript-Logik](#skript-logik) -- [Logging](#logging) +--- -## 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. +## 🧩 Funktionsweise -## Voraussetzungen -Stellen Sie sicher, dass die folgenden Tools auf Ihrem System installiert und konfiguriert sind: +1. **Initialisierung** + Das Skript lädt ein Logging-Modul (`logger.sh`) aus dem Gitea-Repository und startet das Logging in der Datei + `"$GIT/logger/Logs/sshfs.log"`. -* **`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. +2. **Prüfung des Mount-Punkts** + Es überprüft, ob bereits etwas auf dem angegebenen Mount-Punkt (`$MOUNTPUNKT`) gemountet ist. -## Konfiguration -Passen Sie die folgenden Variablen am Anfang des Skripts an Ihre Umgebung an: +3. **Interaktive Auswahl** + - Falls **kein Mount aktiv** ist, wird der Benutzer per `gum choose` aufgefordert, einen Server zu wählen + (z. B. `80` oder `81`). + - Danach wird über `sshfs` eine Verbindung hergestellt: + ```bash + sshfs -o IdentityFile="$HOME/id_$SERVER" -p2222 $USER@$IPWURZEL.$SERVER:/srv/ $MOUNTPUNKT + ``` + - Falls **bereits ein Mount aktiv** ist, fragt das Skript, ob dieser gelöst werden soll (`ja` / `nein`). -* `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` +4. **Logging** + Jeder Schritt wird protokolliert. Fehlermeldungen und Rückgabewerte werden ebenfalls erfasst. -## 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 - ``` +--- -## Skript-Logik -Das Skript führt die folgenden Schritte aus: +## ⚙️ Voraussetzungen -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. +- **SSHFS** installiert + ```bash + sudo apt install sshfs +```` + +* **Gum** (für interaktive Auswahlmenüs) + + ```bash + sudo apt install gum + # oder: + go install github.com/charmbracelet/gum@latest + ``` + +* **Logger-Modul** + Das Skript erwartet ein Logging-Modul unter: + + ``` + $GIT/logger/logger.sh + ``` + + Dieses Modul muss die Funktionen `log_init`, `log_start`, `log_info`, `log_error` und `log_end` bereitstellen. + +--- + +## 🧠 Konfiguration + +Vor der Nutzung sollten die folgenden Variablen angepasst werden: + +```bash +GIT="/home/service/Gitea" # Pfad zum Gitea-Repo +USER="alf" # SSH-Benutzername +IPWURZEL="100.87.87" # Basis der IP-Adresse +MOUNTPUNKT="/home/service/FILME" # Lokaler Mount-Punkt +SERVERWAHL="80 81" # Servernummern für die Auswahl +``` + +--- + +## 🚀 Verwendung + +Starte das Skript manuell: + +```bash +bash sshfs_mount.sh +``` + +Beispielablauf: + +``` +[INFO] Prüfen, ob schon etwas auf /home/service/FILME gemountet ist +[INFO] Verzeichnis ist frei. +Bitte Server wählen... +> 80 +[INFO] Gewählter Server: 80 +[INFO] Mount-Vorgang gestartet... +``` + +Wenn bereits ein Mount besteht: + +``` +[INFO] Verzeichnis ist belegt! +Wird gelöst… +``` + +--- + +## 🪵 Log-Dateien + +Alle Logeinträge werden unter folgendem Pfad gespeichert: + +``` +$GIT/logger/Logs/sshfs.log +``` + +--- + +## 🧰 Beispiel für `logger.sh` + +Ein einfaches Beispielmodul: + +```bash +log_init() { LOGFILE="$1"; echo "=== $(date) ===" >> "$LOGFILE"; } +log_start() { echo "[START] $(date)" >> "$LOGFILE"; } +log_info() { echo "[INFO] $1" >> "$LOGFILE"; } +log_error() { echo "[ERROR] $1" >> "$LOGFILE"; } +log_end() { echo "[END] $(date)" >> "$LOGFILE"; echo >> "$LOGFILE"; } +``` + +--- + +## 📄 Lizenz + +Dieses Skript kann frei verwendet, angepasst und erweitert werden. +Eine Nennung des ursprünglichen Autors (alf) wird begrüßt. + +--- + +## 🧾 Autor + +**Alf Oberkoetter** +[trevor1969 auf GitHub](https://github.com/trevor1969) + +--- -## 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.