Estoy intentando escribir un script de shell para automatizar la instalación de un montón de dependencias para un proyecto en MacOS que será un script equivalente para el mismo que funcione en EL6/EL7 y utilice el yum
gestor de paquetes. Este script intentará aprovechar HomeBrew
para hacer lo mismo.
Algunas de las herramientas/dependencias/paquetes cuya instalación quiero automatizar son gcc
, wget
, make
, cmake
y git
y así sucesivamente. Primero quiero comprobar si alguno de ellos ya existe, y luego actualizarlo o instalarlo. Como puedes ver en este fragmento siguiente, primero intento comprobar si brew
ya existe, entonces 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 en varias partes!)
- ¿Es la forma correcta de utilizar
which brew
owhich X
donde X puede ser gcc, make, etc. y luego compararlas con las codificadas/usr/bin/X
para comprobar su existencia? Ya que tengo una lista de ellos que necesito comprobar e instalar, declarar variables para todos y cruzarlas con las rutas de alguna manera no me parece apropiado. - ¿Cómo manejar la situación en la que el usuario tiene estos paquetes instalados pero en alguna ubicación diferente por cualquier razón que pueda tener? (Esto parece un poco objetivo pero para asegurar que el proyecto compila y construye sobre estas dependencias ¿debo forzar estas rutas solamente?)
- Además, uno o más paquetes pueden ser
git
repos y necesitan ser clonados, compilados, hacer instalados sobre la marcha. ¿Cuál debe ser el lugar adecuado para poner el generado.dylib
s 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.D. Cualquier ayuda en términos de una dirección, recurso o un proyecto de ejemplo que funcione con gran cantidad de dependencias será de gran ayuda. No consigo encontrar las palabras clave o los recursos adecuados para buscar una solución o una solución parcial. Gracias. :)