Desinstalar Homebrew sin perder el inventario de paquetes
Homebrew incluye un desinstalador oficial, y hace lo que anuncia. Lo que sorprende es el alcance: elimina Homebrew, y elimina lo que Homebrew instaló, y esos dos hechos tienen un peso distinto según el motivo por el que estás aquí.
Si viniste a recuperar espacio en disco, esta suele ser la mayor recuperación de un solo paso en la mayoría de los Mac de desarrolladores. Si viniste porque una fórmula se comporta mal, esto es mucho más de lo que querías.
El desinstalador oficial
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
Léelo antes de ejecutarlo. El script es corto y es la descripción de referencia de lo que va a ocurrir, algo que ningún artículo puede garantizar.
Admite --dry-run, y si la máquina te importa esa es la primera forma correcta de ejecutarlo: imprime lo que se borraría y no cambia nada.
Qué elimina realmente el script
El desinstalador elimina el prefijo de Homebrew y los directorios que hay debajo: bin,
etc, include, lib, opt, sbin, share, var, Frameworks, y tanto
Cellar como Caskroom.
Esos dos últimos son la clave. Cellar es donde están los archivos de cada fórmula, y Caskroom es donde están los metadatos de los cask. Eliminar Homebrew los elimina, de modo que cada herramienta de línea de comandos que instalaste a través de él desaparece al mismo tiempo.
También vacía ~/Library/Caches/Homebrew y ~/Library/Logs/Homebrew, la
caché de sistema de Homebrew, /etc/paths.d/homebrew, y las aplicaciones gestionadas por Homebrew en
/Applications y ~/Applications.
Anota lo que tienes antes de eliminarlo
El inventario no se puede recuperar después, y es un solo comando:
brew leaves > ~/Desktop/brew-formulae.txt
brew list --cask > ~/Desktop/brew-casks.txt
brew leaves enumera las fórmulas que pediste, no cada dependencia que se instaló
de forma automática, que es la lista que realmente quieres al reconstruir. En una máquina nueva esos
dos archivos convierten un día entero de ir recordando lo instalado en una sola línea de brew install.
Todo lo que un paquete guardó fuera de su propio directorio sigue ahí y conviene conservarlo: un
directorio de datos de Postgres, una base de datos local bajo /opt/homebrew/var, configuración en tu directorio
personal. El desinstalador elimina var bajo el prefijo, así que una base de datos que esté ahí
se va con él. Cópiala antes si te importa.
El mensaje final que la gente pasa de largo
Cuando el script termina puede imprimir que algunos posibles archivos de Homebrew no se eliminaron y que quizá quieras borrarlos tú, y a continuación la lista.
Ese es el único lugar donde se nombran esas rutas. Suele ocurrir por permisos en directorios que Homebrew no creó, y la lista es corta. Cópiala en algún sitio antes de cerrar la Terminal, porque volver a ejecutar el desinstalador sobre una instalación ya eliminada no la vuelve a mostrar.
Tu perfil del shell sigue mencionándolo
El desinstalador no edita .zprofile, .zshrc ni .bash_profile. La línea eval
"$(/opt/homebrew/bin/brew shellenv)" que añadiste al instalar permanece, y cada shell
nuevo intenta ejecutar un binario que ya no existe.
Es inofensivo, pero ruidoso. Elimina la línea, o déjala si planeas reinstalar.
Plantéate si te basta con algo más acotado
La mayoría de los motivos para desinstalar Homebrew se resuelven mejor con algo más acotado. brew
cleanup libera versiones antiguas y descargas en caché. brew uninstall <formula> elimina
una sola cosa. brew autoremove descarta dependencias que ya nada necesita. Hagas lo que
hagas, Mole te mostrará cuánto pesa el prefijo antes y después, y ese es el
número que decide si la eliminación completa era realmente necesaria.
Reconstrucción a partir de la lista exportada
Una vez instalado Homebrew en la máquina nueva, dos comandos restauran lo que tenías:
xargs brew install < brew-formulae.txt
xargs brew install --cask < brew-casks.txt
Van por separado porque los casks necesitan --cask, y una lista mixta falla a mitad de las entradas.
Lo que hace que esto funcione es brew leaves y no brew list. brew list incluye las dependencias, de modo que al reejecutarlo se instalan de forma explícita cientos de paquetes que deberían haber llegado como dependencias, y brew autoremove ya no los tocará después porque los pediste por nombre. brew leaves devuelve solo lo que instalaste realmente y deja el grafo de dependencias en manos de Homebrew.