首页 文章

Homebrew安装特定版本的公式?

提问于
浏览
1812

如何在自制软件中安装特定版本的公式?例如,postgresql-8.4.4而不是最新的9.0 .

20 回答

  • 21

    homebrew/versions 的问题是,某人必须在存储库中列出该特定版本的软件才能使用它 . 此外,由于不再支持 brew versions ,因此需要另一种解决方案 . 对于指示使用 brew switch 的解决方案,仅当您尚未执行 brew cleanup 时才会起作用,因为您的计算机上需要存在该版本 .

    我有一个问题,想要安装 docker-machine 的特定旧版本 docker-machine . 我使用下面的解决方案,这也应该适用于任何brew安装的软件 . 下面的示例将使用 docker-machine 作为我想要从0.5.0版降级到0.4.1的包 .

    • Go to your homebrew Formula directory.
      您可以通过运行 brew info [any package name] 来确定 . 例如, brew info docker-machine 给了我一条显示路径的行 - /usr/local/Cellar/docker-machine/0.5.0 . 这告诉我,在我的机器上,自制软件安装在 /usr/local ,我的 Formula 目录默认位于 /usr/local/Library/Formula

    • Locate the specific formula file (.rb) for your package. 由于我想降级 docker-machine ,我可以看到 docker-machine.rb 文件 .

    • Get the version history for this formula file . 输入 git log docker-machine.rb . 这将列出此文件的完整提交历史记录 . 你会看到这样的输出:

    ...more 
    
        commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc
        Author: BrewTestBot 
        Date:   Thu Nov 5 16:14:18 2015 +0000
    
            docker-machine: update 0.5.0 bottle.
    
        commit 8f615708184884e501bf5c16482c95eff6aea637
        Author: Vincent Lesierse 
        Date:   Tue Oct 27 22:25:30 2015 +0100
    
            docker-machine 0.5.0
    
            Updated docker-machine to 0.5.0
    
            Closes #45403.
    
            Signed-off-by: Dominyk Tiller 
    
        commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
        Author: BrewTestBot 
        Date:   Mon Sep 21 14:04:04 2015 +0100
    
            docker-machine: update 0.4.1 bottle.
    
        commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd
        Author: BrewTestBot 
        Date:   Sun Aug 16 09:05:56 2015 +0100
    
            docker-machine: update 0.4.1 bottle.
    
        ...more
    

    棘手的部分是找到您想要的特定版本的最新提交 . 在上面,我可以告诉使用此提交标记提交的最新0.4.1版本: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423 . 上面提交的提交开始使用版本0.5.0(git日志条目从最新到最早的日期列出) .

    • Get a previous version of the formula file. 使用步骤#3中的提交标记(您可以使用前6个字符),您可以使用以下方法获取旧版本的公式文件:

    git checkout 5970e1 docker-machine.rb

    • Uninstall your current package version. 只需运行正常的brew命令即可卸载当前版本的软件包 .
      防爆 . brew uninstall docker-machine

    • Install the older package version 现在,您可以运行正常的brew install命令,它将安装您已签出的公式 . 防爆 . brew install docker-machine

    如有必要,您可能需要使用_309749重新链接 .

    如果您想在任何时候恢复到特定软件包的最新版本,请进入公式目录并在公式文件(.rb)上发出以下命令

    git reset HEAD docker-machine.rb
    git checkout -- docker-machine.rb
    

    然后你可以 brew uninstall docker-machinebrew install docker-machine 获得最新版本并保持这种方式向前发展 .

  • 2

    对于当前不在默认brew配方中的版本,您可以使用https://github.com/buildtools-version-taps/homebrew-versions-tap-tool中的工具轻松创建自己的水龙头

  • 11

    简单的工作流程

    现在Homebrew / versions已被弃用,Homebrew / core支持具有新命名格式的多个公式版本 .

    要安装特定版本,例如postgresql 9.5你只需运行:

    $ brew install postgresql@9.5
    

    要列出可用版本,请使用@进行搜索:

    $ brew search postgresql@
    ==> Searching local taps...
    postgresql@10.1 ✔     postgresql@9.4        postgresql@9.5        postgresql@9.6
    
  • 5

    它可以很容易地完成最后一个版本的brew .

    brew tap homebrew/versions
    brew install subversion17 # for svn 1.7 branch instead of last available
    brew install postgresql8  # for postgresql 8 (which you ask)
    
  • 8

    根据我的判断,我决定为Maven 3.1.1创建一个 homebrew/versions 没有的公式 . 去做这个:

    • 我在github上分叉 homebrew/versions .

    • 我从 $(brew --prefix)/Library/Taps 符号链接到我的fork的本地工作副本 . 我会称之为 my-homebrew/versions .

    • 我通过将公式指定为 my-homebrew/versions/<formula> 进行了测试 .

    • 我发送拉动请求到 homebrew/versions 为我的新公式 .

    好极了 .

  • 99

    我发现了一种比其他复杂解决方案更好的替代解决方案 .

    brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
    

    这将下载并安装PostgreSQL 8.4.8


    我通过开始按照在仓库中搜索仓库和comment的步骤找到了这个解决方案 .

    经过一番研究发现,有人收集了一批稀有的配方奶粉 .


    如果您正在寻找MySQL 5.1.x,请尝试一下 .

    brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
    
  • 2206

    您可以使用在公式的历史记录中标识公式和特定提交的策略,该策略与您要安装的软件包的版本相匹配 .

    https://github.com/Homebrew/homebrew-core/commit/c77882756a832ac1d87e7396c114158e5619016c#Formula/mysql.rb

    注意:如果在浏览器中未加载提交历史记录,则可能必须根据GitHub的建议在控制台中查看提交历史记录 . 如果您有兴趣在GitHub上看到该提交,请替换URL中的提交SHA . 或者,跳到下面的步骤7 .

    • 单击“查看”按钮可在应用提交后查看mysql.rb文件的源 .

    • 然后单击“原始”按钮以查看原始源 .

    • 复制URL . 或者,使用 mysql.rb 文件名自己构建URL以标识您的公式和该公式的特定版本(由下面的URL中的commmit SHA标识) .

    https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb

    • $ brew install [URL from step 7] 安装
    $ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
    

    注意:此答案已更新,以说明删除braumeister.org网站的原因 . 同样的原则适用,braumeister只是提供了一种初学者友好的方式来导航公式版本 .

  • 12

    安装旧的brew包版本(Flyway 4.2.0示例)

    在本地找到您当地的自制git目录或克隆Homebrew / homebrew-core

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

    要么

    git clone git@github.com:Homebrew/homebrew-core.git

    列出所有可用版本

    git log master -- Formula/flyway.rb

    复制所需版本的提交ID并直接安装

    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/793abfa325531415184e1549836c982b39e89299/Library/Formula/flyway.rb

  • 0

    自那以后更新的答案增加了@ lance-pollard已经发布的工作答案 .

    如何安装特定版本的公式(此示例中使用的公式为 terraform ):

  • 1

    我刚刚使用Homebrew回到Maven 2.2.1,因为简单的 brew install maven 安装了Maven 3.0.3 .

    首先,你必须离开maven目录

    $ brew unlink maven
    

    使用brew tap命令

    $ brew tap homebrew/versions
    Cloning into '/usr/local/Library/Taps/homebrew-versions'...
    remote: Counting objects: 590, done.
    remote: Compressing objects: 100% (265/265), done.
    remote: Total 590 (delta 362), reused 549 (delta 325)
    Receiving objects: 100% (590/590), 117.49 KiB | 79 KiB/s, done.
    Resolving deltas: 100% (362/362), done.
    Tapped 50 formula
    

    现在您可以安装maven2公式:

    $ brew install maven2
    ==> Downloading http://www.apache.org/dist/maven/maven-2/2.2.1/binaries/apache-maven-2.2.1-bin.tar.gz
    ######################################################################## 100.0%
    /usr/local/Cellar/maven2/2.2.1: 10 files, 3.1M, built in 6 seconds
    
    $ mvn --version
    Apache Maven 2.2.1 (r801777; 2009-08-06 12:16:01-0700)
    Java version: 1.6.0_37
    Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    Default locale: en_US, platform encoding: MacRoman
    OS name: "mac os x" version: "10.7.4" arch: "x86_64" Family: "mac"
    

    Edit: 您也可以 brew switch maven 2.2.1 切换到其他版本 .

    Edit: Apache Maven项目重组了他们的回购 . 更新了此答案以解释此更改 .

  • 196

    这些都不适合我的情况(Python),所以我将加上我的2美分:

    cd `brew --prefix`
    git log Library/Formula/python.rb
    

    输出看起来像这样:

    commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de
    作者:Dominyk Tiller dominyktiller@gmail.com
    日期:Thu Jun 30 17:42:18 2016 0100

    python:澄清pour_bottle的原因

    提交cb3b29b824a264895434214e191d0d7ef4d51c85
    作者:BrewTestBot brew-test-bot@googlegroups.com
    日期:星期三六月29日14:18:40 2016 0100

    python:更新2.7.12瓶 .

    提交45bb1e220341894bbb7de6fd3f6df20987dc14f0
    作者:Rakesh rakkesh@users.noreply.github.com
    日期:2016年6月29日星期三10:02:26 2016 0530

    python 2.7.12

    关闭#2452 .

    签名:Tim D. Smith git@tim-smith.us

    commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
    作者:BrewTestBot brew-test-bot@googlegroups.com
    日期:星期六6月17日20:14:36 2016 0100

    python:更新2.7.11瓶 .

    ...

    我想版本 2.7.11 所以我的哈希是 cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9 (或简称 cf5da05 ) . 接下来,我查看该版本并安装公式 python

    git checkout cf5da05
    brew install python
    

    最后,清理:

    git checkout master
    
  • 673

    如果使用 brew search <formula> 找不到您的版本,您还可以尝试查看公式的提交日志以查找所需的版本:

    这是一个通过brew安装旧版nginx的示例:

    从那里,我们可以使用sha和raw git url安装 1.6.3

    brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb

  • 57

    库/ Formula / postgresql.rb第8行更新到

    http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
    

    和MD5在9号线上

    fcc3daaf2292fa6bf1185ec45e512db6
    

    保存并退出 .

    brew install postgres
    initdb /usr/local/var/postgres
    

    现在在这个阶段你可能会遇到 postgresql could not create shared memory segment 错误,要解决这个更新 /etc/sysctl.conf ,如下所示:

    kern.sysv.shmall=65536
    kern.sysv.shmmax=16777216
    

    再次尝试 initdb /usr/local/var/postgres ,它应该运行顺利 .

    在start上运行postgresql

    launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
    

    希望有所帮助:)

  • 0

    基于@tschundeee@Debilski’s update 1描述的工作流程,我自动化了该过程并在this script中添加了清理 .

    Download it,把它放在你的路径 brewv <formula_name> <wanted_version> . 对于特定的OP,它将是:

    cd path/to/downloaded/script/
    ./brewv postgresql 8.4.4
    

    :)

  • 436

    按照@ halfcube的建议,这非常有效:

  • 27

    更新:2015年1月15日

    • 查找所需软件和版本的提交历史记录 . 例如我需要从docker版本1.4.1切换到1.3.3:https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb

    • 使用此按钮查看文件:
      enter image description here

    • 单击“原始”按钮:
      List item

    • 从地址栏复制URL(此示例中为docker.rb url)

    • brew install <url> (可能首先 brew unlink ,例如 brew unlink docker

    • brew switch docker 1.3.3

    • 切换回docker 1.4.1 brew switch docker 1.4.1

    从这个gist

    brew update
    brew versions FORMULA
    cd `brew --prefix`
    git checkout HASH Library/Formula/FORMULA.rb  # use output of "brew versions"
    brew install FORMULA
    brew switch FORMULA VERSION
    git checkout -- Library/Formula/FORMULA.rb    # reset formula
    
    ## Example: Using Subversion 1.6.17
    #
    # $ brew versions subversion
    # 1.7.3    git checkout f8bf2f3 /usr/local/Library/Formula/subversion.rb
    # 1.7.2    git checkout d89bf83 /usr/local/Library/Formula/subversion.rb
    # 1.6.17   git checkout 6e2d550 /usr/local/Library/Formula/subversion.rb
    # 1.6.16   git checkout 83ed494 /usr/local/Library/Formula/subversion.rb
    # 1.6.15   git checkout 809a18a /usr/local/Library/Formula/subversion.rb
    # 1.6.13   git checkout 7871a99 /usr/local/Library/Formula/subversion.rb
    # 1.6.12   git checkout c99b3ac /usr/local/Library/Formula/subversion.rb
    # 1.6.6    git checkout 8774131 /usr/local/Library/Formula/subversion.rb
    # 1.6.5    git checkout a82e823 /usr/local/Library/Formula/subversion.rb
    # 1.6.3    git checkout 6b6d369 /usr/local/Library/Formula/subversion.rb
    # $ cd `brew --prefix`
    # $ git checkout 6e2d550 /usr/local/Library/Formula/subversion.rb
    # $ brew install subversion
    # $ brew switch subversion 1.6.17
    # $ git checkout -- Library/Formula/subversion.rb
    
  • 7

    (我已经重新编辑了我的答案,为安装/使用旧版本的自制软件提供了更全面的工作流程 . 如果您发现旧版本更好,请随意添加备注 . )

    让我们从最简单的情况开始:

    1)检查版本是否已安装(但未激活)

    当自制软件安装新公式时,它会将其放在像 /usr/local/Cellar/postgresql/9.3.1 这样的版本化目录中 . 然后,仅全局安装指向此文件夹的符号链接 . 原则上,这使它很漂亮易于在两个已安装的版本之间切换 . (*)

    如果您已经使用自制程序更长时间并且从未删除旧版本(例如使用 brew cleanup ),那么您的程序的某些旧版本可能仍然存在 . 如果您只想激活之前的版本, brew switch 是最简单的方法 .

    检查 brew info postgresql (或 brew switch postgresql <TAB> )是否安装了旧版本:

    $ brew info postgresql
    postgresql: stable 9.3.2 (bottled)
    http://www.postgresql.org/
    Conflicts with: postgres-xc
    /usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M)
      Built from source
    /usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M) *
      Poured from bottle
    From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
    # … and some more
    

    我们看到已经安装了一些旧版本 . 我们可以使用 brew switch 激活它:

    $ brew switch postgresql 9.1.5
    Cleaning /usr/local/Cellar/postgresql/9.1.5
    Cleaning /usr/local/Cellar/postgresql/9.3.2
    384 links created for /usr/local/Cellar/postgresql/9.1.5
    

    让我们仔细检查激活的内容:

    $ brew info postgresql
    postgresql: stable 9.3.2 (bottled)
    http://www.postgresql.org/
    Conflicts with: postgres-xc
    /usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M) *
      Built from source
    /usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M)
      Poured from bottle
    From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
    # … and some more
    

    请注意,星号 * 已移至新激活的版本

    (*)请注意,只要旧版本的所有依赖项仍然存在, brew switch 才有效 . 在某些情况下,可能需要重建旧版本 . 因此,当人们想要在不太远的两个版本之间切换时,使用 brew switch 非常有用 .

    2)检查版本是否可用作点按

    特别是对于较大的软件项目,很可能对某个软件的几个(可能是API不兼容的)主要版本有足够高的需求 . 截至2012年3月,Homebrew 0.9为此提供了一种机制: brew taphomebrew versions存储库 .

    该版本存储库可能包含几个公式的旧版本的后端 . (大多数只是大而着名的,但当然他们也会有几个postgresql公式 . )

    brew search postgresql 会告诉你在哪里看:

    $ brew search postgresql
    postgresql
    homebrew/versions/postgresql8    homebrew/versions/postgresql91
    homebrew/versions/postgresql9    homebrew/versions/postgresql92
    

    我们可以通过输入简单地安装它

    $ brew install homebrew/versions/postgresql8
    Cloning into '/usr/local/Library/Taps/homebrew-versions'...
    remote: Counting objects: 1563, done.
    remote: Compressing objects: 100% (943/943), done.
    remote: Total 1563 (delta 864), reused 1272 (delta 620)
    Receiving objects: 100% (1563/1563), 422.83 KiB | 339.00 KiB/s, done.
    Resolving deltas: 100% (864/864), done.
    Checking connectivity... done.
    Tapped 125 formula
    ==> Downloading http://ftp.postgresql.org/pub/source/v8.4.19/postgresql-8.4.19.tar.bz2
    # …
    

    请注意,这已自动点击了 homebrew/versions 点击 . (使用 brew tap 检查,使用 brew untap homebrew/versions 删除 . )以下内容相同:

    $ brew tap homebrew/versions
    $ brew install postgresql8
    

    只要向后移植的版本公式保持最新,这种方法可能是处理旧软件的最佳方法 .

    3)尝试过去的一些公式

    列出了以下方法,主要是为了完整性 . 两者都尝试从brew存储库中复活一些不死的公式 . 由于更改了依赖关系,公式规范中的API更改或只是更改了下载URL,因此可能会或可能不会起作用 .

    由于整个公式目录是一个git存储库,因此可以使用plain git命令安装特定版本 . 但是,我们需要找到一种方法来获取旧版本可用的提交 .

    a) historic times

    August 2011 and October 2014 之间,自制软件有一个 brew versions 命令,它用各自的SHA哈希值吐出所有可用的版本 . 截至2014年10月,您必须先使用 brew tap homebrew/boneyard 才能使用它 . 正如水龙头的名称所暗示的,你应该只做这个作为最后的手段 .

    例如 .

    $ brew versions postgresql
    Warning: brew-versions is unsupported and may be removed soon.
    Please use the homebrew-versions tap instead:
      https://github.com/Homebrew/homebrew-versions
    9.3.2    git checkout 3c86d2b Library/Formula/postgresql.rb
    9.3.1    git checkout a267a3e Library/Formula/postgresql.rb
    9.3.0    git checkout ae59e09 Library/Formula/postgresql.rb
    9.2.4    git checkout e3ac215 Library/Formula/postgresql.rb
    9.2.3    git checkout c80b37c Library/Formula/postgresql.rb
    9.2.2    git checkout 9076baa Library/Formula/postgresql.rb
    9.2.1    git checkout 5825f62 Library/Formula/postgresql.rb
    9.2.0    git checkout 2f6cbc6 Library/Formula/postgresql.rb
    9.1.5    git checkout 6b8d25f Library/Formula/postgresql.rb
    9.1.4    git checkout c40c7bf Library/Formula/postgresql.rb
    9.1.3    git checkout 05c7954 Library/Formula/postgresql.rb
    9.1.2    git checkout dfcc838 Library/Formula/postgresql.rb
    9.1.1    git checkout 4ef8fb0 Library/Formula/postgresql.rb
    9.0.4    git checkout 2accac4 Library/Formula/postgresql.rb
    9.0.3    git checkout b782d9d Library/Formula/postgresql.rb
    

    如您所见,它建议不要使用它 . Homebrew通过其内部启发式吐出所有可以找到的版本,并向您显示检索旧公式的方法 . 我们来试试吧 .

    # First, go to the homebrew base directory
    $ cd $( brew --prefix )
    # Checkout some old formula
    $ git checkout 6b8d25f Library/Formula/postgresql.rb
    $ brew install postgresql
    # … installing
    

    既然安装了较旧的postgresql版本,我们可以重新安装最新的公式,以保持我们的存储库清洁:

    $ git checkout -- Library/Formula/postgresql.rb
    

    brew switch 是你在新老之间改变的朋友 .

    b) prehistoric times

    对于特殊需求,我们也可以尝试自己挖掘自制回购 .

    $ git log -S'8.4.4' -- Library/Formula/postgresql.rb
    

    git log -S 查找在文件 Library/Formula/postgresql.rb 中添加或删除字符串 '8.4.4' 的所有提交 . 结果我们得到了两次提交 .

    commit 7dc7ccef9e1ab7d2fc351d7935c96a0e0b031552
    Author: Aku Kotkavuo
    Date:   Sun Sep 19 18:03:41 2010 +0300
    
        Update PostgreSQL to 9.0.0.
    
        Signed-off-by: Adam Vandenberg
    
    commit fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
    Author: David Höppner
    Date:   Sun May 16 12:35:18 2010 +0200
    
        postgresql: update version to 8.4.4
    

    显然, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 是我们感兴趣的提交 . 由于这个提交很旧,我们会尝试降级完整的自制软件安装(这样,公式API或多或少保证有效):

    $ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
    $ brew install postgresql
    $ git checkout master
    $ git branch -d postgresql-8.4.4
    

    您可以跳过最后一个命令以将引用保留在git存储库中 .

    一个注意事项:当签出旧提交时,您暂时降级自制软件安装 . 因此,您应该小心,因为自制程序中的某些命令可能与最新版本不同 .

    4)手动编写公式

    这不是太难,你可以将它上传到Homebrew-Versions .

    A.)奖金:固定

    如果你想保留某个版本,比如postgresql,并在你做自然的 brew update; brew upgrade 程序时阻止它被更新,你可以固定一个公式:

    $ brew pin postgresql
    

    固定公式列在 /usr/local/Library/PinnedKegs/ 中,一旦您想引入最新的更改和更新,您可以再次取消固定:

    $ brew unpin postgresql
    
  • 1

    在最新版本的自制软件(撰写本文时为0.9.5)中,您将要安装自制软件桶的特定配方 . 例:

    $ brew search mongodb
    mongodb    mongodb24  mongodb26
    

    然后就像正常一样做 brew install mongodb26 .

    如果您已安装最新版本,请确保取消链接最新版本并链接所需版本: brew unlink mongodb && brew link mongodb26 .

  • 65

    我刚刚将一个旧版本的elasticsearch复制到 /usr/local/Cellar/elasticsearch 目录中 .

    $ mkdir /usr/local/Cellar/elasticsearch/5.4.3/bin
    $ cp elasticsearch /usr/local/Cellar/elasticsearch/5.4.3/bin
    $ brew switch elasticsearch 5.4.3
    

    而已 . 也许它对任何人都有用 .

  • 5

    现在有一种更简单的方法来安装以前安装的旧版本的公式 . 简单地使用

    brew switch [formula] [version]
    

    例如,我经常在Node.js 0.4.12和 . 之间交替0.6.5:

    brew switch node 0.4.12
    brew switch node 0.6.5
    

    由于 brew switch 只是更改了符号链接,因此速度非常快 . 请参阅External Commands下的Homebrew Wiki上的更多文档 .

相关问题