26 votes

Comment réparer mon installation Homebrew après avoir mis à jour OS X ?

Contexte

Mon employeur m'a donné un MacBook Pro pour le travail de développement ; cependant, la plupart des travaux de développement que je fais dans mon groupe de recherche sont pour des plateformes Linux, et pour une foule de raisons politiques, je ne peux pas installer de logiciel de virtualisation sur ce portable. Homebrew semble être un bon moyen d'installer ces outils, notamment parce qu'il semble très facile à pirater (puisqu'il utilise Ruby ; MacPorts ne semble pas facile à pirater, car il utilise Tcl). Cependant, Homebrew repose sur des bibliothèques système, et pour des raisons de sécurité, mon employeur peut (et d'après ce que j'ai entendu, le fera fréquemment) mettre à jour mon système à tout moment. J'ai entendu dire que les mises à jour d'OS X casseraient Homebrew. (Voir, par exemple, https://stackoverflow.com/questions/7779300/how-should-i-upgrade-xcode-after-upgrading-to-os-x-lion ).

Question

Comment faire pour réparer mon installation Homebrew après une mise à jour d'OS X ? Je n'ai rien contre le fait de la supprimer et de repartir de zéro, à condition que je puisse le faire de manière automatisée. (Par exemple, en utilisant Puppet plus un fournisseur Homebrew pour script une configuration qui sera automatiquement construite lors de l'exécution d'un shell script). J'ai Googlé partout et je ne semble pas trouver de réponses à cette question.

12voto

Carl Points 21
brew update

Met à jour l'installation Homebrew. S'il y a des erreurs, elles doivent être signalées par brew doctor . Essayez de les réparer autrement, vous pourriez utiliser la désinstallation script comme suit :

#!/bin/sh
# Just copy and paste the lines below (all at once, it won't work line by line!)
# MAKE SURE YOU ARE HAPPY WITH WHAT IT DOES FIRST! THERE IS NO WARRANTY!

function abort {
  echo "$1"
  exit 1
}

set -e

/usr/bin/which -s git || abort "brew install git first!"
test -d /usr/local/.git || abort "brew update first!"

cd `brew --prefix`
git checkout master
git ls-files -z | pbcopy
rm -rf Cellar
bin/brew prune
pbpaste | xargs -0 rm
rm -r Library/Homebrew Library/Aliases Library/Formula Library/Contributions
test -d Library/LinkedKegs && rm -r Library/LinkedKegs
rmdir -p bin Library share/man/man1 2> /dev/null
rm -rf .git
rm -rf ~/Library/Caches/Homebrew
rm -rf ~/Library/Logs/Homebrew
rm -rf /Library/Caches/Homebrew

Et installez à nouveau homebrew. Je suis presque sûr que tout ceci est configurable en utilisant puppet.

1 votes

Je ne suis pas sûr que j'approuve l'utilisation de pbcopy / pbpaste comme un fichier temporaire. J'espère que vous ne copiez pas accidentellement du texte en exécutant brew prune !

7voto

Bdoserror Points 585

Je pense que vous vous êtes peut-être demandé si vous deviez reconstruire tous les paquets plutôt que de simplement désinstaller. Si c'est le cas, je comprends que c'est généralement pas un problème, comme le dit cette réponse .

J'ai eu des problèmes, notamment lors du passage à OS X Mavericks et Xcode 5. J'ai dû relier tous les paquets que j'avais installés - voici mon script :

#!/bin/bash
FORMULAS=(`brew list`);
for FORMULA in "${FORMULAS[@]}"
do 
    echo "brew unlink $FORMULA" && echo "brew link $FORMULA";
    OUTPUT=`brew unlink $FORMULA`;
    echo $OUTPUT;
    OUTPUT=`brew link $FORMULA`;
    echo $OUTPUT;
done

Notez la sortie, certaines formules nécessiteront --force pour le link étape.

Si cela ne fonctionne toujours pas, essayez cette série de commandes de Mike McQuaid :

brew list > brew-list.txt
brew uninstall $(cat brew-list.txt)
brew install $(cat brew-list.txt)

Il existe désormais un rebuild dans HomeBrew, mais cela ne résout pas actuellement les dépendances.

1 votes

J'ai fait une installation propre de Mavericks sur mon nouveau Mac et j'ai ensuite restauré une sauvegarde Time Machine de mon autre Mac. J'ai laissé l'ordinateur avec tout ce qui était installé, y compris Homebrew et ses formules, mais tout était dissocié. J'ai utilisé le script pour relier toutes les formules en une seule fois et ça a marché ! Ça marche comme sur des roulettes, merci.

1 votes

Dans un problème connexe, j'ai dû débrancher/rebrancher tous les robinets, sinon Brew ne trouvait pas certaines formules même s'il affirmait que le bon robinet avait déjà été utilisé. for tap in $(brew tap); do brew untap "$tap"; brew tap "$tap"; done

1voto

konung Points 121

Si vous voulez force tout pour passer à la dernière version, vous devez exécuter brew avec un --greedy drapeau

brew upgrade --greedy

Avertissement Dash.app : cela peut avoir des effets indésirables, c'est-à-dire la mise à niveau vers la version suivante de l'application, qui nécessite une mise à niveau payante. Par exemple, j'avais la version 5 de Dash.app, ce qui m'a fait passer à la version 6, pour laquelle je n'avais pas encore de licence.

Donc pour voir ce qui sera mis à jour, exécutez-le d'abord avec --dry-run drapeau

brew upgrade --greedy --dry-run

Effet secondaire : si vous avez précédemment supprimé une application installée par brew par d'autres moyens (pas via brew) - par exemple, j'ai supprimé le navigateur Vivaldi juste à partir du dossier Application, en utilisant --greedy flag peut le réinstaller, car brew pensera que vous avez toujours une ancienne version installée. Vous pouvez vouloir nettoyer cela d'abord.

0 votes

Cette question a été posée il y a 8 ans, et je ne pense pas qu'elle soit pertinente maintenant puisque j'ai mis à jour de Mojave --> Catalina --> Big Sur sans qu'aucun paquet de bière ne se brise.

0 votes

La raison pour laquelle j'ai ajouté l'avertissement, c'est parce que j'ai exécuté une --greedy La nuit dernière, alors que je cherchais des réponses, il a mis à jour mon Dash.app à la nouvelle version, ce qui signifie que j'ai dû payer pour une mise à niveau. La réponse et l'avertissement sont donc toujours d'actualité.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X