Homebrew instaló una versión específica de la fórmula

installation versioning homebrew


¿Cómo instalo una versión específica de una fórmula en el homebrew? Por ejemplo,postgresql-8.4.4 en lugar de la última 9.0.




Answer 1 Debilski


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:

1)Compruebe 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 . 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 alguna versión anterior de su programa todavía esté disponible. Si desea simplemente activar esa versión anterior, el 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 el 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 * se ha movido a la versión recién activada

(*) Tenga en cuenta que el brew switch solo funciona siempre que 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 de brew switch es principalmente útil cuando se quiere cambiar entre dos versiones no muy separadas.

2)Compruebe,si la versión está disponible como un toque

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 una determinada pieza de 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 le mostrará dónde buscar:

$ brew search postgresql
postgresql
homebrew/versions/postgresql8    homebrew/versions/postgresql91
homebrew/versions/postgresql9    homebrew/versions/postgresql92

Podemos instalarlo simplemente tecleando

$ 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 toque homebrew/versions . (Verifique con brew tap , elimine con brew untap homebrew/versions ). Lo siguiente hubiera sido equivalente:

$ brew tap homebrew/versions
$ brew install postgresql8

Mientras las fórmulas de las versiones anteriores se mantengan actualizadas,este enfoque es probablemente la mejor manera de tratar con el software más antiguo.

3)Pruebe alguna fórmula del pasado

Los siguientes enfoques se enumeran principalmente para completar la información.Ambos tratan de resucitar alguna fórmula no muerta del depósito de cerveza.Debido a las dependencias cambiadas,a los cambios de la API en la especificación de la fórmula o simplemente a un cambio en la URL de descarga,las cosas pueden o no funcionar.

Como todo el directorio de la fórmula es un repositorio git,se pueden instalar versiones específicas usando comandos git simples.Sin embargo,necesitamos encontrar una manera de llegar a un commit donde la versión antigua estaba disponible.

a) tiempos históricos

Entre agosto de 2011 y octubre de 2014 , homebrew tenía un comando de brew versions , que escupía todas las versiones disponibles con sus respectivos hashes SHA. A partir de octubre de 2014, debe hacer un brew tap homebrew/boneyard antes de poder usarlo. Como sugiere el nombre del grifo, probablemente solo deberías hacer esto como último recurso.

E.g.

$ 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 antigua de postgresql está instalada,podemos reinstalar la última fórmula para mantener nuestro repositorio limpio:

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

brew switch es tu amigo para cambiar entre lo viejo y lo nuevo.

b) tiempos prehistóricos

Para las necesidades especiales,también podemos tratar de escarbar en el repo casero.

$ 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 el compromiso en el que estamos interesados. Como este compromiso es bastante antiguo, 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

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

Una nota:Al revisar el viejo compromiso,temporalmente bajaste la instalación de tu homebrew.Por lo tanto,debes tener cuidado ya que algunos comandos en homebrew pueden ser diferentes a la versión más reciente.

4)Escribir manualmente una fórmula

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

A.)Bono:Pinning

Si desea mantener una cierta versión de, digamos postgresql, alrededor y evitar que se actualice cuando realiza la brew update; brew upgrade natural ; Breve procedimiento de actualización , puede anclar una fórmula:

$ brew pin postgresql

Las fórmulas ancladas se enumeran en /usr/local/Library/PinnedKegs/ y una vez que desee incorporar los últimos cambios y actualizaciones, puede volver a fijarlas :

$ brew unpin postgresql



Answer 2 Bijan


Flujo de trabajo simple

Ahora que Homebrew/versiones ha sido desaprobado,Homebrew/core soporta múltiples versiones de fórmulas con un nuevo formato de denominación.

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

$ brew install postgresql@9.5

Para listar 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



Answer 3 Trevor Burnham


Ahora hay una forma mucho más fácil de instalar una versión antigua de una fórmula que ya habías instalado.Simplemente usa

brew switch [formula] [version]

Por ejemplo,yo alterno regularmente entre Nodo.js 0.4.12 y 0.6.5:

brew switch node 0.4.12
brew switch node 0.6.5

Dado que el brew switch solo cambia los enlaces simbólicos, es muy rápido. Consulte más documentación en Homebrew Wiki en Comandos externos .




Answer 4 Vishal


Actualización:1/15/2015

  • Encuentre el historial de confirmación del software y la versión deseados. Por ejemplo, necesito cambiar de la versión de Docker 1.4.1 a 1.3.3: https://github.com/Homebrew/homebrew-core/commits/master/Formula/docker.rb
  • Vea el archivo con este botón:enter image description here
  • Haga clic en el botón Raw:List item
  • Copie la URL (docker.rb url en este ejemplo) de la barra de direcciones
  • brew install <url> (puede que tenga que brew unlink primero, por ejemplo brew unlink docker )
  • brew switch docker 1.3.3
  • Cambiar de nuevo a Docker 1.4.1 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



Answer 5 Lance Pollard


En la línea de la sugerencia de @halfcube,esto funciona muy bien:

  1. Encuentra la biblioteca que estás buscando en https://github.com/Homebrew/homebrew-core/tree/master/Formula
  2. Haz clic en él: https://github.com/Homebrew/homebrew-core/blob/master/Formula/postgresql.rb
  3. Haga clic en el botón "historial" para ver las confirmaciones antiguas: https://github.com/Homebrew/homebrew-core/commits/master/Formula/postgresql.rb
  4. Haga clic en el que desee: "postgresql: actualice la versión a 8.4.4", https://github.com/Homebrew/homebrew-core/blob/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
  5. Haga clic en el enlace "sin procesar": https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
  6. brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb