¿Cómo instalo una versión específica de una fórmula en homebrew? Por ejemplo, postgresql-8.4.4 en lugar de la última 9.0.
¿Cómo instalo una versión específica de una fórmula en homebrew? Por ejemplo, postgresql-8.4.4 en lugar de la última 9.0.
Respuestas:
TLDR: brew install postgresql@8.4.4
consulte la respuesta a continuación para obtener más detalles.
* ( He reeditado mi respuesta para dar un flujo de trabajo más completo para instalar / usar versiones de software anteriores con homebrew. Siéntase libre de agregar una nota si encuentra la versión anterior mejor ) .
Comencemos con el caso más simple:
Cuando homebrew instala una nueva fórmula, la coloca en un directorio versionado como /usr/local/Cellar/postgresql/9.3.1
. Solo los enlaces simbólicos a esta carpeta se instalan globalmente. En principio, esto hace que sea bastante fácil cambiar entre dos versiones instaladas. (*)
Si ha estado usando homebrew durante más tiempo y nunca eliminó versiones anteriores (usando, por ejemplo brew cleanup
), es probable que algunas versiones anteriores de su programa aún estén disponibles. Si desea simplemente activar esa versión anterior, brew switch
es la forma más fácil de hacerlo.
Verifique con brew info postgresql
(o brew switch postgresql <TAB>
) si la versión anterior 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 alguna versión anterior ya está instalada. Podemos activarlo 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 a verificar lo que está activado:
$ 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
Tenga en cuenta que la estrella *
ha movido a la versión recién activada
(*) Tenga en cuenta que brew switch
solo funciona mientras existan todas las dependencias de la versión anterior. En algunos casos, puede ser necesaria una reconstrucción de la versión anterior. Por lo tanto, usandobrew switch
es principalmente útil cuando se quiere cambiar entre dos versiones no muy separadas.
Especialmente para proyectos de software más grandes, es muy probable que exista una demanda lo suficientemente alta para varias versiones principales (potencialmente incompatibles con la API) de un determinado software. A partir de marzo de 2012, Homebrew 0.9 proporciona un mecanismo para esto: brew tap
y el repositorio de versiones de homebrew .
Ese repositorio de versiones puede incluir backports de versiones anteriores para varias fórmulas. (Principalmente solo los grandes y famosos, pero por supuesto también tendrán varias fórmulas para postgresql).
brew search postgresql
te mostrará dónde buscar:
$ brew search postgresql
postgresql
homebrew/versions/postgresql8 homebrew/versions/postgresql91
homebrew/versions/postgresql9 homebrew/versions/postgresql92
Simplemente podemos instalarlo escribiendo
$ 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
# …
Tenga en cuenta que esto ha tocado el homebrew/versions
grifo automáticamente . (Verifique con brew tap
, elimine con brew untap homebrew/versions
). Lo siguiente habría sido equivalente:
$ brew tap homebrew/versions
$ brew install postgresql8
Mientras las fórmulas de la versión con respaldo se mantengan actualizadas, este enfoque es probablemente la mejor manera de lidiar con el software anterior.
Los siguientes enfoques se enumeran principalmente para completar. Ambos intentan resucitar alguna fórmula de muertos vivientes del repositorio de cerveza. Debido a cambios en las dependencias, cambios en la API en la especificación de la fórmula o simplemente un cambio en la URL de descarga, las cosas pueden o no funcionar.
Dado que todo el directorio de fórmulas es un repositorio de git, uno puede instalar versiones específicas usando comandos simples de git. Sin embargo, necesitamos encontrar una manera de llegar a un commit donde la versión anterior estaba disponible.
a) tiempos históricos
Entre agosto de 2011 y octubre de 2014 , homebrew tenía un brew versions
comando que escupía todas las versiones disponibles con sus respectivos hashes SHA. A partir de octubre de 2014, tienes que hacer unbrew tap homebrew/boneyard
antes de poder usarlo. Como sugiere el nombre del grifo, probablemente solo deberías hacer esto como último recurso.
P.ej
$ 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 puede ver, desaconseja su uso. Homebrew escupe todas las versiones que puede encontrar con su heurística interna y le muestra una forma de recuperar las fórmulas antiguas. Vamos a intentarlo.
# 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
Ahora que la versión anterior de postgresql está instalada, podemos reinstalar la última fórmula para mantener limpio nuestro repositorio:
$ git checkout -- Library/Formula/postgresql.rb
brew switch
es tu amigo para cambiar entre lo viejo y lo nuevo.
b) tiempos prehistóricos
Para necesidades especiales, también podemos intentar cavar a través del repositorio homebrew.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
git log -S
busca todas las confirmaciones en las que la cadena '8.4.4'
se agregó o eliminó en el archivo Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb
. Obtenemos dos 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
es la confirmación que nos interesa. Como esta confirmación es bastante antigua, intentaremos degradar la instalación completa de homebrew (de esa manera, la API de fórmula está más o menos garantizada como válida):
$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4
Puede omitir el último comando para mantener la referencia en su repositorio git.
Una nota: cuando revisa el commit anterior, degrada temporalmente su instalación de homebrew. Por lo tanto, debe tener cuidado ya que algunos comandos en homebrew pueden ser diferentes a la versión más reciente.
No es demasiado difícil y luego puede subirlo a su propio repositorio. Solía ser Homebrew-Versions , pero ahora está descontinuado.
Si desea mantener una cierta versión de, digamos postgresql, alrededor y evitar que se actualice cuando realiza el brew update; brew upgrade
procedimiento natural , puede anclar una fórmula:
$ brew pin postgresql
Las fórmulas ancladas se enumeran /usr/local/Library/PinnedKegs/
y una vez que desee incorporar los últimos cambios y actualizaciones, puede volver a fijarlas :
$ brew unpin postgresql
git checkout fa992 -- Library/Formula/postgresql.rb
. Cuando haya terminado, puede deshacer los cambios a la fórmula usando git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb
.
brew update
establecer su repositorio de Git.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
, entonces puede usar git checkout 4cce79d -- Formula/go.rb
y HOMEBREW_NO_AUTO_UPDATE=1 brew install go
.
Ahora que Homebrew / versiones ha quedado en desuso, Homebrew / core admite múltiples versiones de fórmulas con un nuevo formato de nombres.
Para instalar una versión específica, por ejemplo, postgresql 9.5 simplemente ejecuta:
$ brew install postgresql@9.5
Para enumerar las versiones disponibles, ejecute una búsqueda 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
. Acabo de cd
entrar en el directorio (sin FORMULANAME.rb), luego hago elgit checkout 120938
cd /usr/local
primero.
brew unlink FORMULANAME
brew versions <formula>
ya no es compatible.
brew link --force postgresql@9.5
. Si ya tiene instalada una versión más nueva y desea que la versión anterior sea la predeterminada, también necesitará una --overwrite
.
Ahora hay una manera mucho más fácil de instalar una versión anterior de una fórmula que ya había instalado. Simplemente use
brew switch [formula] [version]
Por ejemplo, alterno regularmente entre Node.js 0.4.12 y 0.6.5:
brew switch node 0.4.12
brew switch node 0.6.5
Como brew switch
solo cambia los enlaces simbólicos, es muy rápido. Consulte más documentación en Homebrew Wiki en Comandos externos .
brew switch
basa en que la versión solicitada ya está instalada. Sin embargo, desafortunadamente, la respuesta actualmente aceptada es increíblemente inútil, enrevesada y desactualizada. A continuación hay mejores respuestas que son mucho más útiles.
Actualización: 15/01/2015
brew install <url>
(puede tener que brew unlink
primero, por ejemplo brew unlink docker
)brew switch docker 1.3.3
brew switch docker 1.4.1
De esta esencia
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>
. De lo contrario, esta es la forma más simple y concisa (hasta ahora) para cambiar a una versión específica de una fórmula.
Raw
botón en qué archivo?
brew log <formula>
En la línea de la sugerencia de @ halfcube, esto funciona muy bien:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
package@version
git log master -- Formula/PACKAGENAME.rb
para obtener el historial de confirmación, verifique la confirmación correcta y luego ejecute brew install Formula/PACKAGENAME.rb
para instalarlo.
brew unlink
antes brew install
de otra versión.
mxcl
?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
pero aparece el error, probablemente debido a la @
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.
Alguna idea?
He descubierto una solución alternativa mejor que las otras soluciones complejas.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb
Esto descargará e instalará PostgreSQL 8.4.8
Encontré esta solución comenzando a seguir los pasos de búsqueda en el repositorio y un comentario en el repositorio.
Después de una pequeña investigación descubrió que alguien tiene una colección de formuladores raros para elaborar.
Si estás buscando MySQL 5.1.x, inténtalo.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb
parecía fallar con los errores de sintaxis.
raw
URL
homebrew-versions
se ha ido y todo lo que está en core
ahora, para el caso general es: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb
. COMMIT
se puede encontrar visitando github.com/Homebrew/homebrew-core/commits/master/Formula/… .
Puede usar la estrategia de identificar la fórmula y una confirmación particular en el historial de la fórmula que coincida con la versión del paquete que desea instalar.
Presione t
en su teclado para activar el buscador de archivos.
Identifique una fórmula que parezca más relevante, quizás: Formula/mysql.rb
llevándolo a la ubicación de un archivo forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb .
Mire el historial de revisiones haciendo clic en el History
botón, que se encuentra en https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb . Si está interesado en MySQL 5.7.10, es posible que desee hacer clic en la última revisión anterior a 5.7.11, que navega a una confirmación de GitHub:
NOTA: Puede que tenga que ver el historial de confirmación en su consola según la sugerencia de GitHub si el historial de confirmación no se carga en su navegador. Reemplace el commit SHA anterior en la URL si está interesado en ver ese commit en GitHub. Alternativamente, salte al paso 7, a continuación.
Haga clic en el botón "Ver" para ver la fuente del archivo mysql.rb después de aplicar el commit.
Luego haga clic en el botón "Sin procesar" para ver la fuente sin procesar.
Copia la URL. Alternativamente, cree la URL usted mismo con el mysql.rb
nombre del archivo para identificar su fórmula y la versión particular de esa fórmula (identificada por el SHA de comunicación en la URL a continuación).
Instalarlo con $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
NOTA: Esta respuesta se actualizó para dar cuenta de la eliminación del sitio web braumeister.org. Se aplica el mismo principio, Braumeister simplemente había proporcionado una forma amigable para principiantes para navegar por las versiones de fórmulas.
La mayoría de las otras respuestas son obsoletas por ahora. Desafortunadamente, Homebrew todavía no tiene una forma integrada de instalar una versión desactualizada, a menos que esa versión exista como una fórmula separada (por ejemplo python@2
,postgresql@9.4
...).
Afortunadamente, para otras fórmulas hay una manera mucho más fácil que el desorden enredado que solía ser necesario. Aquí están las instrucciones completas:
Busque la versión correcta en los registros:
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›
Esto mostrará una lista de hashes de confirmación. Tome uno que sea apropiado (en su mayoría debería ser bastante obvio, y generalmente es el más reciente (es decir, el superior).
Encuentre la URL en la que reside la fórmula en el repositorio ascendente:
brew info ‹formula› | grep ^From:
Repara la URL:
github.com
conraw.githubusercontent.com
blob/master
con el hash de confirmación que encontramos en el primer paso.Instale la versión deseada reemplazando master
la URL encontrada anteriormente por el hash de confirmación, por ejemplo:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
(El último paso puede requerir ejecutar brew unlink ‹formula›
antes).
Si ha copiado un hash de compromiso que desea usar, puede usar algo como este ejemplo para instalar esa versión, reemplazando el valor y bash
con su hash de compromiso y su fórmula deseada.
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 ejemplo es la instalación de bash 4.4.23 en lugar de bash 5, aunque si realizó un brew upgrade
después, bash 5 se instalaría en la parte superior, a menos que primero lo ejecute brew pin bash
. En lugar de hacer esto más suave sin definir, se debe instalar primero el más reciente con brew install bash
y, a continuación brew unlink bash
, a continuación, instalar la versión anterior que desea por el script de arriba, y luego usar brew switch bash 4.4.23
para establecer los enlaces simbólicos a la versión anterior. Ahora a brew upgrade
no debería afectar su versión de Bash. Puede brew switch bash
obtener una lista de las versiones disponibles para cambiar.
Otra forma de lograr el mismo 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.
Esto crea un formula@version
toque personalizado que puede instalar según el ejemplo anterior. La desventaja es que probablemente aún lo necesite brew unlink bash
y luego brew link bash@4.4.23
para usar su versión específica de Bash o cualquier otra fórmula.
brew log
que cualquier extra -F
u --grep
opciones me fallaran.
brew log
. No puedo molestarme en escribir una nueva versión ahora porque eso requiere analizar correctamente el mensaje de registro git o, alternativamente, ejecutarse git log
directamente en el repositorio correspondiente. Y el registro de cambios no parece siquiera mencionar este cambio radical. Más que molesto.
External Command
podría ser necesario operar dentro de la estructura brew
para recuperar ese tipo de git log
filtrado. docs.brew.sh/External-Commands
brew extract
uso correcto , ¡gracias!
Acabo de usar Homebrew para volver a Maven 2.2.1 desde el simple brew install maven
Maven 3.0.3 instalado.
Primero tienes que dejar el directorio de expertos allí, así que
$ brew unlink maven
Use el comando brew tap
$ brew tap homebrew / versiones Clonación en '/ usr / local / Library / Taps / homebrew-version' ... remoto: Contando objetos: 590, hecho. remoto: Comprimir objetos: 100% (265/265), hecho. remoto: Total 590 (delta 362), reutilizado 549 (delta 325) Recepción de objetos: 100% (590/590), 117,49 KiB | 79 KiB / s, hecho. Resolviendo deltas: 100% (362/362), hecho. Tapped 50 formula
Ahora puede instalar la fórmula maven2:
$ brew install maven2 ==> Descargando 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 archivos, 3.1M, integrados en 6 segundos
$ mvn --version Apache Maven 2.2.1 (r801777; 2009-08-06 12: 16: 01-0700) Versión de Java: 1.6.0_37 Página de inicio de Java: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Configuración regional predeterminada: en_US, codificación de plataforma: MacRoman Nombre del sistema operativo: "mac os x" versión: "10.7.4" arch: "x86_64" Familia: "mac"
Editar:
También puede simplemente brew switch maven 2.2.1
cambiar a una versión diferente.
Editar: El proyecto Apache Maven reorganizó su repositorio. Se actualizó esta respuesta para tener en cuenta este cambio.
Basado en el flujo de trabajo descrito por @tschundeee y la actualización 1 de @ Debilski , automaticé el procedimiento y agregué limpieza en este script .
Descárgalo , ponlo en tu camino y brewv <formula_name> <wanted_version>
. Para el OP específico, sería:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:)
Una respuesta actualizada ya que se suma a lo que @ lance-pollard ya publicó como respuesta de trabajo.
Cómo instalar una versión específica de una fórmula (la fórmula utilizada en este ejemplo es terraform
):
git log master -- Formula/terraform.rb
si ha clonado el repositorio localmente.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
Desafortunadamente, Homebrew todavía no tiene una forma integrada obvia de instalar una versión anterior.
Afortunadamente, para la mayoría de las fórmulas hay una forma mucho más fácil que el desorden complicado que solía ser necesario. Aquí están las instrucciones completas usando bash
como ejemplo:
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.
Esto crea formula@version
en su toque personalizado que puede instalar según el ejemplo anterior. Una nota importante es que probablemente lo necesite brew unlink bash
si previamente instaló la versión predeterminada / más reciente de la fórmula y luego brew link bash@4.4.23
para usar su versión específica de Bash (o cualquier otra fórmula donde tenga instalada la versión más reciente y más antigua).
Una desventaja potencial de este método es que no puede cambiar fácilmente entre las versiones porque de acuerdo con brew
esta, es una "fórmula diferente".
Si desea poder usarlo brew switch $FORMULA $VERSION
, debe usar el siguiente método.
Este ejemplo muestra la instalación de bash 4.4.23 anterior, un ejemplo útil ya que la bash
fórmula actualmente instala bash 5.
brew install bash
brew unlink bash
brew switch bash 4.4.23
para configurar los enlaces simbólicos a su versiónSi realizó una brew upgrade
después de instalar una versión anterior sin instalar primero la última, entonces la última se instalaría golpeando su versión anterior, a menos que primero la ejecute brew pin bash
.
Los pasos aquí EVITAN la fijación porque es fácil de olvidar y puede fijar a una versión que se vuelva insegura en el futuro (ver Shellshock / etc). Con esta configuración unbrew upgrade
, no debería afectar su versión de Bash y siempre puede ejecutarbrew switch bash
para obtener una lista de las versiones disponibles para cambiar.
Copie y pegue y edite las export
líneas del fragmento de código a continuación para actualizar con la versión deseada y el nombre de la fórmula, luego copie y pegue el resto tal como está y usará esas variables para hacer 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
Cuando esté seguro de que la versión existe en la fórmula, puede usar lo siguiente:
# 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}')
Una vez que haya exportado el hash de confirmación que desea usar, puede usarlo para instalar esa versión del paquete.
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 las instrucciones en el resultado de la fórmula para ponerlo en su RUTA o configurarlo como su shell predeterminado.
En la versión más reciente de homebrew (0.9.5 a partir de este escrito) habrá una receta específica para la versión del barril de homebrew que desea instalar. Ejemplo:
$ brew search mongodb
mongodb mongodb24 mongodb26
Entonces simplemente haz lo brew install mongodb26
normal.
En el caso de que ya había instalado la última versión, asegúrese de desvincular la última versión y vincular la versión deseada: brew unlink mongodb && brew link mongodb26
.
El problema homebrew/versions
es que alguien debe tener esa versión específica de software en el repositorio para que pueda usarla. Además, dado brew versions
que ya no es compatible, se requiere otra solución. Para las soluciones que indican el uso brew switch
, esto solo funcionará si no lo ha hecho, brew cleanup
ya que la versión debe existir en su computadora.
Tuve un problema al querer instalar una versión anterior específica de la docker-machine
cual no figuraba en la lista homebrew/versions
. Resolví esto usando lo siguiente, que también debería funcionar para cualquier software instalado. El siguiente ejemplo se usará docker-machine
como el paquete que quiero degradar de la versión 0.5.0 a 0.4.1.
Vaya a su Formula
directorio homebrew .
Puede determinar esto ejecutando brew info [any package name]
. Por ejemplo, brew info docker-machine
me da una línea que me muestra un camino - /usr/local/Cellar/docker-machine/0.5.0
. Esto me dice que en mi máquina, homebrew está instalado en /usr/local
y mi Formula
directorio se encuentra por defecto en/usr/local/Library/Formula
Localice el archivo de fórmula específico (.rb) para su paquete.
Como quiero degradar docker-machine
, puedo ver un docker-machine.rb
archivo.
Obtenga el historial de versiones para este archivo de fórmula . Introduzca git log docker-machine.rb
. Esto enumerará el historial de confirmación completo para este archivo. Verá resultados como este:
...más commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc Autor: BrewTestBot Fecha: jue 5 de noviembre 16:14:18 2015 +0000 docker-machine: actualiza la botella 0.5.0. commit 8f615708184884e501bf5c16482c95eff6aea637 Autor: Vincent Lesierse Fecha: martes 27 de octubre 22:25:30 2015 +0100 docker-machine 0.5.0 Docker-machine actualizado a 0.5.0 Cierra # 45403. Firmado por: Dominyk Tiller commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423 Autor: BrewTestBot Fecha: Lun Sep 21 14:04:04 2015 +0100 docker-machine: actualiza la botella 0.4.1. commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd Autor: BrewTestBot Fecha: dom 16 de agosto 09:05:56 2015 +0100 docker-machine: actualiza la botella 0.4.1. ...más
La parte difícil es encontrar la última confirmación para la versión específica que desea. En lo anterior, puedo decir la última versión 0.4.1 se ha comprometido con esta confirmación de la etiqueta: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
. Las confirmaciones por encima de este punto comienzan a usar la versión 0.5.0 (las entradas de registro de git se enumeran de la última a la fecha más temprana).
Obtenga una versión anterior del archivo de fórmula. Usando la etiqueta de confirmación del paso 3 (puede usar los primeros 6 caracteres), puede obtener una versión anterior del archivo de fórmula usando lo siguiente:
git checkout 5970e1 docker-machine.rb
Desinstale la versión actual de su paquete.
Simplemente ejecute los comandos brew normales para desinstalar la versión actual de su paquete.
Ex.brew uninstall docker-machine
Instale la versión anterior del paquete
Ahora, solo puede ejecutar el comando de instalación de preparación normal e instalará la fórmula que ha extraído. Ex.brew install docker-machine
Es posible que deba volver a vincular utilizando brew link docker-machine
si es necesario.
Si en algún momento desea volver a la última versión de un paquete específico, vaya al directorio Fórmula y emita los siguientes comandos en su archivo de fórmula (.rb)
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Entonces puede brew uninstall docker-machine
y brew install docker-machine
para obtener la última versión y mantenerla así en el futuro.
git log --grep 0.4.1 docker-machine.rb
.
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairo
cerveza de esta manera. La respuesta de @ sealocal mostró más, por alguna razón.
Mi situación: postgresql
se actualizó de 11 a 12 accidentalmente. Quiero mantener 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
Si tiene algún error, marque /usr/local/var/log/postgresql@11.log
(observe el @ 11).
brew postgresql-upgrade-database
). Esta respuesta no es útil para casi ninguna otra fórmula.
brew postgresql-upgrade-database
es, bueno, para actualizaciones . Mi respuesta es sobre el uso de una versión anterior de Postgres. Simplemente cambiar binarios no funcionará.
nvm
, para su información He tenido suerte usando esta técnica para versiones anteriores de LTS. Al menos al momento de escribir v10 y v12 debería estar disponible, por ejemplo, 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
desde el homebrew-core
directorio? funcionó para mí sin usar la raw.github..
dirección
se podría hacer muy fácil para la última versión de 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)
Ninguno de estos realmente funcionó para mi caso (Python), así que agregaré mis 2 centavos:
cd `brew --prefix`
git log Library/Formula/python.rb
La salida se ve así:
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. ...
Quiero la versión, 2.7.11
así que mi hash es cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(o cf5da05
para abreviar). A continuación, verifico esa versión e instalo la fórmula python
:
git checkout cf5da05
brew install python
Finalmente, limpia:
git checkout master
HOMEBREW_NO_AUTO_UPDATE
leer github.com/Homebrew/brew/issues/1188
cd
brew --prefix /Homebrew
ygit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Taps
se ignora.
HOMEBREW_NO_AUTO_UPDATE
. Sí, no se olvide de lo que necesita hasta después de descubrir que lo necesite. xD
HOMEBREW_NO_INSTALL_CLEANUP
¿No es esto algo que necesitas recordar?
Si no puede encontrar su versión brew search <formula>
, también puede intentar revisar los registros de confirmación de su fórmula para encontrar la versión que desea:
Aquí hay un ejemplo para instalar una versión anterior de nginx a través de brew:
ver nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
A partir de ahí, podemos instalar 1.6.3
con la url sha y raw git:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
Actualmente, las viejas formas de instalar versiones de fórmulas específicas han quedado en desuso. Entonces parece que tenemos que usar brew edit [formula]
. Por ejemplo, digamos que queremos instalar una 62.1
versión de icu4c
(necesaria, por ejemplo, para postgresql 10.5
). Entonces tendrías que
> brew edit icu4c
# drops you to editor
Aquí tendría que modificar el url
, version
y sha256
(quizás también mirror
) a las 62.1
cadenas correspondientes .
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"
luego corre brew reinstall icu4c
para descargar finalmente la 62.1
versión.
sha256
? en mi casohttps://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
Actualización en la Biblioteca / Fórmula / postgresql.rb línea 8 a
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
Y MD5 en la línea 9 a
fcc3daaf2292fa6bf1185ec45e512db6
Guardar y Salir.
brew install postgres
initdb /usr/local/var/postgres
Ahora, en esta etapa, es posible que se enfrente al postgresql could not create shared memory segment
error, para evitar esa actualización /etc/sysctl.conf
como esta:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Inténtalo de initdb /usr/local/var/postgres
nuevo y debería funcionar sin problemas.
Para ejecutar postgresql al inicio
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
Espero que ayude :)
Acabo de copiar una versión anterior de elasticsearch en el /usr/local/Cellar/elasticsearch
directorio.
$ 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
Eso es. Quizás sea útil para cualquiera.
Decidí, en contra de mi mejor juicio, crear una fórmula para Maven 3.1.1, que homebrew/versions
no tenía. Para hacer esto:
homebrew/versions
en github.$(brew --prefix)/Library/Taps
a la copia de trabajo local de mi tenedor. Voy a llamar a este my-homebrew/versions
.my-homebrew/versions/<formula>
.homebrew/versions
para mi nueva fórmula.Hurra.
Para versiones que actualmente no están en las fórmulas de preparación predeterminadas, puede crear fácilmente su propio toque con la herramienta desde https://github.com/buildtools-version-taps/homebrew-versions-tap-tool
brew tap-new user/repo
y luego brew extract --version='Major.minor' FORMULA user/repo
y luego brew install FORMULA@Major.minor
.
Creé una herramienta para facilitar el proceso prescrito en esta respuesta .
Para encontrar un paquete pkg
con versión a.b.c
, ejecute:
$ brew-install-specific pkg@a.b.c
Esto enumerará los commits en la pkg
fórmula homebrew que mencionan la versión dada junto con sus URL de 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 la confirmación de la URL dada e ingrese el índice de la confirmación seleccionada.
Select index: 2
Run:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb
Copie y ejecute el comando dado para instalar.
postgresql
es extraño porque tenía versiones separadas en Homebrew en un punto, algo asíbash
podría ser un mejor ejemplo ya que pasó de 4.xa 5.x dentro del mismo nombre de fórmula. Ver stackoverflow.com/a/55764594/3794873