Estoy intentando escribir un script de shell para automatizar la instalación de un grupo de dependencias para un proyecto en macOS, que será un script equivalente para el mismo que funciona en EL6 / EL7 y usa el administrador de paquetes yum
. Este script intentará aprovechar HomeBrew
para hacer lo mismo.
Algunas de las herramientas / dependencias / paquetes que deseo automatizar la instalación son gcc
, wget
, make
, cmake
y git
y así sucesivamente. Primero quiero comprobar si ya existe alguno de estos, luego actualizarlos o instalarlos. Como puede ver en este fragmento de código siguiente, primero estoy tratando de verificar si brew
ya existe, luego actualícelo o simplemente instálelo.
#!/bin/sh
echo Checking brew
#Check if Homebrew is already installed else prompt the user to do so.
BREW_INSTALLED="/usr/local/bin/brew"
#Variables to check if dependencies exist.
HOMEBREW=$(which brew)
echo $HOMEBREW
if [ "$HOMEBREW" == "$BREW_INSTALLED" ]; then
echo "Brew is already installed."
echo "Update Brew"
brew update
else
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
fi
Ahora, mis preguntas son (pregunta multiparte)
- ¿Es la forma correcta de usar
which brew
owhich X
donde X puede ser gcc, make, etc. y luego compararlos con/usr/bin/X
codificado para verificar su existencia? Como tengo una lista de ellos, necesito revisarlos e instalarlos, por lo que declarar variables para todos y verificarlos con caminos no me parece apropiado. - ¿Cómo manejar la situación en la que el usuario tiene estos paquetes instalados pero en una ubicación diferente por cualquier razón que puedan tener? (Esto parece un poco objetivo, pero para garantizar que el proyecto compila y se basa en estas dependencias, ¿debería forzar estos caminos solamente?)
- Además, uno o más paquetes pueden ser
git
repos y necesitan clonarse, compilarse, hacer que se instalen sobre la marcha. ¿Cuál debería ser el lugar adecuado para colocar el.dylib
s generado y crear enlaces simbólicos para asegurarse de que todos estos paquetes interdependientes puedan encontrarse y trabajar en paz? - ¿Hay algo equivalente a
virtual_env
ojenv
para aislar todas estas instalaciones (por supuesto, usando HomeBrew terminan en/usr/local/Cellar
)? Pero, como MacOS viene con al menos algunos de ellos (git, gcc, etc.) no quiero duplicar instalaciones.
P.S. Cualquier ayuda en términos de una dirección, recurso o un proyecto de ejemplo que trabaje con una gran cantidad de dependencias ayudará. Simplemente no puedo encontrar las palabras clave adecuadas o los recursos adecuados para buscar una solución o una solución parcial. Gracias. :)