Питання Homebrew встановити конкретну версію формули?


Як мені встановити конкретну версію формули у домобілі? Наприклад, postgresql-8.4.4 замість останнього 9.0.


1713
2017-10-21 12:58


походження


Дотримуйтесь цих інструкцій: effectif.com/mac-os-x/.... - Alex Sharp
перевірте stackoverflow.com/a/3949908/3256989 - ultraon
Протягом багатьох років відповідь складалася. Станом на 2018 рік nodejs як приклад: brew search node@ потім brew install node@8 - MarkHu


Відповіді:


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

Почнемо з найпростішого випадку:

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 & the доморощені версії сховище

Це сховище версій може містити назад-версії для старих версій для декількох формул. (Переважно тільки великі та знамениті, але, звичайно, у них також буде кілька формул для 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 Ваш друг змінюється між старим і новим.

б) доісторичні часи

За особливими потребами ми також можемо спробувати власне копання через власну репо.

$ 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 це зобов'язання, в якому ми зацікавлені. Оскільки ця фіксація досить стара, ми намагатимемось знизити повну інсталяцію додому (таким чином, 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-версії.

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

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

$ brew pin postgresql

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

$ brew unpin postgresql

2120
2017-11-11 20:04



Ви також можете просто перевірити формулу, використовуючи git checkout fa992 -- Library/Formula/postgresql.rb. Коли ви закінчите, ви можете скасувати зміни до формули за допомогою git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb. - mipadi
Примітка: на новій домашній установці, вам може знадобитися brew update встановити його Git repo. - Bluu
це здається brew versions більше не працює? - jrmgx
Це смішно складно. - Dogweather
На сьогодні правильний каталог для виконання ручних команд до сховища - це cd $(brew --repository)/Library/Taps/homebrew/homebrew-core, то можна використовувати git checkout 4cce79d -- Formula/go.rb і HOMEBREW_NO_AUTO_UPDATE=1 brew install go. - Calin


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

Тепер, коли 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

633
2018-03-22 23:29



Схоже, найпростіший, але коли я копіюю і встав, отримую fatal: Not a git repository (or any of the parent directories): .git. я просто cd замість цього (без FORMULANAME.rb), а потім виконайте git checkout 120938 - Ramon Tayag
@RamonTayag, у мене була така ж проблема. Обов'язково cd /usr/local перший. - gjb
Я знайшов вам необхідний крок 3.5: brew unlink FORMULANAME - Intentss
brew versions <formula> більше не підтримується. - Emmanuel Joubaud
@ dem7w2, ви можете створити символьні посилання з brew link --force postgresql@9.5. Якщо ви вже встановили нову версію та хочете, щоб стара версія була за замовчуванням, вам знадобиться --overwrite там теж. - Ryan


Тепер існує набагато простіший спосіб встановити стару версію формули, яку ви раніше встановили. Просто використовуйте

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 просто змінює символічні посилання, це дуже швидко. Див. Додаткову документацію на Wikibot Homebrew під Зовнішні команди.


425
2017-12-14 16:33



Я спробував це, і це було з повідомленням "33 посилання, створені для /usr/local/Cellar/node/0.4.7", але коли я запускаю вузол пізніше, він не вдається з повідомленням "-bash: / usr / local / bin / node: відсутній такий файл або каталог ". Будь-яка ідея про те, що могло бути не так? Примітка. Я завантажив 0.4.7 вручну і помістив його в каталог погребу, тому що я не знаю, як завантажити bethting, але останню версію вузла, використовуючи brew. - Soroush Hakami
Я сподіваюся, що ви знаєте, що є щось називається nvm [github.com/creationix/nvm]! - Gaurav Agarwal
Вау ... бажаю, щоб це було обрано як правильна відповідь! +1 - Larry
Я покладаюсь на версію пакету, яка вже встановлена. Якщо вам не вистачає версії, вам все одно доведеться застосувати обрану відповідь. - Nic Strong
@NicStrong Дійсно, brew switch покладається на бажану версію, яка вже встановлена. На жаль, однак прийнята зараз відповідь є неймовірно марною, заплутаною та застарілою. Там  є  краще відповіді нижче які є багато чого більш корисним. - GDP2


Оновлення: 15.15.2015

  • Знайдіть історію виконання потрібного програмного забезпечення та версії. наприклад, Мені потрібно перейти з docker версії 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

183
2017-07-19 23:42



Це єдине, що працювало для мене. Дуже нерозумно, що менеджер пакетів вимагає так багато уваги, щоб встановити попередню версію. Може бути, я зіпсований рубіновим RVM і bundler, але цей процес дійсно потрібно бути оптимізованим і абстрактним. - poetmountain
Коли я намагався перейти до попередньої версії Ansible, мені довелося від'єднати формулу перед встановленням попередньої версії, як зазначено. Так перш ніж робити brew install <url>, brew unlink <formulaname>. Інакше це найпростіший і найкоротший спосіб (поки що) перейти на конкретну версію формули. - bigsweater
Працював бездоганно. - isHristov
Ви натиснете Raw кнопка на якому файлі ?! - Iulian Onofrei
Це працює, але іноді вам потрібно завантажити файл raw .rb і змінити контрольну суму, щоб Homebrew не скаржився на невідповідність SHA. GitHub, здається, має велику частину дерев репо, які колись перероблялись в 2017 році, і їх контрольні суми змінювалися. (Насправді це викликало багато плутанини в моїй команді, коли Базель почав провалитися у нестабільності хешу в липні минулого року) - Chang Qian


Я виявив краще альтернативне рішення, ніж інші комплексні рішення.

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

Це дозволить завантажити та встановити PostgreSQL 8.4.8


Я знайшов це рішення, почавши слідувати крокам пошуку репо та a коментар в репо

Після невеликого дослідження з'ясувалося, що у кого-то є колекція рідкісних формул, з якими можна розводити.


Якщо ви шукаєте MySQL 5.1.x, спробуйте це.

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

93
2017-09-19 11:55



хм brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb здавалося, зазнали невдачі з синтаксичними помилками. - Brian Armstrong
Працює бездоганно! найкраще рішення для всіх, перерахованих тут. - Nikita Volkov
@BrianArmstrong Ви звертаєтесь до HTML-форматованої версії файлу, тоді як вам потрібен необоротна версія. - Nikita Volkov
Не забувайте про це rawв URL-адресі - Faber
homebrew-versions пішло, і все було core тепер, так це загальний випадок: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb. COMMIT можна знайти, перейшовши до github.com/Homebrew/homebrew-core/commits/master/Formula/.... - PJSCopeland


По лінії пропозиції @ 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: update version to 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

51
2017-10-16 22:12



Це найпростіший спосіб встановити необхідну версію пакунку, якщо він недоступний у базовому репо як package@version - avy
Якщо ви не можете використовувати веб-інтерфейс, ви можете клонувати репо та зробити це локально: use git log master -- Formula/PACKAGENAME.rb щоб отримати історію виконання, перевірте правильну коректність, а потім запустіть brew install Formula/PACKAGENAME.rb встановити його. - chipbuster
Я думаю, вам потрібно brew unlink раніше brew install іншої версії. - studgeek
Хто це mxcl? - PJSCopeland
Я роблю це brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb але отримаєте помилку, ймовірно, через це @ знак: Error: No available formula with the name "postgresql%409.6" In formula file: /Users/maciek/Library/Caches/Homebrew/Formula/postgresql%409.6.rb Expected to find class Postgresql%4096, but only found: PostgresqlAT96. Будь-які ідеї? - msciwoj


Ви можете використовувати стратегію ідентифікації формули та певної фіксації в історії формули, яка відповідає версії пакету, який ви хочете встановити.

  1. Йти до https://github.com/Homebrew/homebrew-core

  2. Прес t на клавіатурі, щоб активувати пошук файлів.

  3. Визначте формулу, яка виглядає найбільш релевантною, можливо: Formula/mysql.rb, що приведе вас до розташування файлу на форумі: 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 commit:

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

ПРИМІТКА. Вам, можливо, доведеться переглянути історію повноважень на консолі за пропозицією GitHub, якщо історія помилок не завантажується у вашому браузері. Замініть наведене вище зобов'язання SHA у URL-адресі, якщо ви зацікавлені в тому, щоб побачити участь у GitHub. Крім того, перейдіть до кроку 7 нижче.

  1. Натисніть кнопку "Перегляд", щоб переглянути джерело файлу mysql.rb після того, як було застосовано зобов'язання.

  2. Потім натисніть кнопку «Неочікувана», щоб переглянути сировину.

  3. Скопіюйте URL-адресу. Крім того, створити URL-адресу самостійно за допомогою mysql.rb ім'я файлу, щоб визначити вашу формулу та конкретну версію цієї формули (ідентифікована commmit SHA в URL-адресі нижче).

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

  4. Встановіть його $ brew install [URL from step 7]

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

ПРИМІТКА. Ця відповідь була оновлена, щоб відповідати за видалення веб-сайту braumeister.org. Той самий принцип застосовується, braumeister просто запропонував для початківців зручний спосіб переміщення версій формули.


50
2018-02-24 05:38



На жаль, це дуже занадто далеко в списку відповідей, але це найкраще рішення. Це те, що я використовую, за винятком замість використання braumeister, я просто переходжу на сторінку Homebrew GitHub формули, яку я хочу (наприклад, для gcc go to github.com/Homebrew/homebrew/blob/master/Library/Formula/gcc.rb), а потім я проходжу через "Історію" файлу, поки не дійду до версії, яку я хочу. - Guy Kogus
Це було, безумовно, найкращим рішенням у моєму випадку - встановлення старої версії Watchman, яка не вимагала Xcode 8.1 - Zachary Keener
чудова відповідь, працювала для мене - domoarigato
Це дійсно найпростіший спосіб встановити стару версію. Відмінна відповідь - Martin M
Це працювало для мене, але мені довелося первісно розв'язати програмне забезпечення. - Brett Wagner