Virtueller SAMBA / CIFS Server auf MacOS Monterey

(Über VirtualBox)

Ich hatte jahrelang einen Mac Mini mit Macos Mojave als NFS Server in meinem Heimnetz in Betrieb. Das funktionierte auch prima, bis ich auf die Idee kam, einen Betriebssystem-Update durchzuführen, da Mojave bei Apple langsam aus dem Support fällt und ein aktuelles Betriebssystem fällig war.

Nach dem Update auf Monterey ging erst einmal gar nichts mehr. NFS mounts waren zwar möglich, doch fror die Verbindung nach kurzer Zeit ein und der Client „hing“. Samba (native auf MacOS) kam erst gar nicht zum Laufen. Da ich die Freigabe aber brauchte, kam ich auf die Idee, das Ganze von einem virtuellen Gast-Betriebssystem aus zu bewerkstelligen.

TL;DR – Optionen und Ergebnisse im Überblick:

  • nfs Server als Docker Container: Fail, Port-Konflikt mit Mac
  • nfs Server in Ubuntu mit VirtualBox: Fail, nfs im Ubuntu Gast kann keine Mac OS Extended (Journaled) = hfs+ Dateisysteme freigeben
  • Samba Server in Ubuntu mit VirtualBox und direktem Einbinden der Festplatte: Erfolg, Anleitung siehe unten

Hier sind die Schritte:

  1. Vorbereiten der Festplatte in MacOS

    sudo diskutil list (Liste aller Festplatten, unsere Festplatte heißt z.B. „media“ und ist auf „/dev/disk3s2“ gemounted)

    sudo diskutil info /Volumes/media (anzeigen der UUID der Festplatte, z.B. FF9DBDC4-F77F-3F72-A6C2-26676F39B7CE)

    Verhindern, dass die Festplatte beim Systemstart automatische gemounted wird:

    cd /etc
    vifs
    (bearbeiten der fstab in MacOS benötigt vifs)

    Eintrag in der letzten Zeile:
    UUID=FF9DBDC4-F77F-3F72-A6C2-26676F39B7CE none hfs rw,noauto

    Speichern des Ganzen (:q wie im vi/vim Editor)

    sudo automount -vc (automount aktualisieren)

    diskutil unmountDisk /dev/disk3 (Festplatte unmounten, damit sie später in die virtuelle Maschine eingebunden werden kann)

    Beschreibung der Prozedur: Prevent a volume from mounting at startup – Apple Community

  2. Einrichten des virtuellen Gast-Betriebssystems in MacOS:

    Download des Ubuntu Server ISO Images: https://ubuntu.com/download/server
    Download von VirtualBox: https://www.virtualbox.org/wiki/Downloads

    Anleitung zum Einrichten: Installieren des Ubuntu Servers als VirtualBox Gast-Betriebssystem

    Wichtig dabei ist, dass der virtuelle Server im Netzwerk sichtbar ist. Deswegen muss in der Konfiguration des Gastbetriebssystems “Netzwerkbrücke” als Netzwerkadapter angegeben werden und nicht “NAT”. Danach hat die virtuelle Maschine im lokalen Netzwerk z.B. die Adresse “192.168.1.15”.

    Die virtuelle Maschine heißt dann z.B. “smbsrv” und VirtualBox hat dann die Konfigurationsdateien unter „/Users/meinbenutzername/VirtualBox VMs/SMBSRV/“ abgelegt, wenn bei der Installation von VirtualBox kein anderer Pfad angegeben wurde.

    Nun geht es darum, die Mac Festplatte als direkt in das Ubuntu Gast-Betriebssystem als neue Festplatte einzubinden. Dazu wurde oben verhindert, dass die Platte automatisch gemounted wird. Um dies zu bewerkstelligen, wird eine Parameter-Datei erzeugt, die VirtualBox den direktenZugriff auf die oben beschriebene Festplatte erlaubt. Dies geschieht durch einen Befehl wie im folgenden Beispiel:

    sudo VBoxManage internalcommands createrawvmdk -filename \“/Users/meinbenutzername/VirtualBox\ VMs/SMBSRV/SMBSRV_raw.vmdk“ -rawdisk /dev/disk3

    Die Beschreibung findet sich in der Dokumentation unter https://www.virtualbox.org/manual/ch09.html#rawdisk

    Dies erzeugt die Datei SMBSRV_raw.vmdk, die im nächsten Schritt in der VirtualBox Gast-Konfiguration bekannt gemacht wird:

    – Herunterfahren des Gast-Betriebssystems (ansonsten kann die VM nicht geändert werden)
    – Klicken auf die “Ändern” Schaltfläche
    – Klicken auf “Massenspeicher
    – Klicken auf “SATA Controller
    – Klicken auf “Festplatte hinzufügen” (rechtes der beiden Symbole, die oben rechts erscheinen)
    – Im nachfolgenden Dialog die oben angelegte “SMBSRV_raw.vmdk” hinzufügen
    – Klicken auf “OK”, um die Einstellungen zu speichern
  3. Einbinden der Festplatte im Ubuntu Gast-Betriebssystem

    Ubuntu starten und dort eine Terminal-Sitzung beginnen. Da die einzubindende Festplatte in unserem Beispiel mit einem Mac OS Extended (journaled) Dateisystem formatiert ist, muss in Ubuntu die hfs Unterstützung installiert werden:

    sudo apt-get update
    sudo apt-get install hfsprogs
    sudo mkdir /media
    sudo mount -t hfsplus -o force,rw /dev/sdb2 /media/


    Warum /dev/sdb2? Antwort: Die Festplatte war in MacOS als /dev/disk3s2 gemounted, d.h. die Daten sind auf der Partition 2. Im Beispiel oben hat die root-Disk (die beim Anlegen der virtuellen Maschine erstellt) wurde das Block Device /dev/sda, also hat die eingebundene externe Platte das Block Device /dev/sdb, da sich diese am gleichen virtuellen SATA Controller befindet. Und die Partition 2 ist mit /dev/sdb2 ansprechbar.

    Dann wird /etc/fstab aktualisiert, damit die Festplatte automatisch gemounted wird:

    sudo vi /etc/fstab

    Am Ende anfügen:

    /dev/sdb2 /media hfsplus rw,relatime,umask=22,uid=0,gid=0,nls=utf8 0 0

    Speicher (:wq)

  4. Installieren und Einrichten des Samba-Servers im Ubuntu-Gastbetriebssystem

    sudo apt-get install samba

    Samba hat eine eigene Passwort-Verwaltung, daher ist es notwendig für den Benutzer-Account (in vorliegenden Beispiel meinbenutzername) ein Samba Passwort anzulegen:

    sudo smbpasswd -a meinbenutzername

    Eingabe z.B.: meinpasswort

    Dann wird die neue Freigabe in der Samba Konfigurationsdatei bekannt gegeben.

    sudo nano /etc/samba/smb.conf (oder vi / vim je nach Präferenzen hinsichtlich des Texteditors)

    Am Ende der Datei beispielsweise anfügen:

    [movies]
    path = /media
    valid users = meinbenutzername
    read only = no


    Über die Mimik oben können auch Unterverzeichnisse der eingebundenen Festplatte freigegeben werden, so z.B.:

    [movies]
    path = /media/bilder
    valid users = meinbenutzername
    read only = no


    Das sind natürlich nur rudimentäre Freigabe-Parameter. Samba erlaubt hier wesentlich mehr Granularität, was hier nachgelesen werden kann.

    Test der Parameter:

    sudo testparm

    Neustart des Samba – Servers:

    sudo service smbd restart

  5. Mounten der Freigabe auf einem entfernten (Linux-) System im lokalen Netz, beispielsweise mit:

    mdkir /mnt/media/
    mount.cifs //192.168.1.15/ /mnt/media/ \
    -o user=meinbenutzername,pass=meinpasswort,sec=ntlm,vers=2.0


    Die Parameter für Passwort hashing (sec=ntlm) und die Version (ver=2.0) können variieren.

    Überprüfen, ob die Freigabe korrekt gemounted wurde:

    sudo mount

    Sollte in etwa unter anderem etwa Folgendes ausgeben:

    //192.168.1.15/ on /mnt/media type cifs (rw,relatime,vers=2.0,sec=ntlmssp,cache= … … …

    War das erfolgreich und sind die Dateien auf der gemounteten Platte sichtbar, kann das in am Ende der /etc/fstab des entfernten Systems eingetragen werden, damit die Samba Freigabe bei jedem Systemstart automatisch gemounted wird:

    sudo nano /etc/fstab

    Anfügen am Ende:

    //192.168.1.15/ /mnt/media cifs rw,user=meinbenutzername,pass=meinpasswort,sec=ntlm,vers=2.0 0 0

Das sollte nun funktionieren.

Nachtrag 12/2021: Mit Monterey 12.0.1 funktionierte native SAMBA auf MacOS wieder. Die nfs Verbindungen allerdings frieren immer noch ein.