Wie kann ich meine Homebrew-Installation nach dem Upgrade von OS X reparieren?

25

Kontext

Mein Arbeitgeber gab mir ein MacBook Pro für die Entwicklungsarbeit; Die meiste Entwicklungsarbeit, die ich in meiner Forschungsgruppe mache, ist für Linux-Plattformen und aus einer Vielzahl von politischen Gründen kann ich keine Virtualisierungssoftware auf diesem Laptop installieren. Homebrew scheint eine gute Möglichkeit zu sein, diese Tools zu installieren, insbesondere weil es sehr hackbar aussieht (da es Ruby verwendet; MacPorts sieht nicht hackbar aus, weil es Tcl verwendet). Homebrew ist jedoch auf Systembibliotheken angewiesen, und aus Sicherheitsgründen kann mein Arbeitgeber mein System jederzeit aktualisieren (und was ich höre, wird dies häufig tun). Ich habe gehört, dass OS X-Upgrades Homebrew zum Erliegen bringen werden. (Siehe zum Beispiel /programming/7779300/how-should-i-upgrade-xcode-after-upgrade-to-os-x-lion ).

Frage

Wie gehe ich vor, um meine Homebrew-Installation nach einem OS X-Upgrade zu reparieren? Ich kann es problemlos löschen und wieder von vorne anfangen, solange ich dies automatisiert tun kann. (Verwenden Sie zum Beispiel Puppet und einen Homebrew-Anbieter, um eine Konfiguration zu erstellen, die automatisch ein Shell-Skript ausführt.) Ich habe überall gegoogelt und kann anscheinend keine Antworten auf diese Frage finden.

Geoff Oxberry
quelle

Antworten:

8
brew update

Aktualisiert die Homebrew-Installation. Wenn es irgendwelche Fehler gibt, sollten sie von gemeldet werden brew doctor. Versuchen Sie, sie zu reparieren. Andernfalls können Sie das Deinstallationsskript folgendermaßen verwenden:

#!/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

Und wieder Homebrew installieren. Bin mir ziemlich sicher, dass dies alles mit Puppet konfigurierbar ist.

Gaurav Agarwal
quelle
7

Ich denke, Sie haben sich vielleicht gefragt, ob Sie alle Pakete neu erstellen müssen, anstatt sie nur zu deinstallieren. Wenn dies der Fall ist, ist dies meines Erachtens im Allgemeinen kein Problem, wie diese Antwort besagt .

Ich hatte Probleme, insbesondere beim Wechsel zu OS X Mavericks und Xcode 5 musste ich alle Pakete, die ich installiert hatte, neu verknüpfen - hier ist mein Skript:

#!/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

Beachten Sie die Ausgabe, die einige Formeln --forcefür den linkSchritt benötigen .

Wenn das immer noch nicht funktioniert, probieren Sie diese Befehlsserie von Mike McQuaid aus :

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

Es gibt jetzt einen rebuildBefehl in HomeBrew, der jedoch derzeit keine Abhängigkeiten auflöst.

sventechie
quelle
1
Ich habe eine Neuinstallation von Mavericks auf meinem neuen Mac durchgeführt und danach ein Time Machine-Backup von meinem anderen Mac wiederhergestellt. Auf dem Computer war alles installiert, einschließlich Homebrew und seiner Formeln, aber alle waren nicht verbunden. Ich habe das Skript verwendet, um alle Formeln auf einmal wieder zu verknüpfen und habe es behoben! Funktioniert wie ein Zauber, danke.
Alejandro García Iglesias
1
In einem verwandten Problem musste ich alle Zapfstellen enttappen / antippen, da andernfalls beim Brühen einige Formeln nicht gefunden wurden, obwohl behauptet wurde, dass die richtige Zapfstelle bereits getippt wurde. for tap in $(brew tap); do brew untap "$tap"; brew tap "$tap"; done
Joel Purra