3 votos

¿Automatizar la instalación de paquetes mediante el shell script para MacOS?

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!)

  1. ¿Es la forma correcta de utilizar which brew o which 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.
  2. ¿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?)
  3. 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?
  4. ¿Hay algo equivalente a virtual_env o jenv 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. :)

1voto

Markus Puntos 307

Para seguir con nohillside, iba a decir que podrías conseguir mucho de eso creando tu propio grifo. Incluso puede aprovechar un repositorio alojado en otro lugar (digamos como uno privado, bitbucket, o cualquier cosa), siempre y cuando especifique la url de git después de brew tap

0voto

Lizardx Puntos 185

Homebrew sabe qué paquetes has instalado ya, así que incluso si instalas gcc dos veces (ejecutando brew install gcc ), sólo se instalará una vez. Así que puedes poner con seguridad un montón de brew install <package> en tus scripts sin necesidad de preocuparte por perder mucho tiempo.

Lo que es mejor es el soporte de Homebrew Brewfile que permite definir todas las dependencias en un solo archivo e instalarlas todas ejecutando brew bundle --file=<path/to/brewfile>

Aquí hay un ejemplo de archivo de cerveza:

brew "ack"
brew "git"
brew "python3"

esto equivale a correr:

brew install ack git python3

Puedes encontrar más ejemplos de brewfile, sólo tienes que buscar en Google.

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