Lagacy Workarounds für Dateisysteme unter macOS

Software entwickelt sich mit der Zeit weiter und oft werden auch Komponenten, Funktionen oder auch alte Kompatibilitäten entfernt. So unterstützt Apples Festplattendienstprogramm (englisch: Disk Utility) seit einigen Jahren nicht mehr das im Jahr 1980 eingeführte Dateisystem FAT12, sowie das 1984 eingeführte Dateisystem FAT16. Für mich als Retro-Computer-User, der mit Wechseldatenträger wie 3,5″ Disketten und USB-Sticks über entsprechende Seriel-Controller unter (MS-) DOS Systemen hantiert sehr ärgerlich. Obwohl das grafische Festplattendienstprogramm und auch das entsprechende Kommandozeilenprogramm diskutil einem suggeriert, dass es mit der Option FAT (MS-DOS), beziehungsweise mit dem Parameter MS-DOS FAT16 ein Medium zu formatieren, ist es am Ende doch das modernere FAT32. Ganz zu schweigen von FAT12 für Disketten. Einziger Wermutstropfen ist, dass im derzeitig aktuellen macOS immer noch das alte Kommandozeilenprogramm newfs_msdos enthalten ist. Und so müssen der Formatierungsprozess auf zwei Programmbefehle inzwischen aufgeteilt werden.

Als Beispiel sei ein USB-Stick genommen, auf dem die FAT16 Partition erstellt werden soll. Mit dem Befehl diskutil list wurde herausgefunden, dass es sich um das physische Geräte /dev/disk2 handelt. Zuvor wurde mit diskutil list die physische Datenträgernummer ermittelt.

sommteck@MacBook-Pro ~ % diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     314.6 MB   disk0s1
   2:                 Apple_APFS Container disk1         500.0 GB   disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +500.0 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD - Data     154.9 GB   disk1s1
   2:                APFS Volume Macintosh HD            11.2 GB    disk1s2
   3:              APFS Snapshot com.apple.os.update-... 11.2 GB    disk1s2s1
   4:                APFS Volume Preboot                 2.4 GB     disk1s3
   5:                APFS Volume Recovery                1.3 GB     disk1s4
   6:                APFS Volume VM                      1.1 GB     disk1s5

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *4.1 GB     disk2
   1:                 DOS_FAT_32 USB-DRIVE               4.1 GB     disk2s1

Mit diskutil muss trotzdem erst einmal Partitionsschema erstellt werden.:

sommteck@MacBook-Pro ~ % diskutil partitionDisk /dev/disk2 1 MBR MS-DOS FAT16-USB 1G

Mit newfs_mnsdos wird dann die Partition formatiert.:

sommteck@MacBook-Pro ~ % sudo newfs_msdos -F 16 -v "FAT16-USB" -c 32 /dev/disk2s1

Am Ende ist bei einer Cluster-Größe von 32 Sektoren eine etwa 1 Gigabyte große FAT16 entstanden. Der Parameter für die Cluster-Größe ist prinzipiell optional, aber muss ein realistischer Wert angegeben werden, wie physische Speicherkapazität des Mediums größer als die maximal unterstützte Größe des zu verwendeten Dateisystems ist. Mit dem Befehl diskutil /dev/disk2s1 info lässt sich das Ergebnis noch überprüfen.


Ein anderes Problem, welches ich mit einem USB-Stick neulich hatte, war, dass das darauf enthaltene Dateisystem FAT32 scheinbar korrupt war und macOS sich weigerte das Medium einzubinden. Der Trick ist, den Mount-Prozess unter macOS manuell durchzuführen. Im Verzeichnis /Volumes werden in macOS alle interne Datenträger, sowie die Wechseldatenträger eingebunden. Der problematische USB-Stick bekam also erst sein eigenes Unterverzeichnis und mit dem alten Unix-Programm mount_msdos wurde es händisch eingebunden. – Auch wurde zuvor mit diskutil list die physische Datenträgernummer ermittelt.

sommteck@MacBook-Pro ~ % mkdir /Volumes/Testvolume
sommteck@MacBook-Pro ~ % sudo mount_msdos /dev/disk2s1 /Volumes/Testvolume

Danach konnten die Dateien von dem inkonsistenten USB-Stick herunter kopiert und anschließend das Medium erst einmal neu formatiert werden.


Links:

MacPorts macOS Big Sur clang Error Code 77

Nach meinem Upgrade von macOS 10.15 Catalina auf macOS 11 Big Sur und der darauffolgenden Installation der aktuellen MacPorts habe ich bei einem Paket vom Compiler folgenden Fehler bekommen.:

% sudo port install gd2
Warning: The macOS 11.0 SDK does not appear to be installed. Ports may not build correctly.
Warning: You can install it as part of the Xcode Command Line Tools package by running `xcode-select --install'.
Computing dependencies for gd2
Fetching archive for gd2
Attempting to fetch gd2-2.3.0_0+x11.darwin_20.x86_64.tbz2 from https://kmq.jp.packages.macports.org/gd2
Attempting to fetch gd2-2.3.0_0+x11.darwin_20.x86_64.tbz2 from http://jog.id.packages.macports.org/macports/packages/gd2
Attempting to fetch gd2-2.3.0_0+x11.darwin_20.x86_64.tbz2 from https://packages.macports.org/gd2
Configuring gd2<br>Error: Failed to configure gd2, consult /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_graphics_gd2/gd2/work/libgd-2.3.0/config.log
Error: Failed to configure gd2: configure failure: command execution failed
Error: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_graphics_gd2/gd2/main.
Follow https://guide.macports.org/#project.tickets to report a bug.
Error: Processing of port gd2 failed

Dem Log-File war zu entnehmen, dass der Compiler mit dem Error-Code 77 den Kompiliervorgang abgebrochen hatte. Was mich aber verwundert hatte, war, dass obwohl das aktuelle macOS 11.0 SDK und die Xcode Command Line Tools installiert waren, mir der Lösungsvorschlag präsentierte wurde, die Xcode Command Line Tools zu installieren. Nach etwas Recherche im Internet bin ich auf einen einfachen wie effektiven Lösungsvorschlag gekommen. Einfach die löschen und erneut installieren.

sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install

Links:

Commandlinefu

Als ich im vergangenen Herbst nach einer Lösung im Internet recherchiert habe, um eine Audio-Datei (wav, mp3, etc.) aus der Tonspur einer DVD zu erzeugen, bin ich in meinen Suchergebnissen über Beispiele für Kommandozeilen-Befehle auf der Website www.commandlinefu.com aufmerksam geworden. Bei Commandlinefu kann jeder nach der Registrierung einen kleinen Beitrag einstellen für einen Kommandozeilen-Befehl den er oder sie als erwähnenswert erachtet. Dabei wurden – und werden Befehle präsentiert, die entweder etwas Praktisches, etwas Nützliches, etwas Interessantes oder einfach nur etwas Witziges ausführen.
So gab es bis vor etwa zehn Jahren alternative Beispiele, wie sich ein öffentlicher SSH-Schlüssel auf einem Ziel-Host in die Datei ~/.ssh/authorized_keys einfügen lässt. Hintergrund war, dass Apple zwar die vollständige SSH-Suite seit Beginn von Mac OS X als festes Bestandteil integriert hat, aber über etliche Versionen hat das Programm ssh-copy-id gefehlt. So wurden alternative Wege erarbeitet, die mit Hilfe der Standard-Unix-Tools den Schlüssel über ein einziges Shell-Kommando auf den Ziel-Host brachten.xx
Ich habe mal angefangen, ein wenig in der mittlerweile über fast 12 Jahre alten Sammlung zu stöbern und eine wirklich kleine Auswahl in meinem Wiki gesammelt. Aber es steckt noch viel Potenzial in der Sammlung weitere Befehls-Schätze zu entdecken. Es braucht nur etwas Internet und vielleicht einen halben oder ganzen Tag, an dem sich nichts sinnvolleres mit der vorhandenen Freizeit anstellen lässt.
Es gibt im übrigen auch einen Twitter-Account zu Commandlinefu, der einem über einen neuen Beitrag informiert.

Links:

Individuelles ISO-Image unter macOS erstellen

Im Zuge meines Vorhabens dass ich mir nach langer Zeit wieder ein MS-DOS virtualisiert habe, stand ich auch wieder vor dem Problem ein individuelles ISO-CD-Image mit Computerdateien unter macOS zu erstellen. Im graphischen Programm ‚Disk Utility‘ (dt.: Festplattendienstprogramm) ist dies leider nicht direkt möglich. Allerdings muss im ‚Disk Utility‘ über das Menü ‚File‚ -> ‚New Image‚ -> ‚Blank Image …‚ ein leeres Image erstellt werden. Dabei ist darauf zu achten, dass im Dialogfenster unter ‚Partitions‘ ‚CD/DVD‘ und bei ‚Image Format‘ ‚DVD/CD-Master‘ als Optionen ausgewählt sind.

Somit ist erst einmal ein Image mit der Dateierweiterung .cdr erstellt, das mit Dateien gefüllt werden kann. Um daraus nun ein CD-ROM-konformes ISO-Image zu erstellen, ist das Kommandozeilenprogramm hdiutil nötig.

Der Befehl lautet:

hdiutil makehybrid -iso -o CD-ROM.ISO CD-ROM.cdr

Bei der Benennung der Output-Datei ist es aber nicht nötig .ISO als Dateierweiterung an zu hängen, da hdiutil dies automatisch tut.

Links:
Einrichten eines virtualisierten MS-DOS Systems (eigener Blogartikel)
ISO 9660 (dt. Wikipedia)

Hilfreichen Konsolen-Befehlen für macOS

Die deutsche Apple-Nachrichtenseite MacTechNews hatte vor 3 Wochen einen Artikel mit einer kurzen Sammlung an Terminal-Befehlen für den Mac. Die Seite beruft sich auf den GitHub-User Marcel Bischoff, der eine von ihm selbst kuratierte englischsprachige Liste mit Terminal-Kommandos, fein säuberlich sortiert nach Anwendungszwecken und Aufgaben pflegt. Von der bereits von MacTechNews gekürzten Auswahl an Befehlen, habe ich mir die für mich interessantesten Befehle genommen und in diesem Artikel aufgelistet.

1. Dateien und Ordner

Immer alle Dateinamens-Erweiterungen im Finder anzeigen:
defaults write -g AppleShowAllExtensions -bool true
Inhalte von zwei Ordnern vergleichen:
diff -qr /Pfad/zu/Ordner1 /Pfad/zu/Ordner2
.DS_Store-Dateien entfernen:
find . -type f -name '*.DS_Store' -ls -delete

2. Time Machine

Backup-Intervall anpassen:
sudo defaults write /System/Library/LaunchDaemons/com.apple.backupd-auto StartInterval -int Intervall_in_Sekunden
Beispiel: Intervall auf eine Stunde setzen:
sudo defaults write /System/Library/LaunchDaemons/com.apple.backupd-auto StartInterval -int 3600
Backups lokal speichern, wenn das externe Speichermedium nicht verfügbar ist:
sudo tmutil enablelocal

Diese Einstellung kann mit sudo tmutil disablelocal wieder rückgängig gemacht werden. Beide Befehle funktionieren nur bis einschließlich macOS 10.12 Sierra, ab macOS 10.13 High Sierra sind sie obsolet.

3. Festplatten, SSDs und Volumes

Alle Platten und Partitionen anzeigen:
diskutil list
Dateiberechtigungen reparieren:
sudo diskutil repairPermissions /

Dieser Befehl funktioniert nur bis einschließlich macOS 10.10 Yosemite, da spätere Versionen die Systemdateiberechtigungen automatisch schützen.

4. Betriebssystem

Ausführlichen Systembericht erzeugen:
sudo sysdiagnose -f ~/Desktop/
Status der Kernelerweiterungen anzeigen:
sudo kextstat -l

Über diese Auswahl an Befehlen hinaus sind auf der GitHub-Seite von Marcel Bischoff noch zahlreiche weitere Kommandos zu finden, beispielsweise aus den Themenbereichen Netzwerk, Audio, Sicherheit und Apps. Darüber hinaus stellt er in einer weiteren Übersicht eine ganze Reihe von Kommandozeilen-Apps vor.

Ein weiteres Thema ist persönlich bei mir, dass ich die Konfigurations-Datei .profile im Benutzerstammverzeichnis regelmäßig bearbeite. Zum Beispiel – und das ist das wesentliche bei mir – um Aliases zu erstellen und bearbeiten. Um die Datei neu einzulesen, dachte ich mir immer, müsse man sich als Benutzer immer wieder im System ab- und wieder neu anmelden. Aber zum Glück gibt es da aus der restlichen Unix-Derivaten- und Linux-Welt den Befehl source. Einfach eintippen mit dem Pfad der Konfigurationsdatei, die geändert wurde.:

source Example:
source ~/.profile

Links:

    MacTechNews-Artikel vom 03. Oktober 2019
    GitHub-User Marcel Bischoff – Appearance
    GitHub-User Marcel Bischoff – Command Line Apps