Homebrew įdiegti konkrečią formulės versiją?

Kaip įdiegti konkrečią formulės versiją į "Homebrew"? Pavyzdžiui, postgresql-8.4.4 vietoj naujausios 9.0.

Sprendimas

TLDR: brw install postgresql@8.4.4 Daugiau informacijos rasite atsakyme žemiau.


(Pakeičiau savo atsakymą, kad išsamiau aprašyčiau senesnių programinės įrangos versijų diegimo ir naudojimo su "Homebrew" darbo eigą. Jei senoji versija jums pasirodė geresnė, galite pridėti pastabą.*) Pradėkime nuo paprasčiausio atvejo:

  1. Patikrinkite, ar versija jau įdiegta (bet neaktyvuota)

    Kai "Homebrew" įdiegia naują formulę, ji patalpinama į versijų katalogą, pavyzdžiui, /usr/local/Cellar/postgresql/9.3.1. Tada globaliai įdiegiamos tik simbolinės nuorodos į šį aplanką. Iš esmės taip gana lengva perjungti dvi įdiegtas versijas. (*) Jei "Homebrew" naudojate ilgiau ir niekada nepašalinote senesnių versijų (pavyzdžiui, naudodami brew cleanup), yra tikimybė, kad kokia nors senesnė jūsų programos versija vis dar gali būti išlikusi. Jei norite paprasčiausiai įjungti ankstesnę versiją, brew switch yra paprasčiausias būdas tai padaryti. Naudodami brew info postgresql (arba brew switch postgresql) patikrinkite, ar įdiegta senesnė versija:

$ 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

Matome, kad jau įdiegta tam tikra senesnė versija. Galime ją įjungti naudodami 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

Dar kartą patikrinkime, kas aktyvuota:

$ 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

Atkreipkite dėmesį, kad žvaigždutė * persikėlė į naujai aktyvuotą versiją () Atkreipkite dėmesį, kad brew switch veikia tik tol, kol yra visos senesnės versijos priklausomybės. Kai kuriais atvejais gali prireikti iš naujo atkurti senesnę versiją. Todėl brew switch dažniausiai naudojamas tada, kai norima perjungti dvi ne per daug nutolusias versijas.* 2) Patikrinkite, ar versija prieinama kaip tap

Ypač didžiuosiuose programinės įrangos projektuose labai tikėtina, kad yra pakankamai didelė paklausa kelioms (galimai API nesuderinamoms) pagrindinėms tam tikros programinės įrangos versijoms. Nuo 2012 m. kovo mėnesio Homebrew 0.9 pateikiamas toks mechanizmas: Homebrew versijos saugykla. Į tą versijų saugyklą gali būti įtrauktos kelių formulių senesnių versijų atgalinės versijos. (Dažniausiai tik didelės ir garsios, bet, žinoma, jose bus ir kelios postgresql formulės.) brew search postgresql parodys, kur ieškoti:

$ brew search postgresql
postgresql
homebrew/versions/postgresql8    homebrew/versions/postgresql91
homebrew/versions/postgresql9    homebrew/versions/postgresql92

Ją galime tiesiog įdiegti įvesdami

$ 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
# …

Atkreipkite dėmesį, kad tai automatiškai įtraukė homebrew/versions čiaupą. (Patikrinkite su brew tap, pašalinkite su brew untap homebrew/versions.) Toliau pateiktas tekstas būtų lygiavertis:

$ brew tap homebrew/versions
$ brew install postgresql8

Kol palaikomų versijų formulės išlieka atnaujintos, šis metodas tikriausiai yra geriausias būdas dirbti su senesne programine įranga. 3) Išbandykite kokią nors formulę iš praeities

Toliau išvardyti metodai pateikiami daugiausia dėl išsamumo. Abiem atvejais bandoma prikelti kokią nors nemirtingą formulę iš alaus saugyklos. Dėl pasikeitusių priklausomybių, formulės specifikacijoje esančių API pakeitimų ar tiesiog pasikeitusio atsisiuntimo URL viskas gali veikti arba neveikti. Kadangi visas formulės katalogas yra "git" saugykla, konkrečias versijas galima įdiegti naudojant paprastas "git" komandas. Tačiau mums reikia rasti būdą, kaip patekti į reviziją, kurioje buvo galima naudoti senąją versiją. a) istoriniai laikai Nuo 2011 m. rugpjūčio mėn. iki 2014 m. spalio mėn. "Homebrew" turėjo komandą brew versions, kuri išpylė visas turimas versijas su jų atitinkamais SHA hash'ais. Nuo 2014 m. spalio mėn. prieš naudodami šią komandą turite atlikti brew tap homebrew/boneyard. Kaip rodo čiaupo pavadinimas, tikriausiai turėtumėte tai daryti tik kraštutiniu atveju. Pvz.

$ 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

Kaip matote, jame patariama jo nenaudoti. Homebrew išpila visas versijas, kurias gali rasti, naudodama savo vidinę euristiką, ir parodo būdą, kaip gauti senąsias formules. Pabandykime tai padaryti.

# 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

Dabar, kai įdiegta senesnė postgresql versija, galime iš naujo įdiegti naujausią formulę, kad mūsų saugykla būtų švari:

$ git checkout -- Library/Formula/postgresql.rb

brew switch yra jūsų draugas, kad galėtumėte pakeisti senąją versiją į naująją. b) priešistoriniai laikai Esant ypatingiems poreikiams, taip pat galime pabandyti patys perkasti homebrew repozitoriumą.

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

git log -S ieško visų pakeitimų, kuriuose eilutė '8.4.4' buvo pridėta arba pašalinta faile Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb. Dėl to gauname du pakeitimus.

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

Akivaizdu, kad fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 yra mus dominantis pakeitimas. Kadangi šis pakeitimas yra gana senas, pabandysime atnaujinti visą "Homebrew" įdiegimą (taip bus daugiau ar mažiau užtikrinta, kad formulės API bus galiojanti):

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

Galite praleisti paskutinę komandą, kad išsaugotumėte nuorodą savo git saugykloje. Pastaba: kai tikrinate senesnį įsipareigojimą, laikinai sumažinate savo "Homebrew" diegimo lygį. Todėl turėtumėte būti atsargūs, nes kai kurios "Homebrew" komandos gali skirtis nuo naujausios versijos. 4) Rankiniu būdu parašykite formulę

[Tai nėra labai sunku] (https://docs.brew.sh/How-to-Create-and-Maintain-a-Tap) ir tada galite ją įkelti į savo saugyklą. Anksčiau buvo Homebrew-Versions, bet dabar to nebėra. A.) Premija: Prisegimas

Jei norite išlaikyti tam tikrą, tarkime, postgresql, versiją ir sustabdyti jos atnaujinimą, kai atliekate natūralią brew update; brew upgrade procedūrą, galite prisegti formulę:

$ brew pin postgresql

Prisegtos formulės yra išvardytos /usr/local/Library/PinnedKegs/, o kai norėsite įvesti naujausius pakeitimus ir atnaujinimus, galėsite jas vėl atjungti:

$ brew unpin postgresql
Komentarai (48)

Aš atradau geresnį alternatyvų sprendimą nei kiti sudėtingi sprendimai.

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

Tai parsisiųs ir įdiegs "PostgreSQL 8.4.8


Radau šį sprendimą, pradėdamas sekti paieškos žingsnius ir komentarą repo .

Po nedidelio tyrimo nustatė, kad kažkas turi retų formuliarų kolekciją, su kuria galima užvirinti.


Jei ieškote "MySQL 5.1.x", pabandykite tai.

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

Atnaujinti Library/Formula/postgresql.rb 8 eilutę į

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

Ir MD5 9 eilutėje į

fcc3daaf2292fa6bf1185ec45e512db6

Išsaugokite ir išeikite.

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

Šiame etape galite susidurti su postgresql negalėjo sukurti bendros atminties segmento klaida, kad ją apeitumėte, atnaujinkite /etc/sysctl.conf taip:

kern.sysv.shmall=65536
kern.sysv.shmmax=16777216

Išbandykite initdb /usr/local/var/postgres dar kartą, ir viskas turėtų vykti sklandžiai.

Kaip paleisti postgresql paleidimo metu

launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist

Tikiuosi, kad tai padės :)

Komentarai (0)