如何在自制程序中安装特定版本的公式?例如,postgresql-8.4.4而不是最新的9.0。
当前回答
官方方法(从对https://github.com/Homebrew/brew/issues/6028 )
不幸的是,Homebrew仍然没有明显的内置方式来安装旧版本。
幸运的是,对于大多数公式来说,有一种比过去必要的复杂混乱更容易的方法。以下是使用bash作为示例的完整说明:
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 bash@4.4.23
# 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.
这将创建formula@version在您可以按照上面的示例安装的自定义抽头中。一个重要的注意事项是,如果您之前安装了默认/最新版本的公式,那么可能需要brew unlink bash,然后再brew linkbash@4.4.23以便使用您的特定版本的Bash(或安装了最新版本和较旧版本的任何其他公式)。
这种方法的一个潜在缺点是,你不能轻易地在不同版本之间来回切换,因为根据brew的说法,这是一种“不同的配方”。
如果你想使用酿造开关$FORMULA$VERSION,你应该使用下一个方法。
脚本化方法(推荐)
这个示例显示了安装较旧的bash 4.4.23,这是一个有用的示例,因为bash公式当前安装bash 5。
首先使用brew install bash安装最新版本的公式然后酿造unlink bash然后按照下面的代码段安装所需的旧版本最后使用brew开关bash 4.4.23设置到您版本的符号链接
如果您在安装旧版本后执行了brew升级,而没有先安装最新版本,那么最新版本的安装将与旧版本相冲突,除非您首先执行brew pin bash。
这里的步骤避免了钉扎,因为这很容易忘记,并且您可能会钉到将来变得不安全的版本(请参见Shellshock等)。通过这种设置,brew升级不会影响Bash的版本,您可以始终运行brew switch Bash来获取可切换到的版本列表。
复制、粘贴和编辑下面代码段中的导出行,以更新所需的版本和公式名称,然后按原样复制和粘贴其余内容,它将使用这些变量来实现神奇的效果。
# 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
当您确定公式中存在版本时,可以使用以下方法:
# 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}')
一旦导出了要使用的提交哈希,就可以使用它来安装该版本的包。
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
按照公式输出中的指示将其放入PATH或设置为默认shell。
其他回答
更新Library/Formal/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无法创建共享内存段错误,要解决这个问题,请像这样更新/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
希望有助于:)
自制软件/版本的问题是,必须有人在存储库中列出特定版本的软件才能使用它。此外,由于不再支持brew版本,因此需要另一种解决方案。对于指示使用brew开关的解决方案,这只在您尚未执行brew清理时有效,因为该版本需要存在于您的计算机上。
我遇到了一个问题,想安装一个特定的旧版本的docker机器,它没有在自制软件/版本中列出。我使用下面的方法解决了这个问题,它也适用于任何brew安装的软件。下面的示例将使用docker机器作为我希望从版本0.5.0降级到0.4.1的包。
转到自制公式目录。您可以通过运行brew info[任何包名称]来确定这一点。例如,brew info docker机器给我一行代码路径-/usr/local/Cellar/docker-machine/0.5.0。这告诉我,在我的机器上,自制程序安装在/usr/local和我的公式默认情况下,目录位于/usr/local/Library/Formula找到包的特定公式文件(.rb)。因为我想降级docker-machine,所以可以看到docker-machane.rb文件。获取此公式文件的版本历史记录。输入git-logdocker-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 5970e1af9b13dcbefd281ae57c9ab90316ba423。以上提交开始使用版本0.5.0(git日志条目从最新日期到最早日期列出)。
获取公式文件的早期版本。使用步骤#3中的commit标记(可以使用前6个字符),可以使用以下方法获得公式文件的旧版本:git checkout 5970e1 docker-machine.rb卸载当前软件包版本。只需运行正常的brew命令即可卸载包的当前版本。例如brew卸载docker机器安装较旧的软件包版本现在,您只需运行正常的brew安装命令,它将安装您签出的公式。例如,酿造安装码头机
如果需要,您可能需要使用brew link docker机器重新链接。
如果您想在任何时候恢复到特定软件包的最新版本,请转到Formula目录并在公式文件(.rb)上发出以下命令
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
然后,您可以brew卸载docker机器和brew安装docker机器,以获得最新版本,并使其继续下去。
我已经尝试了这里的大多数解决方案,但它们已经过时了。我不得不把这里的一些想法与我自己的工作结合起来。因此,我创建了一个脚本来帮助我完成你可以在这里找到的繁重任务
用法:
brewv.sh formula_name desired_version
目前,安装特定公式版本的旧方法已被弃用。因此,我们似乎必须使用brew edit[公式]。例如,假设我们要安装icu4c的62.1版本(例如postgresql10.5需要)
> brew edit icu4c
# drops you to editor
在这里,您必须将url、version和sha256(可能也是镜像)更改为相应的62.1字符串。
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"
然后运行brew重新安装icu4c,最终下载62.1版本。
我创建了一个工具来简化这个答案中规定的过程。
要查找a.b.c版本的软件包pkg,请运行:
$ brew-install-specific pkg@a.b.c
这将列出pkg-homebrew公式中提到给定版本的提交及其GitHub URL。
Matching versions:
1. pkg: update a.b.c bottle.
https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
2. pkg: release a.b.c-beta
https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
3. pkg a.b.c
https://github.com/Homebrew/homebrew-core/commit/<COMMIT-SHA>
Select index:
验证来自给定URL的提交,并输入所选提交的索引。
Select index: 2
Run:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb
复制并运行给定的命令进行安装。
推荐文章
- Homebrew:以新的formula@version格式列出可用版本
- 错误:无法在ARM处理器上的Homebrew中安装英特尔默认前缀(/usr/local)
- 酿造更新失败:未跟踪的工作树文件将被合并覆盖
- 在MacOS X上推荐用什么方式安装Node.js、nvm和npm ?
- 我如何安装imagemagick与自制?
- 我如何知道哪些自制配方是可升级的?
- "ERROR:root:code for hash md5 was not found"当使用任何hg mercurial命令时
- homebrew、macports或其他软件包安装工具的区别/用途是什么?
- Ruby Bundle Symbol not found: _SSLv2_client_method (LoadError)
- Virtualenvs中的破引用
- brew install XXX和brew cask install XXX有什么区别
- Brew安装docker不包括docker引擎?
- 我如何使用brew安装Python作为默认的Python?
- 如何用自制程序更新公式?
- 在安装Homebrew后,我得到' zsh:命令未找到:brew '