2013-03-23 01:41:53 -04:00
|
|
|
# Packer
|
|
|
|
|
2013-06-09 01:56:34 -04:00
|
|
|
* Website: http://www.packer.io
|
|
|
|
* IRC: `#packer-tool` on Freenode
|
|
|
|
* Mailing list: [Google Groups](http://groups.google.com/group/packer-tool)
|
|
|
|
|
2013-06-09 01:35:58 -04:00
|
|
|
Packer is a tool for building identical machine images for multiple platforms
|
|
|
|
from a single source configuration.
|
2013-03-23 01:41:53 -04:00
|
|
|
|
2013-06-09 01:35:58 -04:00
|
|
|
Packer is lightweight, runs on every major operating system, and is highly
|
|
|
|
performant, creating machine images for multiple platforms in parallel.
|
|
|
|
Packer comes out of the box with support for creating AMIs (EC2), VMware
|
|
|
|
images, and VirtualBox images. Support for more platforms can be added via
|
2013-06-29 17:32:27 -04:00
|
|
|
plugins.
|
2013-06-29 12:29:17 -04:00
|
|
|
|
|
|
|
The images that Packer creates can easily be turned into
|
2013-06-28 09:36:01 -04:00
|
|
|
[Vagrant](http://www.vagrantup.com) boxes.
|
2013-03-23 01:41:53 -04:00
|
|
|
|
2013-03-23 18:59:17 -04:00
|
|
|
## Quick Start
|
|
|
|
|
2013-06-28 09:36:01 -04:00
|
|
|
**Note:** There is a great
|
2013-06-28 11:27:38 -04:00
|
|
|
[introduction and getting started guide](http://www.packer.io/intro)
|
2013-06-28 09:36:01 -04:00
|
|
|
for those with a bit more patience. Otherwise, the quick start below
|
|
|
|
will get you up and running quickly, at the sacrifice of not explaining some
|
|
|
|
key points.
|
|
|
|
|
2013-06-28 16:54:31 -04:00
|
|
|
First, [download a pre-built Packer binary](http://www.packer.io/downloads.html)
|
2013-06-28 09:36:01 -04:00
|
|
|
for your operating system or [compile Packer yourself](#developing-packer).
|
2013-03-23 18:59:17 -04:00
|
|
|
|
2013-06-09 01:35:58 -04:00
|
|
|
After Packer is installed, create your first template, which tells Packer
|
|
|
|
what platforms to build images for and how you want to build them. In our
|
|
|
|
case, we'll create a simple AMI that has Redis pre-installed. Save this
|
|
|
|
file as `quick-start.json`. Be sure to replace any credentials with your
|
|
|
|
own.
|
|
|
|
|
|
|
|
```json
|
|
|
|
{
|
|
|
|
"builders": [{
|
|
|
|
"type": "amazon-ebs",
|
|
|
|
"access_key": "YOUR KEY HERE",
|
|
|
|
"secret_key": "YOUR SECRET KEY HERE",
|
|
|
|
"region": "us-east-1",
|
|
|
|
"source_ami": "ami-de0d9eb7",
|
2013-06-28 09:36:01 -04:00
|
|
|
"instance_type": "t1.micro",
|
2013-06-09 01:35:58 -04:00
|
|
|
"ssh_username": "ubuntu",
|
2013-08-08 20:01:41 -04:00
|
|
|
"ami_name": "packer-example {{timestamp}}"
|
2013-06-09 01:35:58 -04:00
|
|
|
}]
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
Next, tell Packer to build the image:
|
2013-03-23 18:59:17 -04:00
|
|
|
|
|
|
|
```
|
2013-05-09 00:09:19 -04:00
|
|
|
$ packer build quick-start.json
|
2013-03-23 18:59:17 -04:00
|
|
|
...
|
|
|
|
```
|
|
|
|
|
|
|
|
Packer will build an AMI according to the "quick-start" template. The AMI
|
|
|
|
will be available in your AWS account. To delete the AMI, you must manually
|
|
|
|
delete it using the [AWS console](https://console.aws.amazon.com/). Packer
|
|
|
|
builds your images, it does not manage their lifecycle. Where they go, how
|
|
|
|
they're run, etc. is up to you.
|
|
|
|
|
2013-06-09 01:35:58 -04:00
|
|
|
## Documentation
|
2013-03-23 18:59:17 -04:00
|
|
|
|
2013-06-09 01:35:58 -04:00
|
|
|
Full, comprehensive documentation is viewable on the Packer website:
|
2013-03-23 18:59:17 -04:00
|
|
|
|
2013-06-09 01:35:58 -04:00
|
|
|
http://www.packer.io/docs
|
2013-03-23 18:59:17 -04:00
|
|
|
|
2013-03-23 03:48:20 -04:00
|
|
|
## Developing Packer
|
2013-03-23 01:41:53 -04:00
|
|
|
|
2013-03-23 03:48:20 -04:00
|
|
|
If you wish to work on Packer itself, you'll first need [Go](http://golang.org)
|
2013-06-29 17:32:27 -04:00
|
|
|
installed (version 1.1+ is _required_). Make sure you have Go properly installed,
|
|
|
|
including setting up your [GOPATH](http://golang.org/doc/code.html#GOPATH).
|
|
|
|
|
2013-07-01 00:03:24 -04:00
|
|
|
For some additional dependencies, Go needs [Mercurial](http://mercurial.selenic.com/)
|
2013-11-22 06:17:16 -05:00
|
|
|
and [Bazaar](http://bazaar.canonical.com/en/) to be installed.
|
|
|
|
Packer itself doesn't require these, but a dependency of a dependency does.
|
2013-06-30 22:46:22 -04:00
|
|
|
|
2013-11-30 03:01:18 -05:00
|
|
|
You'll also need [`gox`](https://github.com/mitchellh/gox)
|
2013-11-22 05:31:02 -05:00
|
|
|
to compile packer. You can install that with:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ go get -u github.com/mitchellh/gox
|
|
|
|
```
|
|
|
|
|
2013-07-04 23:59:52 -04:00
|
|
|
Next, clone this repository into `$GOPATH/src/github.com/mitchellh/packer` and
|
|
|
|
then just type `make`. In a few moments, you'll have a working `packer` executable:
|
2013-03-23 03:48:20 -04:00
|
|
|
|
|
|
|
```
|
|
|
|
$ make
|
2013-03-23 03:49:09 -04:00
|
|
|
...
|
2013-05-09 00:09:19 -04:00
|
|
|
$ bin/packer
|
|
|
|
...
|
2013-03-23 03:48:20 -04:00
|
|
|
```
|
2013-05-09 00:09:19 -04:00
|
|
|
|
2013-06-29 17:32:27 -04:00
|
|
|
You can run tests by typing `make test`.
|
2013-06-29 12:31:00 -04:00
|
|
|
|
|
|
|
This will run tests for Packer core along with all the core builders and commands and such that come with Packer.
|
2013-09-03 11:53:29 -04:00
|
|
|
|
|
|
|
If you make any changes to the code, run `make format` in order to automatically
|
|
|
|
format the code according to Go standards.
|
2013-11-07 08:15:40 -05:00
|
|
|
|
|
|
|
When new dependencies are added to packer you can use `make updatedeps` to
|
|
|
|
get the latest and subsequently use `make` to compile and generate the `packer` binary.
|