Como instalo uma versão específica de uma fórmula no homebrew? Por exemplo, postgresql-8.4.4 em vez do 9.0 mais recente.
Como instalo uma versão específica de uma fórmula no homebrew? Por exemplo, postgresql-8.4.4 em vez do 9.0 mais recente.
Respostas:
TLDR: brew install postgresql@8.4.4 Veja a resposta abaixo para mais detalhes.
* ( Reeditei minha resposta para fornecer um fluxo de trabalho mais completo para a instalação / uso de versões mais antigas de software com o homebrew. Sinta-se à vontade para adicionar uma observação, se você achou a versão antiga melhor. )
Vamos começar com o caso mais simples:
Quando o homebrew instala uma nova fórmula, ela a coloca em um diretório com versão como /usr/local/Cellar/postgresql/9.3.1. Somente links simbólicos para esta pasta são instalados globalmente. Em princípio, isso facilita bastante a alternância entre duas versões instaladas. (*)
Se você usa o homebrew há mais tempo e nunca removeu versões mais antigas (usando, por exemplo brew cleanup), é provável que algumas versões mais antigas do seu programa ainda estejam por aí. Se você deseja simplesmente ativar a versão anterior, brew switché a maneira mais fácil de fazer isso.
Verifique com brew info postgresql(ou brew switch postgresql <TAB>) se a versão mais antiga está instalada:
$ 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
Vemos que algumas versões mais antigas já estão instaladas. Podemos ativá-lo usando 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
Vamos verificar o que está ativado:
$ 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
Observe que a estrela *mudou para a versão recém-ativada
(*) Observe que brew switchsó funciona enquanto todas as dependências da versão mais antiga ainda estiverem disponíveis. Em alguns casos, uma reconstrução da versão mais antiga pode ser necessária. Portanto, o uso brew switché principalmente útil quando se deseja alternar entre duas versões não muito distantes.
Especialmente para projetos de software maiores, é muito provável que exista uma demanda alta o suficiente para várias versões principais (potencialmente incompatíveis com a API) de um determinado software. Em março de 2012, o Homebrew 0.9 fornece um mecanismo para isso: brew tap& o repositório de versões do homebrew .
Esse repositório de versões pode incluir backports de versões mais antigas para várias fórmulas. (Principalmente apenas os grandes e famosos, mas é claro que eles também terão várias fórmulas para o postgresql.)
brew search postgresql mostrará onde procurar:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
Podemos simplesmente instalá-lo 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
# …
Observe que isso tocou automaticamente na homebrew/versionstorneira. (Verifique com brew tap, remova com brew untap homebrew/versions.) O seguinte teria sido equivalente:
$ brew tap homebrew/versions
$ brew install postgresql8
Desde que as fórmulas da versão com portabilidade permaneçam atualizadas, essa abordagem é provavelmente a melhor maneira de lidar com software mais antigo.
As abordagens a seguir estão listadas principalmente para fins de integridade. Ambos tentam ressuscitar alguma fórmula de mortos-vivos do repositório de preparação. Devido a alterações nas dependências, alterações na API na especificação da fórmula ou simplesmente uma alteração no URL de download, as coisas podem ou não funcionar.
Como o diretório inteiro da fórmula é um repositório git, é possível instalar versões específicas usando comandos simples do git. No entanto, precisamos encontrar uma maneira de chegar a um commit onde a versão antiga estava disponível.
a) tempos históricos
Entre agosto de 2011 e outubro de 2014 , o homebrew teve um brew versionscomando, que cuspiu todas as versões disponíveis com seus respectivos hashes SHA. Em outubro de 2014, você deve fazer um brew tap homebrew/boneyardantes de poder usá-lo. Como o nome da torneira sugere, você provavelmente deve fazer isso apenas como último recurso.
Por exemplo
$ 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
Como você pode ver, desaconselha o uso. O Homebrew mostra todas as versões que pode encontrar com sua heurística interna e mostra uma maneira de recuperar as fórmulas antigas. Vamos tentar.
# 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
Agora que a versão mais antiga do postgresql está instalada, podemos reinstalar a fórmula mais recente para manter nosso repositório limpo:
$ git checkout -- Library/Formula/postgresql.rb
brew switch é seu amigo para mudar entre o antigo e o novo.
b) tempos pré-históricos
Para necessidades especiais, também podemos tentar nossa própria escavação através do repo homebrew.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
git log -Sprocura por todas as confirmações nas quais a sequência '8.4.4'foi adicionada ou removida no arquivo Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb. Temos dois commits como resultado.
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
Obviamente, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422é nesse commit que estamos interessados. Como esse commit é bastante antigo, tentaremos fazer o downgrade da instalação completa do homebrew (dessa forma, a API da fórmula é mais ou menos garantida como válida):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
Você pode pular o último comando para manter a referência em seu repositório git.
Uma observação: ao fazer o check-out do commit mais antigo, você rebaixa temporariamente a instalação do homebrew. Portanto, você deve ter cuidado, pois alguns comandos no homebrew podem ser diferentes da versão mais recente.
Não é muito difícil e você pode enviá-lo para o seu próprio repositório. Costumava ser Homebrew-Versions , mas agora é descontinuado.
Se você deseja manter uma determinada versão do, digamos postgresql, por perto e impedir que ela seja atualizada ao executar o brew update; brew upgradeprocedimento natural , é possível fixar uma fórmula:
$ brew pin postgresql
As fórmulas fixadas são listadas /usr/local/Library/PinnedKegs/e, quando você deseja introduzir as alterações e atualizações mais recentes, pode desassociá- las novamente:
$ brew unpin postgresql
git checkout fa992 -- Library/Formula/postgresql.rb. Quando terminar, você pode desfazer as alterações na fórmula usando git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb.
brew updateestabelecer seu repositório Git.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core, então você pode usar git checkout 4cce79d -- Formula/go.rbe HOMEBREW_NO_AUTO_UPDATE=1 brew install go.
Agora que o Homebrew / versões foi descontinuado, o Homebrew / core suporta várias versões de fórmulas com um novo formato de nomenclatura.
Para instalar uma versão específica, por exemplo, postgresql 9.5, basta executar:
$ brew install postgresql@9.5
Para listar as versões disponíveis, faça uma pesquisa com @:
$ 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. Eu só cdpara o diretório em vez (sem o FORMULANAME.rb), em seguida, fazer ogit checkout 120938
cd /usr/localprimeiro.
brew unlink FORMULANAME
brew versions <formula>não é mais suportado.
brew link --force postgresql@9.5. Se você já possui uma versão mais recente instalada e deseja que a versão mais antiga seja o padrão, também precisará de uma --overwrite.
Agora existe uma maneira muito mais fácil de instalar uma versão mais antiga de uma fórmula que você instalou anteriormente. Basta usar
brew switch [formula] [version]
Por exemplo, alterno regularmente entre o Node.js 0.4.12 e 0.6.5:
brew switch node 0.4.12
brew switch node 0.6.5
Como brew switchapenas altera os links simbólicos, é muito rápido. Consulte a documentação adicional no Homebrew Wiki em External Commands .
Atualização: 15/1/2015

brew install <url>(pode ser necessário brew unlinkprimeiro, por exemplo brew unlink docker)brew switch docker 1.3.3brew switch docker 1.4.1Desta essência
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>. Caso contrário, essa é a maneira mais simples e concisa (até agora) de mudar para uma versão específica de uma fórmula.
Rawaperta o botão em qual arquivo ?!
brew log <formula>
Seguindo a sugestão do @ halfcube, isso funciona muito bem:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rbpackage@version
git log master -- Formula/PACKAGENAME.rbpara obter o histórico de confirmação, confira a confirmação correta e execute brew install Formula/PACKAGENAME.rbpara instalá-lo.
brew unlinkantes brew installde outra versão.
mxcl?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rbmas recebo o erro, provavelmente devido ao @sinal: 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.Alguma idéia?
Eu descobri uma solução alternativa melhor do que as outras soluções complexas.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Isso fará o download e instalará o PostgreSQL 8.4.8
Encontrei esta solução começando a seguir as etapas de pesquisa no repositório e um comentário no repositório.
Depois de um pouco de pesquisa, descobrimos que alguém tem uma coleção de formulários raros para preparar.
Se você está procurando pelo MySQL 5.1.x, experimente.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rbparecia falhar com erros de sintaxe.
rawURL
homebrew-versionsse foi e tudo o que está no coreagora, para o caso geral é: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb. COMMITpode ser encontrado em github.com/Homebrew/homebrew-core/commits/master/Formula/… .
Você pode usar a estratégia de identificar a fórmula e um commit específico no histórico da fórmula que corresponda à versão do pacote que você deseja instalar.
Pressione tno teclado para ativar o localizador de arquivos.
Identifique uma fórmula que pareça mais relevante, talvez Formula/mysql.rb:, levando você a um local de arquivo no forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb .
Veja o histórico de revisões clicando no Historybotão, localizado em https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb . Se você está interessado no MySQL 5.7.10, convém clicar na última revisão anterior ao 5.7.11, que navega para um commit do GitHub:
NOTA: Talvez você precise visualizar o histórico de consolidação no seu console, por sugestão do GitHub, se o histórico de consolidação não carregar no seu navegador. Substitua o SHA de confirmação acima no URL se você estiver interessado em vê-lo no GitHub. Como alternativa, pule para a etapa 7 abaixo.
Clique no botão "Visualizar" para visualizar a fonte do arquivo mysql.rb após a aplicação do commit.
Em seguida, clique no botão "Raw" para visualizar a fonte bruta.
Copie o URL. Como alternativa, crie você mesmo o URL com o mysql.rbnome do arquivo para identificar sua fórmula e a versão específica dessa fórmula (identificada pelo SHA de confirmação no URL abaixo).
Instale-o com $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
NOTA: Esta resposta foi atualizada para explicar a remoção do site braumeister.org. O mesmo princípio se aplica, o braumeister simplesmente forneceu uma maneira amigável para iniciantes de navegar pelas versões das fórmulas.
A maioria das outras respostas está obsoleta agora. Infelizmente, o Homebrew ainda não possui uma maneira embutida de instalar uma versão desatualizada, a menos que essa versão exista como uma fórmula separada (por exemplo python@2, postgresql@9.4 …).
Felizmente, para outras fórmulas, há uma maneira muito mais fácil do que a bagunça complicada que costumava ser necessária. Aqui estão as instruções completas:
Procure a versão correta nos logs:
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›
Isso mostrará uma lista de hashes de confirmação. Pegue um que seja apropriado (principalmente deve ser bastante óbvio, e geralmente é o mais recente (ou seja, o topo).
Encontre o URL no qual a fórmula reside no repositório upstream:
brew info ‹formula› | grep ^From:
Corrija o URL:
github.comporraw.githubusercontent.comblob/masterpelo hash de confirmação encontrado na primeira etapa.Instale a versão desejada substituindo masterno URL encontrado anteriormente pelo hash de confirmação, por exemplo:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
(A última etapa pode exigir a execução brew unlink ‹formula›antes.)
Se você copiou um hash de confirmação que deseja usar, pode usar algo como este exemplo para instalar essa versão, substituindo o valor e bashpelo seu hash de confirmação e pela fórmula desejada.
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
Este exemplo está instalando o bash 4.4.23 em vez do bash 5, embora se você brew upgradeexecutasse um depois, o bash 5 seria instalado por cima, a menos que você o executasse primeiro brew pin bash. Em vez disso, para tornar isso mais suave SEM fixar, primeiro instale a versão mais recente com brew install bash, em seguida brew unlink bash, instale a versão mais antiga desejada pelo script acima e use-a brew switch bash 4.4.23para configurar os links simbólicos para a versão mais antiga. Agora brew upgrade, isso não deve afetar sua versão do Bash. Você pode brew switch bashobter uma lista das versões disponíveis para mudar.
Outra maneira de alcançar o mesmo objetivo parece ser:
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.
Isso cria um formula@versiontoque personalizado que você pode instalar conforme o exemplo acima. A desvantagem é que você provavelmente ainda precisa brew unlink bashe, brew link bash@4.4.23em seguida , para usar sua versão específica do Bash ou qualquer outra fórmula.
brew logque quaisquer opções -Fou extras --grepestivessem falhando para mim.
brew log. Não posso me incomodar em escrever uma nova versão agora, porque isso requer a análise correta da mensagem de log do git ou a execução git logdireta ou alternativa no repositório correspondente. E o changelog nem parece mencionar essa mudança. Além de irritante.
External Commandpode ser necessário operar dentro da estrutura brewpara recuperar esse tipo de git logfiltragem. docs.brew.sh/External-Commands
brew extractuso correto , obrigado!
Acabei de usar o Homebrew para voltar ao Maven 2.2.1 desde o simples brew install mavenMaven 3.0.3 instalado.
Primeiro você tem que deixar o maven dir lá
$ brew unlink maven
Use o comando brew tap
$ brew tap homebrew / versões Clonando em '/ usr / local / Library / Taps / homebrew-versões' ... remote: Contando objetos: 590, pronto. remote: Compactando objetos: 100% (265/265), concluído. remoto: Total 590 (delta 362), reutilizado 549 (delta 325) Recebendo objetos: 100% (590/590), 117,49 KiB | 79 KiB / s, pronto. Resolução de deltas: 100% (362/362), concluído. Fórmula 50 virada
Agora você pode instalar a fórmula do maven2:
$ brew install maven2 ==> Fazendo download de 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 arquivos, 3.1M, criados em 6 segundos
$ mvn --version Apache Maven 2.2.1 (r801777; 06-08-2009 12: 16: 01-0700) Versão Java: 1.6.0_37 Página inicial do Java: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Código do idioma padrão: en_US, codificação da plataforma: MacRoman Nome do SO: "mac os x" versão: "10.7.4" arch: "x86_64" Família: "mac"
Editar:
Você também pode brew switch maven 2.2.1mudar para uma versão diferente.
Edit: O projeto Apache Maven reorganizou seu repositório. Atualizou esta resposta para responder a essa alteração.
Com base no fluxo de trabalho descrito por @tschundeee e pela atualização 1 de @ Debilski , automatizei o procedimento e adicionei a limpeza neste script .
Faça o download , coloque no seu caminho e brewv <formula_name> <wanted_version>. Para o OP específico, seria:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:)
Uma resposta atualizada, uma vez que adiciona ao que o @ lance-pollard já postou como resposta de trabalho.
Como instalar uma versão específica de uma fórmula (a fórmula usada neste exemplo é terraform):
git log master -- Formula/terraform.rbse você clonou o repositório localmente.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rbInfelizmente, o Homebrew ainda não possui uma maneira embutida óbvia de instalar uma versão mais antiga.
Felizmente, para a maioria das fórmulas, há uma maneira muito mais fácil do que a bagunça complicada que costumava ser necessária. Aqui estão as instruções completas usando bashcomo exemplo:
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.
Isso cria o formula@versiontoque personalizado que você pode instalar conforme o exemplo acima. Uma observação importante é que você provavelmente precisará brew unlink bashse instalou a versão padrão / mais recente da fórmula e, brew link bash@4.4.23em seguida , para usar sua versão específica do Bash (ou qualquer outra fórmula em que você tenha a versão mais recente e mais antiga instalada).
Uma desvantagem potencial desse método é que você não pode alternar facilmente entre as versões porque, de acordo com brewa fórmula, é uma "fórmula diferente".
Se você quiser usar brew switch $FORMULA $VERSION, use o próximo método.
Este exemplo mostra a instalação do bash antigo 4.4.23, um exemplo útil, pois a bashfórmula atualmente instala o bash 5.
brew install bashbrew unlink bashbrew switch bash 4.4.23para configurar os links simbólicos para sua versãoSe você executasse um brew upgradeapós instalar uma versão mais antiga sem instalar a última mais recente, a última seria instalada prejudicando sua versão mais antiga, a menos que você fosse executado primeiro brew pin bash.
As etapas aqui evitam a fixação porque é fácil esquecer e você pode fixar em uma versão que se torne insegura no futuro (consulte Shellshock / etc). Com essa configuração, o a brew upgradenão deve afetar sua versão do Bash e você sempre pode executar brew switch bashpara obter uma lista das versões disponíveis para a qual alternar.
Copie, cole e edite as exportlinhas do snippet de código abaixo para atualizar com a versão desejada e o nome da fórmula, copie e cole o restante como está e ele usará essas variáveis para fazer a mágica.
# 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 tiver certeza de que a versão existe na fórmula, você pode usar o seguinte:
# 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}')
Depois de exportar o hash de confirmação que você deseja usar, você pode usá-lo para instalar a versão do pacote.
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
Siga as instruções na fórmula de saída para colocá-lo em seu PATH ou configurá-lo como seu shell padrão.
Na versão mais recente do homebrew (0.9.5 até o momento da redação deste documento), haverá uma receita específica para a versão do barril de homebrew que você deseja instalar. Exemplo:
$ brew search mongodb
mongodb mongodb24 mongodb26
Então é só fazer o brew install mongodb26normal.
No caso que você já tinha instalado a versão mais recente, certifique-se de desvincular a versão mais recente e vincular a versão desejada: brew unlink mongodb && brew link mongodb26.
O problema homebrew/versionsé que alguém precisa ter essa versão específica do software listada no repositório para que você possa usá-lo. Além disso, como brew versionsnão é mais suportado, é necessária outra solução. Para soluções que indicam o uso brew switch, isso funcionará apenas se você não tiver feito isso, brew cleanuppois a versão precisa existir no seu computador.
Ocorreu um problema ao querer instalar uma versão antiga específica da docker-machinequal não estava listada homebrew/versions. Resolvi isso usando o abaixo, que também deve funcionar para qualquer software instalado em modo brew. O exemplo abaixo será usado docker-machinecomo o pacote que eu quero fazer o downgrade da versão 0.5.0 para a 0.4.1.
Vá para o Formuladiretório do homebrew .
Você pode determinar isso executando brew info [any package name]. Por exemplo, brew info docker-machineme dá uma linha que me mostra um caminho - /usr/local/Cellar/docker-machine/0.5.0. Isso me diz que, na minha máquina, o homebrew está instalado em /usr/locale meu Formula
diretório está localizado por padrão em/usr/local/Library/Formula
Localize o arquivo de fórmula específico (.rb) para o seu pacote.
Como eu quero fazer o downgrade docker-machine, posso ver um docker-machine.rbarquivo.
Obtenha o histórico da versão para este arquivo de fórmula . Enter git log docker-machine.rb. Isso listará o histórico completo de consolidação desse arquivo. Você verá uma saída como esta:
...Mais
confirmar 20c7abc13d2edd67c8c1d30c407bd5e31229cacc
Autor: BrewTestBot
Data: Qui 5 de novembro 16:14:18 2015 +0000
docker-machine: atualize a garrafa 0.5.0.
confirmar 8f615708184884e501bf5c16482c95eff6aea637
Autor: Vincent Lesierse
Data: Terça-feira, 27 de outubro 22:25:30 2015 +0100
docker-machine 0.5.0
Docker-machine atualizada para 0.5.0
Fecha # 45403.
Assinado por: Dominyk Tiller
confirmar 5970e1af9b13dcbeffd281ae57c9ab90316ba423
Autor: BrewTestBot
Data: segunda-feira, 21 de setembro 14:04:04 2015 +0100
docker-machine: atualização 0.4.1 garrafa.
confirmar 18fcbd36d22fa0c19406d699308fafb44e4c8dcd
Autor: BrewTestBot
Data: Dom 16 de agosto 09:05:56 2015 +0100
docker-machine: atualização 0.4.1 garrafa.
...Mais
A parte complicada é encontrar a confirmação mais recente para a versão específica que você deseja. No exemplo acima, eu posso dizer a última versão 0.4.1 foi cometido com este cometer tag: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423. As confirmações acima deste ponto começam a usar a versão 0.5.0 (as entradas do log do git são listadas da data mais recente à mais antiga).
Obtenha uma versão anterior do arquivo de fórmula. Usando a marca de confirmação da etapa 3 (você pode usar os 6 primeiros caracteres), é possível obter uma versão mais antiga do arquivo de fórmula usando o seguinte:
git checkout 5970e1 docker-machine.rb
Desinstale sua versão atual do pacote.
Basta executar os comandos normais de preparação para desinstalar a versão atual do seu pacote.
Ex.brew uninstall docker-machine
Instale a versão anterior do pacote
Agora, você pode simplesmente executar o comando normal de instalação de preparação e ele instalará a fórmula que você fez no checkout. Ex.brew install docker-machine
Você pode precisar vincular novamente usando o brew link docker-machinese necessário.
Se a qualquer momento você desejar reverter para a versão mais recente de um pacote específico, entre no diretório Fórmula e emita os seguintes comandos no arquivo de fórmula (.rb)
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Então você pode brew uninstall docker-machinee brew install docker-machinepara obter a versão mais recente e mantê-lo assim daqui para frente.
git log --grep 0.4.1 docker-machine.rb.
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairofermentação dessa maneira. A resposta do @ sealocal mostrou mais, por algum motivo.
Minha situação: postgresqlfoi atualizado de 11 para 12 acidentalmente. Eu quero manter 11.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgrespara postgres@11:cd /usr/local/var
ls -lh
mv postgresql@11 postgresql@11-fresh-backup
mv postgres postgresql@11
brew services start postgresql@11
Se houver algum erro, verifique /usr/local/var/log/postgresql@11.log(observe o @ 11).
brew postgresql-upgrade-database). Esta resposta não é útil para quase nenhuma outra fórmula.
brew postgresql-upgrade-databaseé, bem, para atualizações . Minha resposta é sobre o uso de uma versão mais antiga do Postgres. Simplesmente alternar binários não funcionará.
nvm, FYI, tive sorte em usar esta técnica para versões mais antigas do LTS. Pelo menos no momento da redação, as v10 e v12 devem estar disponíveis, por exemplo, brew install node@12 formulae.brew.sh/formula/node
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
OU
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.rbpartir do homebrew-corediretório? ele trabalhou para mim sem o uso de raw.github..endereço
Eu tentei a maioria das soluções aqui e elas estão desatualizadas. Eu tive que combinar algumas idéias daqui com meu próprio trabalho. Como resultado, criei um script para me ajudar a fazer o trabalho pesado que você pode encontrar aqui
Uso:
brewv.sh formula_name desired_version
isso poderia ser feito com muita facilidade para a última versão do 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)
Nenhuma delas realmente funcionou para o meu caso (Python), então adicionarei meus 2 centavos:
cd `brew --prefix`
git log Library/Formula/python.rb
A saída é assim:
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. ...
Quero versão 2.7.11para que meu hash seja cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9(ou cf5da05abreviado). Em seguida, verifico essa versão e instalo a fórmula python:
git checkout cf5da05
brew install python
Finalmente, limpe:
git checkout master
HOMEBREW_NO_AUTO_UPDATEe ler github.com/Homebrew/brew/issues/1188
cd --prefix cerveja /Homebrewegit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Tapsé ignorado.
HOMEBREW_NO_AUTO_UPDATE. Sim, não se esqueça sobre a coisa que você precisa até depois você descobre que você precisar. xD
HOMEBREW_NO_INSTALL_CLEANUPIsso não é algo que você precisa se lembrar?
Se você não consegue encontrar sua versão brew search <formula>, também pode tentar revisar os logs de confirmação da sua fórmula para encontrar a versão desejada:
Aqui está um exemplo para instalar uma versão mais antiga do nginx via brew:
Vejo nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
A partir daí, podemos instalar 1.6.3com o sha e o git urit bruto:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
Atualmente, as maneiras antigas de instalar versões de fórmula específicas foram descontinuadas. Então parece que temos que usar brew edit [formula]. Por exemplo, digamos que queremos instalar uma 62.1versão do icu4c(necessário, por exemplo, para postgresql 10.5). Então você teria que
> brew edit icu4c
# drops you to editor
Aqui você teria que alterar as url, versione sha256(talvez também mirror) as 62.1seqüências correspondentes .
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"
então corra brew reinstall icu4cpara finalmente baixar a 62.1versão.
sha256 ? no meu casohttps://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
Atualize na linha Library / Formula / postgresql.rb 8 para
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
E MD5 na linha 9 para
fcc3daaf2292fa6bf1185ec45e512db6
Salvar e sair.
brew install postgres
initdb /usr/local/var/postgres
Agora, nesse estágio, você pode enfrentar o postgresql could not create shared memory segmenterro, para solucionar essa atualização da /etc/sysctl.confseguinte maneira:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Tente initdb /usr/local/var/postgresnovamente e deve funcionar sem problemas.
Para executar o postgresql no início
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
Espero que ajude :)
Acabei de copiar uma versão mais antiga do elasticsearch para o /usr/local/Cellar/elasticsearchdiretório
$ 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
É isso aí. Talvez seja útil para qualquer um.
Decidi, contra meu melhor julgamento, criar uma fórmula para o Maven 3.1.1, que homebrew/versionsnão possuía. Para fazer isso:
homebrew/versionsno github.$(brew --prefix)/Library/Tapspara a cópia de trabalho local do meu garfo. Eu ligo para isso my-homebrew/versions.my-homebrew/versions/<formula>.homebrew/versionsa minha nova fórmula.Yay.
Para versões que não estão atualmente nas fórmulas de fermentação padrão, você pode facilmente criar seu próprio toque com a ferramenta em https://github.com/buildtools-version-taps/homebrew-versions-tap-tool
brew tap-new user/repoe então brew extract --version='Major.minor' FORMULA user/repoe então brew install FORMULA@Major.minor.
Criei uma ferramenta para facilitar o processo prescrito nesta resposta .
Para encontrar um pacote pkgcom versão a.b.c, execute:
$ brew-install-specific pkg@a.b.c
Isso listará confirmações na pkgfórmula de homebrew que mencionam a versão fornecida junto com os URLs do 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:
Verifique a confirmação da URL especificada e insira o índice da confirmação selecionada.
Select index: 2
Run:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb
Copie e execute o comando fornecido para instalar.
postgresqlé estranho porque tinha versões separadas no Homebrew a certa altura, algo comobashpoderia ser um exemplo melhor, pois passou de 4.x para 5.x com o mesmo nome de fórmula. Veja stackoverflow.com/a/55764594/3794873