Sto provando a scrivere uno script di shell per automatizzare l'installazione di un gruppo di dipendenze per un progetto su macOS che sarà uno script equivalente per lo stesso che funziona su EL6 / EL7 e utilizza il gestore di pacchetti yum
. Questo script proverà a sfruttare HomeBrew
per fare lo stesso.
Alcuni degli strumenti / dipendenze / pacchetti che voglio automatizzare l'installazione sono gcc
, wget
, make
, cmake
e git
e così via. Voglio prima controllare se qualcuno di questi esiste già, quindi aggiornarli o installarli. Come puoi vedere in questo snippet seguente, cerco innanzitutto di verificare se brew
esiste già, quindi aggiornarlo o semplicemente installarlo.
#!/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
Ora, le mie domande sono (domanda a più parti!)
- È il modo giusto di utilizzare
which brew
owhich X
dove X può essere gcc, make ecc. e quindi confrontarli con/usr/bin/X
codificato per verificarne l'esistenza? Dato che ne ho una lista abbastanza dettagliata, devo controllare e installare in modo tale che dichiarare le variabili per tutti e incrociare il controllo con percorsi in qualche modo non mi sembra appropriato. - Come gestire la situazione in cui l'utente ha installato questi pacchetti, ma in una posizione diversa per qualsiasi ragione essi possano avere? (Questo sembra un po 'obiettivo ma per garantire che il progetto compili e si basi su queste dipendenze dovrei forzare solo questi percorsi?)
- Inoltre, uno o più pacchetti potrebbero essere
git
repos e devono essere clonati, compilati, installati immediatamente. Quale dovrebbe essere il posto giusto dove mettere il.dylib
s generato e creare i collegamenti simbolici per assicurarsi che tutti questi pacchetti interdipendenti possano trovarsi l'un l'altro e lavorare in pace? - C'è qualcosa di equivalente a
virtual_env
ojenv
per isolare tutte queste installazioni (ovviamente usando HomeBrew finiscono in/usr/local/Cellar
)? Ma siccome macOS ha almeno alcuni di questi (git, gcc ecc.) Non voglio duplicare le installazioni.
P.S. Aiuterà qualsiasi aiuto in termini di direzione, risorsa o progetto di esempio che lavori con una grande quantità di dipendenze. Non riesco a capire le parole chiave giuste o le risorse giuste per cercare una soluzione o una soluzione parziale. Grazie. :)