Minio

Übung 1: Minio-Server verwenden

Der Minio-Server (minio) und -Client (mc) sind vorinstalliert.

Datenverzeichnis erstellen

Erstelle ein Verzeichnis in deinem $HOME-Verzeichnis namens minio-data:

mkdir ~/minio-data

Benutzername und Passwort konfigurieren

Editiere anschliessend die Datei ~/.bashrc mit einem Texteditor deiner Wahl, z.B. mit nano:

nano ~/.bashrc

Definiere ganz unten an der Datei zwei neue Umgebungsvariablen mit dem export-Befehl:

export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=topsecret

Speichere die Datei ab. Lade die Datei anschliessend mit dem source-Befehl nach:

source ~/.bashrc

Als Kurzschreibweise kann auch der .-Befehl verwendet werden:

. ~/.bashrc

Gib nun testhalber beide Variablen aus:

echo $MINIO_ROOT_USER
echo $MINIO_ROOT_PASSWORD

Es sollte der konfigurierte Benutzername und das konfigurierte Passwort ausgegeben werden.

Minio starten

Starte nun den Minio-Server mit dem folgenden Befehl:

minio server --console-address ':9090' ~/minio-data

Es ist wichtig, dass der Server auf Port 9090 läuft, da dieser Port (und 9000) in der Firewall spezifisch freigegeben worden ist.

Lasse den Server nun in diesem Terminal laufen.

Auf Web-Interface einloggen

Besuche im Browser die Seite http://[IP-ADRESSE]:9090, wobei du [IP-Adresse] durch die jeweiligen IP-Adresse deiner virtuellen Maschine ersetzen musst. Du wirst zu einem Login-Bildschirm weitergeleitet.

Logge dich mit dem zuvor definierten Benutzernamen und Passwort ein.

Du solltest nun die leere Bucket-Übersicht sehen.

Bucket erstellen

Erstelle nun einen neuen Bucket per Klick auf den entsprechenden Link (“Create Bucket”). Nenne diesen “hello”. Klicke anschliessend auf die Schaltfläche “Create Bucket”, um den neuen Bucket definitiv zu erstellen.

Datei hochladen

Klicke in der Navigation links unter dem Abschnitt “Buckets” auf den zuvor neu erstellten Bucket “hello”.

Betätige als nächstes die “Upload”-Schaltfläche oben rechts. Klicke dann auf “Upload File”. Lade nun drei Dateien unterschiedlichen Typs von deinem lokalen Dateisystem (BYOD-Laptop) hoch:

  1. eine Bilddatei (Endung .png, .jpeg usw.)
  2. eine Textdatei (Endung .txt)
  3. eine Binärdatei (Endung .exe)

Kontrollfragen

Beantworte die folgende Fragen für deine persönliche Dokumentation:

  1. Wie gross sind die drei Dateien gemäss Anzeige im Web-Interface (grob zusammengerechnet)?
  2. Wie gross ist der hello-Bucket auf dem Dateisystem unter ~/minio-data? Verwende den Befehl du -hs um die Grösse zu ermitteln!
  3. Betrachte die Dateien und Ordner im Verzeichnis ~/minio-data/hello mithilfe des ls-Befehls. Wie sind die Daten organisiert, und warum ist das wohl so gelöst?

Übung 2: Minio-Client verwenden

Minio stellt einen Kommandozeilen-Client zur Verfügung, mit dem die Daten auf dem Minio-Server komfortabel verwendet werden können.

Client-Alias erstellen

Der Minio-Client mc kann so konfiguriert werden, dass er unter einem Alias-Namen mit einem bestimmten Minio-Server zusammenarbeitet. Führe den folgenden Befehl aus, um einen neuen Alias namens local zu erstellen:

mc alias set local http://localhost:9000 minio topsecret

Unter dem Namen local kann man nun auf die lokale Minio-Instanz zugreifen. Teste den Zugriff mit dem folgenden Befehl:

mc admin info local

Es sollten nun Zustandsinformationen zum lokalen Minio-Server angezeigt werden.

Die Konnektivität kann mithilfe des ping-Befehls überprüft werden:

mc ping local

Mit [Ctrl]-[C] stoppst du die ping-Endlosschleife.

Client-Befehle kennenlernen

Der Minio-Client mc bietet zahlreiche Befehle, die man von Unix/Linux her kennt:

  • ls: Dateien auflisten
  • mv: Dateien umbenennen (verschieben)
  • rm: Dateien entfernen (löschen)
  • cat: Dateien aneinanderhängen/ausgeben
  • cp: Dateien kopieren
  • head: Anfang einer Datei ausgeben
  • find: Dateien suchen
  • diff: Dateien vergleichen
  • du: Dateigrösse ermitteln
  • stat: Metadaten zu Dateien und Verzeichnissen ausgeben

Diese Befehle können zwar für normale Dateien im Dateisystem verwendet werden. Die mc-Versionen dieser Befehle bieten aber dadurch keinen Vorteil gegenüber den herkömmlichen Befehlen.

Die mc-Befehle können jedoch auf S3-Daten angewendet werden, indem man Alias und Bucket ([Alias]/[Bucket]) angibt:

mc ls local/hello

Mögliche Ausgabe (Beispiel):

[2024-10-26 15:05:56 UTC] 103MiB STANDARD deno.exe
[2024-10-26 15:05:27 UTC]    29B STANDARD key-win-10-edu.txt
[2024-10-26 15:05:09 UTC]  56KiB STANDARD rpoplpush.jpeg

Weiter bietet mc einige Befehle, die nur im Zusammenhang mit einem S3-Storage sinnvoll sind. Die folgenden Befehle dienen dem Umgang mit Buckets und S3-Datenobjekten:

  • mb: Bucket erstellen
  • rb: Bucket entfernen
  • tag: Tags verwalten
  • pipe: Standardausgabe in Objekt umleiten
  • mirror: Daten mit anderem S3-Server synchronisieren
  • retention: Speicherdauer von Objekten festlegen
  • share: Objekte per URL teilen
  • version: Versionierung von Buckets verwalten

Bucket via mc erstellen

Erstelle einen neuen Bucket namens backup mithilfe des mc mb-Befehls. (Tipp: Eine Hilfeseite erhält man mit mc mb --help. Mit q kann man die Hilfe schliessen.) Kopiere dann wieder drei unterschiedliche Dateien mit dem mc cp-Befehl in den neuen Bucket.

Kontrolliere anschliessend im Browser, ob der Bucket erstellt worden ist und alle Dateien enthält.

Führe nun den Befehl mc ls local/backup aus und kopiere dessen Ausgabe in deine persönliche Dokumentation.

Buckets taggen

Verwende den mc tag-Befehl (genauer: den Unterbefehl mc tag set), um den Buckets die folgenden Tags zu vergeben:

BucketTag (Key)Tag (Value)
hellopurposeupload
hellomodule346
backuppurposearchive
backupmodule346

Mit mc tag --help bzw. mc tag set --help erhältst du Hilfestellungen dazu.

Liste nun die Tags mit mc tag list im JSON-Format auf, und speichere die Ausgaben in deiner persönlichen Dokumentation ab.

Übung 3: s3cmd

Im Gegensatz zu mc ist der Befehl s3cmd nicht nur für die Zusammenarbeit mit MinIO ausgelegt, sondern sollte auch mit anderen S3-Implementierungen und -Angeboten zusammenspielen.

Der Befehl s3cmd sollte bereits installiert sein. Installiere ihn andernfalls mit dem folgenden Befehl:

sudo apt install -y s3cmd

Erstelle die Datei ~/.s3cfg und speichere darin die folgende Konfiguration ab:

host_base = localhost:9000
host_bucket = localhost:9000
use_https = False
access_key = minio
secret_key = topsecret

Liste nun die Dateien im hello-MinIO-Bucket auf:

s3cmd ls s3://hello

Mit s3cmd musst du anstelle des Alias local/ bloss das Protokoll s3:// als Präfix angeben.

Erstelle mit s3cmd mb nun einen neuen Bucket namens backup-copy:

s3cmd mb s3://backup-copy

Kopiere die drei Dateien aus dem backup-Bucket in den backup-copy-Bucket. Verwende dazu den s3cmd cp-Befehl.

Dokumentiere die Befehle in deiner persönlichen Dokumentation.

Kontrolliere nun im MinIO-GUI im Browser sowie mit den Befehlen mc ls und s3cmd ls, ob alle Dateien erfolgreich kopiert worden sind.

Übung 4: s3fs

FUSE (Filesystem in Userspace) bietet die Möglichkeit, Dateisysteme ohne Administratoren-Berechtigungen als Ordner einzubinden.

Mithilfe von s3fs können S3-Buckets als normale Ordner eingebunden werden.

Der Befehl s3fs sollte bereits installiert sein. Installieren Sie ihn andernfalls mit dem folgenden Befehl:

sudo apt install -y s3fs

Erstelle eine Konfigurationsdatei ~/.passwd-s3fs mit dem folgenden Inhalt:

minio:topsecret

Ändere die Berechtigungen für diese Datei folgendermassen:

chmod 600 ~/.passwd-s3fs

Dadurch stellst du sicher, dass nur dein Benutzer diese Datei lesen und schreiben kann (s3fs verweigert sonst den Dienst).

Erstelle nun mit dem mkdir-Befehl ein Verzeichnis ~/minio-mount mit Unterverzeichnissen für die verschiedenen Buckets:

mkdir -p ~/minio-mount/hello
mkdir -p ~/minio-mount/backup
mkdir -p ~/minio-mount/backup-copy

Mithilfe des s3fs-Befehls können die einzelnen Buckets nun “gemounted”, d.h. eingehängt werden:

s3fs hello ~/minio-mount/hello -o use_path_request_style,url=http://localhost:9000
s3fs backup ~/minio-mount/backup -o use_path_request_style,url=http://localhost:9000
s3fs backup-copy ~/minio-mount/backup-copy -o use_path_request_style,url=http://localhost:9000

Die Unterverzeichnisse von ~/minio-mount/ können nun weitgehend wie lokale Ordner verwendet werden.

Kopieren nun eine beliebige Datei (z.B. /usr/share/pixmaps/htop.png), die noch nicht in MinIO vorhanden ist, mit dem cp-Befehl in alle drei Buckets über das ~/minio-mount/-Verzeichnis.

Überprüfe nun im MinIO-GUI im Browser, ob du die Datei in jedem Bucket sehen kannst.

Führe nun den folgenden Befehl aus:

mount | grep minio

Lege die Ausgabe in deiner persönlichen Dokumentation ab.

Damit wird demonstriert, dass s3fs die S3-Buckets über das Betriebssystem (d.h. über eine Kernel-Funktion) einhängt.

Mit dem umount-Befehl können die Buckets wieder vom Dateisystem gelöst werden:

umount ~/minio-mount/hello/
umount ~/minio-mount/backup
umount ~/minio-mount/backup-copy/

(Zwar gibt es hierfür auch den s3fs unmount-Befehl, es ist aber bemerkenswert, dass dies auch mit dem gewöhnlichen umount-Befehl funktioniert.)

Mit find kannst du nun überprüfen, dass keine Dateien mehr “da” sind, sondern nur noch die Verzeichnisse:

find ~/minio-mount

Ausgabe:

minio-mount/
minio-mount/backup-copy
minio-mount/hello
minio-mount/backup

Die Dateien existieren aber weiterhin in MinIO, was du gerne über den Browser, per mc ls oder per s3cmd ls überprüfen kannst.

Übung 5: Einsatzgebiete

Du hast mit MinIO und den Hilfsprogrammen mc, s3cmd und s3fs nun einige Werkzeuge zum Umgang mit dem S3-Storage kennengelernt.

Überlege dir je einen Anwendungsfall für den privaten und den professionellen Bereich (z.B. für Ihren Lehrbetrieb), und beschreibe diese beiden in deiner persönlichen Dokumentation.

Gehe dabei davon aus, dass nicht bloss ein lokaler Storage, sondern derjenige von einem Public-Cloud-Anbieter verwendet wird, und dass du die Region dafür frei wählen kannst.