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。详细教程

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

brew tap <user>/<repo> <URL>
  • 此命令将在 URL 处克隆存储库。URL 不一定是 GitHub,也不一定是 HTTP。只要是 Git 可以处理的任何位置和任何协议都可以。

注意: 如果 tap 仓库不在 GitHub 上,需要运行 brew tap --force-auto-update <user/repo> 才能启用自动更新。

brew tap # 查看已安装的 Taps。注意:无参数
  • 此命令会列出所有当前已添加的 Taps 仓库。

移除 Tap

untap [--force] tap [...]

移除已添加的 tap 存储库。详细教程

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 的简要统计信息。详细教程

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 里的软件包。

    brew install vim                # 从 homebrew/core 安装 vim
    brew install username/repo/vim  # 从自定义存储库安装 vim
    

其他管理 Tap 的用例:

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 目录。详细教程

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

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 存储库进行编辑。详细教程

brew edit ybox # 打开 ybox.rb 进行编辑

对于每个要添加的软件包,你需要编写一个相应的 Formula。Formula 是一个 Ruby 脚本,用于描述如何安装、配置和卸载软件包。参考 完整的 API 文档

部分语法要点:

  • desc: 用于提供软件包的简短描述。
  • homepage: 指定软件包的官方网站。
  • url: 提供软件包的下载链接。
  • sha256: 是下载文件的校验和,确保文件未被篡改。
  • depends_on: 声明软件包的依赖关系。
  • install: 方法定义了安装过程。
  • test: 方法是可选的,用于验证安装后的软件包功能。

编写 Formula:

Formula 文件需要遵循特定的 Ruby 语法和结构:

# 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,并跳过样式检查。如果发现任何错误,将以非零状态退出。详细教程

brew audit --strict <formula>  # 检查你的 Formula 是否符合 Homebrew 的规范和要求

安装测试

在本地环境中使用以下命令安装测试你的 Formula 是否能正确安装软件包。确保所有依赖项都已正确解决。

brew install <formula>
brew install <user>/<repo>/<formula> # 用完整路径,避免冲突

如果遇到任何问题,可以使用 --debug 参数查看详细信息。例如:brew install --debug <formula>

在我们的案例中,需要执行 brew install liam-i/tap/ybox 来安装软件包。

功能测试

安装完成后,测试软件包的功能是否正常工作。这取决于你的软件包具体提供了什么功能。

卸载测试

功能测试完毕后,使用以下命令来卸载你的软件包。确保卸载过程没有遗留文件或配置。

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 软件环境

相关链接

访问博址 liam-i.github.io 获取更佳阅读体验和最新内容。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容