wayofdev.homebrew


Ansibleロール: Homebrew
macOSまたはLinuxにHomebrewをインストールし、タップ、パッケージ、カスクを設定します。パッケージは接続問題に対処するために再試行ループを使用します。
このロールが好きなら/使っているなら、スターを付けることを検討してください。ありがとうございます!
🗂 目次
📑 要件
- 最近のAnsibleバージョンが必要です。メンテナンス/開発中はAnsibleのバージョンに従い、新機能が利用可能な場合はそれを使用します(そして
meta/main.yml
を最小バージョンに更新します)。 - 対応するOSが必要です。詳細は互換性テーブルを参照してください。
jmespath
ライブラリは、プレイブックを実行しているホストにインストールされている必要があります(json_query
フィルターに必要)。- ロールは異なるオペレーティングシステム上のサードパーティロールに依存しています。
requirements.yml
および依存関係セクションを参照してください。
🔧 ロール変数
利用可能な変数は以下に示されています。例として値も含まれています(defaults/main.yml
を参照してください)。追加の変数はvars/main.yml
に保存されています。
→ 構造
HomebrewコアのGitHubリポジトリ変数。デフォルトでは、ロールは公式のHomebrewリポジトリから最新のリリースを取得します。homebrew_repository
をフォークに切り替え、master
ブランチを使用し、最新リリースの自動検出をオフにしたい場合は、homebrew_repository_use_master
変数をtrue
に設定します。
# どのリポジトリからHomebrewをインストールしますか?
homebrew_repository: https://github.com/Homebrew/brew
# リリース自動検出の代わりにmasterブランチを使用したい場合はtrueに設定します。
# またはhomebrew_repositoryで指定されたカスタムフォークを使用する場合。
homebrew_repository_use_master: false
true
に設定すると、Homebrew自身を更新し、すべてのHomebrewパッケージをアップグレードします。
# すべてのパッケージをアップグレードするタスクを実行
homebrew_upgrade_all: true
パッケージ/タップ/カスクのインストールタスクが失敗した場合の再試行回数と待機時間を制御する変数:
# パッケージ/タップ/カスクのインストールが失敗した場合、何回再試行しますか?
# これはネットワークの問題があるときに発生する可能性があります。
homebrew_retries: 32
# 各再試行間の遅延。
homebrew_delay: 3
新しいソフトウェアがインストールまたは更新された後にHomebrewキャッシュを削除する場合は、true
に設定します。
homebrew_clear_cache: false
カスクを介してインストールされたアプリケーションのディレクトリ。
homebrew_cask_appdir: /Applications
true
に設定すると、インストールされているカスクに新しいバージョンが利用可能かどうかを確認するとき、--greedy
をbrew cask outdatedに渡します。
homebrew_cask_greedy_mode: false
デフォルトで収集されるHomebrewの分析情報をオフにします。
homebrew_collect_analytics: false
→ リポジトリをタップする
リポジトリを追加(タップする)
homebrew_taps:
- homebrew/core
- homebrew/cask-versions
- homebrew/cask-fonts
リポジトリを詳しく追加(定義したURLと状態):
homebrew_taps:
# ただタップする
- name: homebrew/core
# カスタムリポジトリからタップする
- name: denji/nginx
url: https://github.com/denji/homebrew-nginx
# 定義されたカスタム状態でタップする
- name: homebrew/cask-fonts
state: present
タップを削除する:
homebrew_taps:
# 状態を定義: absentでタップを削除
- name: homebrew/cask-fonts
state: absent
- name: denji/nginx
state: absent
→ パッケージ: インストール、更新、削除
パッケージをシンプルに追加:
homebrew_packages:
- wget
- curl
- nano
パッケージを高度に追加(状態、パス、その他のオプションを定義):
homebrew_packages:
# カスタムパスにインストール
- name: wget
state: present
path: /opt/custom/path/bin
パッケージを更新:
homebrew_packages:
# まずHomebrewを更新し、デフォルトパスの'brew'でwgetをインストール
- name: wget
state: present
update_homebrew: true
# まずHomebrewを更新し、デフォルトパスの'brew'でcurlの最新の利用可能な_formula_をアップグレード
- name: curl
state: latest
update_homebrew: true
パッケージを削除:
homebrew_packages:
- name: wget
state: absent
- name: curl
state: absent
→ カスク: インストール、更新、削除
:warning: 注意: カスクはmacOSのみに対応しています。この記事を参照してください。
カスクをシンプルに追加:
homebrew_casks:
# カスクのインストールリスト
- firefox
- google-chrome
- alfred
- 1password
高度なオプションでカスクを追加:
homebrew_casks:
# firefoxカスクのインストール
- name: firefox
state: present
カスクを削除:
homebrew_casks:
# 状態: absentで削除を定義
- name: firefox
state: absent
- name: google-chrome
state: absent
📗 サンプルプレイブック
→ macOSマシン用
---
- hosts: all
connection: local
# 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 # homebrew/coreから
- yt-dlp # yt-dlp/tapsから
homebrew_casks:
- firefox
- google-chrome
- font-fira-code-nerd-font # homebrew/cask-fontsから
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- elliotweiser.osx-command-line-tools # macOSマシン専用
- wayofdev.homebrew
→ Linuxマシン用
---
- hosts: all
connection: local
# SSH経由で実行する場合は必要です
environment:
- PATH: "{{ homebrew_search_paths | join(':') }}:{{ ansible_env.PATH }}"
vars:
homebrew_user: linuxbrew # FYI: スキップ可能ですが、linuxbrewユーザーがHomebrewをLinuxにインストールする推奨手段です
homebrew_group: linuxbrew # homebrew_userと同じ
homebrew_taps:
- homebrew/core
- yt-dlp/taps
homebrew_packages:
- ssh-copy-id # homebrew/coreから
- yt-dlp # yt-dlp/tapsから
homebrew_retries: 12
homebrew_delay: 3
homebrew_clear_cache: false
homebrew_collect_analytics: false
roles:
- geerlingguy.git # Linuxマシン専用で、マシンにgitがあればスキップ可能
- wayofdev.homebrew
⚙️ 開発
依存関係をインストールし、開発を開始するには、Makefile
の内容を確認してください。
インストール poetryをpoetry-binを使用して実行し、すべての開発用Python依存関係:
$ make install
指定されたPython依存関係のみをインストールします。すでにpoetryがあると仮定します。
$ make install-deps
すべてのgitフックをインストール:
$ make hooks
ロールファイルのリント:
$ make lint
🧪 テスト
リモートおよびローカルテストの全コマンドのリストはMakefile
で確認できます。ローカルテストでは、ロール全体または個別のタスクをテストするこれらのコマンドを使用できます:
→ localhostで
:warning: 注意: デフォルトでは、すべてのテストはローカルマシンに対して実行されます!
# ./tests/test.ymlからのシナリオで全タグを実行
$ make test
# または、パラメータなしでtest-tagを実行
$ make test-tag
# 再現性チェックを実行
$ make test-idempotent
# 設定ファイルを検証し、インストールを行うタスクを実行
$ export TASK_TAGS="brew-install,brew-update"
$ make test-tag
# 一つのタグだけを実行する事前定義されているコマンドを実行
$ make test-install
$ make test-analytics
$ make test-update
$ make test-taps
$ make test-packages
$ make test-casks
# localhostでmoleculeテストを実行
$ poetry run molecule test --scenario-name default-macos-on-localhost -- -vvv
# または、makeコマンドで
$ make m-local
# dockerドライバーでmoleculeを実行
$ poetry run molecule test --scenario-name default -- -vvv
# またはmakeファイルで
$ make m-linux
→ SSH経由で
# リモートマシンでのmoleculeシナリオをSSH経由で実行します
# この設定にはVMのセットアップと構成が必要です
$ poetry run molecule test --scenario-name default-macos-over-ssh -- -vvv
$ make m-remote
# タグも渡すことができます
$ export TASK_TAGS="brew-install,brew-update"
$ make m-remote
📦 依存関係
インストールはMakefile
によって処理され、依存関係はrequirements.yml
に定義されています。
→ 全てのための
→ macOSのための
→ Linuxのための
🧩 互換性
このロールは以下のシステムでテストされました:
システム / コンテナ | タグ |
---|---|
macos | monterey |
macos | big-sur |
ubuntu | jammy |
ubuntu | focal |
debian | bullseye |
debian | buster |
fedora | 36 |
fedora | 35 |
centos | 8 |
centos | 7 |
🤝 ライセンス
🙆🏼♂️ 著者情報
このロールは2022年にlotyp / wayofdevによって作成されました。
🧱 クレジットとリソース
インスパイアされたもの:
- role-homebrew-retry by @niall-byrne
- geerlingguyによって作成されたhomebrewロール、ansible-collection-macの一部
- 公式Homebrewのインストーラースクリプト
🫡 貢献者
🤑 スポンサー
ロールの開発とテストはParallels Desktop Pro Edition上で行われ、ライセンスはParallelsによって提供されました。
Ansible role that uses loops and retries to install Homebrew apps and casks.
ansible-galaxy install wayofdev.homebrew