- Shell 63.9%
- Markdown 20.3%
- Python 15.8%
RustFS VM Setup
Sicherheitsorientiertes Setup-Skript für eine native RustFS-Installation in einer frischen Debian-13-VM mit exklusiver iSCSI-LUN und XFS.
Funktionen
- aktualisiert Debian mit
apt-get full-upgradevor der Storage-Konfiguration; - stoppt vor iSCSI/RustFS und verlangt einen Neustart, wenn das OS-Upgrade einen Reboot benötigt;
- installiert die benötigten Debian-Pakete;
- entdeckt das angegebene iSCSI-Target;
- unterstützt optional CHAP mit verdeckter Secret-Eingabe;
- aktiviert persistenten iSCSI-Login;
- verwendet ausschließlich einen stabilen
/dev/disk/by-path/...iscsi...-Pfad; - verweigert bereits gemountete LUNs und LUNs mit vorhandenen Signaturen;
- formatiert erst nach einer exakten interaktiven Bestätigung;
- erstellt XFS und einen persistenten
_netdev-Mount; - lädt eine explizit gewählte RustFS-Version herunter und prüft den von GitHub veröffentlichten SHA-256-Digest;
- installiert RustFS nativ als eigenen Systembenutzer;
- erzeugt Zugangsdaten lokal in
/etc/default/rustfsund gibt sie nicht aus; - erstellt einen fail-closed systemd-Service, der ohne echten Daten-Mount nicht startet;
- prüft Dienststatus und Ports 9000/9001.
Voraussetzungen
- frische Debian-13-VM;
- Ausführung als
rootin der VM, nicht auf dem Hypervisor; - Management-Netz mit Internetzugang;
- Storage-Netz mit Zugriff auf das iSCSI-Portal;
- leere iSCSI-LUN, die exklusiv nur dieser VM zugeordnet ist;
- Zugriff auf das iSCSI-Portal; Target-IQN und LUN-ID werden automatisch entdeckt.
Beim interaktiven Start fragt das Skript nur die Portal-IP ab, führt SendTargets-Discovery aus, meldet das gewählte Target an und listet die gefundenen LUNs mit Größe, Modell und Seriennummer. Bei genau einem Target beziehungsweise einer LUN erfolgt die Auswahl automatisch; bei mehreren zeigt das Skript eine Auswahl.
Warnung: Das Skript formatiert die ausgewählte LUN nach manueller Bestätigung. Vorher zeigt es Blockgerät, Größe, Modell und Seriennummer an. Trotzdem müssen Portal, Target-IQN und LUN-ID vor dem Start sorgfältig geprüft werden.
Download
curl -fsSL 'https://git.corestream.ch/corestream/rustfs-vm-setup/~raw/master/rustfs-vm-setup.sh' -o /root/rustfs-vm-setup.sh
curl -fsSL 'https://git.corestream.ch/corestream/rustfs-vm-setup/~raw/master/SHA256SUMS' -o /root/SHA256SUMS
cd /root && sha256sum -c SHA256SUMS
chmod 0700 /root/rustfs-vm-setup.sh
Für reproduzierbare Installationen sollte der Raw-Link auf einen geprüften Commit statt auf master gepinnt werden.
Interaktive Installation
/root/rustfs-vm-setup.sh
Das Skript fragt nach:
- iSCSI-Portal-IP oder Hostname;
- gewünschtem RustFS-Daten-Mountpoint, Default
/srv/rustfs/data; - Target nur, wenn mehrere Targets gefunden werden;
- optionalem CHAP-Benutzer und verdecktem Secret;
- LUN nur, wenn mehrere LUNs gefunden werden;
- exakter Formatierungsbestätigung mit Seriennummer.
Target-IQN und LUN-ID können für Automation weiterhin als Optionen angegeben werden. Ein Dry-Run führt bewusst keine Netzwerk-Discovery aus und benötigt deshalb die Werte explizit:
/root/rustfs-vm-setup.sh \
--dry-run \
--portal '{{ISCSI_PORTAL}}' \
--target-iqn '{{TARGET_IQN}}' \
--lun-id {{LUN_ID}}
Der Mountpoint kann interaktiv oder explizit gesetzt werden:
/root/rustfs-vm-setup.sh --mountpoint /data/rustfs
OS-Patching und Basispakete
Standardmässig führt das Skript vor jeder Storage-Änderung apt-get update und apt-get full-upgrade -y aus. Wenn danach /var/run/reboot-required existiert, beendet es sich mit Exit-Code 20. Nach dem Reboot wird es erneut gestartet; iSCSI und RustFS wurden zu diesem Zeitpunkt noch nicht eingerichtet.
Installiert werden unter anderem:
open-iscsiundxfsprogs;qemu-guest-agent;chrony;sysstat;curl,jq,openssl,ca-certificatesundunzip.
--skip-os-upgrade ist für kontrollierte Sonderfälle vorhanden, wird für eine frische VM aber nicht empfohlen. Automatische unbeaufsichtigte Updates oder Reboots werden nicht aktiviert; das laufende Patchmanagement bleibt eine bewusste Betriebsaufgabe.
Ergebnis
- RustFS-Binary:
/opt/rustfs/rustfs - Daten: frei wählbarer Mountpoint, Standard
/srv/rustfs/data - Konfiguration:
/etc/default/rustfs - Logs:
/var/log/rustfs - S3 API: Port 9000
- Konsole: Port 9001
Grenzen
Das Skript erstellt keine VM, keinen Storage-Pool und keine iSCSI-LUN. Es migriert keine Buckets, Benutzer, Policies oder Access Keys und konfiguriert weder Reverse Proxy noch Firewall.
Tests
python3 -m unittest -v test_setup.py
bash -n rustfs-vm-setup.sh
Lizenz
MIT — siehe LICENSE.