wayofdev.homebrew


Ansible 角色:Homebrew
在 macOS 或 Linux 上安装 Homebrew,并配置源、软件包和 cask。该包使用重试循环处理连接问题。
如果您喜欢或使用此角色,请考虑给它点赞。谢谢!
🗂 目录
📑 要求
- 最新版本的 Ansible。在维护/开发期间,我们会坚持使用 Ansible 版本,并在可用时使用新功能(并更新
meta/main.yml
以反映最低版本)。 - 兼容操作系统。请参见兼容性表。
- 在运行剧本的主机上需要安装
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 install
任务失败:
# 如果安装软件包 / tap / cask 失败,重试多少次?
# 这可能在网络出现问题时发生。
homebrew_retries: 32
# 每次重试之间的延迟。
homebrew_delay: 3
设置为 true 以在安装或更新任何新软件后清除 Homebrew 缓存。
homebrew_clear_cache: false
通过 cask
安装的应用程序应安装的目录。
homebrew_cask_appdir: /Applications
如果设置为 true,则在检查已安装的 cask 是否有更新的版本时,将 --greedy
传递给 brew cask outdated。
homebrew_cask_greedy_mode: false
关闭默认收集的 Homebrew 分析。
homebrew_collect_analytics: false
→ 添加源
添加(tapping)源
homebrew_taps:
- homebrew/core
- homebrew/cask-versions
- homebrew/cask-fonts
添加(tapping)源,更详细地定义 URL 和状态:
homebrew_taps:
# 仅添加
- name: homebrew/core
# 从自定义仓库添加
- name: denji/nginx
url: https://github.com/denji/homebrew-nginx
# 带有定义自定义状态的添加
- name: homebrew/cask-fonts
state: present
删除 taps:
homebrew_taps:
# 定义状态:absent 删除 taps
- 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,并使用默认路径安装公式 wget
- name: wget
state: present
update_homebrew: true
# 首先更新 homebrew,并使用默认路径将公式 curl 升级到最新版本
- name: curl
state: latest
update_homebrew: true
删除软件包:
homebrew_packages:
- name: wget
state: absent
- name: curl
state: absent
→ Cask:安装、更新和删除
:warning: 注意:Cask 仅在 macOS 上支持。请参见 这篇文章。
简单方式添加 cask:
homebrew_casks:
# 安装 cask 列表
- firefox
- google-chrome
- alfred
- 1password
带有高级选项的添加 cask:
homebrew_casks:
# 安装 firefox cask
- name: firefox
state: present
删除 cask:
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
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 hooks:
$ make hooks
检查所有角色文件的语法:
$ make lint
🧪 测试
您可以查看 Makefile
以获得远程和本地测试的完整命令列表。对于本地测试,您可以使用以下命令测试整个角色或单个任务:
→ 在本地主机上
: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
# 在本地主机上运行 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 file
$ make m-linux
→ 通过 SSH
# 通过 SSH 在远程机器上运行 molecule 场景
# 这将需要 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 |
🤝 许可证
🙆🏼♂️ 作者信息
该角色由 lotyp / wayofdev 于 2022 年创建。
🧱 致谢和资源
灵感来源于:
- role-homebrew-retry 由 @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