Homebrew 安装特定版本的公式? [英] Homebrew install specific version of formula?

查看:17
本文介绍了Homebrew 安装特定版本的公式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How do I install a specific version of a formula in homebrew? For example, postgresql-8.4.4 instead of the latest 9.0.

推荐答案

TLDR: brew install postgresql@8.4.4在下面回答了解更多详情.

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

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

Let’s start with the simplest case:

当 Homebrew 安装一个新公式时,它会将它放在一个版本化的目录中,例如 /usr/local/Cellar/postgresql/9.3.1.然后仅全局安装指向此文件夹的符号链接.原则上,这使得在两个已安装版本之间切换非常容易.(*)

When homebrew installs a new formula, it puts it in a versioned directory like /usr/local/Cellar/postgresql/9.3.1. Only symbolic links to this folder are then installed globally. In principle, this makes it pretty easy to switch between two installed versions. (*)

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

If you have been using homebrew for longer and never removed older versions (using, for example brew cleanup), chances are that some older version of your program may still be around. If you want to simply activate that previous version, brew switch is the easiest way to do this.

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

Check with brew info postgresql (or brew switch postgresql <TAB>) whether the older version is installed:

$ 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 激活它:

We see that some older version is already installed. We may activate it using 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

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

Let’s double-check what is activated:

$ 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

注意星号*已经移动到新激活的版本

Note that the star * has moved to the newly activated version

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

(*) Please note that brew switch only works as long as all dependencies of the older version are still around. In some cases, a rebuild of the older version may become necessary. Therefore, using brew switch is mostly useful when one wants to switch between two versions not too far apart.

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

Especially for larger software projects, it is very probably that there is a high enough demand for several (potentially API incompatible) major versions of a certain piece of software. As of March 2012, Homebrew 0.9 provides a mechanism for this: brew tap & the homebrew versions repository.

该版本存储库可能包含多个公式的旧版本的反向移植.(大多只有大的和著名的,但当然他们也会有几个 postgresql 的公式.)

That versions repository may include backports of older versions for several formulae. (Mostly only the large and famous ones, but of course they’ll also have several formulae for postgresql.)

brew search postgresql 会告诉你去哪里找:

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

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

We can simply install it by typing

$ 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 删除.)以下内容是等效的:

Note that this has automatically tapped the homebrew/versions tap. (Check with brew tap, remove with brew untap homebrew/versions.) The following would have been equivalent:

$ brew tap homebrew/versions
$ brew install postgresql8

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

As long as the backported version formulae stay up-to-date, this approach is probably the best way to deal with older software.

列出以下方法主要是为了完整性.两者都试图从 brew 存储库中复活一些不死公式.由于依赖关系发生变化、公式规范中的 API 发生变化,或者仅仅是下载 URL 发生变化,事情可能会也可能不会起作用.

The following approaches are listed mostly for completeness. Both try to resurrect some undead formula from the brew repository. Due to changed dependencies, API changes in the formula spec or simply a change in the download URL, things may or may not work.

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

Since the whole formula directory is a git repository, one can install specific versions using plain git commands. However, we need to find a way to get to a commit where the old version was available.

a) 历史时期

2011 年 8 月和 2014 年 10 月之间,自制软件有一个 brew versions 命令,它使用各自的 SHA 哈希值输出所有可用版本.截至 2014 年 10 月,您必须先执行 brew tap homebrew/boneyard 才能使用它.正如水龙头的名称所暗示的那样,您可能只应将其作为最后的手段.

Between August 2011 and October 2014, homebrew had a brew versions command, which spat out all available versions with their respective SHA hashes. As of October 2014, you have to do a brew tap homebrew/boneyard before you can use it. As the name of the tap suggests, you should probably only do this as a last resort.

例如

$ 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 使用其内部启发式方法吐出它可以找到的所有版本,并向您展示一种检索旧公式的方法.试试看吧.

As you can see, it advises against using it. Homebrew spits out all versions it can find with its internal heuristic and shows you a way to retrieve the old formulae. Let’s try it.

# 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 版本,我们可以重新安装最新的公式以保持我们的存储库干净:

Now that the older postgresql version is installed, we can re-install the latest formula in order to keep our repository clean:

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

brew switch 是您在新旧之间转换的朋友.

brew switch is your friend to change between the old and the new.

b) 史前时代

对于特殊需求,我们也可以尝试自己挖掘自制软件仓库.

For special needs, we may also try our own digging through the homebrew repo.

$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb

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

git log -S looks for all commits in which the string '8.4.4' was either added or removed in the file Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb. We get two commits as a result.

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 或多或少保证有效):

Obviously, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 is the commit we’re interested in. As this commit is pretty old, we’ll try to downgrade the complete homebrew installation (that way, the formula API is more or less guaranteed to be valid):

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

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

You may skip the last command to keep the reference in your git repository.

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

One note: When checking out the older commit, you temporarily downgrade your homebrew installation. So, you should be careful as some commands in homebrew might be different to the most recent version.

这并不太难 然后你可以将其上传到您自己的存储库.曾经是 Homebrew-Versions,但现在已停产.

It’s not too hard and you may then upload it to your own repository. Used to be Homebrew-Versions, but that is now discontinued.

如果你想保留某个版本,比如 postgresql,在你进行自然的 brew 更新时阻止它被更新;brew upgrade 过程,你可以pin一个公式:

If you want to keep a certain version of, say postgresql, around and stop it from being updated when you do the natural brew update; brew upgrade procedure, you can pin a formula:

$ brew pin postgresql

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

Pinned formulae are listed in /usr/local/Library/PinnedKegs/ and once you want to bring in the latest changes and updates, you can unpin it again:

$ brew unpin postgresql

这篇关于Homebrew 安装特定版本的公式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆