Jak mam naprawić instalację Homebrew po aktualizacji OS X?

25

Kontekst

Mój pracodawca dał mi MacBooka Pro do pracy programistycznej; jednak większość prac programistycznych, które wykonuję w mojej grupie badawczej, dotyczy platform Linux i z wielu powodów politycznych nie mogę zainstalować oprogramowania do wirtualizacji na tym laptopie. Homebrew wygląda na dobry sposób na zainstalowanie tych narzędzi, szczególnie dlatego, że wygląda na bardzo hakującego (ponieważ używa Ruby; MacPorts nie wygląda na hakującego, ponieważ używa Tcl). Jednak Homebrew opiera się na bibliotekach systemowych, a ze względów bezpieczeństwa mój pracodawca może (i z tego, co słyszę, często) uaktualni mój system w dowolnym momencie. Słyszałem, że aktualizacje OS X spowodują uszkodzenie Homebrew. (Zobacz na przykład /programming/7779300/how-should-i-upgrade-xcode-after-upgrading-to-os-x-lion ).

Pytanie

Jak mam zająć się naprawą instalacji Homebrew po aktualizacji OS X? Nie mam nic przeciwko usuwaniu go i rozpoczynaniu od zera, o ile mogę to zrobić w sposób zautomatyzowany. (Na przykład, używając Puppet plus dostawcy Homebrew do skryptu konfiguracji, która automatycznie zbuduje się po uruchomieniu skryptu powłoki.) Wszędzie googlowałem i nie mogę znaleźć odpowiedzi na to pytanie.

Geoff Oxberry
źródło

Odpowiedzi:

8
brew update

Aktualizuje instalację Homebrew. Jeśli są jakieś błędy, należy je zgłosić przez brew doctor. Spróbuj je naprawić, możesz użyć skryptu deinstalacyjnego w następujący sposób:

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

I zainstaluj ponownie homebrew. Jestem pewien, że wszystko to można skonfigurować za pomocą marionetki.

Gaurav Agarwal
źródło
7

Myślę, że zastanawiałeś się, czy musisz przebudować wszystkie pakiety, a nie tylko odinstalować. Jeśli tak jest, rozumiem, że generalnie nie stanowi to problemu, jak mówi ta odpowiedź .

Miałem problemy, zwłaszcza przy przejściu na OS X Mavericks i Xcode 5 musiałem ponownie połączyć wszystkie zainstalowane pakiety - oto mój skrypt:

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

Zwróć uwagę na dane wyjściowe, niektóre formuły będą wymagały --forcetego linkkroku.

Jeśli to nadal nie działa, wypróbuj serię poleceń od Mike'a McQuaida :

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

W rebuildHomeBrew jest teraz polecenie, ale to nie rozwiązuje obecnie zależności.

sventechie
źródło
1
Zrobiłem czystą instalację Mavericks na moim nowym komputerze Mac, a następnie przywróciłem kopię zapasową Time Machine z drugiego komputera Mac. Pozostawił komputer z zainstalowanym wszystkim, w tym Homebrew i jego formułami, ale wszystkie były rozłączone. Użyłem skryptu, aby ponownie połączyć wszystkie formuły na raz i naprawiłem to! Działa jak urok, dzięki.
Alejandro García Iglesias
1
W pokrewnym problemie musiałem odznaczyć / dotknąć wszystkich kranów, inaczej napar nie znalazłby żadnych formuł, nawet jeśli twierdził, że właściwy kran został już dotknięty. for tap in $(brew tap); do brew untap "$tap"; brew tap "$tap"; done
Joel Purra,