Homebrew安装特定版本的公式?

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

我已经重新编辑了我的答案,为安装/使用旧版软件提供了一个更加全面的工作stream程,如果您发现旧版本更好,请随时添加一个注释。

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

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只能工作。 在某些情况下,可能需要重build旧版本。 因此,当用户想要在两个版本之间切换时,使用brew switch是非常有用的。

2)检查版本是否可作为轻敲使用

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

该版本库可能包含几个公式的旧版本的backports。 (大多数只有大和着名的,但当然,他们也有几个公式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 tap取出brew untap homebrew/versions 。)以下内容相当于:

 $ brew tap homebrew/versions $ brew install postgresql8 

只要backported版本公式保持最新,这种方法可能是处理较旧软件的最佳方法。

3)尝试一些过去的公式

以下方法主要是为了完整性而列出的。 两个都试图从brew仓库中复活一些不死生物配方。 由于更改了依赖关系,公式规范中的API更改或下载URL的更改,事情可能会也可能不会。

由于整个公式目录是一个git仓库,可以使用普通的git命令来安装特定的版本。 但是,我们需要find一种方法来获得旧版本可用的提交。

a)历史时期

在2011年8月和2014年10月之间,自制软件有一个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 

正如你所看到的,它build议不要使用它。 Homebrew吐出所有版本,可以find它的内部启发式,并向您展示检索旧公式的方法。 我们来试试吧。

 # 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)史前时代

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

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

git log -S查找在文件Library/Formula/postgresql.rb添加或删除string'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或多或less地保证有效):

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

你可以跳过最后一条命令来保存git仓库中的引用。

一个注意:当检查较旧的提交时,您暂时降级您的自制安装。 所以,你应该小心,因为在自制软件中的一些命令可能会不同于最新的版本。

4)手动写一个公式

这并不难,你可以上传到自制版本 。

A.)奖金:钉住

如果你想保留一个特定的版本,比如说postgresql,当你进行自然的brew update; brew upgrade时候不要brew update; brew upgrade brew update; brew upgrade程序,你可以制定一个公式:

 $ brew pin postgresql 

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

 $ brew unpin postgresql 

简单的工作stream程(2017年3月更新)

现在Homebrew /版本已经被弃用了,Homebrew / core支持多种版本的公式和新的命名格式。

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

brew安装postgresql@9.5

步骤1:

添加自制软件/版本库到您的可安装选项:

酿造自来水自制软件/版本

第2步:

您现在可以安装在存储库中维护的其他版本: https : //github.com/Homebrew/homebrew-versions

注意:如果你需要在这个仓库中指定的另一个版本,那么你可以创build一个配方(可能基于另一个版本作为起点),并向该仓库发送一个pull请求。


步骤1:

导航到您的自制软件基本目录(通常是/usr/local )例如:

 cd /usr/local 

或者,你可以做

 cd `brew --prefix` 

第2步:

inputbrew versions <formula> (是要安装的公式)。

你会得到像这样的东西:

 1.0.1 git checkout 1234567 Library/Formula/<formula>.rb 1.0.0 git checkout 0123456 Library/Formula/<formula>.rb ... 

第3步:

select所需的版本,并通过复制和粘贴所需的版本行(在开头忽略版本号)检查出来。

获取1.0.0的示例:

 git checkout 0123456 Library/Formula/<formula>.rb 

步骤3.5(也许有必要)

如果您已安装另一个版本,请执行此操作。

 brew unlink <formula> 

步骤4:

 brew install <formula> 

第5步:

完成后,您现在可以使用brew switch <formula> <version>在版本之间切换。

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

 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只是改变符号链接,所以速度非常快。 请参阅外部命令下的Homebrew Wiki的进一步文档。

更新:1/15/2015

从这个要点

 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 

我发现了一个更好的替代解决scheme,其他复杂的解决scheme。

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

这将下载并安装PostgreSQL 8.4.8


我发现这个解决scheme,开始按照search回购和回购评论的步骤。

经过一点研究发现,有人有一个稀有的配方奶粉酝酿与收集。


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

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

根据@半立方的build议,这个工作非常好:

  1. https://github.com/mxcl/homebrew/tree/master/Library/Formulafind你要找的图书馆;
  2. 点击它: https : //github.com/mxcl/homebrew/blob/master/Library/Formula/postgresql.rb
  3. 点击“历史logging”button查看旧的提交: https : //github.com/mxcl/homebrew/commits/master/Library/Formula/postgresql.rb
  4. 点击你想要的:“postgresql:update version to 8.4.4”, https://github.com/mxcl/homebrew/blob/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
  5. 点击“原始”链接: https : //raw.github.com/mxcl/homebrew/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
  6. brew install https://raw.github.com/mxcl/homebrew/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
  1. 在braumeister.org上search你的软件包。

  2. 看看结果。 你会在这样的位置:

    http://braumeister.org/search/mysql

    mysql是你的search查询。

  3. 点击你感兴趣的那个,例如“mysql”,导航到http://braumeister.org/formula/mysql这样的位置。;

  4. 查看页面底部的修订历史logging。 如果您对MySQL 5.7.10感兴趣,您可能需要单击5.7.11之前的最新版本,该版本导航到GitHub提交:

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

  5. 点击“查看”button查看应用提交后的mysql.rb文件的来源。

  6. 然后点击“原始”button查看原始来源。

  7. 复制url。

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

  8. 安装它:

     $ brew install https://raw.githubusercontent.com/Homebrew/homebrew/c77882756a832ac1d87e7396c114158e5619016c/Library/Formula/mysql.rb 

十分简单。

我只是用Homebrew回Maven 2.2.1,因为简单的brew install maven安装的Maven 3.0.3。

首先你必须离开这个maven目录

 $ brew取消链接maven

使用brew轻敲命令

 $ brew tap自制软件/版本
克隆到“/ usr / local / Library / Taps / homebrew-versions”中
远程:计数对象:590,完成。
远程:压缩对象:100%(265/265),完成。
遥控:共计590(三angular洲362),重用549(三angular洲325)
接收对象:100%(590/590),117.49 KiB |  79 KiB / s,完成。
解决三angular洲:100%(362/362),完成。
点了50个配方

现在你可以安装maven2公式:

 $ brew安装maven2
 ==>下载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个文件,3.1M,内置6秒
 $ mvn --version
 Apache Maven 2.2.1(r801777; 2009-08-06 12:16:01-0700)
 Java版本:1.6.0_37
 Java home:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
缺省语言环境:en_US,平台编码:MacRoman
操作系统名称:“mac os x”版本:“10.7.4”arch:“x86_64”系列:“mac” 

编辑:您也可以只是brew switch maven 2.2.1切换到不同的版本。

编辑: Apache Maven项目重组他们的回购。 更新了这个答案来解释这个变化。

基于@tschundeee和@ Debilski的更新1描述的工作stream程,我自动化了这个过程,并在这个脚本中添加了清理。

下载它 ,把它放在你的path和brewv <formula_name> <wanted_version> 。 对于具体的OP,它将是:

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

🙂

在最新版本的自制软件(本文编写的0.9.5版本)中,将会为您要安装的自制软件包的版本提供特定的配方。 例:

 $ brew search mongodb mongodb mongodb24 mongodb26 

然后就brew install mongodb26brew install mongodb26

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

对于最后一个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) 

homebrew/versions的问题是,有人必须拥有存储库中列出的特定版本的软件才能使用它。 而且,由于不再支持brew versions ,所以需要另一个解决scheme。 对于指示使用brew switch解决scheme,只有在您的计算机上存在该版本之前没有进行brew cleanup的情况下才能使用。

我有一个问题,想安装未列在homebrew/versions的特定版本的docker-machine 。 我解决了这个使用下面,这也适用于任何酿造安装软件。 下面的例子将使用docker-machine作为我想从版本0.5.0降级到0.4.1的软件包。

  1. 转到您的自制软件Formula目录。
    您可以通过运行brew info [any package name]来确定。 例如, brew info docker-machine给了我一个显示path的行 – /usr/local/Cellar/docker-machine/0.5.0 。 这告诉我,在我的机器上,homebrew安装在/usr/local ,我的Formula目录默认位于/usr/local/Library/Formula

  2. find您的包的特定公式文件(.rb)。 由于我想降级docker-machine ,我可以看到一个docker-machine.rb文件。

  3. 获取此公式文件的版本历史logging 。 inputgit log docker-machine.rb 。 这将列出此文件的完整提交历史logging。 你会看到这样的输出:

     ...更多 

    提交20c7abc13d2edd67c8c1d30c407bd5e31229cacc
    作者:BrewTestBot 
    date:Thu Nov 5 16:14:18 2015 +0000

        docker机:更新0.5.0瓶。

    提交8f615708184884e501bf5c16482c95eff6aea637
    作者:Vincent Lesierse 
    date:星期二10月27日22:25:30 2015 +0100

        docker机0.5.0

        更新docker机到0.5.0

        closures#45403。

        签字:Dominyk Tiller 

    提交5970e1af9b13dcbeffd281ae57c9ab90316ba423
    作者:BrewTestBot 
    date:星期一9月21日14:04:04 2015 +0100

        docker机:更新0.4.1瓶。

    提交18fcbd36d22fa0c19406d699308fafb44e4c8dcd
    作者:BrewTestBot 
    date:8月16日星期日09:05:56 2015 +0100

        docker机:更新0.4.1瓶。

     ...更多

棘手的部分是find你想要的特定版本的最新提交。 在上面,我可以告诉最新的0.4.1版本提交了这个提交标签: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423 。 上面的提交开始使用0.5.0版本(git日志条目从最新到最早的date列出)。

  1. 获取公式文件的以前版本。 使用步骤#3中的提交标签(您可以使用前6个字符),可以使用以下命令获取公式文件的旧版本:

    git checkout 5970e1 docker-machine.rb

  2. 卸载您当前的软件包版本。 只需运行正常的brew命令来卸载当前版本的软件包。
    防爆。 brew uninstall docker-machine

  3. 安装较旧的软件包版本现在,您可以运行正常的brew安装命令,它将安装您已经检出的公式。 防爆。 brew install docker-machine

如有必要,您可能需要通过使用brew link docker-machine来重新链接。

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

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

然后,您可以brew uninstall docker-machinebrew install docker-machine以获得最新版本,并保持这种方式前进。

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

这里是通过brew安装一个老版本的nginx的例子:

  • ngxnx公式提交日志

  • nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049

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

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

这些都没有真正为我的情况(Python),所以我会加我2美分:

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

输出如下所示:

 commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de Author: Dominyk Tiller <dominyktiller@gmail.com> Date: Thu Jun 30 17:42:18 2016 +0100 python: clarify pour_bottle reason commit cb3b29b824a264895434214e191d0d7ef4d51c85 Author: BrewTestBot <brew-test-bot@googlegroups.com> Date: Wed Jun 29 14:18:40 2016 +0100 python: update 2.7.12 bottle. commit 45bb1e220341894bbb7de6fd3f6df20987dc14f0 Author: Rakesh <rakkesh@users.noreply.github.com> Date: Wed Jun 29 10:02:26 2016 +0530 python 2.7.12 Closes #2452. Signed-off-by: Tim D. Smith <git@tim-smith.us> commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9 Author: BrewTestBot <brew-test-bot@googlegroups.com> Date: Fri Jun 17 20:14:36 2016 +0100 python: update 2.7.11 bottle. ... 

我想要2.7.11版本,所以我的散列是cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9 (或cf5da05 )。 接下来,我查看该版本并安装公式python

 git checkout cf5da05 brew install python 

最后清理一下:

 git checkout master 

将Library / Formula / postgresql.rb第8行更新为

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

和9号线上的MD5

 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 ,它应该运行平稳。

在开始时运行postgresql

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

希望帮助:)

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

  1. 我在github上分叉homebrew/versions
  2. 我从$(brew --prefix)/Library/Taps到我的fork的本地工作副本。 我会称之为my-homebrew/versions
  3. 我通过指定公式为my-homebrew/versions/<formula>
  4. 我向我的新公式发送了拉取请求到homebrew/versions

好极了。

对于目前不在默认酿造公式中的版本,您可以使用https://github.com/buildtools-version-taps/homebrew-versions-tap-tool

我只是复制弹性search的旧版本到/ usr / local / Cellar / elasticsearch目录并运行

brew switch elasticsearch 5.4.3

而已。 也许这对任何人都有用。