Вопрос: Homebrew устанавливает конкретную версию формулы?


Как установить конкретную версию формулы в homebrew? Например, postgresql-8.4.4 вместо последнего 9.0.


1683


источник


Ответы:


( Я повторно отредактировал свой ответ, чтобы дать более тщательный рабочий процесс для установки / использования старых версий программного обеспечения с доморощенным. Не стесняйтесь добавлять заметку, если вы нашли старую версию лучше. )

Начнем с простейшего случая:

1) Проверьте, установлена ​​ли версия (но не активирована)

Когда homebrew устанавливает новую формулу, она помещает ее в каталог с версиями, например /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работает только до тех пор, пока все зависимости старой версии все еще существуют. В некоторых случаях может потребоваться перестройка старой версии. Поэтому, используя brew switchв основном полезен, когда вы хотите переключиться между двумя версиями, не слишком далеко друг от друга.

2) Проверьте, доступна ли версия как кран

Особенно для более крупных программных проектов, очень вероятно, что существует достаточно высокий спрос на несколько (несовместимых с API несовместимых) основных версий определенного программного обеспечения. По состоянию на март 2012 года, Homebrew 0.9 обеспечивает механизм для этого: brew tapи варианты homebrew репозиторий.

Этот репозиторий версий может включать 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 untap homebrew/versions.) Было бы эквивалентно следующее:

$ brew tap homebrew/versions
$ brew install postgresql8

До тех пор, пока формулы с поддержкой бэкпортированной версии не будут обновлены, этот подход, вероятно, лучший способ справиться со старым программным обеспечением.

3) Попробуйте какую-то формулу из прошлого

Следующие подходы перечислены в основном для полноты. Оба пытаются воскресить какую-то формулу нежити из хранилища. Из-за измененных зависимостей API изменяется в спецификации формулы или просто изменяется URL-адрес загрузки, все может работать или не работать.

Поскольку весь каталог формул представляет собой репозиторий git, можно установить определенные версии с помощью простых команд git. Однако нам нужно найти способ добраться до коммита, где была доступна старая версия.

а) исторические времена

Между Август 2011 года и октябрь 2014 года , доморощенный имел brew versionsкоманды, которые выплюнули все доступные версии с соответствующими хэшами SHA. По состоянию на октябрь 2014 года вам нужно сделать 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

Как вы можете видеть, он советует не использовать его. Homebrew выплевывает все версии, которые он может найти с помощью своей внутренней эвристики, и показывает вам способ получить старые формулы. Давай попробуем.

# 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ваш друг изменится между старым и новым.

б) доисторические времена

Для особых нужд мы также можем попробовать наше собственное копание через репортер homebrew.

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

git log -Sищет все коммиты, в которых строка '8.4.4'был либо добавлен, либо удален в файле Library/Formula/postgresql.rb, В результате мы получаем две коммиты.

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это коммит, который нас интересует. Поскольку эта фиксация довольно старая, мы постараемся понизить полную установку homebrew (таким образом, API-формула более или менее гарантированно будет действителен):

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

Вы можете пропустить последнюю команду, чтобы сохранить ссылку в своем репозитории git.

Одна заметка: при проверке более старой фиксации вы временно отказываетесь от своей домашней установки. Итак, вы должны быть осторожны, так как некоторые команды в доморощенных могут отличаться от последней версии.

4) Вручную написать формулу

Это не слишком сложно, и вы можете загрузить его в Homebrew-версии ,

А.) Бонус: привязка

Если вы хотите сохранить определенную версию, скажем postgresql, и остановить ее от обновления, когда вы делаете естественную brew update; brew upgradeпроцедуры, вы можете штырь формула:

$ brew pin postgresql

Прикрепленные формулы перечислены в /usr/local/Library/PinnedKegs/и как только вы захотите внести последние изменения и обновления, вы можете откалывать снова:

$ brew unpin postgresql

2092



Простой рабочий процесс

Теперь, когда Homebrew / версии устарели, Homebrew / core поддерживает несколько версий формул с новым форматом именования.

Чтобы установить определенную версию, например. postgresql 9.5 вы просто запускаете:

$ brew install postgresql@9.5

Чтобы просмотреть доступные версии, выполните поиск с помощью @:

$ brew search postgresql@
==> Searching local taps...
postgresql@10.1      postgresql@9.4        postgresql@9.5        postgresql@9.6

619



Теперь гораздо проще установить более старую версию формулы, которую вы ранее устанавливали. Просто используйте

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просто меняет символические ссылки, это очень быстро. См. Дополнительную документацию на домашней вики Внешние команды ,


421



Обновление: 15.01.2012

  • Найдите историю фиксации нужного программного обеспечения и версии. например Мне нужно переключиться с докеров версии 1.4.1 на 1.3.3: https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
  • Просмотрите файл с помощью этой кнопки: enter image description here
  • Нажмите кнопку Raw: List item
  • Скопируйте URL (docker.rb url в этом примере) из адресной строки
  • brew install <url>(возможно, придется brew unlinkсначала, например, brew unlink docker)
  • brew switch docker 1.3.3
  • Вернитесь к докеру 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

174



I've discovered a better alternative solution then the other complex solutions.

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

This will download and install PostgreSQL 8.4.8


I found this solution by starting to follow the steps of searching the repo and a comment in the repo .

After a little research found that someone has a collection of rare formulars to brew up with.


If your looking for MySQL 5.1.x, give this a try.

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

92



Along the lines of @halfcube's suggestion, this works really well:

  1. Find the library you're looking for at https://github.com/mxcl/homebrew/tree/master/Library/Formula
  2. Click it: https://github.com/mxcl/homebrew/blob/master/Library/Formula/postgresql.rb
  3. Click the "history" button to look at old commits: https://github.com/mxcl/homebrew/commits/master/Library/Formula/postgresql.rb
  4. Click the one you want: "postgresql: update version to 8.4.4", https://github.com/mxcl/homebrew/blob/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
  5. Click the "raw" link: 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

48



  1. Search for your package on braumeister.org.

  2. Look at the results. You'll be at a location like this:

    http://braumeister.org/search/mysql

    where mysql is your search query.

  3. Click the one you're interested in, e.g., "mysql", navigating to a location such as http://braumeister.org/formula/mysql.

  4. Look at the revision history at the bottom of the page. If you're interested in MySQL 5.7.10, you might want to click the latest revision prior to 5.7.11, which navigates to a GitHub commit:

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

  5. Click the "View" button to view the source for the mysql.rb file after the commit was applied.

  6. Then click the "Raw" button to view the raw source.

  7. Copy the URL.

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

  8. Install it:

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

Easy peasy.


45



I just used Homebrew to go back to Maven 2.2.1 since the simple brew install maven installed Maven 3.0.3.

First you have to leave the maven dir there so

$ brew unlink maven

Use the brew tap command

$ 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

Now you can install the maven2 formula:

$ 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
$ 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" 

Edit: You can also just brew switch maven 2.2.1 to switch to a different version.

Edit: The Apache Maven project reorganized their repo. Updated this answer to account for this change.


27



Based on the workflow described by @tschundeee and @Debilski’s update 1, I automated the procedure and added cleanup in this script.

Download it, put it in your path and brewv <formula_name> <wanted_version>. For the specific OP, it would be:

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

:)


21



On the newest version of homebrew (0.9.5 as of this writing) there will be a specific recipe for the version of the homebrew keg you want to install. Example:

$ brew search mongodb
mongodb    mongodb24  mongodb26

Then just do brew install mongodb26 like normal.

In the case that you had already installed the latest version, make sure to unlink the latest version and link the desired version: brew unlink mongodb && brew link mongodb26.


11