Homebrew Tap:酿造你的个性化 macOS 软件库
对于 macOS 用户来说,Homebrew 无疑是一个强大的软件包管理工具,它极大简化了软件的安装、更新和卸载。然而,有时候我们仍然会发现一些特定的、小众的或者专业的软件并不在其中。
这时,Homebrew Tap 就成了救星,它允许我们添加和管理第三方仓库,也可以扩展和定制自己的软件库,从而满足更加个性化的需求。
什么是 Homebrew Tap?
Homebrew Tap 是 Homebrew 的扩展,让用户能添加第三方软件仓库。通过 Tap,能安装和管理 Homebrew 里没有的软件包。每个 Tap 就像独立仓库,提供更多额外的软件包供用户选择。
如何使用 Homebrew Tap?
使用 Homebrew Tap 很简单。先找到想添加的 Tap (通常是 GitHub 仓库),然后按命令操作即可。
添加 Tap
tap
[options
] [user
/
repo
] [URL
]
添加一个 tap 仓库。如果未指定参数,则列出所有已安装的 taps。详细教程
1
brew tap <user>/<repo> # 不加 URL 默认克隆 github 存储库
- 此命令将
https://github.com/<user>/homebrew-<repo>
存储库克隆到$(brew --repository)/Library/Taps
。 - 之后,
brew
将能够使用这个 tap 里的软件包(formulae
),你可以使用 brew [un]install 安装和卸载它们,并且当你运行brew update
时formulae
会自动更新。
注意:Tap 存储库命名必须用 “homebrew-” 前缀。例如:homebrew-something。但是,在命令
brew tap
中使用时可以省略 “homebrew-” 前缀。例如用brew tap homebrew/cask
代替brew tap homebrew/homebrew-cask
。
1
brew tap <user>/<repo> <URL>
- 此命令将在 URL 处克隆存储库。URL 不一定是 GitHub,也不一定是 HTTP。只要是 Git 可以处理的任何位置和任何协议都可以。
注意:如果 tap 仓库不在 GitHub 上,需要运行
brew tap --force-auto-update <user/repo>
才能启用自动更新。
1
brew tap # 查看已安装的 Taps。注意:无参数
- 此命令会列出所有当前已添加的 Taps 仓库。
移除 Tap
untap
[--force
]tap
[…]
移除已添加的 tap 存储库。详细教程
1
brew untap <user>/<repo> [<user>/<repo> <user>/<repo> ...]
- 此命令将从 Homebrew 中移除指定的 Taps。
untap
可以一次移除多个 Taps。
注意:移除 Tap 并不会卸载通过该 Tap 安装的软件包 (formulae),但之后将无法从该 Tap 接收软件包更新。
查看 Tap 信息
tap-info
[--installed
] [--json
] [tap
…]
显示一个或多个 tap
的详细信息。如果未给定 tap
名称,则显示所有已安装 tap
的简要统计信息。详细教程
1
brew tap-info liam-i/tap # 查看 liam-i/tap 的详细信息
管理 Tap 中的软件包
添加完 Tap 之后,你就可以像使用 Homebrew 的 homebrew/core 规范存储库中的软件包一样,使用 tap 里的软件包(formulae
)。
你可以使用 brew [un]install
安装和卸载它们,并且当你运行 brew update
时 formulae
会自动更新。
注意:
当我们每次只用
brew install <formula>
命令安装软件包时,brew
都会按以下顺序搜索来选择要使用的formula
:
- core formulae
- other taps
所以:
- 如果你需要从指定的 tap 安装
formula
,则可以使用全路径名:<user>/<repo>/<formula>
。如果第三方 tap 包含的
formula
和 homebrew/core 规范存储库里的重名了,也需要使用全路径名<user>/<repo>/<formula>
来安装 tap 里的软件包。
1 2 brew install vim # 从 homebrew/core 安装 vim brew install username/repo/vim # 从自定义存储库安装 vim
其他管理 Tap 的用例:
1
2
3
4
5
6
7
8
brew info <user>/<repo>/<formula> # 显示指定 Tap 中某个软件包的信息,包括版本、依赖等
brew search <user>/<repo>/<formula> # 搜索该 Tap 中的软件包
brew install <user>/<repo>/<formula> # 安装 Tap 中的软件包
brew uninstall <user>/<repo>/<formula> # 卸载 Tap 中的软件包
brew upgrade <user>/<repo>/<formula> # 升级 Tap 中的软件包(或使用 brew upgrade 更新所有可升级的软件包)
brew upgrade # 更新所有可升级的软件包
brew update # 更新所有可升级的软件包
综上所述,如果你想让自定义 tap 的 formulae
更易于安装使用,建议你为自定义 formulae
指定名称时,尽量避免与 homebrew/core 里的重复。
酿造你的个性化软件库
通过 Homebrew Tap,你可以轻松地酿造属于自己的个性化软件库。以下是具体步骤和归纳:
创建 Tap
tap-new
[options
]user
/
repo
生成一个新的 tap 仓库模板,存放到 $(brew --repository)/Library/Taps
目录。详细教程
1
2
brew tap # 查看 tap 仓库列表
brew tap-new liam-i/tap # 生成一个 liam-i/tap 仓库模板文件(如果不想要 git 仓库,可以加上 --no-git 参数)
- 如果
brew tap
查看本地没有需要的 Tap 仓库,且远程代码平台也没有,则可以使用brew tap-new
生成一个。 - 如果本地没有,但是远程代码平台有,则可以 添加-tap。
创建 Formula
要在 Homebrew Tap 中添加一个软件包,首先需要为该软件包创建一个 Formula。Formula 本质上是一个 Ruby 脚本,用于描述如何安装软件包。以下是具体步骤:
create
[options
]URL
生成一个 formula
,或者使用 --cask
为 URL
处的可下载文件生成一个 cask
,然后在编辑器中将其打开。Homebrew 将尝试自动生成 formula
的名称和版本。详细教程,完整的 API。
1
brew create --tap liam-i/tap https://github.com/liam-i/ybox/archive/refs/tags/20240404.tar.gz
--tap
: 在给定的<user>/<repo>
仓库下生成formula
文件。这个示例中在liam-i/tap
下生成了一个名为ybox.rb
的formula
文件。后面的 URL 是指向我们需要发布的软件包,这个软件包必须必须提前准备好。- 命令执行成功会有信息提示我们。比如存放路径
/opt/homebrew/Library/Taps/liam-i/homebrew-tap/ybox.rb
。如果你是 macOS Intel 电脑,存放路径的前缀将会是/usr/local
。 - 命令执行成功后,将自动在编辑器 (例如 vscode) 里打开
ybox.rb
,以方便你可以编辑它。
编写 Formula
edit
[options
] [formula
|cask
|tap
…]
在 EDITOR
或 HOMEBREW_EDITOR
设置的编辑器 (例如 vscode) 中打开 formula
, cask
或 tap
,或者如果没有给定参数则打开 Homebrew 存储库进行编辑。详细教程
1
brew edit ybox # 打开 ybox.rb 进行编辑
对于每个要添加的软件包,你需要编写一个相应的 Formula。Formula 是一个 Ruby 脚本,用于描述如何安装、配置和卸载软件包。参考 完整的 API 文档。
部分语法要点:
desc
: 用于提供软件包的简短描述。homepage
: 指定软件包的官方网站。url
: 提供软件包的下载链接。sha256
: 是下载文件的校验和,确保文件未被篡改。depends_on
: 声明软件包的依赖关系。install
: 方法定义了安装过程。test
: 方法是可选的,用于验证安装后的软件包功能。
编写 Formula:
Formula 文件需要遵循特定的 Ruby 语法和结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Documentation: https://docs.brew.sh/Formula-Cookbook
# https://rubydoc.brew.sh/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!
class Ybox < Formula
desc "Missing toolchain for mobile development"
homepage "https://github.com/liam-i/ybox"
url "https://github.com/liam-i/ybox/archive/refs/tags/20240404.tar.gz"
sha256 "4110b9414ea161f1c274c06389484f33168052590ead1fecf4f0f4b4468eaf10"
license "Copyright © 2016 - 2024 Liam's Li. All Rights Reserved."
version "0.1.6"
# 列出软件包的依赖项
# depends_on "cmake" => :build
def install
# 这里写安装过程的命令,例如将可执行文件复制到 bin 目录。(因为这里下载的是个二进制包,所以直接填上 ybox 即可)
bin.install "ybox"
# system "cmake", "-S", ".", "-B", "build", *std_cmake_args
end
# 可选的测试块,用于在安装后验证软件包的功能
test do
system "#{bin}/ybox", "--version" # 举例的命令,应根据实际情况修改
end
end
测试 Formula
语法检查 audit
audit
[options
] [formula
|cask
…]
检查 formula
是否违反 Homebrew 的编码风格。在提交 formula
和 cask
之前,应该运行此命令。如果没有指定 formula
|cask
,检查本地可用的所有 formula
和 cask
,并跳过样式检查。如果发现任何错误,将以非零状态退出。详细教程
1
brew audit --strict <formula> # 检查你的 Formula 是否符合 Homebrew 的规范和要求
安装测试
在本地环境中使用以下命令安装测试你的 Formula 是否能正确安装软件包。确保所有依赖项都已正确解决。
1
2
brew install <formula>
brew install <user>/<repo>/<formula> # 用完整路径,避免冲突
如果遇到任何问题,可以使用 --debug
参数查看详细信息。例如:brew install --debug <formula>
。
在我们的案例中,需要执行 brew install liam-i/tap/ybox
来安装软件包。
功能测试
安装完成后,测试软件包的功能是否正常工作。这取决于你的软件包具体提供了什么功能。
卸载测试
功能测试完毕后,使用以下命令来卸载你的软件包。确保卸载过程没有遗留文件或配置。
1
2
brew uninstall <formula>
brew uninstall <user>/<repo>/<formula> # 用完整路径,避免冲突
发布 Tap
当你对你的 Formula 感到满意,并且所有测试都通过后,你可以考虑将你的 Tap 发布到 GitHub 或其他代码托管平台上,以便其他人也可以使用你的软件包。
- 我们在 创建-tap 阶段已经生成好了 Tap 的 Git 存储库。截止 测试-formula 完成,我们也准备好了
formulae
。 - 接着,我们只需要把它与代码平台关联 (参考: 远程仓库 和 多人协作),并推送到平台服务即可。
- 代码平台可以是 GitHub、GitLab 或者是 Gitee 等等。
接着你自己或者其他人就可以远程添加我们的 Tap 仓库,并安装 Tap 里的 formulae
进行使用了。点击这里可以查看 如何使用 Homebrew Tap?
维护 Tap
随着时间的推移,你可以更新和扩展你的 Tap,添加更多的软件包或更新现有的软件包。
- Tap 只是一个 Git 存储库,因此除了提交和推送更改之外,你在进行修改时无需执行任何特定操作。
- 安装 Tap 后,每次用户运行
brew update
时,Homebrew 都会对其进行更新。当用户运行brew upgrade
时,过时的formulae
将被升级,就像Homebrew/Core
里的formulae
一样。
发布 Tap 仓库到 Homebrew/Core
将你的 Tap 添加到 homebrew/core 仓库通常意味着你的软件包将被更多用户所使用。然而,这通常是一个复杂且需要社区认可的过程。
如果你有这个需求请查看 Formula Cookbook 和 Adding Software to Homebrew。
注意:添加到 Homebrew/Core 需要满足一定的质量标准,并且可能需要与其他维护者进行多次沟通。
优势与特点
- 扩展性:通过 Taps,用户可以访问到更多的软件包资源。
- 灵活性:用户可以根据自己的需求自由地添加、移除和管理 Taps。
- 社区支持:开源社区和许多项目都通过维护自己的 Taps 来分发软件,便于用户安装。
注意事项
- 安全性:在添加 Tap 之前,请确保来源可信,避免添加不明来源的 Tap 以防止潜在的安全风险。
- 依赖管理:在安装 Tap 中的软件包时,请注意软件包之间的依赖关系,确保系统环境的稳定性。
- 更新策略:定期检查并更新 Taps 和其中的软件包,以保持系统的最新状态。
结语
Homebrew Tap 让 macOS 用户能按需定制自己的软件库。学会用 Homebrew Tap,能更高效地管理软件环境,为各种用途提供便利。所以,不妨试试 Homebrew Tap,酿造个性化的 macOS 软件库吧!
如果想了解如何使用 Homebrew 轻松安装和管理 UNIX 工具和软件包,请查阅 Homebrew 酿酒术:精心调配你的 macOS 软件环境。
相关链接
- Taps (Third-Party Repositories)
- Can I edit formulae myself?
- How to Create and Maintain a Tap
- The complete API
- Homebrew 酿酒术:精心调配你的 macOS 软件环境
注意:
截止本文发布时 (2024-04-04),Homebrew 版本为 4.2.16,本文所有案例都实践在此版本下。