文章

Homebrew Tap:酿造你的个性化 macOS 软件库

Brew Logo

对于 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 updateformulae 会自动更新。

注意: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 updateformulae 会自动更新。

注意:

当我们每次只用 brew install <formula> 命令安装软件包时,brew 都会按以下顺序搜索来选择要使用的 formula

  • core formulae
  • other taps

所以:

  • 如果你需要从指定的 tap 安装 formula,则可以使用全路径名:<user>/<repo>/<formula>
  • 如果第三方 tap 包含的 formulahomebrew/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 里的重复。

Taps (Third-Party Repositories)

酿造你的个性化软件库

通过 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,或者使用 --caskURL 处的可下载文件生成一个 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.rbformula 文件。后面的 URL 是指向我们需要发布的软件包,这个软件包必须必须提前准备好
  • 命令执行成功会有信息提示我们。比如存放路径 /opt/homebrew/Library/Taps/liam-i/homebrew-tap/ybox.rb。如果你是 macOS Intel 电脑,存放路径的前缀将会是 /usr/local
  • 命令执行成功后,将自动在编辑器 (例如 vscode) 里打开 ybox.rb,以方便你可以编辑它。

编写 Formula

edit [options] [formula|cask|tap …]

EDITORHOMEBREW_EDITOR 设置的编辑器 (例如 vscode) 中打开 formula, casktap,或者如果没有给定参数则打开 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 的编码风格。在提交 formulacask 之前,应该运行此命令。如果没有指定 formula|cask,检查本地可用的所有 formulacask,并跳过样式检查。如果发现任何错误,将以非零状态退出。详细教程

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 或其他代码托管平台上,以便其他人也可以使用你的软件包。

  1. 我们在 创建-tap 阶段已经生成好了 Tap 的 Git 存储库。截止 测试-formula 完成,我们也准备好了 formulae
  2. 接着,我们只需要把它与代码平台关联 (参考: 远程仓库多人协作),并推送到平台服务即可。
  3. 代码平台可以是 GitHubGitLab 或者是 Gitee 等等。

接着你自己或者其他人就可以远程添加我们的 Tap 仓库,并安装 Tap 里的 formulae 进行使用了。点击这里可以查看 如何使用 Homebrew Tap?

维护 Tap

随着时间的推移,你可以更新和扩展你的 Tap,添加更多的软件包或更新现有的软件包。

  1. Tap 只是一个 Git 存储库,因此除了提交和推送更改之外,你在进行修改时无需执行任何特定操作。
  2. 安装 Tap 后,每次用户运行 brew update 时,Homebrew 都会对其进行更新。当用户运行 brew upgrade 时,过时的 formulae 将被升级,就像 Homebrew/Core 里的 formulae 一样。

发布 Tap 仓库到 Homebrew/Core

将你的 Tap 添加到 homebrew/core 仓库通常意味着你的软件包将被更多用户所使用。然而,这通常是一个复杂且需要社区认可的过程。

如果你有这个需求请查看 Formula CookbookAdding Software to Homebrew

注意:添加到 Homebrew/Core 需要满足一定的质量标准,并且可能需要与其他维护者进行多次沟通。

优势与特点

  • 扩展性:通过 Taps,用户可以访问到更多的软件包资源。
  • 灵活性:用户可以根据自己的需求自由地添加、移除和管理 Taps。
  • 社区支持:开源社区和许多项目都通过维护自己的 Taps 来分发软件,便于用户安装。

注意事项

  • 安全性:在添加 Tap 之前,请确保来源可信,避免添加不明来源的 Tap 以防止潜在的安全风险。
  • 依赖管理:在安装 Tap 中的软件包时,请注意软件包之间的依赖关系,确保系统环境的稳定性。
  • 更新策略:定期检查并更新 Taps 和其中的软件包,以保持系统的最新状态。

结语

Homebrew Tap 让 macOS 用户能按需定制自己的软件库。学会用 Homebrew Tap,能更高效地管理软件环境,为各种用途提供便利。所以,不妨试试 Homebrew Tap,酿造个性化的 macOS 软件库吧!

如果想了解如何使用 Homebrew 轻松安装和管理 UNIX 工具和软件包,请查阅 Homebrew 酿酒术:精心调配你的 macOS 软件环境

相关链接

注意:

截止本文发布时 (2024-04-04),Homebrew 版本为 4.2.16,本文所有案例都实践在此版本下。

本文由作者按照 CC BY 4.0 进行授权

© Liam. 保留部分权利。

本博客由 Jekyll 生成,使用 Chirpy 作为主题