如何使用 ansible 安装特定版本的自制木桶公式?例如,vagrant 2.2.6 而最新可用的是 2.2.7。
4 回答
对于较新版本的 Homebrew,该cask
命令已被删除并导致错误Error: Unknown command: cask
。
Homebrew 3.1.12
我可以通过以下步骤安装特定版本:
按照https://stackoverflow.com/a/61552727/3302668中的步骤查找
.rb
您的包的文件使用以下命令在本地下载文件:(
curl -O -L https://raw.githubusercontent.com/Homebrew/homebrew-cask/<commit>/Casks/<package>.rb
注意:YMMV 取决于curl
版本)。前任:
curl -O -L https://raw.githubusercontent.com/Homebrew/homebrew-cask/d81815ea27a778a312fa0e2bbef0d78f9767f45b/Casks/vagrant.rb
brew install --cask <package>.rb
前任:
brew install --cask vagrant.rb
我按照这些步骤在 macOS 11.4 上将 vagrant 从 2.2.16 降级到 vagrant 2.2.15
编辑:此答案适用于brew
支持cask
子命令的旧版本,在新版本的brew
. 留在这里用于存档目的。
$ brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask/<git-hash>/Casks/<cask-ruby-file>.rb
/TL;博士
与 不同homebrew
的是,木桶没有使用@#.#.# 进行版本控制。相反,除了要运行的 cask 本身的文件名之外,您还必须找到确切的 git commit hash 来安装,并传入一个 URL。
例如,要安装 ChefDK:
- 知道你想安装 ChefDK 的确切版本(真的没有浏览)
- 前往包含所有木桶的 git 仓库:https ://github.com/Homebrew/homebrew-cask
- 使用搜索功能并找到要运行的 Ruby 文件(在本例中为
/Casks/chefdk.rb
)并输入版本。例如搜索字段中的“chefdk 2.5.3”
- 点击那个 PR,然后打开它。在这种情况下,PR 编号在上面的屏幕截图中是 44655。
- 在 PR 中找到最后一个提交,然后单击它(我们需要该提交的完整哈希,它仅在该提交消息中)。
- 现在,获取完整的提交哈希。为此,它是“be76032ad4fd5b03036ebe3628a6294354017906”
- 最后,我们可以构建 URL 并安装该特定版本。网址格式为:
https://raw.githubusercontent.com/Homebrew/homebrew-cask/<git-hash>/Casks/<cask-ruby-file>.rb
git hash
所以我们需要用and填补空白cast-ruby-file
:
brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask/be76032ad4fd5b03036ebe3628a6294354017906/Casks/chefdk.rb
这不好玩,但这是唯一的方法......
我找到了这个解决方案:
---
- hosts: all
tasks:
- name: Task 1 - Check vagrant 2.2.6 is installed
stat: path=/usr/local/Caskroom/vagrant/2.2.6
register: vagrant_installed
- name: Task 2 - Install vagrant 2.2.6 if not yet installed
block:
- name: Create temporary directory to download vagrant formula
tempfile:
state: directory
register: tempdir_vagrant_rb
- name: Download formula vagrant.rb version 2.2.6
get_url:
url: https://raw.githubusercontent.com/Homebrew/homebrew-cask/ae2a540ffee555491ccbb2cefa4296c76355ef9f/Casks/vagrant.rb
dest: "{{ tempdir_vagrant_rb.path }}/vagrant.rb"
- name: Install vagrant 2.2.6
command: brew cask install {{ tempdir_vagrant_rb.path }}/vagrant.rb
第一个任务通过转到默认的 cask 目录来检查是否已经安装了 vagrant 2.2.6。需要保持剧本幂等。
第二个任务使用公式版本 2.2.6 的直接原始 URL 安装 vagrant 2.2.6。为了找到 URL,我使用了这个分步文档。
1.创建一个可以存储具有特定版本公式的集合的水龙头。
brew tap-new [tap name]/local
2.提取特定版本的公式。
brew extract --force --version=[version] [formula name] [tap name]/local
3.如果上一步成功,可以直接安装。
brew install [formula name]@[version]
你可以使用我的工具。
bash <(curl -s -S -L https://raw.githubusercontent.com/2016321/Formula-Founder/main/install_specific_version_formula.sh) [formula name] [version] [specific tap, defaut is homebrew/cask]
4.但有时你无法提取你想要的公式。你应该使用 git。实际上,tap 是一个 git 存储库。
4_1.找到正确的水龙头有你想要的公式。比如我想安装2.18.0版本的xcodegen。Xcodegen 在 homebrew-core 中。
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
4_2.检查关于xcodegen的正确哈希。
git log xcodegen
git checkout 421359f4b3d6e8048e8660396d2fc6afb8557815
4_3.安装2.18.0版本的xcodegen。当 brew 自动更新时,您应该停止(control + c)。
brew install xcodegen
4_4.你不需要在brew的tap中签出master,因为下次安装新公式时,如果你没有在环境变量中设置[HOMEBREW_NO_AUTO_UPDATE=true],brew会自动更新。