README.md aktualisiert
This commit is contained in:
178
README.md
178
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.
|
||||
2. **Prüfung des Mount-Punkts**
|
||||
Es überprüft, ob bereits etwas auf dem angegebenen Mount-Punkt (`$MOUNTPUNKT`) gemountet ist.
|
||||
|
||||
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
|
||||
sudo apt install sshfs # Für Debian/Ubuntu
|
||||
# Oder andere Paketmanager
|
||||
sshfs -o IdentityFile="$HOME/id_$SERVER" -p2222 $USER@$IPWURZEL.$SERVER:/srv/ $MOUNTPUNKT
|
||||
```
|
||||
* **`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.
|
||||
- Falls **bereits ein Mount aktiv** ist, fragt das Skript, ob dieser gelöst werden soll (`ja` / `nein`).
|
||||
|
||||
## Konfiguration
|
||||
Passen Sie die folgenden Variablen am Anfang des Skripts an Ihre Umgebung an:
|
||||
4. **Logging**
|
||||
Jeder Schritt wird protokolliert. Fehlermeldungen und Rückgabewerte werden ebenfalls erfasst.
|
||||
|
||||
* `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`
|
||||
---
|
||||
|
||||
## 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:
|
||||
## ⚙️ Voraussetzungen
|
||||
|
||||
- **SSHFS** installiert
|
||||
```bash
|
||||
chmod +x dein_skriptname.sh
|
||||
```
|
||||
3. Führen Sie das Skript aus:
|
||||
sudo apt install sshfs
|
||||
````
|
||||
|
||||
* **Gum** (für interaktive Auswahlmenüs)
|
||||
|
||||
```bash
|
||||
./dein_skriptname.sh
|
||||
sudo apt install gum
|
||||
# oder:
|
||||
go install github.com/charmbracelet/gum@latest
|
||||
```
|
||||
|
||||
## Skript-Logik
|
||||
Das Skript führt die folgenden Schritte aus:
|
||||
* **Logger-Modul**
|
||||
Das Skript erwartet ein Logging-Modul unter:
|
||||
|
||||
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.
|
||||
```
|
||||
$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.
|
||||
|
||||
Reference in New Issue
Block a user