¿Instalar una versión específica de Homebrew?

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

Solución

TLDR: brew install postgresql@8.4.4 Ver respuesta abajo para más detalles.


(He reeditado mi respuesta para dar un flujo de trabajo más completo para instalar/usar versiones de software más antiguas con homebrew. Siéntete libre de añadir una nota si encuentras mejor la versión antigua.*) Empecemos por el caso más sencillo:

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

    Cuando homebrew instala una nueva fórmula, la pone en un directorio versionado como /usr/local/Cellar/postgresql/9.3.1. A continuación, 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 has estado utilizando homebrew durante más tiempo y nunca has eliminado las versiones anteriores (utilizando, por ejemplo, brew cleanup), lo más probable es que todavía exista alguna versión anterior de tu programa. Si quieres simplemente activar esa versión anterior, brew switch es la forma más fácil de hacerlo. Comprueba con brew info postgresql (o brew switch postgresql) 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 activarla 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 de nuevo 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

Observe que la estrella * se ha movido a la versión recién activada () Tenga en cuenta que el cambio de versión sólo funciona mientras todas las dependencias de la versión anterior sigan existiendo. En algunos casos, puede ser necesario reconstruir la versión anterior. Por lo tanto, el uso de brew switch es útil sobre todo cuando se quiere cambiar entre dos versiones no muy lejanas.* 2) Comprueba si la versión está disponible como un tap

Especialmente para los proyectos de software más grandes, es muy probable que haya una demanda suficientemente alta para varias versiones principales (potencialmente incompatibles con la API) de una determinada pieza de software. Desde marzo de 2012, Homebrew 0.9 ofrece un mecanismo para ello: brew tap y el repositorio homebrew versions. Ese repositorio de versiones puede incluir backports de versiones antiguas para varias fórmulas. (Mayormente sólo las grandes y famosas, 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

Podemos simplemente 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 tomado automáticamente el grifo homebrew/versions. (Comprobar con brew tap, eliminar con brew untap homebrew/versions.) Lo siguiente habría sido equivalente:

$ brew tap homebrew/versions
$ brew install postgresql8

Mientras las fórmulas de las versiones respaldadas se mantengan actualizadas, este enfoque es probablemente la mejor manera de tratar con software antiguo. 3) Probar alguna fórmula del pasado

Los siguientes enfoques se enumeran principalmente para completar. Ambos intentan resucitar alguna fórmula no muerta del repositorio de Brew. Debido a cambios en las dependencias, cambios en la API 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 git, uno puede instalar versiones específicas usando simples comandos git. 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 brew versions, que escupía todas las versiones disponibles con sus respectivos hashes SHA. A partir de octubre de 2014, hay que hacer un brew tap homebrew/boneyard antes de poder usarlo. Como el nombre del grifo sugiere, probablemente sólo deberías hacer esto como último recurso. Por ejemplo

$ 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, se desaconseja su uso. Homebrew escupe todas las versiones que puede encontrar con su heurística interna y te muestra una forma de recuperar las fórmulas antiguas. Vamos a probarlo.

# 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 la antigua y la nueva. b) la prehistoria Para necesidades especiales, también podemos probar nuestra propia excavación a través del repo de homebrew.

$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb

git log -S busca todos los commits en los que se haya añadido o eliminado la cadena '8.4.4' 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 commit que nos interesa. Como este commit es bastante antiguo, intentaremos hacer un downgrade de la instalación completa de homebrew (de esta manera, la API de la 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 omitir el último comando para mantener la referencia en tu repositorio git. Una nota: Al comprobar el commit más antiguo, se rebaja temporalmente la instalación de 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 muy difícil y luego puedes subirla a tu propio repositorio. Solía ser Homebrew-Versiones, pero ya está descontinuado. A.) Bono: Pinning

Si quieres mantener una determinada versión de, por ejemplo, postgresql, y evitar que se actualice cuando hagas el procedimiento natural brew update; brew upgrade, puedes pin una fórmula:

$ brew pin postgresql

Las fórmulas ancladas se encuentran en /usr/local/Library/PinnedKegs/ y una vez que quieras introducir los últimos cambios y actualizaciones, puedes desanclarla de nuevo:

$ brew unpin postgresql
Comentarios (48)

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 empezando a seguir los pasos de búsqueda en el repo y un comentario en el repo .

Después de un poco de investigación encontró que alguien tiene una colección de fórmulas raras para elaborar.


Si estás buscando MySQL 5.1.x, prueba esto.

brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
Comentarios (9)

Actualizar en la línea 8 de Library/Formula/postgresql.rb 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

Guarde y salga.

brew install postgres
initdb /usr/local/var/postgres

Ahora, en esta etapa puede enfrentar el error postgresql no pudo crear un segmento de memoria compartida, para evitarlo actualice el /etc/sysctl.conf de esta manera:

kern.sysv.shmall=65536
kern.sysv.shmmax=16777216

Prueba initdb /usr/local/var/postgres de 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 eso ayude :)

Comentarios (0)