¿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 switches 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 switchsolo 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 tapy 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/versionsgrifo 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 versionscomando 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 -Sbusca 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, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422es 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 upgradeprocedimiento 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 updateestablecer su repositorio de Git.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core, entonces puede usar git checkout 4cce79d -- Formula/go.rby 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 cdentrar en el directorio (sin FORMULANAME.rb), luego hago elgit checkout 120938
cd /usr/localprimero.
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 switchsolo cambia los enlaces simbólicos, es muy rápido. Consulte más documentación en Homebrew Wiki en Comandos externos .
brew switchbasa 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.3brew switch docker 1.4.1De 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.
Rawbotó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.rbpackage@version
git log master -- Formula/PACKAGENAME.rbpara obtener el historial de confirmación, verifique la confirmación correcta y luego ejecute brew install Formula/PACKAGENAME.rbpara instalarlo.
brew unlinkantes brew installde otra versión.
mxcl?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rbpero 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.rbparecía fallar con los errores de sintaxis.
rawURL
homebrew-versionsse ha ido y todo lo que está en coreahora, para el caso general es: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb. COMMITse 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 ten su teclado para activar el buscador de archivos.
Identifique una fórmula que parezca más relevante, quizás: Formula/mysql.rbllevá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 Historybotó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.rbnombre 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.comconraw.githubusercontent.comblob/mastercon el hash de confirmación que encontramos en el primer paso.Instale la versión deseada reemplazando masterla 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 bashcon 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 upgradedespué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 bashy, 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.23para establecer los enlaces simbólicos a la versión anterior. Ahora a brew upgradeno debería afectar su versión de Bash. Puede brew switch bashobtener 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@versiontoque personalizado que puede instalar según el ejemplo anterior. La desventaja es que probablemente aún lo necesite brew unlink bashy luego brew link bash@4.4.23para usar su versión específica de Bash o cualquier otra fórmula.
brew logque cualquier extra -Fu --grepopciones 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 logdirectamente en el repositorio correspondiente. Y el registro de cambios no parece siquiera mencionar este cambio radical. Más que molesto.
External Commandpodría ser necesario operar dentro de la estructura brewpara recuperar ese tipo de git logfiltrado. docs.brew.sh/External-Commands
brew extractuso correcto , ¡gracias!
Acabo de usar Homebrew para volver a Maven 2.2.1 desde el simple brew install mavenMaven 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.1cambiar 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.rbsi ha clonado el repositorio localmente.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rbDesafortunadamente, 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 bashcomo 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@versionen su toque personalizado que puede instalar según el ejemplo anterior. Una nota importante es que probablemente lo necesite brew unlink bashsi previamente instaló la versión predeterminada / más reciente de la fórmula y luego brew link bash@4.4.23para 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 bashfórmula actualmente instala bash 5.
brew install bashbrew unlink bashbrew switch bash 4.4.23para configurar los enlaces simbólicos a su versiónSi realizó una brew upgradedespué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 exportlí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 mongodb26normal.
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/versionses que alguien debe tener esa versión específica de software en el repositorio para que pueda usarla. Además, dado brew versionsque 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 cleanupya que la versión debe existir en su computadora.
Tuve un problema al querer instalar una versión anterior específica de la docker-machinecual 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-machinecomo el paquete que quiero degradar de la versión 0.5.0 a 0.4.1.
Vaya a su Formuladirectorio homebrew .
Puede determinar esto ejecutando brew info [any package name]. Por ejemplo, brew info docker-machineme 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/localy 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.rbarchivo.
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-machinesi 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-machiney brew install docker-machinepara 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
cairocerveza de esta manera. La respuesta de @ sealocal mostró más, por alguna razón.
Mi situación: postgresqlse actualizó de 11 a 12 accidentalmente. Quiero mantener 11.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgresa 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-databasees, 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.rbdesde el homebrew-coredirectorio? 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.11así que mi hash es cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9(o cf5da05para 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_UPDATEleer github.com/Homebrew/brew/issues/1188
cd brew --prefix /Homebrewygit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Tapsse 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.3con 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.1versió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, versiony sha256(quizás también mirror) a las 62.1cadenas 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 icu4cpara descargar finalmente la 62.1versió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 segmenterror, para evitar esa actualización /etc/sysctl.confcomo esta:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Inténtalo de initdb /usr/local/var/postgresnuevo 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/elasticsearchdirectorio.
$ 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/versionsno tenía. Para hacer esto:
homebrew/versionsen github.$(brew --prefix)/Library/Tapsa la copia de trabajo local de mi tenedor. Voy a llamar a este my-homebrew/versions.my-homebrew/versions/<formula>.homebrew/versionspara 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/repoy luego brew extract --version='Major.minor' FORMULA user/repoy luego brew install FORMULA@Major.minor.
Creé una herramienta para facilitar el proceso prescrito en esta respuesta .
Para encontrar un paquete pkgcon versión a.b.c, ejecute:
$ brew-install-specific pkg@a.b.c
Esto enumerará los commits en la pkgfó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.
postgresqles extraño porque tenía versiones separadas en Homebrew en un punto, algo asíbashpodrí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