Homebrew install specific version of formula?
如何在自制配方中安装特定版本的配方?例如,PostgreSQL-8.4.4而不是最新的9.0。
(我重新编辑了我的答案,以提供一个更全面的工作流,用于安装/使用家庭自制的旧软件版本。如果您发现旧版本更好,请随意添加注释。)好的。
让我们从最简单的情况开始:好的。1)检查版本是否已安装(但未激活)
当homebrew安装新的公式时,它将其放在版本控制的目录中,如
如果您已经使用了较长时间的自制程序,并且从未删除过较旧的版本(例如,使用
检查
1 2 3 4 5 6 7 8 9 10 | $ 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 |
我们看到已经安装了一些旧版本。我们可以使用
1 2 3 4 | $ 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 |
让我们再次检查激活的内容:好的。
1 2 3 4 5 6 7 8 9 10 | $ 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 |
请注意,星型
(*)请注意,只要旧版本的所有依赖项仍然存在,
特别是对于更大的软件项目,很可能对某个软件的几个(可能与API不兼容)主要版本有足够高的需求。截至2012年3月,自制0.9提供了一种机制:
该版本存储库可能包含多个公式的旧版本的后端。(主要是大型的和著名的,但当然他们也将有几个公式的PostgreSQL。)好的。
1 2 3 4 | $ brew search postgresql postgresql homebrew/versions/postgresql8 homebrew/versions/postgresql91 homebrew/versions/postgresql9 homebrew/versions/postgresql92 |
我们只需键入好的。
1 2 3 4 5 6 7 8 9 10 11 | $ 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 # … |
请注意,这已自动轻敲
1 2 | $ brew tap homebrew/versions $ brew install postgresql8 |
只要后台版本公式保持最新,这种方法可能是处理旧软件的最佳方法。好的。3)尝试一些过去的公式
下面列出的方法主要是为了完整性。两者都试图从BREW存储库中恢复一些亡灵公式。由于依赖关系发生了变化,公式规范中的API发生了变化,或者只是下载URL发生了变化,所以可能会起作用,也可能不会起作用。好的。
因为整个公式目录是一个git存储库,所以可以使用普通的git命令安装特定的版本。但是,我们需要找到一种方法来提交旧版本可用的内容。好的。
a)历史时期好的。
在2011年8月至2014年10月期间,Homebrew有一个
例如。好的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $ 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 |
如你所见,它建议不要使用它。自制啤酒吐出所有版本,它可以找到与内部启发式,并向您展示了一种方法,检索旧的公式。让我们试试看。好的。
1 2 3 4 5 6 | # 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版本,我们可以重新安装最新的公式,以保持我们的存储库干净:好的。
1 | $ git checkout -- Library/Formula/postgresql.rb |
江户十一〔二〕是你新旧交替的朋友。好的。
b)史前时代好的。
为了满足特殊需要,我们也可以尝试自己的自酿回购。好的。
1 | $ git log -S'8.4.4' -- Library/Formula/postgresql.rb |
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |
显然,
1 2 3 4 | $ 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,在执行自然的
1 | $ brew pin postgresql |
固定公式列在
1 | $ brew unpin postgresql |
好啊。
简单工作流
现在,homebrew/版本已被弃用,homebrew/core支持具有新命名格式的公式的多个版本。
要安装特定版本,例如PostgreSQL 9.5,只需运行:
1 | $ brew install [email protected] |
要列出可用版本,请使用@运行搜索:
1 2 3 | $ brew search postgresql@ ==> Searching local taps... [email protected] ? [email protected] [email protected] [email protected] |
现在有一种更简单的方法来安装以前安装的公式的旧版本。简单使用
1 | brew switch [formula] [version] |
例如,我定期在node.js 0.4.12和0.6.5之间切换:
1 2 | brew switch node 0.4.12 brew switch node 0.6.5 |
由于
更新时间:2015年1月15日
- 查找所需软件和版本的提交历史记录。例如,我需要从Docker版本1.4.1切换到1.3.3:https://github.com/homebrew/homebrew-core/commits/master/formula/docker.rb
- 用此按钮查看文件:。
- 点击原始按钮:。
- 从地址栏复制URL(本例中为docker.rb url)
brew install (可能必须先到brew unlink ,如brew unlink docker )brew switch docker 1.3.3 - 切换回Docker 1.4.1
brew switch docker 1.4.1 。
从这个要点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 |
我发现了比其他复杂的解决方案更好的替代方案。
1 | brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb |
这将下载并安装PostgreSQL 8.4.8
我通过开始搜索回购和回购中的评论的步骤找到了这个解决方案。
经过一点研究发现,有人收集了一些罕见的处方药来酿造。
如果你在找MySQL5.1.x,试试看。
1 | brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb |
按照@halfcube的建议,这非常有效:
您可以使用识别公式的策略,以及公式历史记录中与要安装的包版本相匹配的特定提交。
访问https://github.com/homebrew/homebrew-core
按键盘上的
确定一个看起来最相关的公式,可能是:
点击位于https://github.com/homebrew/homebrew-core/commits/master/formula/mysql.rb的
https://github.com/homebrew/homebrew-core/commit/c77882756a832ac1d87e739c114158e5619016c formula/mysql.rb
注意:如果没有在浏览器中加载提交历史记录,则可能需要根据Github的建议在控制台中查看提交历史记录。如果您对在GitHub上看到提交感兴趣,请替换URL中的上述提交sha。或者,跳到下面的步骤7。
应用提交后,单击"查看"按钮查看mysql.rb文件的源代码。
然后单击"原始"按钮查看原始源。
复制URL。或者,使用
https://raw.githubusercontent.com/homebrew/homebrew-core/c77882756a832ac1d87e739c114158e5619016c/formula/mysql.rb
用
1 | $ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb |
注意:此答案已更新为删除braumeister.org网站的原因。同样的原理也适用,Braumeister只是提供了一种初学者友好的方法来导航公式版本。
因为简单的
首先你必须离开马文的方向,所以
1 | $ brew unlink maven |
使用BREW TAP命令
1 2 3 4 5 6 7 8 | $ 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公式:
1 2 3 4 | $ 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 |
1 2 3 4 5 6 | $ 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" |
编辑:您也可以只使用
编辑:ApacheMaven项目重组了他们的回购协议。已将此答案更新为此更改的帐户。
基于@tschundeee和@deblski的更新1所描述的工作流,我自动执行了该过程,并在此脚本中添加了清理。
下载,放在你的路径和
1 2 | cd path/to/downloaded/script/ ./brewv postgresql 8.4.4 |
:)
更新后的答案增加了@lance pollard已经发布的工作答案。
如何安装公式的特定版本(本例中使用的公式是
在最新版本的自制啤酒(本文撰写时为0.9.5)上,将为您要安装的自制啤酒桶提供一个特定的配方。例子:
1 2 | $ brew search mongodb mongodb mongodb24 mongodb26 |
然后像正常一样做
如果您已经安装了最新版本,请确保取消链接最新版本并链接所需版本:
到目前为止,大多数其他答案都已过时。不幸的是,自制仍然没有安装过时版本的内置方法,除非该版本作为单独的公式存在(例如,
幸运的是,对于其他的公式来说,有一个比以前需要的复杂混乱更容易的方法。以下是完整的说明:
在日志中搜索正确的版本:
1 2 3 4 5 6 | brew log formula # Scroll down/up with j/k or the arrow keys # or use eg. /4\.4\.23 to search a specific version # This syntax only works on pre-2.0 Homebrew versions brew log --format=format:%H\ %s -F --grep=?version? ?formula? |
这将显示提交哈希列表。选择一个合适的(大部分应该是非常明显的,通常是最新的(即最上面的)一个。
查找公式位于上游存储库中的URL:
1 | brew info ?formula? | grep ^From: |
修复URL:
通过将先前找到的URL中的
1 | brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/?hash?/Formula/?formula?.rb |
(最后一步可能需要在之前运行
如果复制了要使用的提交哈希,则可以使用类似于此示例的方法安装该版本,将值和
1 2 3 4 5 6 7 8 9 | BREW_VERSION_SHA=32353d2286f850fd965e0a48bcf692b83a6e9a41 BREW_FORMULA_NAME=bash brew info $BREW_FORMULA_NAME \ | sed -n \ -e '/^From: /s///' \ -e 's/github.com/raw.githubusercontent.com/' \ -e 's%blob/%%' \ -e"s/master/$BREW_VERSION_SHA/p" \ | xargs brew install |
这个例子是安装bash 4.4.23而不是bash 5,但是如果您在之后执行
实现相同目标的另一种方法似乎是:
1 2 3 4 5 6 | brew tap-new username/repo-name # extract with a version seems to run a grep under the hood brew extract --version='4.4.23' bash username/repo-name brew install [email protected] # Note this"fails" when trying to grab a bottle for the package and seems to have # some odd doubling of the version in that output, but this isn't fatal. |
这将在您的自定义tap中创建一个
我有一个问题想安装一个特定的旧版本的
进入自制的
找到包的特定公式文件(.rb)。因为我想降级
获取此公式文件的版本历史记录。输入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | ...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标签提交的:
获取公式文件的早期版本。使用步骤3中的commit标记(您可以使用前6个字符),您可以使用以下方法获取旧版本的公式文件:
卸载当前的包版本。只需运行正常的BREW命令即可卸载软件包的当前版本。如
安装旧的软件包版本现在,您可以运行正常的BREW安装命令,它将安装您已签出的公式。如
如有必要,您可能需要使用
如果要在任何时候恢复到特定包的最新版本,请转到公式目录并在公式文件(.rb)上发出以下命令。
1 2 | git reset HEAD docker-machine.rb git checkout -- docker-machine.rb |
然后,您可以使用
对于最后一个版本的BREW,可以非常容易地做到这一点。
1 2 3 | 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) |
这些都不适用于我的案例(python),因此我将添加我的2分:
1 2 | cd `brew --prefix` git log Library/Formula/python.rb |
输出如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de
Author: Dominyk Tiller <[email protected]>
Date: Thu Jun 30 17:42:18 2016 +0100
python: clarify pour_bottle reason
commit cb3b29b824a264895434214e191d0d7ef4d51c85
Author: BrewTestBot <[email protected]>
Date: Wed Jun 29 14:18:40 2016 +0100
python: update 2.7.12 bottle.
commit 45bb1e220341894bbb7de6fd3f6df20987dc14f0
Author: Rakesh <[email protected]>
Date: Wed Jun 29 10:02:26 2016 +0530
python 2.7.12
Closes #2452.
Signed-off-by: Tim D. Smith <[email protected]>
commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
Author: BrewTestBot <[email protected]>
Date: Fri Jun 17 20:14:36 2016 +0100
python: update 2.7.11 bottle.
...
我想要版本
1 2 | git checkout cf5da05 brew install python |
最后,清理:
1 | git checkout master |
安装旧的BREW软件包版本(Flyway 4.2.0示例)在本地查找本地的homebrew git dir或克隆homebrew/homebrew core
或
如果在
以下是通过BREW安装旧版nginx的示例:
NGXNX公式提交日志
见
nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049 。
从那里,我们可以安装带有sha和raw git url的
目前,安装特定公式版本的旧方法已被弃用。所以我们似乎必须使用
1 2 | > brew edit icu4c # drops you to editor |
在这里,您必须将
1 2 3 4 | url"https://ssl.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz" mirror"https://github.com/unicode-org/icu/releases/download/release-62-1/icu4c-62_1-src.tgz" version"62.1" sha256"3dd9868d666350dda66a6e305eecde9d479fb70b30d5b55d78a1deffb97d5aa3" |
然后运行
我试过这里的大多数解决方案,它们都过时了。我必须把这里的一些想法和我自己的工作结合起来。因此,我创建了一个脚本来帮助我完成繁重的工作,您可以在这里找到。
用途:
我刚刚把旧版本的ElasticSearch复制到了
1 2 3 | $ 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 |
就是这样。也许它对任何人都有用。
将library/formula/postgresql.rb第8行更新为
1 | http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2 |
和MD5在第9行到
1 | fcc3daaf2292fa6bf1185ec45e512db6 |
保存并退出。
1 2 | brew install postgres initdb /usr/local/var/postgres |
现在,在这个阶段,您可能会遇到
1 2 | kern.sysv.shmall=65536 kern.sysv.shmmax=16777216 |
再试一次
启动时运行PostgreSQL
1 | launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist |
希望有帮助:)
我决定为Maven 3.1.1创建一个公式,这与我更好的判断相反,
是的。
官方方法(根据对https://github.com/homebrew/brew/issues/6028的响应判断)
不幸的是,自制仍然没有安装旧版本的明显内置方式。
幸运的是,对于大多数的公式来说,有一种比以前需要的复杂混乱更容易的方法。以下是以
1 2 3 4 5 6 7 | brew tap-new $USER/local-tap # extract with a version seems to run a `git log --grep` under the hood brew extract --version=4.4.23 bash $USER/local-tap # Install your new version from the tap brew install [email protected] # Note this"fails" trying to grab a bottle for the package and seems to have # some odd doubling of the version in that output, but this isn't fatal. |
这将在您的自定义tap中创建
这种方法的一个潜在缺点是,您不能轻易地在版本之间来回切换,因为根据
如果你想使用
此示例显示安装旧的bash 4.4.23,这是一个很有用的示例,因为
- 首先安装带有
brew install bash 的最新版本的公式 - 然后是
brew unlink bash 。 - 然后根据下面的代码片段安装所需的旧版本
- 最后使用
brew switch bash 4.4.23 设置到您的版本的符号链接
如果您在安装旧版本后执行了
这里的步骤避免固定,因为很容易忘记,并且您可能会固定到将来变得不安全的版本(请参阅shellshock/etc)。通过这种设置,
复制、粘贴并编辑下面代码段中的
1 2 3 4 5 6 | # This search syntax works with newer Homebrew export BREW_FORMULA_SEARCH_VERSION=4.4.23 BREW_FORMULA_NAME=bash # This will print any/all commits that match the version and formula name git -C $(brew --repo homebrew/core) log \ --format=format:%H\ %s -F --all-match \ --grep=$BREW_FORMULA_SEARCH_VERSION --grep=$BREW_FORMULA_NAME |
当您确定公式中存在版本时,可以使用以下内容:
1 2 3 4 5 | # Gets only the latest Git commit SHA for the script further down export BREW_FORMULA_VERSION_SHA=$(git -C $(brew --repo homebrew/core) log \ --format=format:%H\ %s -F --all-match \ --grep=$BREW_FORMULA_SEARCH_VERSION --grep=$BREW_FORMULA_NAME | \ head -1 | awk '{print $1}') |
一旦导出了要使用的提交哈希,就可以使用它来安装该版本的包。
1 2 3 4 5 6 7 | brew info $BREW_FORMULA_NAME \ | sed -n \ -e '/^From: /s///' \ -e 's/github.com/raw.githubusercontent.com/' \ -e 's%blob/%%' \ -e"s/master/$BREW_FORMULA_VERSION_SHA/p" \ | xargs brew install |
按照公式输出中的指示将其放入路径或设置为默认shell。
对于当前不在默认BREW公式中的版本,您可以使用https://github.com/buildtools-version-taps/homebrew-versions-tap-tool中的工具轻松创建自己的tap。