如何使用ansible安装特定版本的brew cask formula?

How to install specific version of brew cask formula with ansible?

如何使用 ansible 安装特定版本的 homebrew cask formula?例如,vagrant 2.2.6 而最新可用的是 2.2.7.

我找到了这个解决方案:

---
- 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。需要保持剧本幂等。

第二个任务使用 direct raw URL 安装 vagrant 2.2.6 到公式版本 2.2.6。为了找到 URL,我使用了 this step-by-step 文档。

编辑:此答案适用于支持 cask 子命令的 brew 的旧版本,在新版本的 brew 中被删除之前。留在此处以供存档。


$ brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask/<git-hash>/Casks/<cask-ruby-file>.rb

/TL;DR

homebrew不同,casks 没有使用@#.#.# 进行版本控制。相反,除了 cask 本身的文件名 运行 之外,您还必须找到要安装的确切 git 提交哈希,并传入 URL.

例如,安装ChefDK:

  • 知道你要安装的 ChefDK 的确切版本(真的没有浏览)
  • 前往存放所有 Casks 的 git 仓库:https://github.com/Homebrew/homebrew-cask
  • 使用搜索功能找到 Ruby 文件到 运行(在本例中为 /Casks/chefdk.rb)并键入一个版本。例如。搜索字段中的“chefdk 2.5.3”
  • 单击该 PR,然后将其打开。在这种情况下,上面屏幕截图中的 PR 编号为 44655。
  • 找到 PR 中的最后一个提交,然后单击它(我们需要该提交的完整哈希值,它仅在该提交消息中)。
  • 现在,获取完整的提交哈希。为此,它是“be76032ad4fd5b03036ebe3628a6294354017906”
  • 最后,我们可以构建 URL 并安装该特定版本。 url 的格式为:
https://raw.githubusercontent.com/Homebrew/homebrew-cask/<git-hash>/Casks/<cask-ruby-file>.rb

所以我们需要用 git hashcast-ruby-file 来填补空白:

brew cask install https://raw.githubusercontent.com/Homebrew/homebrew-cask/be76032ad4fd5b03036ebe3628a6294354017906/Casks/chefdk.rb

这并不好玩,但这是唯一的方法...

对于较新版本的 Homebrew,cask 命令已被删除并导致错误 Error: Unknown command: cask

我能够通过以下步骤在 Homebrew 3.1.12 上安装特定版本:

  1. 按照 中的步骤为您的包找到 .rb 文件

  2. 在本地下载文件: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

  3. brew install --cask <package>.rb

    例如:brew install --cask vagrant.rb

我按照这些步骤在 macOS 11.4 上将 vagrant 从 2.2.16 降级到 vagrant 2.2.15

1.To创建一个可以存储特定版本公式集合的tap

brew tap-new [tap name]/local

2.To提取特定版本的公式

brew extract --force --version=[version] [formula name] [tap name]/local

3.If上一步成功,可以直接安装

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.But 有时您无法提取所需的公式。你应该使用 git。实际上,tap 是一个 git 存储库。

4_1.To 找到了正确的水龙头,其中包含您想要的公式。比如我要安装2.18.0版本的xcodegen。 Xcodegen 在 homebrew-core 中。

cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula

4_2.To 检查关于 xcodegen 的正确散列。

git log xcodegen

git checkout 421359f4b3d6e8048e8660396d2fc6afb8557815

4_3.To 安装 2.18.0 版本的 xcodegen。当 brew 自动更新时,你应该停止(control + c)。

brew install xcodegen

4_4.You 不需要在 brew 的 tap 中检出 master,因为如果你在接下来安装新公式时没有在环境变量中设置 [HOMEBREW_NO_AUTO_UPDATE=true],bre​​w 会自动更新时间。