¿Cómo debo arreglar mi instalación de Homebrew después de actualizar OS X?

25

Contexto

Mi empleador me dio una MacBook Pro para el trabajo de desarrollo; sin embargo, la mayor parte del trabajo de desarrollo que realizo en mi grupo de investigación es para plataformas Linux, y por una gran cantidad de políticas, no puedo instalar el software de virtualización en esta computadora portátil. Homebrew parece una buena forma de instalar estas herramientas, especialmente porque parece muy pirateable (ya que usa Ruby; MacPorts no parece pirateable, porque usa Tcl). Sin embargo, Homebrew depende de las bibliotecas del sistema y, por razones de seguridad, mi empleador puede (y por lo que escucho, con frecuencia) actualizar mi sistema en cualquier momento. He oído que las actualizaciones de OS X romperán Homebrew. (Ver, por ejemplo, /programming/7779300/how-should-i-upgrade-xcode-after-upgrading-to-os-x-lion ).

Pregunta

¿Cómo haría para arreglar mi instalación de Homebrew después de una actualización de OS X? Estoy de acuerdo con eliminarlo y comenzar de cero nuevamente, siempre que pueda hacerlo de forma automática. (Por ejemplo, usando Puppet plus un proveedor de Homebrew para crear una configuración que se construirá automáticamente al ejecutar un script de shell). He estado buscando en Google en todas partes y parece que no puedo encontrar ninguna respuesta a esta pregunta.

Geoff Oxberry
fuente

Respuestas:

8
brew update

Actualiza la instalación de Homebrew. Si hay algún error, deben ser reportados por brew doctor. Intente solucionarlos de otra manera, puede usar el script de desinstalación de la siguiente manera:

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

E instale homebrew nuevamente. Estoy bastante seguro de que todo esto es configurable con títeres.

Gaurav Agarwal
fuente
7

Creo que te has estado preguntando si necesitas reconstruir todos los paquetes en lugar de solo desinstalarlos. Si ese es el caso, entiendo que generalmente no es un problema, como dice esta respuesta .

He tenido problemas, especialmente al cambiar a OS X Mavericks y Xcode 5. Tuve que volver a vincular todos los paquetes que había instalado. Aquí está mi 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

Tenga en cuenta el resultado, algunas fórmulas requerirán --forcepara el linkpaso.

Si eso todavía no funciona, prueba esta serie de comandos de Mike McQuaid :

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

Ahora hay un rebuildcomando en HomeBrew, pero que actualmente no resuelve dependencias.

sventechie
fuente
1
Hice una instalación limpia de Mavericks en mi nueva Mac y luego restauré una copia de seguridad de Time Machine desde mi otra Mac. Dejó la computadora con todo instalado, incluido Homebrew y sus fórmulas, pero todas estaban desvinculadas. ¡Utilicé el script para volver a vincular todas las fórmulas a la vez y lo arreglé! Funciona como un encanto, gracias.
Alejandro García Iglesias el
1
En un problema relacionado, tuve que enderezar / tocar todos los grifos, de lo contrario, brew no encontraría algunas fórmulas a pesar de que afirmaba que el tap correcto ya había sido tocado. for tap in $(brew tap); do brew untap "$tap"; brew tap "$tap"; done
Joel Purra