Apple File System

Was ich im letzten Beitrag nicht erwähnt habe, ist auch gleich für mich die größte und aufregenden Neuerung in Sachen macOS von Apple. Auf der letzte WWDC gab es nämlich eine Präsentation über ein neues Dateisystem, mit welchem Apple das nun 30 Jahre alte HFS ablösen will. So wurde auch mit den letzten Betas im Sommer und dem anschließen Major-Release von Sierra eine Betaversion des neuen APFS (Apple Filesystem) – erstmal zielgerichtet für Entwickler – veröffentlicht, was auch jeden anderen Nutzer wie mich einlädt, mal ein wenig damit herum zu spielen. Deswegen lassen sich Image-Sparsefiles und Datenträger auch erstmal nur unter der Konsole und noch nicht über das grafische Festplattendienstprogramm erstellen und bearbeiten. Die Integration im Finder ist stattdessen aber bereits vorhanden.
Die finale Version, die auch für den alltäglichen Produktiveinsatz zur Verfügung sein wird, ist für die kommende macOS-Version im Herbst 2017 geplant. Als Features sind folgende zu nennen:

  • das Klonen von Dateien und Ordnern, ohne dass sie neu geschrieben werden
  • Snapshots
  • APFS-Laufwerke können dynamisch in der Größe verändert werden, ohne dass das Laufwerk neu partitioniert zu werden braucht
  • „Space Sharing“ erlaubt mehreren logischen Laufwerken, den Speicherplatz desselben physikalischen Laufwerks gemeinsam zu nutzen
  • Verschlüsselung sowohl auf Dateisystemebene sowie Dateiweise bzw. der Metadaten
  • „Atomic Safe-Save“ führt Umbenennungen in einer einzelnen Transaktion so aus, dass aus Nutzerperspektive eine Operation entweder vollständig durchgeführt wurde oder gar nicht geschieht

Demgegenüber unterstützt APFS derzeit noch kein Startlaufwerk, keine Time-Machine-Sicherungen, kein FileVault sowie kein Fusion Drive.

Dennoch habe ich wie in Apples Support-Dokument mal ein 1 Gigabyte großes Sparse-Image erstellt:

hdiutil create -fs APFS -size 1GB apfs-test.sparseimage

Im zweiten Fall wollte ich mal einen ganzen USB-Stick mit APFS formatieren. Wichtig dabei ist, dass das Medium mit GPT nach dem GUID-Schema formatiert wird. MBR wird für APFS nicht mehr zugelassen.
In meinem Beispiel hat der USB-Stick die Gerätekennung disk2.:

sommteck:~ franky$ diskutil list
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *250.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage Simba                   249.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3

/dev/disk1 (internal, virtual):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            Simba                  +248.8 GB   disk1
                                 Logical Volume on disk0s2
                                 D2BDDC9A-78E4-490C-808F-282E2BB8623A
                                 Unlocked Encrypted

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *16.1 GB    disk2
   1:                  Apple_HFS Stick                   16.1 GB    disk2s1

Mit folgendem Befehl wird nun das Gerät formatiert. Mit der 1 wird angegeben, dass eine Partition angelegt wird.:

diskutil partitionDisk disk2 1 GPT apfs Stick-APFS 100M

Als Dateisystem wird apfs angegeben. Als Volumenamen habe ich Stick-APFS gesetzt. Was man für einen Wert für die Größe und als Suffix angibt (hier die 100M) ist in diesem Beispiel erstmal egal, da diskutil im Normalfall das Ende der letzten Partion ans Ende des Geräts setzt. In diesem Fall ist die Erste auch gleich die Letzte.

Links:
Apple File System Guide

macOS Sierra

Vor nunmehr fünf Wochen hat Apple sein aktuelles Computerbetriebssystem macOS Sierra veröffentlicht. Neben Neuerungen wurden aber auch einige Änderungen unter der Haube durchgeführt.
Eine wesentliche was die Kompatibilität mit älteren Programmen betrifft, ist der Wegfall der Garbage Collection für das Handling des Arbeitsspeichers der Programme. Hat ein Programm auf dieses gesetzt, so wird es nach dem Upgrade leider nicht mehr ausführbar sein, da Apple die Unterstützung für den Garbage Collector in Sierra entfernt hat. Um also vor dem Upgrade prüfen zu können, ob Programme mit Sierra kompatibel sind oder nicht, kann man mit folgenden Befehl im Terminal dies überprüfen, um hinterher keinen Reinfall zu erleben. Allerdings muss für die Prüfung Xcode installiert sein.:

Befehl:

otool -oV /Applications/PROGRAMMNAME.app/Contents/MacOS/PROGRAMMNAME | tail -3

Ausgabe:

Contents of (__DATA,__objc_imageinfo) section
  version 0
    flags 0x6 OBJC_IMAGE_SUPPORTS_GC

Sollte in der Terminalausgabe nun „OBJC_IMAGE_SUPPORTS_GC“ erscheinen, so kommt noch der Garbage Collector zum Einsatz und das Programm ist unter macOS Sierra nicht mehr lauffähig.

Außerdem ist Apple beim Einsatz von OpenSSH von Version 6.x auf 7.x gewechselt. Die Entwickler von OpenSSH haben aber in der Major-Version 7.0 eine wesentliche Änderung vorgenommen, was das automatische Laden von SSH-Schlüsseln in den ssh-agent betrifft. Hat man sich früher mit dem lokalen Mac via SSH auf einen anderen Rechner eingeloggt und sich dann wiederum von diesem mittels Public-Key-Verfahren auf einen weiteren Rechner verbunden, so hat der lokale SSH-Client sowohl Privat-Key als auch die Passphrase in den ssh-agent hinein geladen. Dies funktioniert seit Version 7 nicht mehr. Um sich dennoch Schlüssel und Passphrase des Man-in-the-middle-Computers wieder in den Agent seines lokalen Computers dauerhaft laden zu können, reicht es, wenn man in die benutzereigene Client-Konfiguration folgende Option hinzufügt.

echo "AddKeysToAgent yes" >> ~/.ssh/config

Des weiteren lässt sich wie gewohnt der macOS-Installer auf einem GPT-vorformatierten USB-Stick mit folgendem Konsolenbefehl kopieren, so dass dieser auch für künftige Installationen ohne Internetverbindungen ein Rettungssystem beinhaltet.

sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/Stick --applicationpath /Applications/Install\ macOS\ Sierra.app/ --nointeraction

HandBrake und El Capitan

Mit El Capitan hat Apple im OS X die System Integrity Protection (SIP) eingeführt, welche bestimmte Ordner im Root-Dateisystem noch einmal zusätzlich vor unberechtigten Zugriff schützen soll. Da HandBrake bisher zum Rippen von DVD’s seine libdvdcss in /usr/lib speicherte, wird diese von der SIP mit OS X 10.11 nun unter Quarantäne gestellt, um den Kernel zu schützen. Dadurch ist es leider nicht mehr möglich DVD’s zu rippen, oder verschlüsselte ISO-Dateien mit der normalen DVD-Applikation wiederzugeben. Abhilfe wird dadurch geschafft, dass man sich mit einem Paket-Manager das libdvdcss-Paket nachinstalliert und die Bibliothek in einem Unterordner des /usr – Verzeichnis kopiert, welches von SIP standardmäßig nicht zusätzlich geschützt wird.
In meinem Fall habe ich die Bibliothek mit Hilfe MacPorts nachinstalliert und die Datei libdvdcss.2.dylib aus dem Verzeichnis /opt/local/lib nach /usr/local/lib kopiert. Somit ist HandBrake wieder versorgt. DVD-ISO’s lassen sich alternativ mit dem VLC-Player wiedergeben, da er seine eigene Codec-Bibliothek mitbringt.

Automatische iCloud-Speicherung von Dokumenten verhindern

Wie sich heraus gestellt hat, speichern Programme mit iCloud-Anbindung auf dem Macintosh jedes noch ungesicherte Dokument ungefragt in diese hoch. Dies möchte man verhindern – gerade wenn man Dokumente soweit vertraulich behandeln möchte, dass sie selbst auf verschlüsselten Diensten von Dritten nichts zu suchen haben. Da es keine Möglichkeit in der GUI vom Mac OS X gibt dies zu verhindern, muss man folgenden Befehl auf der Kommandozeile absetzten.

defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false

Nach dem Beenden und erneutem Öffnen, speichern Programme mit iCloud-Unterstützung die neu angelegte Dokumente dann wieder lokal im Verzeichnis des jeweiligen Nutzers unter folgender Ordner-Struktur:

/Users/<Benutzername>/Library/Containers/<Ordnername_Applikation>/Data/Library/Autosave Information/

Möchte man hingegen das vorherige Verhalten mit der iCloud-Anbindung wieder zurück haben, reicht es den selben Befehl nur mit einem true am Ende aus zu führen.

Alternativ kann man sein Nutzungsverhalten in Bezug von Dokumentenverwaltung aber auch so einstellen, dass man auf die iCloud völlig verzichtet, oder nur einen selber gehosteten Dienst nutzt auf dem auch selbst administrativen Zugang hat.

Quelle des Tip bei Mac OS X Hints

Programme unter Mac OS X deinstallieren

Einem Thema, welchen ich mich bisher verweigert habe, ist das Deinstallieren von Programmen unter Mac OS X. Es ist ja ganz praktisch, dass die meisten Programme dank ihres Application-Framework keine Routinen für das Installieren und wieder Deinstallieren benötigen. Es bleiben aber dennoch ja nach Programm in folgen Verzeichnen programmspezifische Daten zurück.

– Voreinstellungen in ~/Library/Preferences/
– Hilfsdaten und Cache in ~/Library/Application Support/
– gespeicherte Programme in ~/Library/Saved Application State/

Meistens habe ich diese Dateien von Hand aus den Verzeichnen heraus gefummelt. Aber vor einigen Tagen habe ich mal diverse Deinstallations-Programme ausprobiert, die es einem ermöglichen per ‚Drag & Drop‘ ein Programm auf dieses zu ziehen und die Meta-Daten gleich automatisch mit löschen. Unter diesen Lösungen gibt es allerdings auch Potenzial, mit der sich das ein wenig weiter automatisieren lässt. AppTrap ist eine kleine Erweiterung für die Systemsteuerung, die einen kleinen Hintergrundprozess startet und schaut, ob der Benutzer ein Programm aus den Applikationenordner löscht, und löscht damit auch alle anderen Programmspezifischen Daten. Man sollte vielleicht aber die Abfrage eingeschaltet lassen, da dieser Mechanismus auch greift, wenn die Programme sich selbst aktualisieren und man so Gefahr läuft, dass die Daten auch dann weg sind, wenn man es nicht möchte.

Ein anderes Thema sind aber Programme oder Betribessystemkomponenten, die eine Installationsroutine mitbringen. Sie befinden sich in einem .pkg oder .dpkg Paket. Hier reicht nicht das einfache verschieben des Programm-Icon in den Papierkorb – wenn es überhaupt eines gibt. Sondern man will unter Umständen wieder Teile aus dem systemweiten Ordnern /Library und /System entfernen. Seit Ewigkeiten gibt es mit dem Paketmanager OSXPM ein Tool, welches diese Funktion auch beherrscht. Problem ist aber, dass das Programm bei neueren Mac OS X Versionen als Snow Leopard (10.6.x) nicht mehr lauffähig ist, da es für die PowerPC-Architektur geschrieben wurde und die neuen Betriebssystemversionen keinen PowerPC-Code mehr ausführen können.
Abhilfe hierbei schafft hierfür endlich nach langer Zeit das Programm UninstallPKG welches vom corecode-Entwicklerteam für ca 7 € angeboten wird. Es listet ausschliesslich alle Programme und Komponenten auf, die mit einer Installationsroutine auf dem System installiert wurden und man kann diese – beziehungsweise dessen verwaisten Einträge – wieder löschen. Hintergrund ist: Das das Mac OS X einen eigenen ProperyList-Eintrag für jede Komponente führt, der so wieder heraus genommen werden kann.