Homebrew installe une version spécifique de la formule ?

Comment installer une version spécifique d'une formule dans homebrew ? Par exemple, postgresql-8.4.4 au lieu de la dernière version 9.0.

Solution

TLDR: brew install postgresql@8.4.4 Voir réponse ci-dessous pour plus de détails.


(J'ai réédité ma réponse pour donner un flux de travail plus complet pour installer/utiliser les anciennes versions de logiciels avec homebrew. N'hésitez pas à ajouter une note si vous avez trouvé l'ancienne version meilleure.*) Commençons par le cas le plus simple :

  1. Vérifier, si la version est déjà installée (mais pas activée)

    Quand homebrew installe une nouvelle formule, il la place dans un répertoire versionné comme /usr/local/Cellar/postgresql/9.3.1. Seuls les liens symboliques vers ce répertoire sont ensuite installés globalement. En principe, cela permet de basculer assez facilement entre deux versions installées. (*) Si vous utilisez homebrew depuis longtemps et que vous n'avez jamais supprimé les anciennes versions (en utilisant, par exemple, brew cleanup), il y a de fortes chances pour qu'une ancienne version de votre programme soit toujours là. Si vous voulez simplement activer cette version précédente, brew switch est le moyen le plus simple de le faire. Vérifiez avec brew info postgresql (ou brew switch postgresql) si l'ancienne version est installée :

$ 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

Nous voyons qu'une ancienne version est déjà installée. Nous pouvons l'activer en utilisant 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

Vérifions à nouveau ce qui est activé :

$ 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

Notez que l'étoile * a été déplacée vers la nouvelle version activée. () Veuillez noter que brew switch ne fonctionne que si toutes les dépendances de l'ancienne version sont toujours présentes. Dans certains cas, une reconstruction de l'ancienne version peut s'avérer nécessaire. Par conséquent, l'utilisation de brew switch est surtout utile lorsque l'on veut basculer entre deux versions pas trop éloignées l'une de l'autre.* 2) Vérifiez si la version est disponible en tant que tap

En particulier pour les grands projets logiciels, il est très probable qu'il y ait une demande suffisamment importante pour plusieurs versions majeures (potentiellement incompatibles avec les API) d'un certain logiciel. Depuis mars 2012, Homebrew 0.9 fournit un mécanisme pour cela : brew tap et le dépôt de homebrew versions. Ce dépôt de versions peut inclure des backports d'anciennes versions pour plusieurs formules. (Principalement seulement les grandes et célèbres, mais bien sûr ils auront aussi plusieurs formules pour postgresql). brew search postgresql vous montrera où chercher :

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

Nous pouvons simplement l'installer en tapant

$ 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
# …

Notez que cela a automatiquement tapé le robinet homebrew/versions. (Vérifiez avec brew tap, supprimez avec brew untap homebrew/versions.) Ce qui suit aurait été équivalent :

$ brew tap homebrew/versions
$ brew install postgresql8

Tant que les formules de la version rétroportée restent à jour, cette approche est probablement la meilleure façon de traiter les anciens logiciels. 3) Essayez une formule du passé

Les approches suivantes sont listées principalement par souci d'exhaustivité. Toutes deux tentent de ressusciter une formule morte-vivante du dépôt de brassage. En raison de dépendances modifiées, de changements d'API dans la spécification de la formule ou simplement d'un changement dans l'URL de téléchargement, les choses peuvent ou non fonctionner. Puisque le répertoire entier de la formule est un dépôt git, on peut installer des versions spécifiques en utilisant des commandes git simples. Cependant, nous devons trouver un moyen d'accéder à un commit où l'ancienne version était disponible. a) temps historiques Entre août 2011 et octobre 2014, homebrew avait une commande brew versions, qui crachait toutes les versions disponibles avec leurs hachages SHA respectifs. Depuis octobre 2014, vous devez faire un brew tap homebrew/boneyard avant de pouvoir l'utiliser. Comme le nom du robinet le suggère, vous ne devriez probablement le faire qu'en dernier recours. Par exemple.

$ 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

Comme vous pouvez le voir, il est déconseillé de l'utiliser. Homebrew sort toutes les versions qu'il peut trouver avec son heuristique interne et vous montre un moyen de récupérer les anciennes formules. Essayons-la.

# 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

Maintenant que l'ancienne version de postgresql est installée, nous pouvons réinstaller la dernière formule afin de garder notre référentiel propre :

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

brew switch est votre ami pour changer entre l'ancien et le nouveau. b) Les temps préhistoriques Pour des besoins particuliers, nous pouvons aussi essayer de creuser nous-mêmes dans le repo homebrew.

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

git log -S recherche tous les commits dans lesquels la chaîne '8.4.4' a été ajoutée ou supprimée dans le fichier Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb. Nous obtenons deux commits en conséquence.

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

Évidemment, fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 est le commit qui nous intéresse. Comme ce commit est assez ancien, nous allons essayer de mettre à jour l'installation complète de homebrew (de cette façon, l'API de la formule est plus ou moins garantie d'être valide) :

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

Vous pouvez sauter la dernière commande pour garder la référence dans votre dépôt git. Une remarque : en récupérant l'ancien commit, vous rétrogradez temporairement votre installation homebrew. Vous devez donc faire attention car certaines commandes dans homebrew peuvent être différentes de la version la plus récente. 4) Écrire manuellement une formule

[Ce n'est pas très difficile] (https://docs.brew.sh/How-to-Create-and-Maintain-a-Tap) et vous pouvez ensuite la télécharger dans votre propre dépôt. C'était Homebrew-Versions, mais ce n'est plus le cas. A.) Bonus : épinglage

Si vous voulez garder une certaine version de, disons postgresql, et l'empêcher d'être mise à jour lorsque vous faites la procédure naturelle brew update ; brew upgrade, vous pouvez pinner une formule :

$ brew pin postgresql

Les formules épinglées sont listées dans /usr/local/Library/PinnedKegs/ et une fois que vous voulez apporter les derniers changements et mises à jour, vous pouvez dépingler à nouveau :

$ brew unpin postgresql
Commentaires (48)

J'ai découvert une meilleure solution alternative que les autres solutions complexes.

brew install https://raw.github.com/Homebrew/homebrew-versions/master/postgresql8.rb

Ceci va télécharger et installer PostgreSQL 8.4.8


J'ai trouvé cette solution en commençant par suivre les étapes de recherche dans le répertoire et un [commentaire] (https://github.com/mxcl/homebrew/commit/edb70c3e29a675c9e4e700b0dea62b22f780b005) dans le répertoire.

Après un peu de recherche, j'ai découvert que quelqu'un avait une collection de formules rares à préparer.


Si vous cherchez MySQL 5.1.x, essayez ceci.

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

Mise à jour sur la ligne 8 de Library/Formula/postgresql.rb pour

http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2

Et MD5 à la ligne 9 en

fcc3daaf2292fa6bf1185ec45e512db6

Sauvegardez et quittez.

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

A ce stade, vous pouvez rencontrer l'erreur postgresql could not create shared memory segment, pour contourner ce problème, mettez à jour le fichier /etc/sysctl.conf comme ceci :

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

Réessayez initdb /usr/local/var/postgres, et tout devrait bien fonctionner.

Pour lancer postgresql au démarrage

launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist

J'espère que cela vous aidera :)

Commentaires (0)