Jak mogę zainstalować określoną wersję formuły w homebrew? Na przykład, postgresql-8.4.4 zamiast najnowszej 9.0.
TLDR: brew install [email protected]
Zobacz odpowiedź poniżej po więcej szczegółów.
(Przeedytowałem moją odpowiedź, aby dać bardziej dokładny przepływ pracy dla instalacji/używania starszych wersji oprogramowania z homebrew. Nie krępuj się dodać notatki, jeśli znalazłeś starą wersję lepszą.*) Zacznijmy od najprostszego przypadku:
Kiedy homebrew instaluje nową formułę, umieszcza ją w katalogu z wersją, takim jak /usr/local/Cellar/postgresql/9.3.1
. Tylko dowiązania symboliczne do tego katalogu są następnie instalowane globalnie. W zasadzie, to sprawia, że całkiem łatwo jest przełączać się pomiędzy dwoma zainstalowanymi wersjami. (*)
Jeśli używasz homebrew od dłuższego czasu i nigdy nie usunąłeś starszych wersji (używając na przykład brew cleanup
), istnieje prawdopodobieństwo, że jakaś starsza wersja twojego programu może wciąż istnieć. Jeśli chcesz po prostu aktywować tę poprzednią wersję, brew switch
jest najprostszym sposobem aby to zrobić.
Sprawdź za pomocą brew info postgresql
(lub brew switch postgresql <TAB>
) czy starsza wersja jest zainstalowana:
$ 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
Widzimy, że jakaś starsza wersja jest już zainstalowana. Możemy ją aktywować za pomocą 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
Sprawdźmy dwukrotnie co jest aktywowane:
$ 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
*
została przeniesiona na nowo aktywowaną wersję
() Proszę zauważyć, że brew switch
działa tylko tak długo jak wszystkie zależności starszej wersji są nadal dostępne. W niektórych przypadkach, przebudowa starszej wersji może być konieczna. Dlatego użycie brew switch
jest przydatne głównie wtedy, gdy chcemy przełączyć się pomiędzy dwoma wersjami, które nie są zbyt odległe od siebie.
2) Sprawdź, czy dana wersja jest dostępna jako tapSzczególnie w przypadku większych projektów programistycznych, jest bardzo prawdopodobne, że istnieje wystarczająco duże zapotrzebowanie na kilka (potencjalnie niekompatybilnych API) głównych wersji danego oprogramowania. Od marca 2012, Homebrew 0.9 dostarcza mechanizm do tego: brew tap
& repozytorium homebrew versions.
To repozytorium wersji może zawierać backporty starszych wersji dla kilku formuł. (Głównie tylko tych dużych i znanych, ale oczywiście będą one miały również kilka formuł dla postgresql).
brew search postgresql
pokaże ci, gdzie szukać:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
Możemy go po prostu zainstalować wpisując
$ 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
# …
Zauważ, że to automatycznie zatrzymało kran homebrew/versions
. (Sprawdź za pomocą brew tap
, usuń za pomocą brew untap homebrew/versions
.) Następujące rozwiązanie byłoby równoważne:
$ brew tap homebrew/versions
$ brew install postgresql8
Poniższe podejścia są wymienione głównie dla kompletności. Oba próbują wskrzesić jakąś nieumarłą formułę z repozytorium browaru. Ze względu na zmienione zależności, zmiany API w specyfikacji formuły lub po prostu zmiany w adresie URL pobierania, rzeczy mogą lub nie mogą działać.
Ponieważ cały katalog formuły jest repozytorium git, można zainstalować konkretne wersje używając zwykłych komend git. Musimy jednak znaleźć sposób, aby dostać się do commitu, w którym była dostępna stara wersja.
a) czasy historyczne
Pomiędzy sierpniem 2011 a październikiem 2014, homebrew posiadało komendę brew versions
, która wypluwała wszystkie dostępne wersje wraz z ich odpowiednimi hashami SHA. Od października 2014 roku, musisz wykonać brew tap homebrew/boneyard
zanim będziesz mógł go użyć. Jak sugeruje nazwa kranu, prawdopodobnie powinieneś to zrobić tylko w ostateczności.
Np.
$ 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
Jak widać, odradza jego użycie. Homebrew wypluwa wszystkie wersje, które może znaleźć za pomocą swojej wewnętrznej heurystyki i pokazuje sposób na odzyskanie starych formuł. Wypróbujmy to.
# 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
Teraz, gdy starsza wersja postgresql jest zainstalowana, możemy ponownie zainstalować najnowszą formułę, aby utrzymać nasze repozytorium w czystości:
$ git checkout -- Library/Formula/postgresql.rb
brew switch
jest twoim przyjacielem do zmiany pomiędzy starą i nową wersją.
b) czasy prehistoryczne
Dla specjalnych potrzeb, możemy również spróbować własnego kopania przez homebrew repo.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
git log -S
szuka wszystkich commitów, w których ciąg '8.4.4'
został dodany lub usunięty w pliku Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb
. W wyniku tego otrzymujemy dwa commity.
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
Oczywiście, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
jest commitem, który nas interesuje. Ponieważ ten commit jest dość stary, postaramy się zaktualizować całą instalację homebrew (w ten sposób API formuły będzie mniej więcej gwarantowane, że jest ważne):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
Jeśli chcesz zachować pewną wersję, na przykład postgresql, i nie dopuścić do jej uaktualnienia, gdy wykonujesz naturalną procedurę brew update; brew upgrade
, możesz przypiąć formułę:
$ brew pin postgresql
Przypięte formuły są wymienione w /usr/local/Library/PinnedKegs/
i kiedy chcesz wprowadzić najnowsze zmiany i aktualizacje, możesz unpin go ponownie:
$ brew unpin postgresql
Ja'e odkryłem lepsze alternatywne rozwiązanie, niż inne skomplikowane rozwiązania.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Spowoduje to pobranie i zainstalowanie PostgreSQL 8.4.8
Znalazłem to rozwiązanie, zaczynając wykonywać kroki wyszukiwania repo i komentarz w repo .
Po małych badaniach znalazłem, że ktoś ma kolekcję rzadkich formularzy do warzenia się z.
Jeśli szukasz MySQL 5.1.x, spróbuj tego.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
Aktualizacja w Library/Formula/postgresql.rb linia 8 do
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
I MD5 w linii 9 do
fcc3daaf2292fa6bf1185ec45e512db6
Zapisz i wyjdź.
brew install postgres
initdb /usr/local/var/postgres
Teraz na tym etapie możesz napotkać błąd postgresql could not create shared memory segment
, aby to obejść zaktualizuj /etc/sysctl.conf
w ten sposób:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Spróbuj initdb /usr/local/var/postgres
ponownie, i powinno działać gładko.
Aby uruchomić postgresql przy starcie
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
Mam nadzieję, że to pomoże :)