ADMIN

2025

03

2025-02-27T12:00:00

Monitoring und Hochverfügbarkeit

PRAXIS

048

Open-Source-Tipp

Softwareverteilung

Paketmanager

Paketmanager Homebrew für macOS

Apps, frisch gezapft

von Thorsten Scherf

Veröffentlicht in Ausgabe 03/2025 - PRAXIS

Mac-Benutzer installieren neue Software auf dem System zumeist aus dem Apple-eigenen App-Store oder direkt von der Webseite des Anbieters. Wer jedoch gerne innerhalb eines Terminals arbeitet, dem bietet Homebrew eine weitere Möglichkeit, um jede Menge neue Software auf dem System zu installieren. Der Open-Source-Tipp in diesem Monat gibt eine umfassende Einführung in das Tool, erklärt wichtige Begriffe und bietet praktische Beispiele, die sowohl für Admins wie auch für Anwender nützlich sind.

Homebrew [1], oft einfach nur brew genannt, ist ein auf Ruby und Git basierender Paketmanager, der für macOS und Linux entwickelt wurde. Die Software ist komplett Open Source und die Quellen stehen zum Download über ein GitHub-Repository zur Verfügung [2]. Das Tool bietet eine einfache Methode, Software und Pakete aus der Kommandozeile zu installieren, zu aktualisieren und zu verwalten.
Homebrew bezeichnet sich selbst als "the missing package manager for macOS", zu Deutsch: der fehlende Paketmanager für macOS. Und das stimmt tatsächlich. Für Linux-Systeme existiert mit dnf, yum, apt, zypper und anderen eine Vielzahl an unterschiedlichen Paketmanagern, die von den einzelnen Linux-Distributionen mitgeliefert werden und die dabei helfen, Software aus den distributionseigenen Repositories zu installieren und dabei auch sämtliche Abhängigkeiten im Blick zu behalten. Unter macOS gibt es diesen Paketmanager nun eben nicht von Haus aus, auch wenn brew als der De-facto-Standard für macOS-Systeme gilt. Allerdings ist dieser zuerst manuell zu installieren und nicht bereits als Teil von macOS auf dem System verfügbar.
Installation von Homebrew
Auch wenn Homebrew neben macOS auch für Linux-Systeme zur Verfügung steht, ergibt die Nutzung dort wenig Sinn. Dies liegt einfach daran, dass Linux-Distributionen ihre eigenen Paketmanager mitbringen, die optimal an die jeweilige Distribution angepasst sind. Somit besteht hier eigentlich kein Bedarf für den Einsatz von brew und insofern bezieht sich dieser Artikel auch komplett auf eine Homebrew-Installation unter macOS. Das Installationsskript ist Teil eines GitHub-Repositories. Sie können es mit dem folgenden Befehl direkt aus dem Terminal heraus aufrufen:
Homebrew [1], oft einfach nur brew genannt, ist ein auf Ruby und Git basierender Paketmanager, der für macOS und Linux entwickelt wurde. Die Software ist komplett Open Source und die Quellen stehen zum Download über ein GitHub-Repository zur Verfügung [2]. Das Tool bietet eine einfache Methode, Software und Pakete aus der Kommandozeile zu installieren, zu aktualisieren und zu verwalten.
Homebrew bezeichnet sich selbst als "the missing package manager for macOS", zu Deutsch: der fehlende Paketmanager für macOS. Und das stimmt tatsächlich. Für Linux-Systeme existiert mit dnf, yum, apt, zypper und anderen eine Vielzahl an unterschiedlichen Paketmanagern, die von den einzelnen Linux-Distributionen mitgeliefert werden und die dabei helfen, Software aus den distributionseigenen Repositories zu installieren und dabei auch sämtliche Abhängigkeiten im Blick zu behalten. Unter macOS gibt es diesen Paketmanager nun eben nicht von Haus aus, auch wenn brew als der De-facto-Standard für macOS-Systeme gilt. Allerdings ist dieser zuerst manuell zu installieren und nicht bereits als Teil von macOS auf dem System verfügbar.
Installation von Homebrew
Auch wenn Homebrew neben macOS auch für Linux-Systeme zur Verfügung steht, ergibt die Nutzung dort wenig Sinn. Dies liegt einfach daran, dass Linux-Distributionen ihre eigenen Paketmanager mitbringen, die optimal an die jeweilige Distribution angepasst sind. Somit besteht hier eigentlich kein Bedarf für den Einsatz von brew und insofern bezieht sich dieser Artikel auch komplett auf eine Homebrew-Installation unter macOS. Das Installationsskript ist Teil eines GitHub-Repositories. Sie können es mit dem folgenden Befehl direkt aus dem Terminal heraus aufrufen:
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Das Skript zeigt die einzelnen Installationsschritte an, die Sie durch Drücken der Enter-Taste bestätigen müssen.
Xcode Command Line Tools einspielen
Da Homebrew Software aus den Quellen heraus kompilieren kann, um diese im Anschluss auf dem System zu installieren, sind die Xcode Command Line Tools (CLT) gefragt. Hierbei handelt es sich um Werkzeuge für das Entwickeln von Software unter macOS, die ausschließlich innerhalb eines Terminals laufen. Dazu gehört beispielsweise ein Compiler, aber auch git und diverse Programmierbibliotheken. Die Command Line Tools sind somit eine Teilmenge der macOS-Xcode-Anwendung, die eine komplette IDE für die Softwareentwicklung unter macOS bereitstellt.
Ob Xcode oder die CLT bereits installiert sind, finden Sie mit xcode-select -p heraus. Bekommen Sie eine Fehlermeldung zurück, wurde weder Xcode noch die CLT gefunden und die Installation erfolgt als Teil des Homebrew-Setups über die oben beschriebene Methode. Bekommen Sie nach dem "xcode-select"-Aufruf die Rückmeldung
/Applications/Xcode.app/Contents/ Developer
ist auf Ihrem System die komplette Xcode-App vorhanden. Stellen Sie in diesem Fall sicher, dass die Installation aktuell ist. Lautet die Antwort
/Library/Developer/CommandLineTools
sind lediglich die Command Line Tools installiert, was für Homebrew genügt. Gibt es Probleme mit der Homebrew-Installation, löschen Sie einfach die installierte Xcode-App und überlassen Sie Homebrew das Aufspielen der notwendigen Tools. Welche Version von Xcode oder den CLT installiert ist, zeigt das Kommando
brew config | grep 'Xcode|CLT'
CLT: 16.2.0.0.1.1733547573
Xcode: N/A
Homebrew konfigurieren
Wo die Homebrew-Installation im Dateisystem stattfindet, hängt von der Hardware ab, auf der macOS läuft. Auf Intel-Rechnern mit einer Intel-CPU lautet der Standardpfad "/usr/local/", während auf ARM-Systemen die Installation im Verzeichnis "/opt/homebrew" erfolgt. Dieser Ordner wird auch als "Prefix" bezeichnet und es ist empfehlenswert, diesen nicht zu ändern, da ansonsten die Installation einiger Pakete fehlschlagen kann. Welchen Prefix die Software auf Ihrem System verwendet, bekommen Sie ganz einfach mit dem folgenden Kommando heraus:
brew --prefix
/opt/homebrew
Was Pakete angeht, existieren in der Homebrew-Terminologie hierfür zwei unterschiedliche Begriffe: Formulae und Casks. Zu letzterer Gattung gehören üblicherweise Desktop-Anwendungen wie beispielsweise der Webbrowser Firefox. Formulae (Plural von formula) hingegen sind meist Pakete, die innerhalb eines Terminals ablaufen, wie etwa der Mail-User-Agent neomutt. Formulae können dabei sowohl im Source- als auch im Binär-Format als komprimierte TAR-Datei, vorliegen, wobei Casks im Binär-Format zumeist als DMG-Datei installiert werden.
Um zu erfahren, welche Anwendungen zur Installation über den Paketmanager brew zu Verfügung stehen, verwenden Sie die beiden folgenden Kommandos:
brew formulae
brew casks
Als Ergebnis erhalten Sie eine Liste der verfügbaren Anwendungen. Alternativ dazu können Sie unter [3] und [4] auf einen Webservice zugreifen, um in einem Katalog nach Formulae und Casks zu suchen. Auch auf der Homebrew-Webseite [1] finden Sie eine entsprechende Suchfunktion.
Ruby-Formeln
Ab der Version 4.0.0 greift das Tool zur Installation von Paketen auf eine JSON-basierte API zurück. Bei älteren Versionen erfolgt die Installation der Pakete direkt aus dem Repository "homebrew-core" [5] für Formulae und "homebrew-casks" [6] für Casks. Da diese Art der Installation beim Einsatz von Drittanbieter-Repositories immer noch eine wichtige Rolle spielt, beschreiben wir den Ansatz an dieser Stelle etwas genauer. In diesem Fall gilt es zu beachten, dass brew für jedes Paket eine Ruby-Datei im DSL-Format (domain- specific language) herunterlädt. Diese beschreibt, wo die Sourcen und die Binärversion der Software zu finden sind, welche Abhängigkeiten bestehen und wie brew die Quellen selbstständig kompilieren kann, um daraus ein Binärpaket der Software zu installieren, falls vom Anwender gewünscht. Unter [7] finden Sie ein Beispiel für eine solche Ruby-basierte Beschreibungsdatei für die Anwendung neomutt.
Möchten Sie dieses Paket installieren, gelingt dies über den Aufruf brew install neomutt. In diesem Fall greift brew auf die unter [7] aufgeführte Formulae-Datei zurück, um dann die Binärversion der Software auf das System zu laden und zu installieren. Bei Bedarf können die Sourcen auch auf dem System neu übersetzt und dann installiert werden. In dem Fall geben Sie der brew-Anweisung die zusätzliche Option "--build-from-source" mit. Die Bottle, so heißt das Binärpaket in der Brew-Terminologie, wird dann im Dateisystem in dem Ordner installiert, der im Prefix hinterlegt ist – auf Apple-ARM-Systemen also unter "/opt/homebrew/". Homebrew verwendet hierfür eine bestimme Verzeichnisstruktur und Terminologie für die einzelnen Verzeichnisse.
Um ein Paket, unabhängig davon, ob Bottle oder Cask, wieder zu löschen, verwenden Sie einfach das brew-Kommando uninstall. Die Aktualisierung eines Pakets erfolgt mithilfe der brew-Anweisung upgrade. Wie üblich sind sämtliche brew-Anweisungen und -Optionen in der Hilfeseite des Tools sehr ausführlich beschrieben: man brew. Im nächsten Monat geht es an dieser Stelle weiter mit dem Thema Homebrew. Der Open-Source-Tipp wird dann zeigen, wie Sie Formulae für Ihre eigene Software schreiben können, um diese mithilfe eines eigenen Git-Repositories zur Installation über den brew-Paketmanager zur Verfügung zu stellen.
Fazit
Homebrew ist für Anwender und Admins ein wichtiges und flexibles Werkzeug, um Software auf einem macOS-System zu installieren. Dies erfolgt dabei entweder über eine JSON-API oder ein lokal geklontes Git-Repository. Bei Bedarf können Sie auch Drittanbieter-Repositories hinzufügen. Dazu mehr im nächsten Monat an dieser Stelle.
(dr)
Link-Codes
[1] Homebrew: https://brew.sh/
[2] Homebrew-Github-Repository: https://github.com/Homebrew/brew
[3] Formulae-Suche: https://formulae.brew.sh/