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 switch
só 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/versions
torneira. (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 versions
comando, que cuspiu todas as versões disponíveis com seus respectivos hashes SHA. Em outubro de 2014, você deve fazer um brew tap homebrew/boneyard
antes 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 -S
procura 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 upgrade
procedimento 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 update
estabelecer seu repositório Git.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
, então você pode usar git checkout 4cce79d -- Formula/go.rb
e 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ó cd
para o diretório em vez (sem o FORMULANAME.rb), em seguida, fazer ogit checkout 120938
cd /usr/local
primeiro.
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 switch
apenas 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 unlink
primeiro, por exemplo brew unlink docker
)brew switch docker 1.3.3
brew switch docker 1.4.1
Desta 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.
Raw
aperta 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.rb
package@version
git log master -- Formula/PACKAGENAME.rb
para obter o histórico de confirmação, confira a confirmação correta e execute brew install Formula/PACKAGENAME.rb
para instalá-lo.
brew unlink
antes brew install
de outra versão.
mxcl
?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
mas 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.rb
parecia falhar com erros de sintaxe.
raw
URL
homebrew-versions
se foi e tudo o que está no core
agora, para o caso geral é: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb
. COMMIT
pode 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 t
no 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 History
botã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.rb
nome 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.com
porraw.githubusercontent.com
blob/master
pelo hash de confirmação encontrado na primeira etapa.Instale a versão desejada substituindo master
no 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 bash
pelo 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 upgrade
executasse 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.23
para 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 bash
obter 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@version
toque personalizado que você pode instalar conforme o exemplo acima. A desvantagem é que você provavelmente ainda precisa brew unlink bash
e, brew link bash@4.4.23
em seguida , para usar sua versão específica do Bash ou qualquer outra fórmula.
brew log
que quaisquer opções -F
ou extras --grep
estivessem 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 log
direta ou alternativa no repositório correspondente. E o changelog nem parece mencionar essa mudança. Além de irritante.
External Command
pode ser necessário operar dentro da estrutura brew
para recuperar esse tipo de git log
filtragem. docs.brew.sh/External-Commands
brew extract
uso correto , obrigado!
Acabei de usar o Homebrew para voltar ao Maven 2.2.1 desde o simples brew install maven
Maven 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.1
mudar 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.rb
se você clonou o repositório localmente.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
Infelizmente, 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 bash
como 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@version
toque personalizado que você pode instalar conforme o exemplo acima. Uma observação importante é que você provavelmente precisará brew unlink bash
se instalou a versão padrão / mais recente da fórmula e, brew link bash@4.4.23
em 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 brew
a 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 bash
fórmula atualmente instala o bash 5.
brew install bash
brew unlink bash
brew switch bash 4.4.23
para configurar os links simbólicos para sua versãoSe você executasse um brew upgrade
apó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 upgrade
não deve afetar sua versão do Bash e você sempre pode executar brew switch bash
para obter uma lista das versões disponíveis para a qual alternar.
Copie, cole e edite as export
linhas 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 mongodb26
normal.
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 versions
nã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 cleanup
pois a versão precisa existir no seu computador.
Ocorreu um problema ao querer instalar uma versão antiga específica da docker-machine
qual 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-machine
como o pacote que eu quero fazer o downgrade da versão 0.5.0 para a 0.4.1.
Vá para o Formula
diretório do homebrew .
Você pode determinar isso executando brew info [any package name]
. Por exemplo, brew info docker-machine
me 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/local
e 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.rb
arquivo.
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-machine
se 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-machine
e brew install docker-machine
para 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
cairo
fermentação dessa maneira. A resposta do @ sealocal mostrou mais, por algum motivo.
Minha situação: postgresql
foi atualizado de 11 para 12 acidentalmente. Eu quero manter 11.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgres
para 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.rb
partir do homebrew-core
diretó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.11
para que meu hash seja cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(ou cf5da05
abreviado). 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_UPDATE
e ler github.com/Homebrew/brew/issues/1188
cd
--prefix cerveja /Homebrew
egit 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_CLEANUP
Isso 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.3
com 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.1
versã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
, version
e sha256
(talvez também mirror
) as 62.1
seqüê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 icu4c
para finalmente baixar a 62.1
versã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 segment
erro, para solucionar essa atualização da /etc/sysctl.conf
seguinte maneira:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Tente initdb /usr/local/var/postgres
novamente 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/elasticsearch
diretó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/versions
não possuía. Para fazer isso:
homebrew/versions
no github.$(brew --prefix)/Library/Taps
para a cópia de trabalho local do meu garfo. Eu ligo para isso my-homebrew/versions
.my-homebrew/versions/<formula>
.homebrew/versions
a 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/repo
e então brew extract --version='Major.minor' FORMULA user/repo
e então brew install FORMULA@Major.minor
.
Criei uma ferramenta para facilitar o processo prescrito nesta resposta .
Para encontrar um pacote pkg
com versão a.b.c
, execute:
$ brew-install-specific pkg@a.b.c
Isso listará confirmações na pkg
fó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 comobash
poderia 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