Comment installer une version spécifique d'une formule en homebrew? Par exemple, postgresql-8.4.4 au lieu de la dernière version 9.0.
Comment installer une version spécifique d'une formule en homebrew? Par exemple, postgresql-8.4.4 au lieu de la dernière version 9.0.
Réponses:
TLDR: brew install postgresql@8.4.4
Voir la 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 l'installation / l'utilisation d'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:
Lorsque 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 dossier sont ensuite installés globalement. En principe, cela facilite le basculement entre deux versions installées. (*)
Si vous utilisez homebrew depuis plus longtemps et que vous n'avez jamais supprimé d'anciennes versions (en utilisant, par exemple brew cleanup
), il est probable qu'une ancienne version de votre programme existe toujours. Si vous souhaitez simplement activer cette version précédente, brew switch
c'est le moyen le plus simple de le faire.
Vérifiez avec brew info postgresql
(ou brew switch postgresql <TAB>
) 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 *
est passée à la nouvelle version activée
(*) Veuillez noter que cela brew switch
ne fonctionne que tant que 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 brew switch
est surtout utile lorsque l'on veut basculer entre deux versions pas trop éloignées.
Surtout pour les grands projets logiciels, il est très probable qu'il existe une demande suffisamment élevée 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
& le référentiel des versions homebrew .
Ce référentiel de versions peut inclure des rétroportages d'anciennes versions pour plusieurs formules. (Surtout que les grands et célèbres, mais bien sûr, ils auront également 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 touché le homebrew/versions
robinet. (Vérifiez avec brew tap
, supprimez avec brew untap homebrew/versions
.) Les éléments suivants auraient été équivalents:
$ 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 gérer les logiciels plus anciens.
Les approches suivantes sont répertoriées principalement pour être complètes. Les deux essaient de ressusciter une formule de morts-vivants du référentiel de brassage. En raison de modifications des dépendances, des modifications de l'API dans la spécification de formule ou simplement d'un changement dans l'URL de téléchargement, les choses peuvent ou non fonctionner.
Étant donné que le répertoire de formule entier est un référentiel 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) les temps historiques
Entre août 2011 et octobre 2014 , homebrew avait une brew versions
commande, qui crachait toutes les versions disponibles avec leurs hachages SHA respectifs. Depuis octobre 2014, vous devez effectuer une opération brew tap homebrew/boneyard
avant de pouvoir l'utiliser. Comme le nom du robinet l'indique, 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 déconseille de l'utiliser. Homebrew crache toutes les versions qu'il peut trouver avec son heuristique interne et vous montre un moyen de récupérer les anciennes formules. Essayons.
# 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 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 passer de l'ancien au nouveau.
b) les temps préhistoriques
Pour les besoins spéciaux, nous pouvons également essayer notre propre fouille dans le repo homebrew.
$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb
git log -S
recherche toutes les validations dans lesquelles la chaîne a '8.4.4'
é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
c'est le commit qui nous intéresse. Comme ce commit est assez ancien, nous essaierons de rétrograder l'installation complète de homebrew (de cette façon, l'API de 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 ignorer la dernière commande pour conserver la référence dans votre référentiel git.
Une remarque: lorsque vous extrayez l'ancien commit, vous rétrogradez temporairement votre installation homebrew. Donc, vous devez être prudent car certaines commandes en homebrew peuvent être différentes de la version la plus récente.
Ce n'est pas trop difficile et vous pouvez ensuite le télécharger dans votre propre référentiel. Auparavant, Homebrew-Versions , mais qui est maintenant abandonné.
Si vous souhaitez conserver une certaine version de, disons postgresql, et l'empêcher d'être mise à jour lorsque vous effectuez la brew update; brew upgrade
procédure naturelle , vous pouvez épingler une formule:
$ brew pin postgresql
Les formules épinglées sont répertoriées dans /usr/local/Library/PinnedKegs/
et une fois que vous souhaitez apporter les dernières modifications et mises à jour, vous pouvez à nouveau les annuler :
$ brew unpin postgresql
git checkout fa992 -- Library/Formula/postgresql.rb
. Lorsque vous avez terminé, vous pouvez annuler les modifications apportées à la formule à l'aide de git revert HEAD Library/Formula/postgresql.rb && git checkout -- Library/Formula/postgresql.rb
.
brew update
établir son référentiel Git.
cd $(brew --repository)/Library/Taps/homebrew/homebrew-core
, alors vous pouvez utiliser git checkout 4cce79d -- Formula/go.rb
et HOMEBREW_NO_AUTO_UPDATE=1 brew install go
.
Maintenant que Homebrew / versions est déconseillé, Homebrew / core prend en charge plusieurs versions de formules avec un nouveau format de dénomination.
Pour installer une version spécifique, par exemple postgresql 9.5, vous exécutez simplement:
$ brew install postgresql@9.5
Pour répertorier les versions disponibles, lancez une recherche avec @:
$ 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
. Je viens cd
dans le répertoire à la place (sans le FORMULANAME.rb), puis fais legit checkout 120938
cd /usr/local
abord.
brew unlink FORMULANAME
brew versions <formula>
n'est plus pris en charge.
brew link --force postgresql@9.5
. Si vous avez déjà installé une version plus récente et que vous souhaitez que l'ancienne version soit votre version par défaut, vous en aurez également besoin --overwrite
.
Il existe désormais un moyen beaucoup plus simple d'installer une ancienne version d'une formule que vous aviez précédemment installée. Utilisez simplement
brew switch [formula] [version]
Par exemple, j'alterne régulièrement entre Node.js 0.4.12 et 0.6.5:
brew switch node 0.4.12
brew switch node 0.6.5
Depuis brew switch
suffit de modifier les liens symboliques, c'est très rapide. Voir la documentation supplémentaire sur le Homebrew Wiki sous Commandes externes .
brew switch
repose sur la version recherchée déjà installée. Malheureusement, cependant, la réponse actuellement acceptée est incroyablement inutile, compliquée et obsolète. Il y a de meilleures réponses ci-dessous qui sont beaucoup plus utiles.
Mise à jour: 15/01/2015
brew install <url>
(peut devoir d' brew unlink
abord, par exemple brew unlink docker
)brew switch docker 1.3.3
brew switch docker 1.4.1
De cet essentiel
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>
. Sinon, c'est la manière la plus simple et la plus concise (jusqu'à présent) de passer à une version spécifique d'une formule.
Raw
bouton sur quel fichier?!
brew log <formula>
Dans la lignée de la suggestion de @ halfcube, cela fonctionne très bien:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8cf29889111b44fd797c01db3cf406b0b14e858c/Formula/postgresql.rb
package@version
git log master -- Formula/PACKAGENAME.rb
pour obtenir l'historique des validations, consultez le correct commit, puis exécutez-le brew install Formula/PACKAGENAME.rb
pour l'installer.
brew unlink
avant brew install
d'une autre version.
mxcl
?
brew install https://github.com/Homebrew/homebrew-core/raw/afc10f17af8023906b87363a8340aeb62284329f/Formula/postgresql%409.6.rb
mais je reçois l'erreur, probablement en raison de la @
signature: des 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.
idées?
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
Cela va télécharger et installer PostgreSQL 8.4.8
J'ai trouvé cette solution en commençant à suivre les étapes de recherche du repo et un commentaire dans le repo.
Après un peu de recherche, on a découvert que quelqu'un avait une collection de formulaires rares à préparer.
Si vous cherchez MySQL 5.1.x, essayez ceci.
brew install https://raw.github.com/Homebrew/homebrew-versions/master/mysql51.rb
brew install https://github.com/Homebrew/homebrew-versions/blob/master/node06.rb
semblait échouer avec des erreurs de syntaxe.
raw
dans l'URL
homebrew-versions
est parti et tout est sur core
maintenant le cas général est: brew install https://raw.github.com/Homebrew/homebrew-core/<COMMIT>/Formula/<FORMULA>.rb
. COMMIT
peut être trouvé en allant sur github.com/Homebrew/homebrew-core/commits/master/Formula/… .
Vous pouvez utiliser la stratégie d'identification de la formule et d'un commit particulier dans l'historique de la formule qui correspond à la version du package que vous souhaitez installer.
Appuyez t
sur sur votre clavier pour activer la recherche de fichiers.
Identifiez une formule qui semble la plus pertinente, peut-être Formula/mysql.rb
:, vous amenant à un emplacement de fichier forumla: https://github.com/Homebrew/homebrew-core/blob/master/Formula/mysql.rb .
Regardez l'historique des révisions en cliquant sur le History
bouton, qui se trouve à https://github.com/Homebrew/homebrew-core/commits/master/Formula/mysql.rb . Si vous êtes intéressé par MySQL 5.7.10, vous voudrez peut-être cliquer sur la dernière révision antérieure à 5.7.11, qui accède à une validation GitHub:
REMARQUE: vous devrez peut-être afficher l'historique des validations dans votre console selon la suggestion de GitHub si l'historique des validations ne se charge pas dans votre navigateur. Remplacez le SHA de validation ci-dessus dans l'URL si vous souhaitez voir ce commit sur GitHub. Vous pouvez également passer à l'étape 7 ci-dessous.
Cliquez sur le bouton "Afficher" pour afficher la source du fichier mysql.rb après l'application du commit.
Cliquez ensuite sur le bouton "Raw" pour afficher la source brute.
Copiez l'URL. Alternativement, créez vous-même l'URL avec le mysql.rb
nom de fichier pour identifier votre formule et la version particulière de cette formule (identifiée par le commmit SHA dans l'URL ci-dessous).
Installez-le avec $ brew install [URL from step 7]
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/c77882756a832ac1d87e7396c114158e5619016c/Formula/mysql.rb
REMARQUE: cette réponse a été mise à jour pour tenir compte de la suppression du site Web braumeister.org. Le même principe s'applique, braumeister avait simplement fourni un moyen convivial pour les débutants de naviguer dans les versions de formule.
La plupart des autres réponses sont désormais obsolètes. Malheureusement, Homebrew n'a toujours pas de méthode intégrée pour installer une version obsolète, sauf si cette version existe sous une formule distincte (par exemple python@2
,postgresql@9.4
…).
Heureusement, pour d'autres formules, il existe un moyen beaucoup plus facile que le désordre alambiqué qui était nécessaire auparavant. Voici les instructions complètes:
Recherchez la version correcte dans les journaux:
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›
Cela affichera une liste de hachages de validation. Prenez celui qui est approprié (surtout il devrait être assez évident, et est généralement le plus récent (c'est-à-dire en haut).
Recherchez l'URL à laquelle réside la formule dans le référentiel en amont:
brew info ‹formula› | grep ^From:
Fixez l'URL:
github.com
parraw.githubusercontent.com
blob/master
par le hachage de validation que nous avons trouvé à la première étape.Installez la version souhaitée en remplaçant master
l'URL trouvée précédemment par le hachage de validation, par exemple:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/‹hash›/Formula/‹formula›.rb
(La dernière étape peut nécessiter l'exécution brew unlink ‹formula›
avant.)
Si vous avez copié un hachage de validation que vous souhaitez utiliser, vous pouvez utiliser quelque chose comme cet exemple pour installer cette version, en remplaçant la valeur bash
par votre hachage de validation et la formule souhaitée.
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
Cet exemple installe bash 4.4.23 au lieu de bash 5, mais si vous effectuez brew upgrade
ensuite un bash 5, il sera installé par-dessus, sauf si vous l'avez d'abord exécuté brew pin bash
. Au lieu de cela, pour rendre cela plus fluide SANS épinglage, vous devez d'abord installer la dernière avec brew install bash
, puis brew unlink bash
installer l'ancienne version souhaitée selon le script ci-dessus, puis utiliser brew switch bash 4.4.23
pour configurer les liens symboliques vers l'ancienne version. Maintenant, cela brew upgrade
ne devrait pas affecter votre version de Bash. Vous pouvez brew switch bash
obtenir une liste des versions disponibles pour basculer vers.
Un autre moyen d'atteindre le même objectif semble être:
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.
Cela crée un formula@version
dans votre robinet personnalisé que vous pouvez installer selon l'exemple ci-dessus. L'inconvénient est que vous avez probablement besoin encore brew unlink bash
et brew link bash@4.4.23
afin d'utiliser votre version spécifique de Bash ou de toute autre formule.
brew log
que tout extra -F
ou --grep
option échoue pour moi.
brew log
. Je ne peux pas être gêné d'écrire une nouvelle version maintenant car cela nécessite une analyse correcte du message du journal git, ou une exécution git log
directe sur le référentiel correspondant. Et le changelog ne semble même pas mentionner ce changement de rupture. Au-delà ennuyeux.
External Command
pourrait être nécessaire de fonctionner dans la structure de brew
pour récupérer ce type de git log
filtrage. docs.brew.sh/External-Commands
brew extract
utilisation, merci!
Je viens d'utiliser Homebrew pour revenir à Maven 2.2.1 depuis le simple brew install maven
Maven 3.0.3 installé.
Vous devez d'abord y laisser le dir maven afin
$ brew unlink maven
Utilisez la commande brew tap
$ brew tap homebrew / versions Clonage dans '/ usr / local / Library / Taps / homebrew-versions' ... à distance: comptage d'objets: 590, terminé. à distance: compression des objets: 100% (265/265), fait. à distance: Total 590 (delta 362), réutilisé 549 (delta 325) Réception d'objets: 100% (590/590), 117,49 Kio | 79 Kio / s, terminé. Résolution des deltas: 100% (362/362), fait. Formule taraudée 50
Vous pouvez maintenant installer la formule maven2:
$ brew install maven2 ==> Téléchargement 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 fichiers, 3,1 M, construits en 6 secondes
$ mvn --version Apache Maven 2.2.1 (r801777; 2009-08-06 12: 16: 01-0700) Version Java: 1.6.0_37 Accueil Java: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Paramètres régionaux par défaut: en_US, encodage de la plateforme: MacRoman Nom du système d'exploitation: "mac os x" version: "10.7.4" arch: "x86_64" Famille: "mac"
Modifier:
vous pouvez également simplement brew switch maven 2.2.1
passer à une autre version.
Edit: Le projet Apache Maven a réorganisé leur repo. Mise à jour de cette réponse pour tenir compte de ce changement.
Sur la base du workflow décrit par @tschundeee et @ Debilski's update 1 , j'ai automatisé la procédure et ajouté le nettoyage dans ce script .
Téléchargez-le , mettez-le sur votre chemin et brewv <formula_name> <wanted_version>
. Pour le PO spécifique, ce serait:
cd path/to/downloaded/script/
./brewv postgresql 8.4.4
:)
Une réponse mise à jour car cela s'ajoute à ce que @ lance-pollard a déjà publié comme réponse de travail.
Comment installer une version spécifique d'une formule (la formule utilisée dans cet exemple est terraform
):
git log master -- Formula/terraform.rb
si vous avez cloné le dépôt localement.brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/e4ca4d2c41d4c1412994f9f1cb14993be5b2c59a/Formula/terraform.rb
Malheureusement, Homebrew n'a toujours pas de méthode intégrée évidente pour installer une ancienne version.
Heureusement, pour la plupart des formules, il existe un moyen beaucoup plus facile que le désordre alambiqué qui était nécessaire auparavant. Voici les instructions complètes en utilisant bash
comme exemple:
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.
Cela crée le formula@version
dans votre robinet personnalisé que vous pouvez installer selon l'exemple ci-dessus. Une note importante est que vous devrez probablement le faire brew unlink bash
si vous avez déjà installé la version par défaut / la plus récente de la formule, puis brew link bash@4.4.23
pour utiliser votre version spécifique de Bash (ou toute autre formule sur laquelle vous avez installé la dernière et une ancienne version).
Un inconvénient potentiel de cette méthode est que vous ne pouvez pas facilement basculer entre les versions, car selon brew
elle, c'est une "formule différente".
Si vous voulez pouvoir utiliser, brew switch $FORMULA $VERSION
vous devez utiliser la méthode suivante.
Cet exemple montre l'installation de l'ancien bash 4.4.23, un exemple utile puisque la bash
formule installe actuellement bash 5.
brew install bash
brew unlink bash
brew switch bash 4.4.23
pour configurer les liens symboliques vers votre versionSi vous avez effectué une brew upgrade
après l'installation d'une ancienne version sans installer la dernière en premier, alors la dernière serait installée en détrônant votre ancienne version, à moins que vous ne l'ayez d'abord exécutée brew pin bash
.
Les étapes ici ÉVITER l'épinglage, car il est facile d'oublier et vous pourriez épingler à une version qui ne sera pas sécurisée à l'avenir (voir Shellshock / etc). Avec cette configuration, unbrew upgrade
ne devrait pas affecter votre version de Bash et vous pouvez toujours exécuter brew switch bash
pour obtenir une liste des versions disponibles pour basculer.
Copiez et collez et modifiez les export
lignes de l'extrait de code ci-dessous pour mettre à jour avec la version et le nom de formule souhaités, puis copiez et collez le reste tel quel et il utilisera ces variables pour faire la magie.
# 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
Lorsque vous êtes certain que la version existe dans la formule, vous pouvez utiliser ce qui suit:
# 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}')
Une fois que vous avez exporté le hachage de validation que vous souhaitez utiliser, vous pouvez l'utiliser pour installer cette version du package.
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
Suivez les instructions dans la sortie de la formule pour la placer dans votre CHEMIN ou définissez-la comme votre shell par défaut.
Sur la dernière version de homebrew (0.9.5 au moment de la rédaction de cet article), il y aura une recette spécifique pour la version du fût homebrew que vous souhaitez installer. Exemple:
$ brew search mongodb
mongodb mongodb24 mongodb26
Ensuite, faites brew install mongodb26
comme d'habitude.
Dans le cas où vous aviez déjà installé la dernière version, assurez - vous de délier la dernière version et relier la version souhaitée: brew unlink mongodb && brew link mongodb26
.
Le problème homebrew/versions
est que quelqu'un doit avoir cette version spécifique du logiciel répertoriée dans le référentiel pour que vous puissiez l'utiliser. De plus, comme il brew versions
n'est plus pris en charge, une autre solution est requise. Pour les solutions qui indiquent l'utilisation brew switch
, cela ne fonctionnera que si vous ne l'avez pas fait brew cleanup
car la version doit exister sur votre ordinateur.
J'ai eu un problème avec le fait d'installer une ancienne version spécifique docker-machine
qui n'était pas répertoriée dans homebrew/versions
. J'ai résolu ce problème en utilisant ce qui suit, qui devrait également fonctionner pour tous les logiciels installés. L'exemple ci-dessous utilisera docker-machine
le package que je souhaite rétrograder de la version 0.5.0 à 0.4.1.
Accédez à votre Formula
répertoire homebrew .
Vous pouvez le déterminer en exécutant brew info [any package name]
. Par exemple, brew info docker-machine
me donne une ligne qui me montre un chemin - /usr/local/Cellar/docker-machine/0.5.0
. Cela me dit que sur ma machine, homebrew est installé sur /usr/local
et mon Formula
répertoire est situé par défaut sur/usr/local/Library/Formula
Recherchez le fichier de formule spécifique (.rb) pour votre package.
Puisque je veux rétrograder docker-machine
, je peux voir un docker-machine.rb
fichier.
Obtenez l'historique des versions de ce fichier de formule . Entrez git log docker-machine.rb
. Cela répertoriera l'historique complet des validations de ce fichier. Vous verrez une sortie comme celle-ci:
...plus commit 20c7abc13d2edd67c8c1d30c407bd5e31229cacc Auteur: BrewTestBot Date: jeu.5 nov.16: 14: 18 2015 +0000 docker-machine: mise à jour de la bouteille 0.5.0. commit 8f615708184884e501bf5c16482c95eff6aea637 Auteur: Vincent Lesierse Date: mar.27 oct.22: 25: 30 2015 +0100 docker-machine 0.5.0 Docker-machine mis à jour vers 0.5.0 Ferme # 45403. Signature: Dominyk Tiller commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423 Auteur: BrewTestBot Date: 21 sept. 14:04:04 2015 +0100 docker-machine: mise à jour de la bouteille 0.4.1. commit 18fcbd36d22fa0c19406d699308fafb44e4c8dcd Auteur: BrewTestBot Date: dim 16 août 09:05:56 2015 +0100 docker-machine: mise à jour de la bouteille 0.4.1. ...plus
La partie délicate consiste à trouver le dernier commit pour la version spécifique que vous souhaitez. Dans ce qui précède, je peux dire la dernière version 0.4.1 a été commis avec cette balise commit: commit 5970e1af9b13dcbeffd281ae57c9ab90316ba423
. Les validations au-dessus de ce point commencent à utiliser la version 0.5.0 (les entrées du journal git sont répertoriées de la dernière à la première date).
Obtenez une version précédente du fichier de formule. En utilisant la balise commit de l'étape # 3 (vous pouvez utiliser les 6 premiers caractères), vous pouvez obtenir une ancienne version du fichier de formule en utilisant ce qui suit:
git checkout 5970e1 docker-machine.rb
Désinstallez la version actuelle de votre package.
Exécutez simplement les commandes de brassage normales pour désinstaller la version actuelle de votre package.
Ex.brew uninstall docker-machine
Installer l'ancienne version du package
Maintenant, vous pouvez simplement exécuter la commande d'installation de brew normale et elle installera la formule que vous avez extraite. Ex.brew install docker-machine
Vous devrez peut-être vous reconnecter en utilisant le brew link docker-machine
si nécessaire.
Si, à tout moment, vous souhaitez revenir à la dernière version d'un package spécifique, accédez au répertoire Formula et exécutez les commandes suivantes dans votre fichier de formule (.rb)
git reset HEAD docker-machine.rb
git checkout -- docker-machine.rb
Ensuite, vous pouvez brew uninstall docker-machine
et brew install docker-machine
pour obtenir la dernière version et continuer ainsi.
git log --grep 0.4.1 docker-machine.rb
.
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
cairo
brassage de cette façon. La réponse de @ sealocal a montré plus, pour une raison quelconque.
Ma situation: postgresql
est passée de 11 à 12 accidentellement. Je veux garder 11.
brew services stop postgresql
brew install postgresql@11
brew link postgresql@11 --force
postgres
à 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 vous avez des erreurs, vérifiez /usr/local/var/log/postgresql@11.log
(notez le @ 11).
brew postgresql-upgrade-database
). Cette réponse n'est pas utile pour presque toutes les autres formules.
brew postgresql-upgrade-database
est, bien, pour les mises à niveau . Ma réponse concerne l'utilisation d'une ancienne version de Postgres. Le simple changement de binaires ne fonctionnera pas.
nvm
, pour info j'ai eu de la chance en utilisant cette technique pour les anciennes versions de LTS. Au moins au moment de la rédaction, les versions 10 et 12 devraient être disponibles, par exemplebrew install node@12
formulae.brew.sh/formula/node
cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/
OU
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.rb
partir du homebrew-core
répertoire? cela a fonctionné pour moi sans utiliser d' raw.github..
adresse
cela pourrait être fait très facilement pour la dernière version de l'infusion.
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)
Aucun de ceux-ci n'a vraiment fonctionné pour mon cas (Python), donc je vais ajouter mes 2 cents:
cd `brew --prefix`
git log Library/Formula/python.rb
La sortie ressemble à ceci:
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. ...
Je veux une version 2.7.11
pour que mon hachage soit cf5da0547cd261f79d69e7ff62fdfbd2c2d646e9
(ou cf5da05
pour faire court). Ensuite, je vérifie cette version et installe la formule python
:
git checkout cf5da05
brew install python
Enfin, nettoyez:
git checkout master
HOMEBREW_NO_AUTO_UPDATE
et lisez github.com/Homebrew/brew/issues/1188
cd
brew --prefix /Homebrew
etgit log Library/Taps/homebrew/homebrew-core/Formula/python.rb
/Library/Taps
est ignoré.
HOMEBREW_NO_AUTO_UPDATE
. Oui, n'oubliez pas la chose dont vous avez besoin avant d' avoir découvert que vous en avez besoin. xD
HOMEBREW_NO_INSTALL_CLEANUP
n'est-ce pas quelque chose dont vous devez vous souvenir?
Si vous ne trouvez pas votre version avec brew search <formula>
, vous pouvez également essayer de parcourir les journaux de validation de votre formule pour trouver la version souhaitée:
voici un exemple d'installation d'une ancienne version de nginx via brew:
voir nginx: update 1.6.3 bottle eba75b9a1a474b9fc4df30bd0a32637fa31ec049
De là, nous pouvons installer 1.6.3
avec l'url sha et raw git:
brew install https://raw.githubusercontent.com/Homebrew/homebrew/eba75b9a1a474b9fc4df30bd0a32637fa31ec049/Library/Formula/nginx.rb
Actuellement, les anciennes méthodes d'installation de versions de formules spécifiques sont obsolètes. Il semble donc que nous devons utiliser brew edit [formula]
. Par exemple, disons que nous voulons installer la 62.1
version de icu4c
(nécessaire par exemple pour postgresql 10.5
). Ensuite, il faudrait
> brew edit icu4c
# drops you to editor
Ici, vous devez modifier le url
, version
et sha256
(peut-être aussi mirror
) les 62.1
chaînes correspondantes .
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"
puis exécutez brew reinstall icu4c
pour enfin télécharger la 62.1
version.
sha256
? dans mon cashttps://storage.googleapis.com/dart-archive/channels/stable/release/1.24.3/sdk/dartsdk-macos-x64-release.zip
Mise à jour sur la ligne 8 Library / Formula / postgresql.rb vers
http://ftp2.uk.postgresql.org/sites/ftp.postgresql.org/source/v8.4.6/postgresql-8.4.6.tar.bz2
Et MD5 sur la ligne 9 pour
fcc3daaf2292fa6bf1185ec45e512db6
Sauvegarder et quitter.
brew install postgres
initdb /usr/local/var/postgres
À ce stade, vous pourriez rencontrer l' postgresql could not create shared memory segment
erreur, pour contourner cette mise à jour /etc/sysctl.conf
comme ceci:
kern.sysv.shmall=65536
kern.sysv.shmmax=16777216
Réessayez initdb /usr/local/var/postgres
et cela devrait fonctionner sans problème.
Pour exécuter postgresql au démarrage
launchctl load -w /usr/local/Cellar/postgresql/8.4.6/org.postgresql.postgres.plist
J'espère que cela pourra aider :)
Je viens de copier une ancienne version d'elasticsearch dans le /usr/local/Cellar/elasticsearch
répertoire.
$ 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
C'est ça. C'est peut-être utile à n'importe qui.
J'ai décidé, contre mon meilleur jugement, de créer une formule pour Maven 3.1.1, qui homebrew/versions
n'en avait pas. Pour faire ça:
homebrew/versions
sur github.$(brew --prefix)/Library/Taps
vers la copie de travail locale de ma fourchette. J'appellerai ça my-homebrew/versions
.my-homebrew/versions/<formula>
.homebrew/versions
ma nouvelle formule.Yay.
Pour les versions qui ne sont pas actuellement dans les formules de brassage par défaut, vous pouvez facilement créer votre propre robinet avec l'outil de https://github.com/buildtools-version-taps/homebrew-versions-tap-tool
brew tap-new user/repo
et puis brew extract --version='Major.minor' FORMULA user/repo
et puis brew install FORMULA@Major.minor
.
J'ai créé un outil pour faciliter le processus prescrit dans cette réponse .
Pour rechercher un package pkg
avec version a.b.c
, exécutez:
$ brew-install-specific pkg@a.b.c
Cela listera les commits sur la pkg
formule homebrew qui mentionne la version donnée avec leurs URL 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:
Vérifiez la validation à partir de l'URL donnée et entrez l'index de la validation sélectionnée.
Select index: 2
Run:
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<COMMIT-SHA>/Formula/pkg.rb
Copiez et exécutez la commande donnée à installer.
postgresql
est étrange car il y avait des versions séparées dans Homebrew à un moment donné, quelque chose commebash
pourrait être un meilleur exemple car il est passé de 4.x à 5.x dans le même nom de formule. Voir stackoverflow.com/a/55764594/3794873