Я намагаюся написати скрипт оболонки для автоматизації встановлення купи залежностей для проекту на macOS, який буде еквівалентним сценарієм для того ж, що працює на EL6 / EL7 та використовує yumменеджер пакетів. Цей сценарій буде намагатися використовувати HomeBrewте саме.
Деякі з інструментів / залежностей / пакетів , які я хочу , щоб автоматизувати установку є gcc, wget, make, cmakeі gitі так далі. Я спершу хочу перевірити, чи вже існує якесь із них, а потім оновити їх або іншим чином встановити. Як ви бачите в цьому наступному фрагменті, я спершу намагаюся перевірити, чи brewіснує вже, а потім оновіть його, або просто встановіть його.
#!/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
Тепер мої запитання (запитання на кілька частин!)
- Це правильний спосіб використання
which brewабоwhich Xде X може бути gcc, make etc., а потім порівнювати їх з hardcoded,/usr/bin/Xщоб перевірити їх існування? Оскільки у мене є досить перелік їх, мені потрібно перевірити та встановити такі оголошувальні змінні для всіх і перехресна перевірка шляхами мені якось не здається доречною. - Як впоратися з ситуацією, коли користувач встановив ці пакунки, але в якомусь іншому місці з будь-якої причини? (Це здається дещо об'єктивним, але для того, щоб забезпечити, що проект збирає та базується на цих залежностях, чи повинен я застосовувати лише ці шляхи?)
- Крім того, один або кілька пакетів можуть бути
gitрепостовані, і їх потрібно клонувати, складати та встановлювати на ходу. Що має бути належним місцем для розміщення створених.dylibs та створення символьних посилань, щоб переконатися, що всі ці взаємозалежні пакети можуть знайти один одного та працювати в спокої? - Чи є щось еквівалентне
virtual_envабоjenvізолювати всі ці установки (звичайно, використовуючи HomeBrew, в якому вони потрапляють/usr/local/Cellar)? Але, оскільки macOS має щонайменше декілька з них (git, gcc тощо), я не хочу дублювати установки.
PS Будь-яка допомога з точки зору напрямку, ресурсу чи прикладу проекту, що працює з великою кількістю залежностей, допоможе. Я просто не можу з’ясувати правильні ключові слова чи потрібні ресурси для пошуку рішення чи часткового рішення. Дякую. :)
which, просто перевірте вихідний код ( $?). Це також вирішує проблеми "бінарних, встановлених у випадковому місці". Але: якщо ви все одно використовуєте Homebrew, чому б не упакувати всю програму саме так і дозволити Homebrew вирішувати залежності?
brewабо вказати на ресурс із подібними прикладами?
brewхакер, але я повністю впевнений, що вони вже вирішили всі проблеми, з якими ви стикаєтесь. Посилання на документацію про те , як писати свої власні формули і т.д. , можна знайти в нижній частині brew.sh .