26 votos

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

Contexto

Mi empleador me dio un MacBook Pro para el trabajo de desarrollo; sin embargo, la mayor parte del trabajo de desarrollo que hago en mi grupo de investigación es para plataformas Linux, y por una serie de razones de política, no puedo instalar software de virtualización en este portátil. Homebrew parece una buena forma de instalar estas herramientas, especialmente porque parece muy hackeable (ya que usa Ruby; MacPorts no parece hackeable, porque usa Tcl). Sin embargo, Homebrew depende de las librerías del sistema, y por razones de seguridad, mi empleador puede (y por lo que he oído, frecuentemente lo hará) actualizar mi sistema en cualquier momento. He oído que las actualizaciones de OS X rompen Homebrew. (Véase, por ejemplo, https://stackoverflow.com/questions/7779300/how-should-i-upgrade-xcode-after-upgrading-to-os-x-lion ).

Pregunta

¿Cómo puedo arreglar mi instalación de Homebrew después de una actualización de OS X? Me parece bien borrarla y empezar de nuevo desde cero, siempre y cuando pueda hacerlo de forma automatizada. (Por ejemplo, usando Puppet más un proveedor de Homebrew para scribir una configuración que se construya automáticamente al ejecutar un shell script). He estado buscando en Google por todas partes y no encuentro ninguna respuesta a esta pregunta.

13voto

Gaurav Agarwal Puntos 171
brew update

Actualiza la instalación de Homebrew. Si hay algún error, debe ser reportado por brew doctor . Intenta arreglarlas de otra manera, podrías usar el desinstalador script 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 instalar homebrew de nuevo. Estoy bastante seguro de que todo esto es configurable usando marioneta.

1 votos

No estoy seguro de aprobar el uso de pbcopy / pbpaste como archivo temporal. Espero que no se copie accidentalmente algún texto mientras se ejecuta brew prune ¡!

7voto

Marie Fischer Puntos 1243

Creo que te habrás preguntado si es necesario reconstruir todo el paquetes en lugar de simplemente desinstalar. Si ese es el caso, entiendo que generalmente es no es un problema, como dice esta respuesta .

He tenido problemas, sobre todo al cambiar a OS X Mavericks y Xcode 5 he tenido que volver a enlazar todos los paquetes que tenía instalados -- 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

Observe la salida, algunas fórmulas requerirán --force para el link paso.

Si aún así no funciona, intente 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 rebuild en HomeBrew, pero eso no resuelve actualmente las dependencias.

1 votos

Hice una instalación limpia de Mavericks en mi nuevo Mac y después restauré una copia de seguridad de Time Machine de mi otro Mac. Dejó el ordenador con todo instalado, incluyendo Homebrew y sus fórmulas, pero todas ellas estaban desvinculadas. ¡Utilicé el script para volver a enlazar todas las fórmulas a la vez y se arregló! Funciona de maravilla, gracias.

1 votos

En un problema relacionado con esto, tuve que desanclar/aprovechar todos los grifos, de lo contrario brew no encontraría algunas fórmulas aunque dijera que el grifo correcto ya había sido aprovechado. for tap in $(brew tap); do brew untap "$tap"; brew tap "$tap"; done

1voto

Bob Smith Puntos 15

Si quieres fuerza todo para actualizar a la última versión, es necesario ejecutar brew con un --greedy bandera

brew upgrade --greedy

Advertencia Esto puede tener efectos no deseados, por ejemplo, la actualización a la siguiente versión de la aplicación, que requiere una actualización de pago. Por ejemplo, yo tenía Dash.app v5., con esto me actualizó a la v6, de la que aún no tenía licencia.

Así que para ver lo que se actualizará, ejecútelo primero con --dry-run bandera

brew upgrade --greedy --dry-run

Efecto secundario: si previamente has eliminado una aplicación instalada por brew a través de otros medios (no a través de brew) - por ejemplo, he eliminado el navegador Vivaldi sólo de la carpeta de aplicaciones, utilizando --greedy flag puede reinstalarlo, porque brew pensará que aún tienes una versión anterior instalada. Es posible que desee limpiar eso primero.

0 votos

Esto se preguntó hace 8 años, y no creo que sea relevante ahora ya que actualicé de Mojave --> Catalina --> Big Sur sin que se rompiera ningún paquete de cerveza.

0 votos

La razón por la que añadí la advertencia, fue porque ejecuté un --greedy actualización anoche, cuando estaba buscando respuestas, y actualizó mi Dash.app a la nueva versión, lo que significa que tuve que pagar por una actualización. Así que tanto la respuesta como la advertencia siguen siendo relevantes.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X