wayofdev.homebrew


Ansible Rolle: Homebrew
Installiert Homebrew auf macOS oder Linux und konfiguriert Taps, Pakete und Casks. Das Paket verwendet Wiederholungen, um Verbindungsprobleme zu beheben.
Wenn du diese Rolle magst/benutzt, ziehe in Betracht, sie zu markieren. Danke!
🗂 Inhaltsverzeichnis
- Anforderungen
- Rollenvariablen
- Beispiel-Playbook
- Entwicklung
- Tests
- Abhängigkeiten
- Kompatibilität
- Lizenz
- Autoreninformationen
- Danksagungen und Ressourcen
- Sponsoren
📑 Anforderungen
- Aktuelle Version von Ansible. Während der Wartung/Entwicklung halten wir uns an Ansible-Versionen und verwenden neue Funktionen, wenn sie verfügbar sind (und aktualisieren
meta/main.yml
für die Mindestversion). - Kompatibles Betriebssystem. Siehe Tabelle Kompatibilität.
- Die Bibliothek
jmespath
muss auf dem Host installiert sein, der das Playbook ausführt (benötigt für denjson_query
Filter). - Die Rolle hat Abhängigkeiten von Drittanbieter-Rollen auf verschiedenen Betriebssystemen. Siehe
requirements.yml
und den Abschnitt Abhängigkeiten.
🔧 Rollenvariablen
Verfügbare Variablen sind unten aufgeführt, zusammen mit Beispielwerten (siehe defaults/main.yml
). Zusätzliche Variablen sind in vars/main.yml
gespeichert.
→ Struktur
GitHub-Repository-Variable für den Homebrew-Kern. Standardmäßig überprüft die Rolle die neueste Version aus dem offiziellen Homebrew-Repository. Wenn du homebrew_repository
änderst und deinen Fork verwenden möchtest und die automatische Erkennung der neuesten Version deaktivieren möchtest, setze die Variable homebrew_repository_use_master
auf true
.
# Aus welchem Repository soll Homebrew installiert werden?
homebrew_repository: https://github.com/Homebrew/brew
# Setze auf true, wenn du den master-Branch anstelle der automatischen Erkennung der Version verwenden möchtest,
# oder du ein benutzerdefiniertes Fork in homebrew_repository verwendest.
homebrew_repository_use_master: false
Wenn auf true gesetzt, wird Homebrew selbst aktualisiert und alle Homebrew-Pakete aktualisiert:
# Aufgabe ausführen, um alle Pakete zu aktualisieren
homebrew_upgrade_all: true
Die Variable steuert die Anzahl der Wiederholungen und die Wartezeit zwischen den Wiederholungen, wenn die Aufgabe homebrew install
fehlschlägt:
# Wie oft soll wiederholt werden, wenn die Installation von Paket / Tap / Cask fehlschlägt?
# Dies kann bei Netzwerkproblemen geschehen.
homebrew_retries: 32
# Verzögerung zwischen jedem Wiederholungsversuch.
homebrew_delay: 3
Wird auf true
gesetzt, um den Homebrew-Cache zu entfernen, nachdem neue Software installiert oder aktualisiert wurde.
homebrew_clear_cache: false
Verzeichnis, in dem Anwendungen installiert werden sollen, die über cask
installiert wurden.
homebrew_cask_appdir: /Applications
Wenn auf true
gesetzt, wird --greedy
an brew cask outdated übergeben, wenn überprüft wird, ob ein installiertes Cask eine neuere Version verfügbar hat.
homebrew_cask_greedy_mode: false
Deaktiviere die Homebrew-Analysen, die standardmäßig erfasst werden.
homebrew_collect_analytics: false
→ Taps hinzufügen
Hinzufügen (tapping) von Repositories
homebrew_taps:
- homebrew/core
- homebrew/cask-versions
- homebrew/cask-fonts
Hinzufügen (tapping) von Repositories in ausführlicherer Weise mit definierten URLs und Zuständen:
homebrew_taps:
# nur tap
- name: homebrew/core
# tap von benutzerdefiniertem Repository
- name: denji/nginx
url: https://github.com/denji/homebrew-nginx
# tap mit definiertem benutzerdefinierten Zustand
- name: homebrew/cask-fonts
state: present
Entfernen von Taps:
homebrew_taps:
# definiere state: absent, um Taps zu löschen
- name: homebrew/cask-fonts
state: absent
- name: denji/nginx
state: absent
→ Pakete: Installieren, Aktualisieren und Entfernen
Hinzufügen von Paketen auf einfache Weise:
homebrew_packages:
- wget
- curl
- nano
Hinzufügen von Paketen auf erweiterte Weise, einschließlich Zustand, Pfad und anderer Optionen:
homebrew_packages:
# Installation an benutzerdefiniertem Pfad
- name: wget
state: present
path: /opt/custom/path/bin
Aktualisieren von Paketen:
homebrew_packages:
# zuerst Homebrew aktualisieren und das Formel wget mit 'brew' im Standardpfad installieren
- name: wget
state: present
update_homebrew: true
# zuerst Homebrew aktualisieren und die Formel curl auf die neueste verfügbare Version mit 'brew' im Standardpfad aktualisieren
- name: curl
state: latest
update_homebrew: true
Entfernen von Paketen:
homebrew_packages:
- name: wget
state: absent
- name: curl
state: absent
→ Casks: Installieren, Aktualisieren und Entfernen
:warning: Hinweis: Casks werden nur auf macOS unterstützt. Siehe diesen Beitrag.
Hinzufügen von Casks auf einfache Weise:
homebrew_casks:
# Installation einer Liste von Casks
- firefox
- google-chrome
- alfred
- 1password
Hinzufügen von Casks mit erweiterten Optionen:
homebrew_casks:
# Installation des Cask firefox
- name: firefox
state: present
Entfernen von Casks:
homebrew_casks:
# definiere state: absent, um zu löschen
- name: firefox
state: absent
- name: google-chrome
state: absent
📗 Beispiel-Playbook
→ für macOS-Maschinen
---
- hosts: all
connection: local
# ist nötig, wenn über SSH ausgeführt wird
environment:
- PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"
vars:
homebrew_taps:
- homebrew/core
- homebrew/cask
- homebrew/cask-fonts
- yt-dlp/taps
homebrew_packages:
- ssh-copy-id # von homebrew/core
- yt-dlp # von yt-dlp/taps
homebrew_casks:
- firefox
- google-chrome
- font-fira-code-nerd-font # von homebrew/cask-fonts
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- elliotweiser.osx-command-line-tools # nur auf macOS-Maschinen
- wayofdev.homebrew
→ für Linux-Maschinen
---
- hosts: all
connection: local
# ist nötig, wenn über SSH ausgeführt wird
environment:
- PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"
vars:
homebrew_user: linuxbrew # FYI: kann übersprungen werden, wird automatisch erkannt, aber linuxbrew-Benutzer ist der empfohlene Weg zur Installation von Homebrew unter Linux
homebrew_group: linuxbrew # das gleiche wie homebrew_user
homebrew_taps:
- homebrew/core
- yt-dlp/taps
homebrew_packages:
- ssh-copy-id # von homebrew/core
- yt-dlp # von yt-dlp/taps
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- geerlingguy.git # nur auf Linux-Maschinen und kann übersprungen werden, wenn die Maschine Git hat
- wayofdev.homebrew
⚙️ Entwicklung
Um Abhängigkeiten zu installieren und mit der Entwicklung zu beginnen, kannst du den Inhalt unserer Makefile
überprüfen.
Installiere poetry mit poetry-bin und alle entwicklungsrelevanten Python-Abhängigkeiten:
$ make install
Installiere nur Python-Abhängigkeiten, vorausgesetzt, du hast bereits Poetry:
$ make install-deps
Installiere alle Git Hooks:
$ make hooks
Lint alle Rollendateien:
$ make lint
🧪 Tests
Du kannst die Makefile
überprüfen, um eine vollständige Liste von Befehlen für das Remote- und lokale Testen zu erhalten. Für lokale Tests kannst du diese Befehle verwenden, um die gesamte Rolle oder separate Aufgaben zu testen:
→ auf localhost
:warning: Hinweis: Standardmäßig werden alle Tests auf deinem lokalen Rechner ausgeführt!
# führe alle Tags mit dem Szenario aus ./tests/test.yml aus
$ make test
# oder test-tag ohne Parameter
$ make test-tag
# führe einen Idempotenz-Test durch
$ make test-idempotent
# führe Aufgaben aus, die die Konfigurationsdatei validieren und die Installation durchführen
$ export TASK_TAGS="brew-install,brew-update"
$ make test-tag
# führe einen vordefinierten Befehl aus, der nur ein Tag ausführt
$ make test-install
$ make test-analytics
$ make test-update
$ make test-taps
$ make test-packages
$ make test-casks
# führe Molecule-Tests auf localhost aus
$ poetry run molecule test --scenario-name default-macos-on-localhost -- -vvv
# oder mit make-Befehl
$ make m-local
# führt Molecule mit Docker-Treiber aus
$ poetry run molecule test --scenario-name default -- -vvv
# oder mit Makefile
$ make m-linux
→ über SSH
# führe Molecule-Szenarien gegen Remote-Maschinen über SSH aus
# dies benötigt VM-Setup und Konfiguration
$ poetry run molecule test --scenario-name default-macos-over-ssh -- -vvv
$ make m-remote
# Tags können ebenfalls übergeben werden
$ export TASK_TAGS="brew-install,brew-update"
$ make m-remote
📦 Abhängigkeiten
Die Installation erfolgt über Makefile
und die Anforderungen sind in requirements.yml
definiert.
→ für alle
→ nur macOS
→ nur Linux
🧩 Kompatibilität
Diese Rolle wurde auf diesen Systemen getestet:
System / Container | Tag |
---|---|
macos | monterey |
macos | big-sur |
ubuntu | jammy |
ubuntu | focal |
debian | bullseye |
debian | buster |
fedora | 36 |
fedora | 35 |
centos | 8 |
centos | 7 |
🤝 Lizenz
🙆🏼♂️ Autoreninformationen
Diese Rolle wurde 2022 von lotyp / wayofdev erstellt.
🧱 Danksagungen und Ressourcen
Inspiriert von:
- role-homebrew-retry von @niall-byrne
- Homebrew-Rolle erstellt von @geerlingguy als Teil von ansible-collection-mac
- Offizielles Homebrew Installationsskript
🫡 Mitwirkende
🤑 Sponsoren
Die Entwicklung und das Testen der Rolle wurden auf Parallels Desktop Pro Edition durchgeführt, und die Lizenz wurde von Parallels bereitgestellt.
Ansible role that uses loops and retries to install Homebrew apps and casks.
ansible-galaxy install wayofdev.homebrew