【发布时间】:2020-03-13 10:37:18
【问题描述】:
如何使用 ansible 安装特定版本的自制木桶公式?例如,vagrant 2.2.6 而最新可用的是 2.2.7。
【问题讨论】:
标签: ansible versioning homebrew-cask
如何使用 ansible 安装特定版本的自制木桶公式?例如,vagrant 2.2.6 而最新可用的是 2.2.7。
【问题讨论】:
标签: ansible versioning homebrew-cask
对于较新版本的 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
【讨论】:
编辑:此答案适用于支持 cask 子命令的旧版本 brew,在较新版本的 brew 中删除之前。留在这里用于存档目的。
$ brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask/<git-hash>/Casks/<cask-ruby-file>.rb
/TL;DR
与homebrew 不同,木桶不使用@#.#.# 进行版本控制。相反,除了要运行的 cask 本身的文件名之外,您还必须找到确切的 git commit hash 来安装,并传入一个 URL。
例如,要安装 ChefDK:
/Casks/chefdk.rb)并输入版本。例如。搜索字段中的“chefdk 2.5.3”https://raw.githubusercontent.com/Homebrew/homebrew-cask/<git-hash>/Casks/<cask-ruby-file>.rb
所以我们需要用git hash和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 是否已经安装。需要保持 playbook 幂等。
第二个任务使用公式版本 2.2.6 的直接原始 URL 安装 vagrant 2.2.6。为了找到 URL,我使用了this step-by-step 文档。
【讨论】:
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中checkout master,因为如果你下次安装新公式时没有在环境变量中设置[HOMEBREW_NO_AUTO_UPDATE=true],brew会自动更新。
【讨论】: