Homebrew установить конкретную версию формулы? - PullRequest
1980 голосов
/ 21 октября 2010

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

Ответы [ 24 ]

2327 голосов
/ 11 ноября 2010

TLDR: brew install postgresql@8.4.4 Подробнее см. ответ ниже .


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

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

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

Когда homebrew устанавливает новую формулу, она помещает ее в каталог с версиями, например /usr/local/Cellar/postgresql/9.3.1.Только символические ссылки на эту папку устанавливаются глобально.В принципе, это позволяет довольно легко переключаться между двумя установленными версиями.(*)

Если вы использовали homebrew дольше и никогда не удаляли более старые версии (например, 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 version хранилище.

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

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

# 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) доисторические времена

Для особых нужд мы также можем попробовать копаться в доморощенном репо.

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

git log -S ищет все коммиты, в которыхСтрока '8.4.4' была добавлена ​​или удалена в файле Library/Taps/homebrew/homebrew-core/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.

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

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

Это не слишком сложно и выможет затем загрузить его в свой собственный репозиторий.Раньше это было Homebrew-Versions , но теперь оно больше не поддерживается.

A.) Бонус: закрепление

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

$ brew pin postgresql

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

$ brew unpin postgresql
733 голосов
/ 23 марта 2012

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

Теперь, когда 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
444 голосов
/ 14 декабря 2011

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

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 в разделе Внешние команды .

.
220 голосов
/ 20 июля 2013

Обновление: 1/15/2015

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

Я нашел лучшее альтернативное решение, чем другие сложные решения.

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

Это загрузит и установит PostgreSQL 8.4.8


Я нашел это решение, начав выполнять шаги поиска репо и комментарий в репо.

После небольшого исследования выяснилось, что у кого-то есть своя коллекция редких формул.


Если вы ищете MySQL 5.1.x, попробуйте.

brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
89 голосов
/ 17 октября 2011

В соответствии с предложением @ halfcube, это работает очень хорошо:

  1. Найдите нужную библиотеку в https://github.com/Homebrew/homebrew-core/tree/master/Formula
  2. Щелкните по ней: https://github.com/Homebrew/homebrew-core/blob/master/Formula/postgresql.rb
  3. Нажмите кнопку «истории», чтобы просмотреть старые коммиты: https://github.com/Homebrew/homebrew-core/commits/master/Formula/postgresql.rb
  4. Нажмите на нужный вам: «postgresql: обновить версию до 8.4.4», https://github.com/Homebrew/homebrew-core/blob/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
  5. Нажмите на «сырую» ссылку: https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
  6. brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
72 голосов
/ 24 февраля 2016

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

  1. Перейти к https://github.com/Homebrew/homebrew-core

  2. Нажмите t на клавиатуре, чтобы активировать поиск файлов.

  3. Определите формулу, которая выглядит наиболее релевантной, возможно: Formula/mysql.rb, перенесет вас в местоположение файла forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb.

  4. Посмотрите историю изменений, нажав кнопку History, которая находится по адресу https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb. Если вы заинтересованы в MySQL 5.7.10, вы можете щелкнуть последнюю редакцию до до 5.7.11, которая переходит к фиксации GitHub:

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

ПРИМЕЧАНИЕ. Возможно, вам придется просматривать историю коммитов в вашей консоли в соответствии с предложением GitHub, если история коммитов не загружается в ваш браузер. Замените коммит SHA выше в URL, если вы хотите увидеть этот коммит на GitHub. Также можно перейти к шагу 7 ниже.

  1. Нажмите кнопку «Просмотр», чтобы просмотреть источник файла mysql.rb после применения фиксации.

  2. Затем нажмите кнопку «Сырье» для просмотра необработанного источника.

  3. Скопируйте URL. Либо создайте URL-адрес самостоятельно с именем файла mysql.rb, чтобы определить свою формулу и конкретную версию этой формулы (идентифицируется с помощью SHA-коммитта в приведенном ниже URL-адресе).

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

  4. Установите его с помощью $ brew install [URL from step 7]

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

ПРИМЕЧАНИЕ. Этот ответ был обновлен с учетом удаления веб-сайта braumeister.org. Применяется тот же принцип, braumeister просто предоставил удобный для новичков способ навигации по формулам.

28 голосов
/ 13 февраля 2012

Я просто использовал Homebrew, чтобы вернуться к Maven 2.2.1, так как простой brew install maven установил Maven 3.0.3.

Сначала вам нужно оставить там Maven Dir, чтобы

$ brew unlink maven

Используйте команду brew tap

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

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

Редактировать: Вы также можете просто brew switch maven 2.2.1 переключиться на другую версию.

Редактировать: Проект Apache Maven реорганизовал свое репо.Обновил этот ответ, чтобы учесть это изменение.

21 голосов
/ 09 июля 2012

Основываясь на рабочем процессе, описанном @ tschundeee и @ Обновление Дебилски 1 , я автоматизировал процедуру и добавил очистку в этого сценария .

Загрузите его , поместите его на свой путь и brewv <formula_name> <wanted_version>.Для конкретного ОП это будет:

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

:)

15 голосов
/ 13 декабря 2018

Большинство других ответов уже устарели.К сожалению, у Homebrew до сих пор нет встроенного способа установки устаревшей версии, если только эта версия не существует в виде отдельной формулы (например, python@2, postgresql@9.4…).

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

  1. Поиск правильной версии в журналах:

    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›
    

    Это покажет список хэшей фиксации.Возьмите тот, который подходит (в основном это должно быть довольно очевидно, и обычно это самый последний (то есть верхний).

  2. Найдите URL, по которому формула находится в вышестоящем репозитории:

    brew info ‹formula› | grep ^From:
    
  3. Исправить URL:

    1. Заменить github.com на raw.githubusercontent.com
    2. Заменить blob/master хэшем коммитамы нашли на первом шаге.
  4. Установите нужную версию, заменив master в ранее найденном URL на хэш коммита, например:

    brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
    

(На последнем шаге может потребоваться выполнение brew unlink ‹formula› перед этим.)


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

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 5 устанавливается bash 4.4.23, хотя, если вы выполнили brew upgradeпотом bash 5 будет установлен поверх, если вы сначала не выполнили brew pin bash.Вместо того, чтобы сделать это более плавным, БЕЗ закрепления, вы должны сначала установить последнюю версию с brew install bash, затем brew unlink bash, затем установить старую версию, которую вы хотите, в соответствии с приведенным выше сценарием, а затем использовать brew switch bash 4.4.23, чтобы установить символические ссылки на старуюверсия.Теперь brew upgrade не должно влиять на вашу версию Bash.Вы можете brew switch bash получить список версий, на которые можно переключиться.


Альтернатива с использованием настраиваемого локального касания

Другой способ достижения той же цели, по-видимому, заключается в следующем::

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 bash@4.4.23
# 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.

Это создает formula@version в вашем пользовательском кране, который вы можете установить согласно приведенному выше примеру.Недостатком является то, что вам, вероятно, все еще нужно brew unlink bash, а затем brew link bash@4.4.23, чтобы использовать конкретную версию Bash или любую другую формулу.

...