【问题标题】:How to install specific version of brew cask formula with ansible?如何使用 ansible 安装特定版本的 brew cask formula?
【发布时间】:2020-03-13 10:37:18
【问题描述】:

如何使用 ansible 安装特定版本的自制木桶公式?例如,vagrant 2.2.6 而最新可用的是 2.2.7。

【问题讨论】:

    标签: ansible versioning homebrew-cask


    【解决方案1】:

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

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

    1. 按照https://stackoverflow.com/a/61552727/3302668 中的步骤为您的包找到.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

    【讨论】:

      【解决方案2】:

      编辑:此答案适用于支持 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:

      • 知道您要安装的 ChefDK 的确切版本(真的没有浏览)
      • 前往包含所有木桶的 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
      

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

      【讨论】:

        【解决方案3】:

        我找到了这个解决方案:

        ---
        - 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 文档。

        【讨论】:

          【解决方案4】:

          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=t​​rue],bre​​w会自动更新。

          【讨论】:

            猜你喜欢
            • 2019-05-19
            • 2017-12-01
            • 1970-01-01
            • 2021-07-31
            • 1970-01-01
            • 2021-11-28
            • 1970-01-01
            • 2019-05-08
            • 1970-01-01
            相关资源
            最近更新 更多