corestream/rustfs-vm-setup
0 forks
id: 12
562 Lines
  • Shell 63.9%
  • Markdown 20.3%
  • Python 15.8%
README.md

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-upgrade vor 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/rustfs und 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 root in 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:

  1. iSCSI-Portal-IP oder Hostname;
  2. gewünschtem RustFS-Daten-Mountpoint, Default /srv/rustfs/data;
  3. Target nur, wenn mehrere Targets gefunden werden;
  4. optionalem CHAP-Benutzer und verdecktem Secret;
  5. LUN nur, wenn mehrere LUNs gefunden werden;
  6. 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-iscsi und xfsprogs;
  • qemu-guest-agent;
  • chrony;
  • sysstat;
  • curl, jq, openssl, ca-certificates und unzip.

--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.

Please wait...
Connection lost or session expired, reload to recover
Page is in error, reload to recover