2012-10-02 14:43:59 -04:00
|
|
|
# Our Boxen
|
2012-10-03 14:33:53 -04:00
|
|
|
|
|
|
|
This is a template Boxen project designed for your organization to fork and
|
|
|
|
modify appropriately.
|
2012-10-07 23:23:38 -04:00
|
|
|
The Boxen rubygem and the Boxen puppet modules are only a framework for getting
|
|
|
|
things done.
|
|
|
|
This repository template is just a basic example of _how_ to do things with them.
|
2012-10-03 14:33:53 -04:00
|
|
|
|
|
|
|
## Getting Started
|
|
|
|
|
2013-02-10 20:53:38 -05:00
|
|
|
1. Install Xcode Command Line Tools and/or full Xcode.
|
|
|
|
* If using full Xcode, you'll need to agree to the license by running: `xcodebuild -license`
|
2012-10-09 15:43:21 -04:00
|
|
|
1. Create a new repository on GitHub as your user for your Boxen. (eg.
|
2012-10-09 16:06:09 -04:00
|
|
|
`wfarr/my-boxen`). **Make sure it is a private repository!**
|
2013-01-08 23:05:44 -05:00
|
|
|
1. Use your install of [boxen-web](https://github.com/boxen/boxen-web) or get running manually like so:
|
2012-10-09 15:45:16 -04:00
|
|
|
```
|
|
|
|
mkdir -p ~/src/my-boxen
|
|
|
|
cd ~/src/my-boxen
|
|
|
|
git init
|
|
|
|
git remote add upstream https://github.com/boxen/our-boxen
|
|
|
|
git fetch upstream
|
2012-10-11 22:49:15 -04:00
|
|
|
git checkout -b master upstream/master
|
2012-10-09 15:45:16 -04:00
|
|
|
git remote add origin https://github.com/wfarr/my-boxen
|
|
|
|
git push origin master
|
|
|
|
|
|
|
|
script/boxen
|
|
|
|
```
|
|
|
|
1. Close and reopen your Terminal. If you have a shell config file
|
|
|
|
(eg. `~/.bashrc`) you'll need to add this at the very end:
|
|
|
|
`[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh`, and reload
|
|
|
|
your shell.
|
2012-10-09 15:43:21 -04:00
|
|
|
1. Confirm the Boxen env has loaded: `boxen --env`
|
2012-10-08 14:28:26 -04:00
|
|
|
|
2012-10-09 15:43:21 -04:00
|
|
|
Now you have your own my-boxen repo that you can hack on.
|
|
|
|
You may have noticed we didn't ask you to fork the repo.
|
|
|
|
This is because when our-boxen goes open source that'd have some
|
|
|
|
implications about your fork also potentially being public.
|
|
|
|
That's obviously quite bad, so that's why we strongly suggest you
|
|
|
|
create an entirely separate repo and simply pull the code in, as shown above.
|
2012-10-04 13:30:22 -04:00
|
|
|
|
2012-10-17 21:12:17 -04:00
|
|
|
## Getting your users started _after_ your "fork" exists
|
|
|
|
|
2013-02-10 20:53:38 -05:00
|
|
|
1. Install the Xcode Command Line Tools (full Xcode install optional).
|
2013-01-08 23:05:44 -05:00
|
|
|
1. Point them at your private install of [boxen-web](https://github.com/boxen/boxen-web), **OR** have them run the following:
|
2012-10-17 21:12:17 -04:00
|
|
|
|
|
|
|
```
|
|
|
|
sudo mkdir -p /opt/boxen
|
|
|
|
sudo chown $USER:admin /opt/boxen
|
|
|
|
git clone https://github.com/yourorg/yourreponame.git /opt/boxen/repo
|
|
|
|
cd /opt/boxen/repo
|
|
|
|
script/boxen
|
|
|
|
|
|
|
|
# add boxen to your shell config, at the end, eg.
|
|
|
|
echo '[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh'
|
|
|
|
```
|
|
|
|
|
|
|
|
Open a new terminal, `boxen --env` to confirm.
|
|
|
|
|
2012-10-04 13:30:22 -04:00
|
|
|
## What You Get
|
|
|
|
|
|
|
|
This template project provides the following by default:
|
|
|
|
|
|
|
|
* Homebrew
|
|
|
|
* Git
|
|
|
|
* Hub
|
|
|
|
* DNSMasq w/ .dev resolver for localhost
|
|
|
|
* NVM
|
|
|
|
* RBenv
|
|
|
|
* Full Disk Encryption requirement
|
|
|
|
* NodeJS 0.4
|
|
|
|
* NodeJS 0.6
|
|
|
|
* NodeJS 0.8
|
|
|
|
* Ruby 1.8.7
|
|
|
|
* Ruby 1.9.2
|
|
|
|
* Ruby 1.9.3
|
|
|
|
* Ack
|
|
|
|
* Findutils
|
|
|
|
* GNU-Tar
|
|
|
|
|
|
|
|
## Customizing
|
|
|
|
|
2012-10-09 15:43:21 -04:00
|
|
|
You can always check out the number of existing modules we already
|
|
|
|
provide as optional installs under the
|
|
|
|
[boxen organization](https://github.com/boxen). These modules are all
|
|
|
|
tested to be compatible with Boxen. Use the `Puppetfile` to pull them
|
2012-10-09 23:11:48 -04:00
|
|
|
in dependencies automatically whenever `boxen` is run.
|
|
|
|
|
2012-10-09 23:42:22 -04:00
|
|
|
### Node definitions
|
2012-10-09 23:11:48 -04:00
|
|
|
|
2012-10-09 23:42:22 -04:00
|
|
|
Puppet has the concept of a
|
|
|
|
['node'](http://docs.puppetlabs.com/references/glossary.html#agent),
|
|
|
|
which is essentially the machine on which Puppet is running. Puppet looks for
|
|
|
|
[node definitions](http://docs.puppetlabs.com/learning/agent_master_basic.html#node-definitions)
|
|
|
|
in the `manifests/site.pp` file in the Boxen repo. You'll see a default node
|
|
|
|
declaration that looks like the following:
|
2012-10-09 23:11:48 -04:00
|
|
|
|
2012-10-15 17:25:41 -04:00
|
|
|
``` puppet
|
|
|
|
node default {
|
|
|
|
# core modules, needed for most things
|
|
|
|
include dnsmasq
|
|
|
|
|
|
|
|
# more...
|
|
|
|
}
|
|
|
|
```
|
2012-10-09 23:11:48 -04:00
|
|
|
|
2012-10-13 15:05:01 -04:00
|
|
|
### How Boxen interacts with Puppet
|
|
|
|
|
|
|
|
Boxen runs everything declared in `manifests/site.pp` by default.
|
|
|
|
But just like any other source code, throwing all your work into one massive
|
|
|
|
file is going to be difficult to work with. Instead, we recommend you
|
2013-01-26 16:41:18 -05:00
|
|
|
use modules in the `Puppetfile` when you can and make new modules
|
|
|
|
in the `modules/` directory when you can't. Then add `include $modulename`
|
|
|
|
for each new module in `manifests/site.pp` to include them.
|
|
|
|
One pattern that's very common is to create a module for your organization
|
|
|
|
(e.g., `modules/github`) and put an environment class in that module
|
2012-10-13 15:05:01 -04:00
|
|
|
to include all of the modules your organization wants to install for
|
|
|
|
everyone by default. An example of this might look like so:
|
|
|
|
|
2012-10-15 17:25:41 -04:00
|
|
|
``` puppet
|
|
|
|
# modules/github/manifests/environment.pp
|
|
|
|
|
2012-10-13 15:05:01 -04:00
|
|
|
class github::environment {
|
|
|
|
include github::apps::mac
|
|
|
|
|
|
|
|
include ruby::1-8-7
|
|
|
|
|
|
|
|
include projects::super-top-secret-project
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2013-01-26 16:41:18 -05:00
|
|
|
If you'd like to read more about how Puppet works, we recommend
|
2012-10-13 15:05:01 -04:00
|
|
|
checking out [the official documentation](http://docs.puppetlabs.com/)
|
|
|
|
for:
|
|
|
|
|
|
|
|
* [Modules](http://docs.puppetlabs.com/learning/modules1.html#modules)
|
|
|
|
* [Classes](http://docs.puppetlabs.com/learning/modules1.html#classes)
|
|
|
|
* [Defined Types](http://docs.puppetlabs.com/learning/definedtypes.html)
|
|
|
|
* [Facts](http://docs.puppetlabs.com/guides/custom_facts.html)
|
2012-10-09 23:42:22 -04:00
|
|
|
|
|
|
|
### Creating a personal module
|
|
|
|
|
2013-01-26 16:41:18 -05:00
|
|
|
See [the documentation in the
|
2013-02-06 21:59:53 -05:00
|
|
|
`modules/people`](modules/people/README.md)
|
2012-10-09 23:42:22 -04:00
|
|
|
directory for creating per-user modules that don't need to be applied
|
|
|
|
globally to everyone.
|
|
|
|
|
|
|
|
### Creating a project module
|
|
|
|
|
|
|
|
See [the documentation in the
|
2013-02-06 21:59:53 -05:00
|
|
|
`modules/projects`](modules/projects/README.md)
|
2013-01-26 16:41:18 -05:00
|
|
|
directory for creating organization projects (i.e., repositories that people
|
2012-10-09 23:42:22 -04:00
|
|
|
will be working in).
|
2012-10-09 16:06:09 -04:00
|
|
|
|
|
|
|
## Binary packages
|
|
|
|
|
|
|
|
We support binary packaging for everything in Homebrew, RBEnv, and NVM.
|
|
|
|
See `config/boxen.rb` for the environment variables to define.
|