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.

Homeschooling etc.

Kalender- Reminder über Sprachausgabe

Wer kennt das nicht in den Zeiten von Homeschooling? Beide Elternteile sind mit ihren Home-Office Aufgaben beschäftigt und teilweise selbst in irgendwelchen Video-Konferenzen unterwegs und der Nachwuchs, der eigentlich auch eine Home-Schooling Sitzung mit seiner oder ihrer Klasse hätte, verpennt dies grandios, da (meistens über das Handy) gerade andere Dinge wichtiger sind. Was tun also? Wäre doch schön, wenn man eine Erinnerung bekäme, so wie im Theater oder in der Oper, wo ein Gong auf den Anfang oder die Fortsetzung einer Aufführung aufmerksam macht.

Gesagt, getan. Einfach ein kleines Skript schreiben, das den Kalender (im aktuellen Fall den Google Kalender) ausliest und bevorstehende (Unterrichts-) Ereignisse z.B. mit einem Gong lautstark (wenn man das über die Stereo-Anlage abspielt ) ankündigt und den Inhalt des aktuellen Kalendereintrags automatisiert über Computer-generierte Sprachausgabe vorliest:

In meinem Fall läuft das Skript auf einem Raspberry Pi, der an die Stereo-Anlage angeschlossen ist, wurde aber auch auf MacOs und Windows 10 getestet. Im Bild oben sieht man die Kontrollausgabe für die bevorstehenden 10 Ereignisse, die rollierend aus dem Google Kalender ausgelesen werden. Das Skript ist in Python verfasst und über eine Präferenzen-Datei lassen sich verschiedenste Parameter einstellen, wie z.B. die Sprache, Zeiten für den Vorwarnungs-Countdown etc. Das Skript ist öffentlich und kann über github eingesehen und heruntergeladen werden: ulritter/CalSpeechReminder (github.com)

Graphtec Piezo Tonabnehmer und Seymour Duncan Triple Shot

Wie Moltisanti in seinem Video zeigte, verwendete er einen Seymour Duncan Triple Shot-Tonabnehmer-Montagering, um zwischen dem magnetischen und dem Piezo-Tonabnehmer wechseln zu können. Diese Idee hat mich angesprochen, da ich auch keine Löcher in den Korpus meiner Gitarre bohren wollte. Ich habe jedoch kein geeignetes Verkabelungs-Diagramm im Netzwerk finden können. Also habe ich einige Nachforschungen angestellt und den Triple Shot erprobt und bin schließlich auf die richtige Verdrahtung gestoßen:

Winmail.dat Email-Anhänge in Android?

Hier ist die Lösung.

Ich denke, einige von uns sind bereits über „winmail.dat“ oder „attxxxx.dat“-Anhänge in unseren Android-E-Mail-Clients gestolpert.

Diese Namen von Anhängen kommen normalerweise vor, wenn jemand, der einen Microsoft Outlook EMail-Client benutzt, Ihnen eine bestimmte RTF-Email (Rich Text Format) mit Anhängen schickt. Älteres Microsoft Outlook Clients packen diese Anhänge dann in einen TNEF-Umschlag (Transport-Neutral Encapsulation Format). Einige Email Clients können mit diesem Format umgehen, andere jedoch nicht! Sie erhalten stattdessen einen Anhang mit Namen „winmail.dat“ und können damit im Grunde nichts anfangen.

Während dies ein bekannter (und ärgerlicher) Umstand ist, gibt es bereits Plug-Ins für viele offene E-Mail-Clients wie Mozilla Thunderbird. Für Android jedoch schien es nichts zu geben (und ich habe ziemlich viel darüber geforscht).

Also beschloss ich schließlich, eine eigene App zu schreiben, um mit TNEF-Anhängen umgehen zu können. Glücklicherweise gab es bereits ein existierendes Java-Paket, das den Extraktionsauftrag erledigen konnte, so dass ich „nur“ die Android-App darum herum erstellen musste. Mein Dank an dieser Stelle geht an Amichai Rothman für sein Java-TNEF-Paket (http://www.freeutils.net/source/jtnef/)!!!

Ich habe diese Anwendung ursprünglich für meine eigenen Zwecke erstellt, aber dann dachte ich, dass es sich lohnt, sie mit der Gemeinschaft zu teilen, wohl wissend, dass sie sich noch im Alpha-Zustand befindet. Sie ist jedoch bereits zweisprachig (Englisch und auf Deutsch lokalisiert) und sollte ihre Arbeit erledigen.

Die App selbst registriert sich als Handler für *.dat- oder *.DAT-Dateien und für E-Mail-Anhänge. Wenn Sie z.B. versuchen, einen „winmail.dat“-Anhang aus Ihrem Android-E-Mail-Client oder eine „winmail.dat“-Datei mit Ihrem Dateibrowser zu öffnen, sollte die App gestartet werden, oder Sie sehen ein Auswahlfeld, in dem Sie diese App auswählen können. Wenn Sie dies tun, sehen Sie eine Warnungsbox. Wenn Sie „Ok“ drücken, wird die Anwendung versuchen, den Inhalt der Datei „winmail.dat“ in einen lokalen Ordner zu extrahieren. Die Voreinstellung für diesen Ordner ist „/sdcard/winmail“. Nachdem die Extraktion erfolgreich abgeschlossen ist, hinterlässt die Anwendung eine Benachrichtigung. Wenn Sie die Benachrichtigung öffnen, zeigt sie Ihnen den Inhalt des Zielordners in einer weiteren Benachrichtigungsbox an. Sie können dann mit einem beliebigen Dateimanager zum Zielverzeichnis browsen, um auf die echten Anhänge aus dem Umschlag „winmail.dat“ zuzugreifen.

Wenn Sie die Anwendung direkt starten, zeigt sie Ihnen einen Setup-Bildschirm mit einer Erläuterung dazu und der Möglichkeit, Ihr eigenes Zielverzeichnis anzugeben, in das die extrahierten Dateien gehen sollen, und es gibt einen Checkboy, in dem Sie entscheiden können, ob jeder Anhang / jede Datei in ein eigenes Unterverzeichnis extrahiert werden soll.

Das einzige Systemprivileg, das die Apps bei der Installation erhalten, ist die Fähigkeit, auf den externen Speicher (sdcard) schreiben zu können. Es hat also nicht wirklich die Chance, Ihrem Gerät schweren Schaden zuzufügen.

Wenn Sie Fragen haben, können Sie diese gerne im xda-Entwicklerforum stellen: http://forum.xda-developers.com/showthread.php?t=1488466. Die App ist im Android Market als kostenlose Version und als Spendenversion mit erweiterten Funktionen erhältlich.

Nachdem inzwischen die meisten Mail-Clients mit derlei Anhängen umgehen können, ist der Bedarf an dieser App vermutlich nicht mehr so groß, aber für alle Fall unten die Links …​​​​​​

Freie Version

Spenden-Version