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
- find所需软件和版本的提交历史logging。 例如我需要从docker版本1.4.1切换到1.3.3 https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
- 复制地址栏中的url
-
brew install <url>
-
brew switch docker 1.3.3
- 切换回docker 1.4.1
brew switch docker 1.4.1
从这个要点
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议,这个工作非常好:
- 在https://github.com/mxcl/homebrew/tree/master/Library/Formulafind你要找的图书馆;
- 点击它: https : //github.com/mxcl/homebrew/blob/master/Library/Formula/postgresql.rb
- 点击“历史logging”button查看旧的提交: https : //github.com/mxcl/homebrew/commits/master/Library/Formula/postgresql.rb
- 点击你想要的:“postgresql:update version to 8.4.4”, https://github.com/mxcl/homebrew/blob/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
- 点击“原始”链接: https : //raw.github.com/mxcl/homebrew/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
-
brew install https://raw.github.com/mxcl/homebrew/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
-
在braumeister.org上search你的软件包。
-
看看结果。 你会在这样的位置:
http://braumeister.org/search/mysql
mysql是你的search查询。
-
点击你感兴趣的那个,例如“mysql”,导航到http://braumeister.org/formula/mysql这样的位置。;
-
查看页面底部的修订历史logging。 如果您对MySQL 5.7.10感兴趣,您可能需要单击5.7.11之前的最新版本,该版本导航到GitHub提交:
-
点击“查看”button查看应用提交后的mysql.rb文件的来源。
-
然后点击“原始”button查看原始来源。
-
复制url。
-
安装它:
$ 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 mongodb26
做brew 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的软件包。
-
转到您的自制软件
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
-
find您的包的特定公式文件(.rb)。 由于我想降级
docker-machine
,我可以看到一个docker-machine.rb
文件。 -
获取此公式文件的版本历史logging 。 input
git 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列出)。
-
获取公式文件的以前版本。 使用步骤#3中的提交标签(您可以使用前6个字符),可以使用以下命令获取公式文件的旧版本:
git checkout 5970e1 docker-machine.rb
-
卸载您当前的软件包版本。 只需运行正常的brew命令来卸载当前版本的软件包。
防爆。brew uninstall docker-machine
-
安装较旧的软件包版本现在,您可以运行正常的brew安装命令,它将安装您已经检出的公式。 防爆。
brew install docker-machine
如有必要,您可能需要通过使用brew link docker-machine
来重新链接。
如果在任何时候想要恢复到特定软件包的最新版本,请进入“公式”目录并在公式文件(.rb)上执行以下命令
git reset HEAD docker-machine.rb git checkout -- docker-machine.rb
然后,您可以brew uninstall docker-machine
和brew 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
没有的公式。 去做这个:
- 我在github上分叉
homebrew/versions
。 - 我从
$(brew --prefix)/Library/Taps
到我的fork的本地工作副本。 我会称之为my-homebrew/versions
。 - 我通过指定公式为
my-homebrew/versions/<formula>
。 - 我向我的新公式发送了拉取请求到
homebrew/versions
。
好极了。
对于目前不在默认酿造公式中的版本,您可以使用https://github.com/buildtools-version-taps/homebrew-versions-tap-tool
我只是复制弹性search的旧版本到/ usr / local / Cellar / elasticsearch目录并运行
brew switch elasticsearch 5.4.3
而已。 也许这对任何人都有用。