wayofdev.homebrew


Rola Ansible: Homebrew
Instaluje Homebrew na systemach macOS lub Linux oraz konfiguruje "taps", pakiety i "casks". Pakiet używa pętli powtórzeń, aby poradzić sobie z problemami z łącznością.
Jeśli lubisz/używasz tej roli, proszę rozważ dodanie jej do ulubionych. Dziękuję!
🗂 Spis Treści
- Wymagania
- Zmienne roli
- Przykładowy playbook
- Rozwój
- Testowanie
- Zależności
- Kompatybilność
- Licencja
- Informacje o autorze
- Podziękowania i zasoby
- Sponsorzy
📑 Wymagania
- Zaktualizowana wersja Ansible. Podczas konserwacji/rozwoju trzymamy się wersji Ansible i korzystamy z nowych funkcji, jeśli są dostępne (i aktualizujemy
meta/main.yml
dla minimalnej wersji). - Kompatybilny system operacyjny. Sprawdź tabelę kompatybilności.
- Biblioteka
jmespath
musi być zainstalowana na hoście uruchamiającym playbook (potrzebna do filtrajson_query
). - Rola ma zależności od ról innych firm na różnych systemach operacyjnych. Zobacz
requirements.yml
i sekcję zależności.
🔧 Zmienne roli
Dostępne zmienne są wymienione poniżej, wraz z przykładowymi wartościami (zobacz defaults/main.yml
). Dodatkowe zmienne są przechowywane w vars/main.yml
.
→ Struktura
Zmienna repozytorium GitHub dla rdzenia Homebrew. Domyślnie rola sprawdza najnowsze wydanie z oficjalnego repozytorium Homebrew, jeśli zmieniasz homebrew_repository
na swój fork i chcesz używać gałęzi master
oraz wyłączyć automatyczne rozpoznawanie najnowszego wydania, ustaw zmienną homebrew_repository_use_master
na true
# Z którego repozytorium powinniśmy zainstalować homebrew?
homebrew_repository: https://github.com/Homebrew/brew
# Ustaw na true, jeśli chcesz używać gałęzi master zamiast automatycznego rozpoznawania wydania,
# lub korzystasz z niestandardowego forka określonego w homebrew_repository
homebrew_repository_use_master: false
Gdy ustawione na true, zaktualizuje Homebrew i zaktualizuje wszystkie pakiety Homebrew:
# Uruchom zadanie, aby zaktualizować wszystkie pakiety
homebrew_upgrade_all: true
Zmienna kontroluje liczbę powtórzeń oraz opóźnienie, jakie należy poczekać między powtórzeniami, jeśli zadanie homebrew install
nie powiodło się:
# Ile razy powtórzyć, jeśli instalacja pakietu / tapu / cask się nie uda?
# Może to się zdarzyć podczas problemów z siecią.
homebrew_retries: 32
# Opóźnienie między każdym podejściem do powtórzenia.
homebrew_delay: 3
Ustaw na true
, aby usunąć pamięć podręczną Homebrew po zainstalowaniu lub zaktualizowaniu oprogramowania.
homebrew_clear_cache: false
Katalog, w którym powinny być zainstalowane aplikacje zainstalowane za pomocą cask
.
homebrew_cask_appdir: /Applications
Jeśli ustawione na true
, przekazuje --greedy
do brew cask outdated podczas sprawdzania, czy zainstalowany cask ma dostępną nowszą wersję.
homebrew_cask_greedy_mode: false
Wyłączaj analitykę Homebrew, która jest zbierana domyślnie.
homebrew_collect_analytics: false
→ Tapping repozytoriów
Dodawanie (tapping) repozytoriów
homebrew_taps:
- homebrew/core
- homebrew/cask-versions
- homebrew/cask-fonts
Dodawanie (tapping) repozytoriów w bardziej szczegółowy sposób, definiując adresy URL i stany:
homebrew_taps:
# tylko tap
- name: homebrew/core
# tap z niestandardowego repozytorium
- name: denji/nginx
url: https://github.com/denji/homebrew-nginx
# tap z określonym niestandardowym stanem
- name: homebrew/cask-fonts
state: present
Usuwanie tapów:
homebrew_taps:
# określ stan: absent, aby usunąć tapy
- name: homebrew/cask-fonts
state: absent
- name: denji/nginx
state: absent
→ Pakiety: Instalowanie, aktualizowanie i usuwanie
Dodawanie pakietów w prosty sposób:
homebrew_packages:
- wget
- curl
- nano
Dodawanie pakietów w zaawansowany sposób, definiując stan, ścieżkę i inne opcje:
homebrew_packages:
# zainstaluj w niestandardowej ścieżce
- name: wget
state: present
path: /opt/custom/path/bin
Aktualizowanie pakietów:
homebrew_packages:
# najpierw zaktualizuj homebrew i zainstaluj formułę wget z 'brew' w domyślnej ścieżce
- name: wget
state: present
update_homebrew: true
# najpierw zaktualizuj homebrew i zaktualizuj formułę curl do najnowszej dostępnej z 'brew' w domyślnej ścieżce
- name: curl
state: latest
update_homebrew: true
Usuwanie pakietów:
homebrew_packages:
- name: wget
state: absent
- name: curl
state: absent
→ Casks: instalowanie, aktualizowanie i usuwanie
:warning: Uwaga: Casks są obsługiwane tylko na systemie macOS. Zobacz ten wpis.
Dodawanie casks w prosty sposób:
homebrew_casks:
# Instalowanie listy casks
- firefox
- google-chrome
- alfred
- 1password
Dodawanie casks z zaawansowanymi opcjami:
homebrew_casks:
# Instalowanie cask firefox
- name: firefox
state: present
Usuwanie casks:
homebrew_casks:
# określ stan: absent, aby usunąć
- name: firefox
state: absent
- name: google-chrome
state: absent
📗 Przykładowy Playbook
→ dla maszyn macOS
---
- hosts: all
connection: local
# jest potrzebne, gdy działa przez SSH
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 # z homebrew/core
- yt-dlp # z yt-dlp/taps
homebrew_casks:
- firefox
- google-chrome
- font-fira-code-nerd-font # z homebrew/cask-fonts
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- elliotweiser.osx-command-line-tools # tylko na maszynach macOS
- wayofdev.homebrew
→ dla maszyn Linux
---
- hosts: all
connection: local
# jest potrzebne, gdy działa przez SSH
environment:
- PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"
vars:
homebrew_user: linuxbrew # FYI: można pominąć, jak jest automatycznie wykrywane, ale zalecany sposób instalacji Homebrew na Linux
homebrew_group: linuxbrew # to samo co homebrew_user
homebrew_taps:
- homebrew/core
- yt-dlp/taps
homebrew_packages:
- ssh-copy-id # z homebrew/core
- yt-dlp # z yt-dlp/taps
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- geerlingguy.git # tylko na maszynach linux, można pominąć, jeśli maszyna ma git
- wayofdev.homebrew
⚙️ Rozwój
Aby zainstalować zależności i rozpocząć rozwój, możesz sprawdzić zawartość naszego Makefile
Zainstaluj poetry używając poetry-bin oraz wszystkie zależności Python do programowania:
$ make install
Zainstaluj tylko zależności Python, zakładając, że masz już zainstalowane poetry:
$ make install-deps
Zainstaluj wszystkie hooki git:
$ make hooks
Wykonaj linter na wszystkich plikach roli:
$ make lint
🧪 Testowanie
Możesz sprawdzić Makefile
, aby uzyskać pełną listę poleceń do testowania zdalnego i lokalnego. W przypadku testowania lokalnego możesz użyć tych poleceń, aby przetestować całą rolę lub osobne zadania:
→ na localhost
:warning: Uwaga: Domyślnie wszystkie testy są uruchamiane na twojej lokalnej maszynie!
# uruchom wszystkie tagi ze scenariusza z ./tests/test.yml
$ make test
# lub test-tag bez żadnych parametrów
$ make test-tag
# uruchom sprawdzenie idempotencji
$ make test-idempotent
# uruchom zadania, które walidują plik konfiguracyjny i dokonują instalacji
$ export TASK_TAGS="brew-install,brew-update"
$ make test-tag
# uruchom przez zdefiniowane polecenie, które wykonuje tylko jeden tag
$ make test-install
$ make test-analytics
$ make test-update
$ make test-taps
$ make test-packages
$ make test-casks
# uruchamia testy molekul na localhost
$ poetry run molecule test --scenario-name default-macos-on-localhost -- -vvv
# lub za pomocą polecenia make
$ make m-local
# uruchamia molekulę z kierowcą docker
$ poetry run molecule test --scenario-name default -- -vvv
# lub za pomocą pliku make
$ make m-linux
→ przez SSH
# uruchamia scenariusze molekul na zdalnych maszynach przez SSH
# to będzie wymagać konfiguracji i ustawienia VM
$ poetry run molecule test --scenario-name default-macos-over-ssh -- -vvv
$ make m-remote
# tagi również mogą być przekazywane
$ export TASK_TAGS="brew-install,brew-update"
$ make m-remote
📦 Zależności
Instalacja zarządzana przez Makefile
, a wymagania są określone w requirements.yml
→ dla wszystkich
→ tylko macOS
→ tylko Linux
🧩 Kompatybilność
Ta rola została przetestowana na tych systemach:
system / kontener | tag |
---|---|
macos | monterey |
macos | big-sur |
ubuntu | jammy |
ubuntu | focal |
debian | bullseye |
debian | buster |
fedora | 36 |
fedora | 35 |
centos | 8 |
centos | 7 |
🤝 Licencja
🙆🏼♂️ Informacje o autorze
Ta rola została stworzona w 2022 przez lotyp / wayofdev.
🧱 Podziękowania i zasoby
Zainspirowane przez:
- role-homebrew-retry przez @niall-byrne
- rola homebrew stworzona przez @geerlingguy jako część ansible-collection-mac
- oficjalny skrypt instalacyjny Homebrew installer script
🫡 Współtwórcy
🤑 Sponsorzy
Rozwój i testowanie roli odbyło się na Parallels Desktop Pro Edition a licencja została dostarczona przez Parallels
Ansible role that uses loops and retries to install Homebrew apps and casks.
ansible-galaxy install wayofdev.homebrew