This project uses soloist and librarian-chef to run a custom set of the recipes in sprout-wrap's cookbooks.
Additionally, it adds the lyraphase_workstation
cookbook for
installing a Digital Audio Workstation (DAW), and miscellaneous audio and development tools.
Keeping this bootstrap provisioning project working on each macOS update sure is a lot of work! If you find this project useful and appreciate my work, would you be willing to click one of the buttons below to Sponsor this project and help me continue?
Method | Button |
---|---|
GitHub | 💖 Sponsor |
Liberapay | |
PayPal |
Every little bit is appreciated! Thank you! 🙏
This guide assumes that you have an Apple machine running a recent version of macOS.
The Semi-Manual way section assumes that you know how to use RVM to install Ruby and Bundler to install Ruby Gems, but gives some commands to assist you in installing the supported versions.
Open a terminal and run:
\curl -Ls https://git.io/Jy0EQ | bash
Alternatively, run:
git clone https://github.com/LyraPhase/sprout-wrap.git
cd sprout-wrap
make bootstrap
Download and install XCode or the XCode command line tools.
xcode-select --install
To provision your machine, open up Terminal and enter the following:
sudo xcodebuild -license
xcode-select --install
git clone https://github.com/LyraPhase/sprout-wrap.git
cd sprout-wrap
bash -c "./bootstrap-scripts/bootstrap-rvm.sh $USER"
export PATH="$PATH:$HOME/.rvm/bin"
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
sprout_ruby_version=$(tr -d '\n' < "${REPO_BASE}/.ruby-version")
sprout_ruby_gemset=$(tr -d '\n' < "${REPO_BASE}/.ruby-gemset")
sprout_rubygems_ver=$(tr -d '\n' < "${REPO_BASE}/.rubygems-version") ## Passed to gem update --system
sprout_bundler_ver=$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1 | tr -d '[:blank:]')
# Install Ruby, Create Gemset and install Bundler + RubyGems
## NOTE: You might need to set compilation options for native gem extensions (e.g.: libffi, nokogiri)
rvm install "ruby-${sprout_ruby_version}"
rvm use "ruby-${sprout_ruby_version}"
rvm gemset create "$sprout_ruby_gemset"
rvm use "ruby-${sprout_ruby_version}"@"${sprout_ruby_gemset}"
rvm "${sprout_ruby_version}" do gem update --system "${sprout_rubygems_ver}"
rvm "${sprout_ruby_version}" do gem install --default "bundler:${sprout_bundler_ver}"
if ! bundle list | grep -q "bundler.*${sprout_bundler_ver}"; then
bundle exec gem install --default "bundler:${sprout_bundler_ver}"
fi
bundle config set --local path 'vendor/bundle' ;
bundle config set --local without 'development' ;
bundle install
caffeinate ./sprout
The caffeinate
command will keep your computer awake while installing;
depending on your network connection, soloistrc
, and run_list
,
soloist can take from 10 minutes to 2 hours to complete.
As of macOS 10.14
, the behavior of underlying ObjectiveC macOS Foundation framework changed.
(Big surprise, Apple changes fundamental development platform dependencies so often it causes many things to break 🍎💩)
This results in the following errors:
objc[37813]: +[__NSPlaceholderDictionary initialize] may have been in progress in another thread when fork() was called.
objc[37813]: +[__NSPlaceholderDictionary initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
[2020-07-20T16:25:31-06:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 6 (IOT)
[2020-07-20T16:25:31-06:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 6 (IOT)
The workaround is to run soloist
/ chef-solo
with the following environment variable:
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
bundle exec soloist run_recipe homebrew::install_casks ## For example
If you receive errors like this:
clang: error: unknown argument: '-multiply_definedsuppress'
then try downgrading those errors like this:
sudo ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future bundle
If you receive a message about the update server being unavailable and are on Mavericks, then you already have the command line tools.
This project uses soloist and librarian-chef to run a subset of the recipes in sprout's cookbooks.
Fork it to customize its attributes in soloistrc and the list of recipes you'd like to use for your team. You may also want to add other cookbooks to its Cheffile, perhaps one of the many community cookbooks. By default it configures an macOS workstation for development and as a Digital Audio Workstation environment.
Finally, if you've never used Chef before - we highly recommend you buy & watch this excellent 17 minute screencast by Ryan Bates.
/opt/homebrew
.
You may encounter issues after migrating from an Intel Mac unless running under Rosetta Terminal.app
.
Fresh installs on arm64
based hardware will use the new location and compile natively for Apple Silicon.brew uninstall --force brew-cask; brew update
should fix things.sprout-wrap
, your homebrew configuration in soloistrc
might be under
node_attributes.sprout.homebrew.formulae
and node_attributes.sprout.homebrew.casks
.
These will need to be updated to node_attributes.homebrew.formulas
(note the change from formulae to formulas)
and node_attributes.homebrew.casks
.Some helpful commands and tricks to know when working on this repo:
To run bootstrap.sh
with a custom soloistrc
:
export SOLOISTRC='soloistrc.lyra.yml'
To test bootstrap.sh
curl
piped to bash
mode on a development branch (with set -x
trace mode):
export SPROUT_WRAP_BRANCH=my-feature-branch
export SOLOISTRC=soloistrc.my-feature-test
\curl -Ls https://raw.githubusercontent.com/LyraPhase/sprout-wrap/${SPROUT_WRAP_BRANCH}/bootstrap-scripts/bootstrap.sh | bash -x
To replicate what bootstrap
CI workflow does:
export CI=true
# Ensure you have same Ruby + RubyGems + Bundler versions
bundle install
bundle exec make bootstrap
To replicate what test
CI workflow does:
export CI=true
# Ensure you have same Ruby + RubyGems + Bundler versions
bundle install
bundle exec make test
To run sprout
:
make sprout
For extra Makefile targets:
make help
To clear GitHub Actions Cache (invalidates hash key prefix):
make clear-github-cache
See LyraPhase Sprout Project Tracker: https://github.com/orgs/LyraPhase/projects/1
Join LyraPhase/sprout-wrap Discussions to discuss this fork. You might also want to join sprout-users@googlegroups.com if you use Sprout. (Note: This may not be very active anymore)