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

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

35 ответов

Решение

(Я отредактировал свой ответ, чтобы дать более подробный рабочий процесс для установки / использования старых версий программного обеспечения с 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 & репозиторий доморощенных версий.

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

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

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

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

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

$ 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-репозитории.

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

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

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

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

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

$ brew pin postgresql

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

$ brew unpin postgresql

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

Теперь, когда версия 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

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

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

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

  • Найти историю коммитов желаемого программного обеспечения и версии. например, мне нужно переключиться с докера версии 1.4.1 на 1.3.3: https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
  • Просмотрите файл с помощью этой кнопки:
  • Нажмите кнопку Raw: Элемент списка
  • Скопируйте 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

В соответствии с предложением @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/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
  5. Нажмите "сырую" ссылку: https://raw.githubusercontent.com/Homebrew/homebrew-core/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb
  6. brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422/Library/Formula/postgresql.rb

Решение

      brew extract --version=8.4p1  openssh homebrew/cask
brew install openssh@8.4p1

Новейший openssl@8.5p1 есть ошибки после того, как я бегу brew upgrade, поэтому я успешно вернулся к предыдущей версии указанным выше способом.

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

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

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

  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

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

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

  2. Затем нажмите кнопку "Raw", чтобы просмотреть исходный код.

  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 просто предоставил удобный для новичков способ навигации по формулам.

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

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

  1. Ищите правильную версию в журналах:

    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› до.)

Официальный метод (судя по ответу на 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 link bash@4.4.23 чтобы использовать вашу конкретную версию Bash (или любую другую формулу, в которой установлена ​​последняя и более старая версия).

Потенциальным недостатком этого метода является то, что вы не можете легко переключаться между версиями, потому что согласно brew это "другая формула".

Если вы хотите иметь возможность использовать brew switch $FORMULA $VERSION Вы должны использовать следующий метод.


Скриптовый метод (рекомендуется)

В этом примере показана установка более старой версии bash 4.4.23, полезного примера, поскольку bash Формула в настоящее время устанавливает Bash 5.

  • Сначала установите последнюю версию формулы с brew install bash
  • затем brew unlink bash
  • затем установите старую версию, которую вы хотите, согласно приведенным ниже фрагментам
  • наконец использовать brew switch bash 4.4.23 настроить символические ссылки на вашу версию

Если вы выполнили brew upgrade после установки более старой версии без предварительной установки самой последней, последняя будет установлена, что приведет к тому, что ваша старая версия будет забита, если вы сначала не выполнили brew pin bash,

Шаги здесь ИЗБЕГАЮТ закрепления, потому что об этом легко забыть, и вы можете закрепить версию, которая в будущем станет небезопасной (см. Shellshock/etc). С этой настройкой brew upgrade не должно влиять на вашу версию Bash, и вы всегда можете запустить brew switch bash чтобы получить список версий, доступных для переключения.

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

# 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 или установить в качестве оболочки по умолчанию.

Доморощенный недавно поменяли. То, что раньше работало, больше не работает. Самый простой способ работы (январь 2021 г.) заключался в следующем:

  • Найдите файл для моего программного обеспечения (сначала перейдите в Формулы , найдите тот, который мне нужен, а затем нажмите «История»; для CMake это на https://github.com/Homebrew/homebrew-core/commit/master/Formula/cmake.rb)
    • Выберите желаемую версию среди ревизий, например 3.18.4, щелкните три точки в правом верхнем углу файла diff (... ) и затем щелкните Raw . Скопируйте URL.
  • Отключить старую версию brew unlink cmake
  • Установка напрямую с git URL больше не работает ( brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/2bf16397f163187ae5ac8be41ca7af25b5b2e2cc/Formula/cmake.rb не удастся)
    • Вместо этого загрузите его и установите из локального файла. curl -O https://raw.githubusercontent.com/Homebrew/homebrew-core/2bf16397f163187ae5ac8be41ca7af25b5b2e2cc/Formula/cmake.rb && brew install ./cmake.rb

Вуаля! Вы можете удалить скачанный .rb файл сейчас.

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

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

$ brew unlink maven

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

$ brew tap homebrew/ версии
Клонирование в '/usr/local/Library/Taps/homebrew-version'...
Пульт: Подсчет объектов: 590, сделано.
Удаленный: Сжатие объектов: 100% (265/265), сделано.
дистанционный: всего 590 (дельта 362), повторно использованный 549 (дельта 325)
Прием объектов: 100% (590/590), 117,49 КиБ | 79 КиБ / с, готово.
Разрешение дельт: 100% (362/362), сделано.
Постучал 50 формула

Теперь вы можете установить формулу maven2:

$ brew установить maven2
==> Загрузка 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 файлов, 3,1 млн., построено за 6 секунд
$ mvn --version
Apache Maven 2.2.1 (r801777; 2009-08-06 12:16:01-0700)
Версия Java: 1.6.0_37
Домашняя страница Java: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Язык по умолчанию: en_US, кодировка платформы: MacRoman
Имя ОС: "Mac OS X" версия: "10.7.4" arch: "x86_64" Семейство: "Mac" 

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

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

Это 2020 год, и большинство ответов устарели

Моя ситуация: postgresqlбыл повышен с 11 до 12 случайно. Я хочу оставить себе 11.

  1. Остановите БД:
brew services stop postgresql
  1. Установите Postgres 11:
brew install postgresql@11
  1. Включите это:
brew link postgresql@11 --force
  1. (Необязательно) Переименуйте каталог данных БД из postgres к postgres@11:
cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
  1. Запустите БД:
brew services start postgresql@11

Если у вас есть ошибки, проверьте /usr/local/var/log/postgresql@11.log (обратите внимание на @11).

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

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

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

:)

Ни один из других ответов не охватывает это адекватно для 2022 года, поэтому я добавляю эти инструкции, адаптированные из ответа сопровождающего Homebrew на аналогичный вопрос об установке конкретной версии Cask: /questions/50618534/ustanovit-predyiduschuyu-versiyu-chromedriver-s-brew/50618537#50618537

Удалите вашу формулу

      brew uninstall <formula>

Переключитесь на свой клонhomebrew-coreрепо и сбросьте коммит, содержащий нужную версию.

      cd "$(brew --prefix)/Library/Taps/homebrew/homebrew-core/Formula"
git log <formula>.rb # examine recent commits for <formula>
git reset --hard <commit-sha> # reset clone to last known-good commit for <formula>

Оформите новую ветку для своей версии, чтобы brew не обновлял master автоматически после каждой команды, установите свою формулу и закрепите ее.

      git checkout -b <formula>-downgrade-<version>
brew install <formula>
brew pin <formula>

Очистить

      git checkout master
brew update

Когда вы будете готовы обновить свою формулу, вы можетеbrew unpin <formula>и обновить как обычно.

Обновленный ответ, добавленный к тому, что @ lance-pollard уже опубликовал как рабочий ответ.

Как установить конкретную версию формулы (формула, используемая в этом примере terraform):

  1. Найдите файл формулы, например: https://github.com/Homebrew/homebrew-core/blob/master/Formula/terraform.rb
  2. Получить версию коммита из истории github можно с помощью https://github.com/Homebrew/homebrew-core/commits/master/Formula/terraform.rb или git log master -- Formula/terraform.rb если вы клонировали репо локально.
  3. Получите необработанный URL-адрес git с версией фиксации вашей формулы: если ссылка на формулу на github.com имеет вид https://github.com/Homebrew/homebrew-core/blob/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb, ваш необработанный URL будет быть: https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
  4. Установите его с помощью: brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb

Другие ответы здесь отличные, но если вам нужно установить более старую версию пакета и убедиться, что имя пакета изменено, вам понадобится другой подход. Это важно при использовании скриптов (в моем случае скриптов сборки PHP), которые используют brew --prefix package_name чтобы определить, какой каталог использовать для компиляции.

Если вы используете brew extract версия добавляется в конец имени пакета, что нарушит brew --prefix уважать.

Вот как установить старую версию пакета, сохранив исходное имя пакета:

      # uninstall the newer version of the package that you accidentally installed
brew uninstall --ignore-dependencies icu4c

# `extract` the version you'd like to install into a custom tap
brew tap-new $USER/local-tap
brew extract --version=68.2 icu4c $USER/local-tap

# jump into the new tap you created
cd $(brew --repository $USER/local-tap)/Formula

# rename the formula
mv icu4c@68.2.rb icu4c.rb

# change the name of the formula by removing "AT682" from the `class` definition
# the exact text you'll need to remove will be different
# depending on the version you extracted
nano icu4c.rb

# then, install this specific formula directly
brew install $(brew --repository $USER/local-tap)/Formula/icu4c.rb

Подробнее об этом я писал здесь.

В самой последней версии homebrew (0.9.5 на момент написания статьи) будет специальный рецепт для версии кегла homebrew, который вы хотите установить. Пример:

$ brew search mongodb
mongodb    mongodb24  mongodb26

Тогда просто делай brew install mongodb26 вроде нормально.

В случае, если вы уже установили последнюю версию, обязательно отмените связь с последней версией и свяжите нужную версию: brew unlink mongodb && brew link mongodb26,

Проблема с homebrew/versions в том, что кто-то должен иметь конкретную версию программного обеспечения, указанную в репозитории, чтобы вы могли ее использовать. Кроме того, так как brew versions больше не поддерживается, требуется другое решение. Для решений, которые указывают на использование brew switch, это будет работать только если вы не сделали brew cleanup так как версия должна существовать на вашем компьютере.

У меня была проблема с желанием установить конкретную старую версию docker-machine который не был указан в homebrew/versions, Я решил это, используя нижеприведенное, что также должно работать для любого установленного программного обеспечения. Пример ниже будет использовать docker-machine в качестве пакета я хочу понизить версию 0.5.0 до 0.4.1.

  1. Иди к себе домой Formula каталог.
    Вы можете определить это, запустив brew info [any package name], Например, brew info docker-machine дает мне линию, которая показывает мне путь - /usr/local/Cellar/docker-machine/0.5.0, Это говорит мне, что на моей машине, доморощенный установлен на /usr/local и мой Formula по умолчанию каталог находится в /usr/local/Library/Formula

  2. Найдите конкретный файл формулы (.rb) для вашего пакета. Так как я хочу понизить docker-machine Я вижу docker-machine.rb файл.

  3. Получить историю версий для этого файла формулы. Войти git log docker-machine.rb, Это перечислит полную историю коммитов для этого файла. Вы увидите вывод так:

...Больше 

    commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc
    Автор: BrewTestBot 
    Дата: чт 5 ноя. 16:14:18 2015 +0000

        Докер-машина: обновление бутылки 0.5.0.

    commit 8f615708184884e501bf5c16482c95eff6aea637
    Автор: Винсент Лезье 
    Дата: вторник, 27 октября, 22:25:30 2015 +0100

        докер-машина 0.5.0

        Обновлена ​​докер-машина до 0.5.0

        Закрытие #45403.

        Подписано: Доминик Тиллер 

    commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
    Автор: BrewTestBot 
    Дата: понедельник, 21 сентября 14:04:04 2015 +0100

        Докер-машина: обновление бутылки 0.4.1.

    commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd
    Автор: BrewTestBot 
    Дата: вс 16 августа 09:05:56 2015 +0100

        Докер-машина: обновление бутылки 0.4.1....Больше

Самое сложное - найти последний коммит для конкретной версии, которую вы хотите. Выше я могу сказать, что последняя версия 0.4.1 была зафиксирована с этим тэгом commit: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423, Коммиты выше этой точки начинают использовать версию 0.5.0 (записи журнала git перечислены с самой поздней до самой ранней даты).

  1. Получить предыдущую версию файла формулы. Используя тег commit из шага № 3 (вы можете использовать первые 6 символов), вы можете получить более старую версию файла формулы, используя следующую команду:

    git checkout 5970e1 docker-machine.rb

  2. Удалите текущую версию пакета. Просто запустите обычные команды brew, чтобы удалить текущую версию вашего пакета.
    Ex. brew uninstall docker-machine

  3. Установите старую версию пакета. Теперь вы можете просто запустить обычную команду brew install, и она установит формулу, которую вы получили. Ex. brew install docker-machine

Возможно, вам придется повторно связать с помощью brew link docker-machine если необходимо.

Если в любой момент вы захотите вернуться к последней версии определенного пакета, перейдите в каталог Formula и выполните следующие команды в файле формул (.rb).

git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb

Тогда ты можешь brew uninstall docker-machine а также brew install docker-machine чтобы получить последнюю версию и продолжать в том же духе.

Установите старую версию пакета brew (пример Flyway 4.2.0)

Найдите свой местный домашний git dir или локально клонируйте homebrew/homebrew-core

cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/

ИЛИ ЖЕ

git clone git@github.com:Homebrew/homebrew-core.git

Список всех доступных версий

git log master -- Formula/flyway.rb

Скопируйте идентификатор фиксации для нужной версии и установите его напрямую

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/793abfa325531415184e1549836c982b39e89299/Library/Formula/flyway.rb

Я попробовал большинство решений здесь, и они устарели. Я должен был объединить некоторые идеи отсюда с моей собственной работой. В результате я создал скрипт, который поможет мне выполнить тяжелую работу, которую вы можете найти здесь.

Использование:brewv.sh formula_name desired_version

Это может быть сделано очень легко для последней версии варева.

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)

В настоящее время старые способы установки определенных версий формул устарели. Похоже, мы должны использовать brew edit [formula], Например, мы хотим установить 62.1 версия icu4c (необходимо, например, для postgresql 10.5). Тогда вам придется

> brew edit icu4c
# drops you to editor

Здесь вам придется изменить url, version а также sha256 (возможно также mirror) к соответствующему 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 reinstall icu4c чтобы наконец загрузить 62.1 версия.

Ничего из этого не сработало для моего случая (Python), поэтому я добавлю 2 цента:

cd `brew --prefix`
git log Library/Formula/python.rb

Вывод выглядит так:

commit 9ff2d8ca791ed1bd149fb8be063db0ed6a67a6de
Author: Dominyk Tiller <dominyktiller@gmail.com>
Date:   Thu Jun 30 17:42:18 2016 +0100

    python: clarify pour_bottle reason

commit cb3b29b824a264895434214e191d0d7ef4d51c85
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date:   Wed Jun 29 14:18:40 2016 +0100

    python: update 2.7.12 bottle.

commit 45bb1e220341894bbb7de6fd3f6df20987dc14f0
Author: Rakesh <rakkesh@users.noreply.github.com>
Date:   Wed Jun 29 10:02:26 2016 +0530

    python 2.7.12

    Closes #2452.

    Signed-off-by: Tim D. Smith <git@tim-smith.us>

commit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date:   Fri Jun 17 20:14:36 2016 +0100

    python: update 2.7.11 bottle.

...

Я хочу версию 2.7.11 так что мой хэш cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9 (или же cf5da05 коротко). Далее я проверяю эту версию и устанавливаю формулу python:

git checkout cf5da05
brew install python

Наконец, уберите:

git checkout master

Вот мой простой ответ - меня очень раздражало, что для этого нет встроенного решения, поэтому я создал свой собственный ленивый «скрипт». Не стесняйтесь вносить свой вклад 😃👍🏻

      # Please define variables
packageName=<packageName>
packageVersion=<packageVersion>

# Create a new tab
brew tap-new local/$packageName

# Extract into local tap
brew extract --version=$packageVersion $packageName local/$packageName

# Verify packages is present
brew search $packageName@

# Run brew install@version as usual
brew install local/$packageName/$packageName@$packageVersion

https://gist.github.com/ArgonQQ/cff4834dab6b254cc2140bb1454b47ef

Если вы не можете найти свою версию с brew search <formula>Вы также можете попробовать просмотреть журналы фиксации для своей формулы, чтобы найти нужную версию:

Вот пример установки более старой версии nginx через brew:

Оттуда мы можем установить 1.6.3 с помощью ша и необработанного URL:

brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb

Ближе всего к ответу @Lance, но это не сработало для меня, как есть, в 2023 году с использованием M1macOS 13и пытаюсь установить конкретную версиюopencv@4.

Итог : вы должны переопределить содержимое вашего локального файла содержимым удаленного файла, найденного в репозитории brew на GitHub, который соответствует версии, которую вы хотите установить.

По сути, мы хотим обновитьurlи в файле для пакета. Но не были доступны изopencv Выпускает страницу Github и создаетsha256локально бросаетchecksumошибка для меня. Но получение их из файла из истории коммитов решает эту проблему.

Разбивка : в 5 простых шагов

  1. Сначала удалите пакет:brew uninstall opencv@4

  2. Найдите файл для правильной версии пакета, который вы хотите установить.

    1. Поиск в разделе Homebrew > Homebrew-core > Formula на Github

    2. В историиopencv.rbфайл: https://github.com/Homebrew/homebrew-core/commits/master/Formula/opencv.rb

      • Выберите нужную фиксацию, соответствующую нужной версии, скажемopencv: update 4.6.0_1 bottle.и Просмотр файла.
      • Скопируйте содержимое/скачайте файл
  3. Откройте файл в вашей системе:brew edit opencv@4

  4. Замените содержимое этого файла файлом, который вы скачали с Github.

  5. Установите пакет снова, используя.rbПуть к файлу:brew install /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/opencv.rb

Это отлично сработало для меня, тогда как ответ @Lance с использованиемbrew installдалError: Your Command Line Tools (CLT) does not support macOS 13.

Ни один из других ответов не помог мне.

Я создал инструмент, чтобы упростить процесс, описанный в этом ответе.

Чтобы найти пакет pkg с версией a.b.c, бегать:

$ brew-install-specific pkg@a.b.c

Это будет список коммитов на pkg формула homebrew, в которой указана данная версия вместе с URL-адресами GitHub.

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

Скопируйте и запустите данную команду для установки.

Вот как я понижаю KOPS (который не поддерживает управление версиями)

      # brew has a git repo on your localhost
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core

git remote -v
origin  https://github.com/Homebrew/homebrew-core (fetch)
origin  https://github.com/Homebrew/homebrew-core (push)

# find the version of kops.rb you need
git log Formula/kops.rb

# checkout old commit
# kops: update 1.18.1 bottle.
git checkout 2f0ede7f27dfc074d5b5493894f3468f27cc73f0 -- Formula/kops.rb

brew unlink kops
brew install kops

# now we have old version installed
ls -1 /usr/local/Cellar/kops/
1.18.1
1.18.2

which kops
/usr/local/bin/kops
ls -l /usr/local/bin/kops
/usr/local/bin/kops -> ../Cellar/kops/1.18.1/bin/kops
kops version
Version 1.18.1

# revert to the newest version
brew uninstall kops
git checkout -f
brew link kops
kops version
Version 1.18.2

Обновите строку 8 библиотеки / формулы / postgresql.rb до

http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2

И MD5 на линии 9 до

fcc3daaf2292fa6bf1185ec45e512db6

Сохранить и выйти.

brew install postgres
initdb /usr/local/var/postgres

Теперь на этом этапе вы можете столкнуться с postgresql could not create shared memory segment ошибка, чтобы обойти это обновление /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

Надеюсь, это поможет:)

Другие вопросы по тегам