Come installo una versione specifica di una formula in homebrew? Ad esempio, postgresql-8.4.4 invece dell'ultimo 9.0.
Come installo una versione specifica di una formula in homebrew? Ad esempio, postgresql-8.4.4 invece dell'ultimo 9.0.
Risposte:
TLDR: brew install postgresql@8.4.4
vedi la risposta sotto per maggiori dettagli.
* ( Ho modificato nuovamente la mia risposta per fornire un flusso di lavoro più approfondito per l'installazione / l'utilizzo di versioni software precedenti con homebrew. Sentiti libero di aggiungere una nota se hai trovato la versione precedente migliore. )
Cominciamo con il caso più semplice:
Quando homebrew installa una nuova formula, la inserisce in una directory con versione come /usr/local/Cellar/postgresql/9.3.1
. Solo i collegamenti simbolici a questa cartella vengono quindi installati a livello globale. In linea di principio, ciò semplifica il passaggio tra due versioni installate. (*)
Se stai usando homebrew da più tempo e non hai mai rimosso versioni precedenti (usando, ad esempio brew cleanup
), è probabile che alcune versioni precedenti del tuo programma possano essere ancora in circolazione. Se vuoi semplicemente attivare quella versione precedente, brew switch
è il modo più semplice per farlo.
Verificare con brew info postgresql
(o brew switch postgresql <TAB>
) se è installata la versione precedente:
$ 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
Vediamo che alcune versioni precedenti sono già installate. Potremmo attivarlo utilizzando 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
Ricontrolliamo cosa è attivato:
$ 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
Nota che la stella *
è passata alla versione appena attivata
(*) Nota che brew switch
funziona solo finché tutte le dipendenze della versione precedente sono ancora in circolazione. In alcuni casi, potrebbe essere necessario ricostruire la versione precedente. Pertanto, l'utilizzo brew switch
è utile soprattutto quando si desidera passare da una versione all'altra non troppo distanti.
Soprattutto per progetti software più grandi, è molto probabile che vi sia una richiesta abbastanza elevata per diverse versioni principali (potenzialmente incompatibili con le API) di un determinato software. A partire da marzo 2012, Homebrew 0.9 fornisce un meccanismo per questo: brew tap
& il repository di versioni homebrew .
Il repository di versioni può includere backport di versioni precedenti per diverse formule. (Principalmente solo quelli grandi e famosi, ma ovviamente avranno anche diverse formule per postgresql.)
brew search postgresql
ti mostrerà dove cercare:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
Possiamo semplicemente installarlo digitando
$ 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
# …
Si noti che questo ha automaticamente toccato il homebrew/versions
rubinetto. (Verificare con brew tap
, rimuovere con brew untap homebrew/versions
.) Quanto segue sarebbe stato equivalente:
$ brew tap homebrew/versions
$ brew install postgresql8
Fintanto che le formule della versione backport rimarranno aggiornate, questo approccio è probabilmente il modo migliore per gestire software meno recenti.
I seguenti approcci sono elencati principalmente per completezza. Entrambi provano a resuscitare una formula di non morti dal repository della birra. A causa delle dipendenze modificate, delle modifiche dell'API nelle specifiche della formula o semplicemente di una modifica nell'URL di download, le cose potrebbero non funzionare.
Poiché l'intera directory della formula è un repository git, è possibile installare versioni specifiche usando semplici comandi git. Tuttavia, dobbiamo trovare un modo per arrivare a un commit in cui era disponibile la versione precedente.
a) tempi storici
Tra agosto 2011 e ottobre 2014 , l'homebrew ha ricevuto un brew versions
comando, che ha sputato fuori tutte le versioni disponibili con i rispettivi hash SHA. A partire da ottobre 2014, devi farlo brew tap homebrew/boneyard
prima di poterlo utilizzare. Come suggerisce il nome del rubinetto, probabilmente dovresti farlo solo come ultima risorsa.
Per esempio
$ 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
Come puoi vedere, sconsiglia di usarlo. Homebrew sputa tutte le versioni che può trovare con la sua euristica interna e ti mostra un modo per recuperare le vecchie formule. Proviamolo.
# 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
Ora che è installata la versione postgresql precedente, possiamo reinstallare la formula più recente per mantenere pulito il nostro repository:
$ git checkout -- Library/Formula/postgresql.rb
brew switch
è il tuo amico a cambiare tra il vecchio e il nuovo.
b) preistoria
Per esigenze speciali, possiamo anche provare a scavare nel repository homebrew.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
git log -S
cerca tutti i commit in cui la stringa è '8.4.4'
stata aggiunta o rimossa nel file Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb
. Di conseguenza otteniamo due commit.
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
Ovviamente, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
è il commit a cui siamo interessati. Poiché questo commit è piuttosto vecchio, proveremo a eseguire il downgrade dell'installazione homebrew completa (in questo modo, l'API della formula è più o meno garantita per essere valida):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
È possibile saltare l'ultimo comando per mantenere il riferimento nel proprio repository git.
Una nota: quando si verifica il commit precedente, si esegue il downgrade temporaneo dell'installazione homebrew. Quindi, dovresti stare attento poiché alcuni comandi in homebrew potrebbero essere diversi dalla versione più recente.
Non è troppo difficile e puoi quindi caricarlo sul tuo repository. Una volta erano versioni Homebrew , ma ora è fuori produzione.
Se vuoi mantenere una certa versione di, diciamo postgresql, in giro e impedirne l'aggiornamento quando esegui la brew update; brew upgrade
procedura naturale , puoi aggiungere una formula:
$ brew pin postgresql
Le formule bloccate sono elencate in /usr/local/Library/PinnedKegs/
e una volta che desideri apportare le ultime modifiche e gli aggiornamenti, puoi sbloccarlo di nuovo:
$ brew unpin postgresql
git checkout fa992 -- Library/Formula/postgresql.rb
. Al termine, puoi annullare le modifiche alla formula utilizzando git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb
.
brew update
stabilire il suo repository Git.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
, quindi è possibile utilizzare git checkout 4cce79d -- Formula/go.rb
e HOMEBREW_NO_AUTO_UPDATE=1 brew install go
.
Ora che Homebrew / version è stato deprecato, Homebrew / core supporta più versioni di formule con un nuovo formato di denominazione.
Per installare una versione specifica, ad esempio postgresql 9.5, devi semplicemente eseguire:
$ brew install postgresql@9.5
Per elencare le versioni disponibili, esegui una ricerca con @:
$ brew search postgresql@
==> Searching local taps...
postgresql@10.1 ✔ postgresql@9.4 postgresql@9.5 postgresql@9.6
fatal: Not a git repository (or any of the parent directories): .git
. cd
Invece mi inserisco nella directory (senza FORMULANAME.rb), quindi git checkout 120938
cd /usr/local
prima.
brew unlink FORMULANAME
brew versions <formula>
non è più supportato.
brew link --force postgresql@9.5
. Se hai già installato una versione più recente e desideri che la versione precedente sia quella predefinita, ti servirà anche una versione --overwrite
.
Ora c'è un modo molto più semplice per installare una versione precedente di una formula che avevi installato in precedenza. Basta usare
brew switch [formula] [version]
Ad esempio, alterno regolarmente tra Node.js 0.4.12 e 0.6.5:
brew switch node 0.4.12
brew switch node 0.6.5
Dal momento brew switch
che cambia solo i collegamenti simbolici, è molto veloce. Vedi ulteriore documentazione sul Wiki Homebrew alla voce Comandi esterni .
brew switch
si affida alla versione ricercata già installata. Sfortunatamente, la risposta attualmente accettata è incredibilmente inutile, contorta e obsoleta. Di seguito ci sono risposte migliori che sono molto più utili.
Aggiornamento: 15/01/2015
brew install <url>
(potrebbe essere necessario brew unlink
prima, ad es. brew unlink docker
)brew switch docker 1.3.3
brew switch docker 1.4.1
Da questo senso
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
brew install <url>
, brew unlink <formulaname>
. Altrimenti, questo è il modo più semplice e conciso (finora) per passare a una versione specifica di una formula.
Raw
premuto il pulsante su quale file ?!
brew log <formula>
Sulla falsariga del suggerimento di @ halfcube, questo funziona davvero bene:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
package@version
git log master -- Formula/PACKAGENAME.rb
per ottenere la cronologia del commit, controllare il commit corretto, quindi eseguirlo brew install Formula/PACKAGENAME.rb
per installarlo.
brew unlink
prima brew install
di altre versioni.
mxcl
?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
ma ottengo l'errore, probabilmente dovuto alla @
firma: 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.
Qualche idea?
Ho scoperto una soluzione alternativa migliore rispetto alle altre soluzioni complesse.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Questo scaricherà e installerà PostgreSQL 8.4.8
Ho trovato questa soluzione iniziando a seguire i passaggi della ricerca nel repository e un commento nel repository.
Dopo un po 'di ricerca è emerso che qualcuno ha una collezione di formule rare con cui preparare.
Se stai cercando MySQL 5.1.x, provalo.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb
sembrava non riuscire con errori di sintassi.
raw
URL
homebrew-versions
è andato e tutto è su core
ora, in modo che il caso generale è: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb
. COMMIT
può essere trovato andando su github.com/Homebrew/homebrew-core/commits/master/Formula/… .
È possibile utilizzare la strategia di identificazione della formula e un particolare commit nella cronologia della formula che corrisponde alla versione del pacchetto che si desidera installare.
Premi t
sulla tastiera per attivare il file finder.
Identifica una formula che appaia più pertinente, forse Formula/mysql.rb
:, portandoti in una posizione del file forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb .
Guarda la cronologia delle revisioni facendo clic sul History
pulsante, che si trova su https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb . Se sei interessato a MySQL 5.7.10, potresti fare clic sull'ultima revisione precedente alla 5.7.11, che passa a un commit GitHub:
NOTA: potrebbe essere necessario visualizzare la cronologia di commit nella console in base al suggerimento di GitHub se la cronologia di commit non viene caricata nel browser. Sostituisci il commit SHA sopra nell'URL se sei interessato a vedere quel commit su GitHub. In alternativa, vai al passaggio 7, di seguito.
Fare clic sul pulsante "Visualizza" per visualizzare l'origine del file mysql.rb dopo l'applicazione del commit.
Quindi fare clic sul pulsante "Raw" per visualizzare la fonte raw.
Copia l'URL. In alternativa, crea tu stesso l'URL con il mysql.rb
nome del file per identificare la tua formula e la particolare versione di quella formula (identificata dal commit SHA nell'URL seguente).
Installalo con $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
NOTA: questa risposta è stata aggiornata per tenere conto della rimozione del sito Web braumeister.org. Lo stesso principio si applica, braumeister ha semplicemente fornito un modo adatto ai principianti per navigare tra le versioni delle formule.
La maggior parte delle altre risposte sono ormai obsolete. Sfortunatamente Homebrew non ha ancora un modo integrato di installare una versione obsoleta, a meno che quella versione non esista come formula separata (ad es. python@2
, postgresql@9.4
...).
Fortunatamente, per altre formule c'è un modo molto più semplice del disordine contorto che era necessario. Ecco le istruzioni complete:
Cerca la versione corretta nei log:
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›
Questo mostrerà un elenco di hash di commit. Prendi quello che è appropriato (per lo più dovrebbe essere abbastanza ovvio, e di solito è il più recente (cioè in alto).
Trova l'URL in cui risiede la formula nel repository upstream:
brew info ‹formula› | grep ^From:
Correggi l'URL:
github.com
conraw.githubusercontent.com
blob/master
con l'hash di commit che abbiamo trovato nel primo passaggio.Installa la versione desiderata sostituendo master
l'URL precedentemente trovato con l'hash di commit, ad esempio:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
(L'ultimo passaggio può richiedere l'esecuzione brew unlink ‹formula›
prima.)
Se hai copiato un hash di commit che desideri utilizzare, puoi utilizzare qualcosa come questo esempio per installare quella versione, sostituendo il valore e bash
con il tuo hash di commit e la formula desiderata.
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
Questo esempio sta installando bash 4.4.23 invece di bash 5, sebbene se in seguito si eseguisse un brew upgrade
bash, bash 5 verrebbe installato sopra, a meno che non sia stato eseguito per la prima volta brew pin bash
. Invece di fare questo più liscia senza pinning, si deve prima installare l'ultima con brew install bash
, quindi brew unlink bash
, quindi installare la versione precedente che si desidera per lo script di cui sopra, e quindi utilizzare brew switch bash 4.4.23
per impostare i link simbolici alla versione precedente. Ora a brew upgrade
non dovrebbe influenzare la tua versione di Bash. È possibile brew switch bash
ottenere un elenco delle versioni disponibili per passare a.
Un altro modo per raggiungere lo stesso obiettivo sembra essere:
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.
Questo crea un formula@version
tocco personalizzato che puoi installare nell'esempio sopra. Il rovescio della medaglia è che probabilmente è ancora necessario brew unlink bash
e quindi brew link bash@4.4.23
per utilizzare la versione specifica di Bash o qualsiasi altra formula.
brew log
cui eventuali extra -F
o --grep
opzioni stavano fallendo per me.
brew log
. Non posso preoccuparmi di scrivere una nuova versione ora perché ciò richiede un'analisi corretta del messaggio di log git, o in alternativa in esecuzione git log
direttamente sul repository corrispondente. E il log delle modifiche non sembra nemmeno menzionare questo cambiamento radicale. Oltre fastidioso.
External Command
potrebbe essere necessario operare all'interno della struttura brew
per ottenere quel tipo di git log
filtro. docs.brew.sh/External-Commands
brew extract
uso corretto , grazie!
Ho appena usato Homebrew per tornare a Maven 2.2.1 dal semplice brew install maven
Maven 3.0.3 installato.
Per prima cosa devi lasciare lì il dir del Maven
$ brew unlink maven
Utilizzare il comando brew tap
$ brew tap homebrew / versioni Clonazione in '/ usr / local / Library / Taps / homebrew-version' ... telecomando: conteggio degli oggetti: 590, fatto. remoto: compressione degli oggetti: 100% (265/265), fatto. remoto: totale 590 (delta 362), riutilizzato 549 (delta 325) Ricezione di oggetti: 100% (590/590), 117,49 KiB | 79 KiB / s, fatto. Delta di risoluzione: 100% (362/362), fatto. Maschiato 50 formula
Ora puoi installare la formula di maven2:
$ brew install maven2 ==> Download 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 file, 3,1 M, integrato in 6 secondi
$ mvn --version Apache Maven 2.2.1 (r801777; 2009-08-06 12: 16: 01-0700) Versione Java: 1.6.0_37 Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Impostazioni internazionali predefinite: en_US, codifica piattaforma: MacRoman Nome del sistema operativo: "mac os x" versione: "10.7.4" arch: "x86_64" Famiglia: "mac"
Modifica:
puoi anche brew switch maven 2.2.1
passare a una versione diversa.
Modifica: il progetto Apache Maven ha riorganizzato il loro repository. Aggiornato questa risposta per tenere conto di questa modifica.
Sulla base del flusso di lavoro descritto da @tschundeee e l'aggiornamento 1 di @ Debilski , ho automatizzato la procedura e aggiunto la pulizia in questo script .
Scaricalo , mettilo nel tuo percorso e brewv <formula_name> <wanted_version>
. Per il PO specifico, sarebbe:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:)
Una risposta aggiornata da allora si aggiunge a ciò che @ lance-pollard ha già pubblicato come risposta funzionante.
Come installare una versione specifica di una formula (la formula utilizzata in questo esempio è terraform
):
git log master -- Formula/terraform.rb
se hai clonato il repository localmente.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
Sfortunatamente Homebrew non ha ancora un modo ovvio per installare una versione precedente.
Fortunatamente, per la maggior parte delle formule c'è un modo molto più semplice del disordine contorto che era necessario. Ecco le istruzioni complete usando bash
come esempio:
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.
Questo crea il formula@version
tocco personalizzato che puoi installare nell'esempio sopra. Una nota importante è che probabilmente è necessario brew unlink bash
se in precedenza fosse stata installata la versione predefinita / più recente della formula e quindi brew link bash@4.4.23
per utilizzare la versione specifica di Bash (o qualsiasi altra formula in cui è installata la versione più recente e una precedente).
Un potenziale svantaggio di questo metodo è che non si può facilmente passare avanti e indietro tra le versioni perché secondo brew
esso è una "formula diversa".
Se vuoi essere in grado di usare brew switch $FORMULA $VERSION
dovresti usare il metodo successivo.
Questo esempio mostra l'installazione della bash 4.4.23 precedente, un esempio utile poiché la bash
formula attualmente installa bash 5.
brew install bash
brew unlink bash
brew switch bash 4.4.23
per impostare i collegamenti simbolici alla tua versioneSe hai eseguito una brew upgrade
dopo l'installazione di una versione precedente senza prima installare l'ultima, allora l'ultima verrebbe installata bloccando la tua versione precedente, a meno che non sia stata eseguita per la prima volta brew pin bash
.
I passaggi qui EVITANO di appuntare perché è facile dimenticarsene e potresti appuntare una versione che diventerà insicura in futuro (vedi Shellshock / etc). Con questa configurazione a brew upgrade
non dovrebbe interessare la tua versione di Bash ed è sempre possibile eseguire brew switch bash
per ottenere un elenco delle versioni disponibili per passare a.
Copia e incolla e modifica le export
righe dallo snippet di codice in basso per aggiornare con la versione e il nome della formula desiderati, quindi copia e incolla il resto così com'è e utilizzerà tali variabili per fare la magia.
# 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
Quando sei sicuro che la versione esiste nella formula, puoi usare quanto segue:
# 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}')
Dopo aver esportato l'hash di commit che si desidera utilizzare, è possibile utilizzarlo per installare quella versione del pacchetto.
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
Segui le indicazioni nell'output della formula per inserirlo nel tuo PERCORSO o impostalo come shell predefinita.
Sulla versione più recente di homebrew (0.9.5 al momento della stesura di questo documento) ci sarà una ricetta specifica per la versione del fusto homebrew che si desidera installare. Esempio:
$ brew search mongodb
mongodb mongodb24 mongodb26
Quindi fai brew install mongodb26
come al solito.
Nel caso in cui si era già installato la versione più recente, assicurarsi di scollegare la versione più recente e collegare la versione desiderata: brew unlink mongodb && brew link mongodb26
.
Il problema homebrew/versions
è che qualcuno deve avere quella versione specifica del software elencata nel repository affinché tu possa usarla. Inoltre, poiché brew versions
non è più supportato, è necessaria un'altra soluzione. Per le soluzioni che indicano l'utilizzo brew switch
, questo funzionerà solo se non l'hai fatto brew cleanup
poiché la versione deve esistere sul tuo computer.
Ho avuto un problema con il voler installare una versione precedente specifica di docker-machine
cui non era elencato homebrew/versions
. Ho risolto questo problema usando il seguente, che dovrebbe funzionare anche con qualsiasi software installato brew. L'esempio che segue utilizzerà docker-machine
il pacchetto che voglio effettuare il downgrade dalla versione 0.5.0 alla 0.4.1.
Vai alla tua Formula
directory homebrew .
Puoi determinarlo eseguendo brew info [any package name]
. Ad esempio, brew info docker-machine
mi dà una linea che mi mostra un percorso - /usr/local/Cellar/docker-machine/0.5.0
. Questo mi dice che sul mio computer, homebrew è installato in /usr/local
e la mia Formula
directory si trova di default in/usr/local/Library/Formula
Individua il file formula specifico (.rb) per il tuo pacchetto.
Dal momento che voglio effettuare il downgrade docker-machine
, posso vedere un docker-machine.rb
file.
Ottieni la cronologia delle versioni per questo file formula . accederegit log docker-machine.rb
. Questo elencherà la cronologia completa del commit per questo file. Vedrai un output in questo modo:
...Di Più commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc Autore: BrewTestBot Data: gio 5 nov 16:14:18 2015 +0000 docker-machine: aggiornamento bottiglia 0.5.0. commit 8f615708184884e501bf5c16482c95eff6aea637 Autore: Vincent Lesierse Data: mar 27 ott 22:25:30 2015 +0100 docker-machine 0.5.0 Finestra mobile aggiornata alla 0.5.0 Chiude # 45403. Firmato-fuori-da: Dominyk Tiller commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423 Autore: BrewTestBot Data: lunedì 21 settembre 14:04:04 2015 +0100 docker-machine: aggiornamento bottiglia 0.4.1. commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd Autore: BrewTestBot Data: dom 16 ago 09:05:56 2015 +0100 docker-machine: aggiornamento bottiglia 0.4.1. ...Di Più
La parte difficile è trovare l'ultimo commit per la versione specifica desiderata. In quanto sopra, posso dire l'ultima versione 0.4.1 è stato commesso con questo commettere tag: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
. I commit sopra questo punto iniziano con la versione 0.5.0 (le voci del registro git sono elencate dalla data più recente alla prima).
Ottieni una versione precedente del file della formula. Utilizzando il tag commit dal passaggio 3 (è possibile utilizzare i primi 6 caratteri), è possibile ottenere una versione precedente del file formula utilizzando quanto segue:
git checkout 5970e1 docker-machine.rb
Disinstallare la versione del pacchetto corrente.
Basta eseguire i normali comandi brew per disinstallare la versione corrente del pacchetto.
Ex.brew uninstall docker-machine
Installa la versione precedente del pacchetto
Ora, puoi semplicemente eseguire il normale comando brew install e installerà la formula che hai verificato. Ex.brew install docker-machine
Potrebbe essere necessario ricollegare utilizzando il brew link docker-machine
se necessario.
Se in qualsiasi momento desideri ripristinare la versione più recente di un pacchetto specifico, vai nella directory Formula ed esegui i seguenti comandi sul tuo file formula (.rb)
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Quindi è possibile brew uninstall docker-machine
e brew install docker-machine
ottenere l'ultima versione e continuare così.
git log --grep 0.4.1 docker-machine.rb
.
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairo
birra in questo modo. La risposta di @ Sealocal ha mostrato di più, per qualche motivo.
La mia situazione: è postgresql
stato aggiornato da 11 a 12 per errore. Voglio mantenere 11.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgres
a postgres@11
:cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
brew services start postgresql@11
In caso di errori, controllare /usr/local/var/log/postgresql@11.log
(notare @ 11).
brew postgresql-upgrade-database
). Questa risposta non è utile per quasi qualsiasi altra formula.
brew postgresql-upgrade-database
è, beh, per gli aggiornamenti . La mia risposta riguarda l'uso di una versione precedente di Postgres. Il semplice cambio di binari non funzionerà.
nvm
FYI, ho avuto fortuna con questa tecnica per le versioni precedenti di LTS. Almeno al momento della stesura di v10 e v12 dovrebbe essere disponibile, ad esempio brew install node@12
formulae.brew.sh/formula/node
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
O
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/Formula/flyway.rb
brew install Formula/flyway.rb
dalla homebrew-core
directory? ha funzionato per me senza usare l' raw.github..
indirizzo
potrebbe essere fatto molto facilmente per l'ultima versione di brew.
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)
Nessuno di questi ha funzionato davvero per il mio caso (Python), quindi aggiungerò i miei 2 centesimi:
cd `brew --prefix`
git log Library/Formula/python.rb
L'output è simile al seguente:
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. ...
Voglio la versione 2.7.11
così il mio hash è cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(o cf5da05
in breve). Successivamente, controllo quella versione e installo la formula python
:
git checkout cf5da05
brew install python
Infine, pulisci:
git checkout master
HOMEBREW_NO_AUTO_UPDATE
e leggere github.com/Homebrew/brew/issues/1188
cd
brew --prefix /Homebrew
egit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Taps
viene ignorato.
HOMEBREW_NO_AUTO_UPDATE
. Sì, non dimenticare ciò di cui hai bisogno fino a quando non scopri di averne bisogno. xD
HOMEBREW_NO_INSTALL_CLEANUP
non è qualcosa che devi ricordare?
Se non riesci a trovare la tua versione brew search <formula>
, puoi anche provare a consultare i registri di commit per la tua formula per trovare la versione desiderata:
ecco un esempio per l'installazione di una versione precedente di nginx tramite brew:
vedere nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
Da lì, possiamo installare 1.6.3
con l'URL sha e raw git:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
Attualmente i vecchi modi di installare specifiche versioni di formula sono stati deprecati. Quindi sembra che dobbiamo usare brew edit [formula]
. Ad esempio, diciamo che vogliamo installare una 62.1
versione di icu4c
(necessaria ad esempio per postgresql 10.5
). Quindi dovresti
> brew edit icu4c
# drops you to editor
Qui dovresti modificare url
, version
e sha256
(forse anche mirror
) le 62.1
stringhe corrispondenti .
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"
quindi corri brew reinstall icu4c
per scaricare finalmente la 62.1
versione.
sha256
? nel mio casohttps://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
Aggiornamento sulla libreria / formula / postgresql.rb riga 8 a
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
E MD5 sulla linea 9 a
fcc3daaf2292fa6bf1185ec45e512db6
Salva ed esci.
brew install postgres
initdb /usr/local/var/postgres
Ora in questa fase potresti riscontrare l' postgresql could not create shared memory segment
errore, per aggirare quell'aggiornamento in /etc/sysctl.conf
questo modo:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Riprova initdb /usr/local/var/postgres
e dovrebbe funzionare senza problemi.
Per eseguire postgresql all'avvio
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
Spero che aiuti :)
Ho appena copiato una versione precedente di elasticsearch nella /usr/local/Cellar/elasticsearch
directory.
$ mkdir /usr/local/Cellar/elasticsearch/5.4.3/bin
$ cp elasticsearch /usr/local/Cellar/elasticsearch/5.4.3/bin
$ brew switch elasticsearch 5.4.3
Questo è tutto. Forse è utile per chiunque.
Ho deciso, contro il mio miglior giudizio, di creare una formula per Maven 3.1.1, che homebrew/versions
non aveva. Per farlo:
homebrew/versions
su Github.$(brew --prefix)/Library/Taps
alla copia di lavoro locale del mio fork. Chiamerò questo my-homebrew/versions
.my-homebrew/versions/<formula>
.homebrew/versions
per la mia nuova formula.Sìì.
Per le versioni non attualmente nelle formule predefinite di infusione, è possibile creare facilmente il proprio tocco con lo strumento da https://github.com/buildtools-version-taps/homebrew-versions-tap-tool
brew tap-new user/repo
e poi brew extract --version='Major.minor' FORMULA user/repo
e poi brew install FORMULA@Major.minor
.
Ho creato uno strumento per facilitare il processo prescritto in questa risposta .
Per trovare un pacchetto pkg
con versione a.b.c
, eseguire:
$ brew-install-specific pkg@a.b.c
Questo elencherà i commit sulla pkg
formula homebrew che menziona la versione data insieme ai loro 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:
Verifica il commit dall'URL specificato e inserisci l'indice del commit selezionato.
Select index: 2
Run:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb
Copia ed esegui il comando dato per l'installazione.
postgresql
è strano perché aveva versioni separate in Homebrew ad un certo punto, qualcosa del generebash
potrebbe essere un esempio migliore poiché è passato da 4.xa 5.x con lo stesso nome di formula. Vedere stackoverflow.com/a/55764594/3794873