¿Homebrew instala una versión específica de la fórmula?

Resuelto Gravis asked hace 14 años • 36 respuestas

¿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 versión 9.0.

Gravis avatar Oct 21 '10 19:10 Gravis
Aceptado

TLDR: brew install [email protected] consulte la respuesta a continuación para obtener más detalles.


*( He reeditado mi respuesta para brindar un flujo de trabajo más completo para instalar/usar versiones de software anteriores con homebrew. No dude en agregar una nota si encontró mejor la versión anterior) .

Empecemos por el caso más sencillo:

1) Verifique si la versión ya está instalada (pero no activada)

Cuando homebrew instala una nueva fórmula, la coloca en un directorio versionado como /usr/local/Cellar/postgresql/9.3.1. Entonces sólo se instalan globalmente los enlaces simbólicos a esta carpeta. En principio, esto hace que sea bastante fácil cambiar entre dos versiones instaladas. (*)

Si ha estado usando homebrew por más tiempo y nunca eliminó versiones anteriores (usando, por ejemplo brew cleanup), es probable que aún exista alguna versión anterior de su programa. Si desea simplemente activar esa versión anterior, brew switchesta es la forma más sencilla de hacerlo.

Verifique con brew info postgresql(o brew switch postgresql <TAB>) si está instalada la versión anterior:

$ 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 ya está instalada alguna versión anterior. 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

Comprobemos qué 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 *se ha movido a la versión recién activada.

(*) Tenga en cuenta que brew switchsolo funciona mientras todas las dependencias de la versión anterior sigan existiendo. En algunos casos, puede ser necesaria una reconstrucción de la versión anterior. Por lo tanto, el uso brew switches especialmente útil cuando se quiere cambiar entre dos versiones no muy separadas.

2) Verifique si la versión está disponible como grifo

Especialmente para proyectos de software más grandes, es muy probable que exista una demanda suficientemente alta de varias versiones principales (potencialmente incompatibles con API) de una determinada pieza de software. A partir de marzo de 2012, Homebrew 0.9 proporciona un mecanismo para esto: brew tapy el repositorio de versiones homebrew .

Ese repositorio de versiones puede incluir backports de versiones anteriores para varias fórmulas. (En su mayoría, solo los grandes y famosos, pero, por supuesto, también tendrán varias fórmulas para postgresql).

brew search postgresqlle 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 automáticamente el homebrew/versionsgrifo. (Verifique con brew tap, elimine con brew untap homebrew/versions.) Lo siguiente habría sido equivalente:

$ brew tap homebrew/versions
$ brew install postgresql8

Siempre que las fórmulas de la versión respaldada se mantengan actualizadas, este enfoque es probablemente la mejor manera de lidiar con el software más antiguo.

3) Prueba alguna fórmula del pasado

Los siguientes enfoques se enumeran principalmente para que estén completos. Ambos intentan resucitar alguna fórmula de no-muertos del depósito de cerveza. Debido a cambios en las dependencias, cambios de API en la especificación de la fórmula o simplemente un cambio en la URL de descarga, las cosas pueden funcionar o no.

Dado que todo el directorio de fórmulas es un repositorio de git, se pueden instalar versiones específicas usando comandos simples de git. Sin embargo, necesitamos encontrar una manera de llegar a una confirmación donde la versión anterior estuviera 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, debes realizar una prueba brew tap homebrew/boneyardantes de poder usarlo. Como sugiere el nombre del grifo, probablemente sólo 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 puedes ver, desaconseja su uso. Homebrew escupe todas las versiones que puede encontrar con su heurística interna y le muestra una manera 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 está instalada la versión anterior de PostgreSQL, podemos reinstalar la última fórmula para mantener limpio nuestro repositorio:

$ git checkout -- Library/Formula/postgresql.rb

brew switches tu amigo para cambiar entre lo viejo y lo nuevo.

b) tiempos prehistóricos

Para necesidades especiales, también podemos intentar investigar por nuestra cuenta en el repositorio de cerveza casera.

$ 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. Como resultado, obtenemos dos confirmaciones.

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, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422lo que nos interesa es el compromiso. Como este compromiso es bastante antiguo, intentaremos degradar la instalación casera completa (de esa manera, se garantiza más o menos que la API de fórmula sea válida):

$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4

Puedes omitir el último comando para mantener la referencia en tu repositorio de git.

Una nota: al comprobar la confirmación anterior, degradas temporalmente tu instalación casera. Por lo tanto, debe tener cuidado ya que algunos comandos en homebrew pueden ser diferentes a la versión más reciente.

4) Escribe manualmente una fórmula.

No es demasiado difícil y luego puedes subirlo a tu propio repositorio. Solía ​​ser Homebrew-Versions , pero ahora está descontinuado.

A.) Bonificación: Fijar

Si desea mantener una determinada versión de, por ejemplo, postgresql, y evitar que se actualice cuando realiza el brew update; brew upgradeprocedimiento natural, puede fijar una fórmula:

$ brew pin postgresql

Las fórmulas fijadas se enumeran /usr/local/Library/PinnedKegs/y, una vez que desee incorporar los últimos cambios y actualizaciones, puede desanclarlas nuevamente:

$ brew unpin postgresql
Debilski avatar Nov 11 '2010 20:11 Debilski

Flujo de trabajo sencillo

Ahora que Homebrew/versions ha quedado obsoleto, Homebrew/core admite algunas versiones de fórmulas con un nuevo formato de nomenclatura.

Para instalar una versión específica, por ejemplo postgresql 9.5, simplemente ejecute:

$ brew install [email protected]

Para enumerar las versiones disponibles, ejecute una búsqueda con @:

$ brew search postgresql@
==> Searching local taps...
[email protected][email protected]        [email protected]        [email protected]
Bijan avatar Mar 22 '2012 23:03 Bijan

⚠ Esta respuesta ya no funcionará después de diciembre de 2020:
brew switchse deshabilitó en HomeBrew 2.7.0 ( obsoleto en 2.6.0 )


Para versiones de Homebrew anteriores a la 2.7:

Ahora existe una forma mucho más sencilla de instalar una versión anterior de una fórmula que había instalado anteriormente. 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 .

Trevor Burnham avatar Dec 14 '2011 16:12 Trevor Burnham

Actualización: 15/01/2015

  • Encuentre el historial de confirmaciones del software y la versión deseados. por ejemplo, necesito cambiar de la versión 1.4.1 de Docker a la 1.3.3: https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
  • Ver el archivo con este botón:ingrese la descripción de la imagen aquí
  • Haga clic en el botón Sin procesar:Elemento de lista
  • Copy the URL (docker.rb url in this example) from address bar
  • brew install <url> (may have to brew unlink first, e.g. brew unlink docker)
  • brew switch docker 1.3.3
  • Switch back to docker 1.4.1 brew switch docker 1.4.1

From this gist

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
Vishal avatar Jul 19 '2013 23:07 Vishal