vagrant-lxc 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BOXES.md +55 -0
- data/CHANGELOG.md +14 -0
- data/CONTRIBUTING.md +20 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +4 -3
- data/README.md +16 -19
- data/boxes/build-debian-box.sh +167 -0
- data/boxes/build-ubuntu-box.sh +151 -0
- data/boxes/common/install-babushka +4 -3
- data/boxes/common/install-chef +3 -2
- data/boxes/common/install-puppet +3 -2
- data/boxes/common/install-salt +3 -2
- data/boxes/common/lxc-template +10 -13
- data/boxes/common/metadata.json +2 -1
- data/development/Vagrantfile +4 -4
- data/development/site.pp +31 -6
- data/lib/vagrant-lxc/action.rb +44 -40
- data/lib/vagrant-lxc/action/clear_forwarded_ports.rb +4 -0
- data/lib/vagrant-lxc/action/fetch_ip_from_dnsmasq_leases.rb +1 -1
- data/lib/vagrant-lxc/action/fetch_ip_with_lxc_attach.rb +4 -7
- data/lib/vagrant-lxc/action/message.rb +1 -0
- data/lib/vagrant-lxc/action/setup_package_files.rb +1 -0
- data/lib/vagrant-lxc/action/wait_for_communicator.rb +9 -14
- data/lib/vagrant-lxc/driver.rb +10 -7
- data/lib/vagrant-lxc/driver/cli.rb +7 -1
- data/lib/vagrant-lxc/errors.rb +5 -0
- data/lib/vagrant-lxc/version.rb +1 -1
- data/locales/en.yml +8 -2
- data/spec/Vagrantfile +7 -2
- data/spec/unit/driver/cli_spec.rb +8 -0
- metadata +8 -18
- data/boxes/debian/download +0 -156
- data/boxes/debian/finalize +0 -195
- data/boxes/debian/lxc-template +0 -367
- data/boxes/debian/metadata.json.template +0 -9
- data/boxes/ubuntu/download +0 -113
- data/boxes/ubuntu/finalize +0 -374
- data/boxes/ubuntu/lxc-template +0 -559
- data/boxes/ubuntu/metadata.json.template +0 -9
- data/development/shell-provisioning/upgrade-kernel +0 -14
- data/example/Vagrantfile +0 -46
- data/example/cookbooks/hello-world/recipes/default.rb +0 -4
- data/example/puppet/manifests/site.pp +0 -5
- data/example/puppet/modules/hello_world/manifests/init.pp +0 -3
- data/tasks/boxes.rake +0 -115
- data/tasks/boxes.v2.rake +0 -188
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d037f1ba303000765f7744d6400f4d6191e24689
|
4
|
+
data.tar.gz: ef8dbd484d7768f7b1cdd6efc9d9fed64504b1b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb469f28e25a5521c907f316df78e4274aaa5c198a39ee89bf2a0500abc7193101b2283a54ea370203f815e92ab98fdf015b0098cd276b0b0d8d72d4c82d2b02
|
7
|
+
data.tar.gz: 6c8fc71c88a63a3cd790d7a7577ae8eedf35c920fd611fcf93fdd8951647992c43929f0edc4c45598f58a49efa99d4e165e627098eb8b29e91b93938633e0e2d
|
data/BOXES.md
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# vagrant-lxc base boxes
|
2
|
+
|
3
|
+
Although the official documentation says it is only supported for VirtualBox
|
4
|
+
environments, you can use the [`vagrant package`](http://docs.vagrantup.com/v2/cli/package.html)
|
5
|
+
command to export a `.box` file from an existing vagrant-lxc container.
|
6
|
+
|
7
|
+
There is also a set of [bash scripts](https://github.com/fgrehm/vagrant-lxc/tree/master/boxes)
|
8
|
+
that you can use to build base boxes as needed. By default it won't include any
|
9
|
+
provisioning tool and you can pick the ones you want by providing some environment
|
10
|
+
variables.
|
11
|
+
|
12
|
+
For example:
|
13
|
+
|
14
|
+
```
|
15
|
+
git clone https://github.com/fgrehm/vagrant-lxc.git
|
16
|
+
cd vagrant-lxc/boxes
|
17
|
+
PUPPET=1 CHEF=1 sudo -E ./build-ubuntu-box.sh precise amd64
|
18
|
+
```
|
19
|
+
|
20
|
+
Will build a Ubuntu Precise x86_64 box with latest Puppet and Chef pre-installed, please refer to the scripts for more information.
|
21
|
+
|
22
|
+
## "Anatomy" of a box
|
23
|
+
|
24
|
+
If you need to go deeper and build your scripts from scratch or if you are interested
|
25
|
+
on knowing what makes a base box for vagrant-lxc, here's what's needed:
|
26
|
+
|
27
|
+
### Expected `.box` contents
|
28
|
+
|
29
|
+
| FILE | DESCRIPTION |
|
30
|
+
| --- | --- |
|
31
|
+
| `lxc-template` | Script responsible for creating and setting up the container (used with `lxc-create`), a ["generic script"]() is provided along with project's source. |
|
32
|
+
| `rootfs.tar.gz` | Compressed container rootfs tarball (need to remeber to pass in `--numeric-owner` when creating it) |
|
33
|
+
| `lxc.conf` | |
|
34
|
+
| `metadata.json` | |
|
35
|
+
|
36
|
+
### metadata.json
|
37
|
+
|
38
|
+
```json
|
39
|
+
{
|
40
|
+
"provider": "lxc",
|
41
|
+
"version": "3",
|
42
|
+
"built-on": "Sat Sep 21 21:10:00 UTC 2013",
|
43
|
+
"template-opts": {
|
44
|
+
"--arch": "amd64",
|
45
|
+
"--release": "quantal"
|
46
|
+
}
|
47
|
+
}
|
48
|
+
```
|
49
|
+
|
50
|
+
| KEY | REQUIRED? | DESCRIPTION |
|
51
|
+
| --- | --- | --- |
|
52
|
+
| `provider` | Yes | Required by Vagrant |
|
53
|
+
| `version` | Yes | Tracks backward incompatibilities |
|
54
|
+
| `built-on` | No | Date / time when the box was packaged |
|
55
|
+
| `template-opts` | No | Extra options to be passed to the `lxc-template` script provided with the .box package |
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
## [0.6.1](https://github.com/fgrehm/vagrant-lxc/compare/v0.6.0...v0.6.1) (Oct 03, 2013)
|
2
|
+
|
3
|
+
IMPROVEMENTS:
|
4
|
+
|
5
|
+
- Fall back to `dnsmasq` leases file if not able to fetch IP with `lxc-attach` [#118](https://github.com/fgrehm/vagrant-lxc/issues/118)
|
6
|
+
- Make sure lxc templates are executable prior to `lxc-create` [#128](https://github.com/fgrehm/vagrant-lxc/issues/128)
|
7
|
+
- New base boxes with support for lxc 1.0+
|
8
|
+
|
9
|
+
BUG FIXES:
|
10
|
+
|
11
|
+
- Fix various issues related to detecting whether the container is running
|
12
|
+
and is "SSHable" [#142](https://github.com/fgrehm/vagrant-lxc/issues/142)
|
13
|
+
- Nicely handle missing templates path [#139](https://github.com/fgrehm/vagrant-lxc/issues/139)
|
14
|
+
|
1
15
|
## [0.6.0](https://github.com/fgrehm/vagrant-lxc/compare/v0.5.0...v0.6.0) (Sep 12, 2013)
|
2
16
|
|
3
17
|
IMPROVEMENTS:
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
### Please read before contributing
|
2
|
+
|
3
|
+
* Try not to post questions in the issues tracker. I will probably answer you
|
4
|
+
but I'll most likely close the issue right away and will continue the discussion
|
5
|
+
with the issue closed. If you have any questions about the plugin, make sure
|
6
|
+
you go through the [Wiki](https://github.com/fgrehm/vagrant-lxc/wiki) pages
|
7
|
+
first and if you still need answers please ask a question on [Stack Overflow](http://stackoverflow.com/questions/tagged/vagrant-lxc)
|
8
|
+
using the `vagrant-lxc` tag on it so that I get notified :)
|
9
|
+
|
10
|
+
* Please do a small search on the issues tracker before submitting your issue to
|
11
|
+
check if it was already reported / fixed.
|
12
|
+
|
13
|
+
* When reporting a bug, please include **all** information that you can get
|
14
|
+
about your environment. Things like vagrant / vagrant-lxc / kernel / lxc /
|
15
|
+
distro versions, the list of plugins you have installed, a [gist](https://gist.github.com/)
|
16
|
+
with the output of running `VAGRANT_LOG=debug vagrant COMMAND`, the `Vagrantfile`
|
17
|
+
you are using and / or base box URL are really useful when tracking down what's
|
18
|
+
going on on your side of the globe and will get bonus points :)
|
19
|
+
|
20
|
+
Thanks!
|
data/Gemfile
CHANGED
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
group :development do
|
6
|
-
gem 'vagrant', github: 'mitchellh/vagrant'
|
6
|
+
gem 'vagrant', github: 'mitchellh/vagrant', tag: 'v1.3.3'
|
7
7
|
gem 'vagrant-cachier', github: 'fgrehm/vagrant-cachier'
|
8
8
|
gem 'vagrant-pristine', github: 'fgrehm/vagrant-pristine'
|
9
9
|
gem 'vagrant-omnibus'
|
data/Gemfile.lock
CHANGED
@@ -12,9 +12,10 @@ GIT
|
|
12
12
|
|
13
13
|
GIT
|
14
14
|
remote: git://github.com/mitchellh/vagrant.git
|
15
|
-
revision:
|
15
|
+
revision: db8e7a9c79b23264da129f55cf8569167fc22415
|
16
|
+
tag: v1.3.3
|
16
17
|
specs:
|
17
|
-
vagrant (1.3.
|
18
|
+
vagrant (1.3.3)
|
18
19
|
childprocess (~> 0.3.7)
|
19
20
|
erubis (~> 2.7.0)
|
20
21
|
i18n (~> 0.6.0)
|
@@ -25,7 +26,7 @@ GIT
|
|
25
26
|
PATH
|
26
27
|
remote: .
|
27
28
|
specs:
|
28
|
-
vagrant-lxc (0.6.
|
29
|
+
vagrant-lxc (0.6.1)
|
29
30
|
|
30
31
|
GEM
|
31
32
|
remote: https://rubygems.org/
|
data/README.md
CHANGED
@@ -7,17 +7,13 @@
|
|
7
7
|
This is a Vagrant plugin that allows it to control and provision Linux Containers
|
8
8
|
as an alternative to the built in VirtualBox provider for Linux hosts.
|
9
9
|
|
10
|
-
Check out this [blog post](http://fabiorehm.com/blog/2013/04/28/lxc-provider-for-vagrant)
|
11
|
-
to see the plugin in action and find out more about it.
|
12
10
|
|
13
11
|
## Features / Limitations
|
14
12
|
|
15
13
|
* Provides the same workflow as the Vagrant VirtualBox provider
|
16
14
|
* Port forwarding via [`redir`](http://linux.die.net/man/1/redir)
|
17
|
-
* Does not support private networks
|
18
|
-
|
19
|
-
*Please refer to the [closed issues](https://github.com/fgrehm/vagrant-lxc/issues?labels=&milestone=&page=1&state=closed)
|
20
|
-
and the [changelog](CHANGELOG.md) for most up to date information.*
|
15
|
+
* Does not support public / private networks
|
16
|
+
* Assumes you have a `lxcbr0` bridge configured on your host similar to [Ubuntu's built-in](https://help.ubuntu.com/lts/serverguide/lxc.html#lxcbr0)
|
21
17
|
|
22
18
|
|
23
19
|
## Requirements
|
@@ -33,13 +29,13 @@ and a `apt-get update && apt-get dist-upgrade` to upgrade the kernel. For Debian
|
|
33
29
|
hosts you'll need to follow the instructions described on the [Wiki](https://github.com/fgrehm/vagrant-lxc/wiki/Usage-on-debian-hosts).
|
34
30
|
|
35
31
|
Some manual steps are required to set up a Linode machine prior to using this
|
36
|
-
plugin, please check https://github.com/fgrehm/vagrant-lxc/wiki/Usage-on-Linode
|
32
|
+
plugin, please check [the wiki](https://github.com/fgrehm/vagrant-lxc/wiki/Usage-on-Linode)
|
37
33
|
for more information. Documentation on how to set things up for other distros
|
38
34
|
[are welcome](https://github.com/fgrehm/vagrant-lxc/wiki) :)
|
39
35
|
|
40
|
-
If you are on a Mac or Windows machine, you might want to have a look at this
|
41
|
-
blog post for some ideas on how to set things up
|
42
|
-
|
36
|
+
If you are on a Mac or Windows machine, you might want to have a look at [this](http://the.taoofmac.com/space/HOWTO/Vagrant)
|
37
|
+
blog post for some ideas on how to set things up or check out [this other repo](https://github.com/fgrehm/vagrant-lxc-vbox-hosts)
|
38
|
+
for a set of Vagrant VirtualBox machines ready for vagrant-lxc usage.
|
43
39
|
|
44
40
|
|
45
41
|
## Installation
|
@@ -89,12 +85,11 @@ end
|
|
89
85
|
```
|
90
86
|
|
91
87
|
vagrant-lxc will then write out `lxc.cgroup.memory.limit_in_bytes='1024M'` to the
|
92
|
-
container config file (usually kept under `/var/lib/lxc/<container
|
88
|
+
container config file (usually kept under `/var/lib/lxc/<container>/config`)
|
93
89
|
prior to starting it.
|
94
90
|
|
95
91
|
For other configuration options, please check the [lxc.conf manpages](http://manpages.ubuntu.com/manpages/quantal/man5/lxc.conf.5.html).
|
96
92
|
|
97
|
-
|
98
93
|
### Avoiding `sudo` passwords
|
99
94
|
|
100
95
|
This plugin requires **a lot** of `sudo`ing since [user namespaces](https://wiki.ubuntu.com/UserNamespace)
|
@@ -106,13 +101,13 @@ to find out how to work around that specially if you are running an OS with sudo
|
|
106
101
|
|
107
102
|
Please check [the wiki](https://github.com/fgrehm/vagrant-lxc/wiki/Base-boxes)
|
108
103
|
for a list of [pre built](https://github.com/fgrehm/vagrant-lxc/wiki/Base-boxes#available-boxes)
|
109
|
-
base boxes and
|
104
|
+
base boxes and have a look at [`BOXES.md`](https://github.com/fgrehm/vagrant-lxc/tree/master/BOXES.md)
|
105
|
+
for more information on building your own.
|
110
106
|
|
111
107
|
|
112
108
|
## More information
|
113
109
|
|
114
|
-
Please refer the [wiki](https://github.com/fgrehm/vagrant-lxc/wiki)
|
115
|
-
information.
|
110
|
+
Please refer the [wiki](https://github.com/fgrehm/vagrant-lxc/wiki).
|
116
111
|
|
117
112
|
|
118
113
|
## Problems / ideas?
|
@@ -120,13 +115,15 @@ information.
|
|
120
115
|
Please review the [Troubleshooting](https://github.com/fgrehm/vagrant-lxc/wiki/Troubleshooting)
|
121
116
|
wiki page + [known bugs](https://github.com/fgrehm/vagrant-lxc/issues?labels=bug&page=1&state=open)
|
122
117
|
list if you have a problem and feel free to use the [issue tracker](https://github.com/fgrehm/vagrant-lxc/issues)
|
123
|
-
|
118
|
+
propose new functionality and / or report bugs.
|
119
|
+
|
124
120
|
|
121
|
+
## Donating
|
125
122
|
|
126
|
-
|
123
|
+
Support this project and [others by fgrehm](https://github.com/fgrehm)
|
124
|
+
via [gittip](https://www.gittip.com/fgrehm/).
|
127
125
|
|
128
|
-
|
129
|
-
* [vagueant](https://github.com/neerolyte/vagueant) - "vaguely like Vagrant for linux containers (lxc)"
|
126
|
+
[![Support via Gittip](https://rawgithub.com/twolfson/gittip-badge/0.1.0/dist/gittip.png)](https://www.gittip.com/fgrehm/)
|
130
127
|
|
131
128
|
|
132
129
|
## Contributing
|
@@ -0,0 +1,167 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# set -x
|
4
|
+
set -e
|
5
|
+
|
6
|
+
# Script used to build Debian base vagrant-lxc containers, currently limited to
|
7
|
+
# host's arch
|
8
|
+
#
|
9
|
+
# USAGE:
|
10
|
+
# $ cd boxes && sudo ./build-debian-box.sh DEBIAN_RELEASE
|
11
|
+
#
|
12
|
+
# To enable Chef or any other configuration management tool pass '1' to the
|
13
|
+
# corresponding env var:
|
14
|
+
# $ CHEF=1 sudo -E ./build-debian-box.sh DEBIAN_RELEASE
|
15
|
+
# $ PUPPET=1 sudo -E ./build-debian-box.sh DEBIAN_RELEASE
|
16
|
+
# $ SALT=1 sudo -E ./build-debian-box.sh DEBIAN_RELEASE
|
17
|
+
# $ BABUSHKA=1 sudo -E ./build-debian-box.sh DEBIAN_RELEASE
|
18
|
+
|
19
|
+
##################################################################################
|
20
|
+
# 0 - Initial setup and sanity checks
|
21
|
+
|
22
|
+
TODAY=$(date -u +"%Y-%m-%d")
|
23
|
+
NOW=$(date -u)
|
24
|
+
RELEASE=${1:-"wheezy"}
|
25
|
+
ARCH=$(dpkg --print-architecture) # This is what the Debian template will use under the hood
|
26
|
+
PKG=vagrant-lxc-${RELEASE}-${ARCH}-${TODAY}.box
|
27
|
+
WORKING_DIR=/tmp/vagrant-lxc-${RELEASE}
|
28
|
+
VAGRANT_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
|
29
|
+
ROOTFS=/var/lib/lxc/${RELEASE}-base/rootfs
|
30
|
+
|
31
|
+
# Providing '1' will enable these tools
|
32
|
+
CHEF=${CHEF:-0}
|
33
|
+
PUPPET=${PUPPET:-0}
|
34
|
+
SALT=${SALT:-0}
|
35
|
+
BABUSHKA=${BABUSHKA:-0}
|
36
|
+
|
37
|
+
# Path to files bundled with the box
|
38
|
+
CWD=`readlink -f .`
|
39
|
+
LXC_TEMPLATE=${CWD}/common/lxc-template
|
40
|
+
LXC_CONF=${CWD}/common/lxc.conf
|
41
|
+
METATADA_JSON=${CWD}/common/metadata.json
|
42
|
+
|
43
|
+
# Set up a working dir
|
44
|
+
mkdir -p $WORKING_DIR
|
45
|
+
|
46
|
+
if [ -f "${WORKING_DIR}/${PKG}" ]; then
|
47
|
+
echo "Found a box on ${WORKING_DIR}/${PKG} already!"
|
48
|
+
exit 1
|
49
|
+
fi
|
50
|
+
|
51
|
+
##################################################################################
|
52
|
+
# 1 - Create the base container
|
53
|
+
|
54
|
+
if $(lxc-ls | grep -q "${RELEASE}-base"); then
|
55
|
+
echo "Base container already exists, please remove it with \`lxc-destroy -n ${RELEASE}-base\`!"
|
56
|
+
exit 1
|
57
|
+
else
|
58
|
+
export SUITE=$RELEASE
|
59
|
+
lxc-create -n ${RELEASE}-base -t debian
|
60
|
+
fi
|
61
|
+
|
62
|
+
|
63
|
+
######################################
|
64
|
+
# 2 - Fix some known issues
|
65
|
+
|
66
|
+
# Fixes some networking issues
|
67
|
+
# See https://github.com/fgrehm/vagrant-lxc/issues/91 for more info
|
68
|
+
sed -i -e "s/\(127.0.0.1\s\+localhost\)/\1\n127.0.1.1\t${RELEASE}-base\n/g" ${ROOTFS}/etc/hosts
|
69
|
+
|
70
|
+
# Ensures that `/tmp` does not get cleared on halt
|
71
|
+
# See https://github.com/fgrehm/vagrant-lxc/issues/68 for more info
|
72
|
+
chroot $ROOTFS /usr/sbin/update-rc.d -f checkroot-bootclean.sh remove
|
73
|
+
chroot $ROOTFS /usr/sbin/update-rc.d -f mountall-bootclean.sh remove
|
74
|
+
chroot $ROOTFS /usr/sbin/update-rc.d -f mountnfs-bootclean.sh remove
|
75
|
+
|
76
|
+
# Ensure locales are properly set, based on http://linux.livejournal.com/1880366.html
|
77
|
+
sed -i "s/^# en_US/en_US/" ${ROOTFS}/etc/locale.gen
|
78
|
+
chroot $ROOTFS /usr/sbin/locale-gen
|
79
|
+
chroot $ROOTFS update-locale LANG=en_US.UTF-8
|
80
|
+
|
81
|
+
|
82
|
+
##################################################################################
|
83
|
+
# 3 - Prepare vagrant user
|
84
|
+
sudo chroot ${ROOTFS} useradd --create-home -s /bin/bash vagrant
|
85
|
+
|
86
|
+
echo -n 'vagrant:vagrant' | chroot ${ROOTFS} chpasswd
|
87
|
+
|
88
|
+
|
89
|
+
##################################################################################
|
90
|
+
# 4 - Setup SSH access and passwordless sudo
|
91
|
+
|
92
|
+
# Configure SSH access
|
93
|
+
mkdir -p ${ROOTFS}/home/vagrant/.ssh
|
94
|
+
echo $VAGRANT_KEY > ${ROOTFS}/home/vagrant/.ssh/authorized_keys
|
95
|
+
chroot ${ROOTFS} chown -R vagrant: /home/vagrant/.ssh
|
96
|
+
|
97
|
+
chroot ${ROOTFS} apt-get install sudo -y --force-yes
|
98
|
+
chroot ${ROOTFS} adduser vagrant sudo
|
99
|
+
|
100
|
+
# Enable passwordless sudo for users under the "sudo" group
|
101
|
+
cp ${ROOTFS}/etc/sudoers{,.orig}
|
102
|
+
sed -i -e \
|
103
|
+
's/%sudo\s\+ALL=(ALL\(:ALL\)\?)\s\+ALL/%sudo ALL=NOPASSWD:ALL/g' \
|
104
|
+
${ROOTFS}/etc/sudoers
|
105
|
+
|
106
|
+
|
107
|
+
##################################################################################
|
108
|
+
# 5 - Add some goodies and update packages
|
109
|
+
|
110
|
+
PACKAGES=(vim curl wget man-db bash-completion ca-certificates)
|
111
|
+
chroot ${ROOTFS} apt-get install ${PACKAGES[*]} -y --force-yes
|
112
|
+
chroot ${ROOTFS} apt-get upgrade -y --force-yes
|
113
|
+
|
114
|
+
|
115
|
+
##################################################################################
|
116
|
+
# 6 - Configuration management tools
|
117
|
+
|
118
|
+
if [ $CHEF = 1 ]; then
|
119
|
+
./common/install-chef $ROOTFS
|
120
|
+
fi
|
121
|
+
|
122
|
+
if [ $PUPPET = 1 ]; then
|
123
|
+
./common/install-puppet $ROOTFS
|
124
|
+
fi
|
125
|
+
|
126
|
+
if [ $SALT = 1 ]; then
|
127
|
+
./common/install-salt $ROOTFS
|
128
|
+
fi
|
129
|
+
|
130
|
+
if [ $BABUSHKA = 1 ]; then
|
131
|
+
./common/install-babushka $ROOTFS
|
132
|
+
fi
|
133
|
+
|
134
|
+
|
135
|
+
##################################################################################
|
136
|
+
# 7 - Free up some disk space
|
137
|
+
|
138
|
+
rm -rf ${ROOTFS}/tmp/*
|
139
|
+
chroot ${ROOTFS} apt-get clean
|
140
|
+
|
141
|
+
|
142
|
+
##################################################################################
|
143
|
+
# 8 - Build box package
|
144
|
+
|
145
|
+
# Compress container's rootfs
|
146
|
+
cd $(dirname $ROOTFS)
|
147
|
+
tar --numeric-owner -czf /tmp/vagrant-lxc-${RELEASE}/rootfs.tar.gz ./rootfs/*
|
148
|
+
|
149
|
+
# Prepare package contents
|
150
|
+
cd $WORKING_DIR
|
151
|
+
cp $LXC_TEMPLATE .
|
152
|
+
cp $LXC_CONF .
|
153
|
+
cp $METATADA_JSON .
|
154
|
+
chmod +x lxc-template
|
155
|
+
sed -i "s/<TODAY>/${NOW}/" metadata.json
|
156
|
+
|
157
|
+
# Vagrant box!
|
158
|
+
tar -czf $PKG ./*
|
159
|
+
|
160
|
+
chmod +rw ${WORKING_DIR}/${PKG}
|
161
|
+
mkdir -p ${CWD}/output
|
162
|
+
mv ${WORKING_DIR}/${PKG} ${CWD}/output
|
163
|
+
|
164
|
+
# Clean up after ourselves
|
165
|
+
rm -rf ${WORKING_DIR}
|
166
|
+
|
167
|
+
echo "The base box was built successfully to ${CWD}/output/${PKG}"
|
@@ -0,0 +1,151 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
# set -x
|
4
|
+
set -e
|
5
|
+
|
6
|
+
# Script used to build Ubuntu base vagrant-lxc containers
|
7
|
+
#
|
8
|
+
# USAGE:
|
9
|
+
# $ cd boxes && sudo ./build-ubuntu-box.sh UBUNTU_RELEASE BOX_ARCH
|
10
|
+
#
|
11
|
+
# To enable Chef or any other configuration management tool pass '1' to the
|
12
|
+
# corresponding env var:
|
13
|
+
# $ CHEF=1 sudo -E ./build-ubuntu-box.sh UBUNTU_RELEASE BOX_ARCH
|
14
|
+
# $ PUPPET=1 sudo -E ./build-ubuntu-box.sh UBUNTU_RELEASE BOX_ARCH
|
15
|
+
# $ SALT=1 sudo -E ./build-ubuntu-box.sh UBUNTU_RELEASE BOX_ARCH
|
16
|
+
# $ BABUSHKA=1 sudo -E ./build-ubuntu-box.sh UBUNTU_RELEASE BOX_ARCH
|
17
|
+
|
18
|
+
##################################################################################
|
19
|
+
# 0 - Initial setup and sanity checks
|
20
|
+
|
21
|
+
TODAY=$(date -u +"%Y-%m-%d")
|
22
|
+
NOW=$(date -u)
|
23
|
+
RELEASE=${1:-"raring"}
|
24
|
+
ARCH=${2:-"amd64"}
|
25
|
+
PKG=vagrant-lxc-${RELEASE}-${ARCH}-${TODAY}.box
|
26
|
+
WORKING_DIR=/tmp/vagrant-lxc-${RELEASE}
|
27
|
+
VAGRANT_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key"
|
28
|
+
ROOTFS=/var/lib/lxc/${RELEASE}-base/rootfs
|
29
|
+
|
30
|
+
# Providing '1' will enable these tools
|
31
|
+
CHEF=${CHEF:-0}
|
32
|
+
PUPPET=${PUPPET:-0}
|
33
|
+
SALT=${SALT:-0}
|
34
|
+
BABUSHKA=${BABUSHKA:-0}
|
35
|
+
|
36
|
+
# Path to files bundled with the box
|
37
|
+
CWD=`readlink -f .`
|
38
|
+
LXC_TEMPLATE=${CWD}/common/lxc-template
|
39
|
+
LXC_CONF=${CWD}/common/lxc.conf
|
40
|
+
METATADA_JSON=${CWD}/common/metadata.json
|
41
|
+
|
42
|
+
# Set up a working dir
|
43
|
+
mkdir -p $WORKING_DIR
|
44
|
+
|
45
|
+
if [ -f "${WORKING_DIR}/${PKG}" ]; then
|
46
|
+
echo "Found a box on ${WORKING_DIR}/${PKG} already!"
|
47
|
+
exit 1
|
48
|
+
fi
|
49
|
+
|
50
|
+
##################################################################################
|
51
|
+
# 1 - Create the base container
|
52
|
+
|
53
|
+
if $(lxc-ls | grep -q "${RELEASE}-base"); then
|
54
|
+
echo "Base container already exists, please remove it with \`lxc-destroy -n ${RELEASE}-base\`!"
|
55
|
+
exit 1
|
56
|
+
else
|
57
|
+
lxc-create -n ${RELEASE}-base -t ubuntu -- --release ${RELEASE} --arch ${ARCH}
|
58
|
+
fi
|
59
|
+
|
60
|
+
# Fixes some networking issues
|
61
|
+
# See https://github.com/fgrehm/vagrant-lxc/issues/91 for more info
|
62
|
+
echo 'ff02::3 ip6-allhosts' >> ${ROOTFS}/etc/hosts
|
63
|
+
|
64
|
+
|
65
|
+
##################################################################################
|
66
|
+
# 2 - Prepare vagrant user
|
67
|
+
|
68
|
+
mv ${ROOTFS}/home/{ubuntu,vagrant}
|
69
|
+
chroot ${ROOTFS} usermod -l vagrant -d /home/vagrant ubuntu
|
70
|
+
chroot ${ROOTFS} groupmod -n vagrant ubuntu
|
71
|
+
|
72
|
+
echo -n 'vagrant:vagrant' | chroot ${ROOTFS} chpasswd
|
73
|
+
|
74
|
+
|
75
|
+
##################################################################################
|
76
|
+
# 3 - Setup SSH access and passwordless sudo
|
77
|
+
|
78
|
+
# Configure SSH access
|
79
|
+
mkdir -p ${ROOTFS}/home/vagrant/.ssh
|
80
|
+
echo $VAGRANT_KEY > ${ROOTFS}/home/vagrant/.ssh/authorized_keys
|
81
|
+
chroot ${ROOTFS} chown -R vagrant: /home/vagrant/.ssh
|
82
|
+
|
83
|
+
# Enable passwordless sudo for users under the "sudo" group
|
84
|
+
cp ${ROOTFS}/etc/sudoers{,.orig}
|
85
|
+
sed -i -e \
|
86
|
+
's/%sudo\s\+ALL=(ALL\(:ALL\)\?)\s\+ALL/%sudo ALL=NOPASSWD:ALL/g' \
|
87
|
+
${ROOTFS}/etc/sudoers
|
88
|
+
|
89
|
+
|
90
|
+
##################################################################################
|
91
|
+
# 4 - Add some goodies and update packages
|
92
|
+
|
93
|
+
PACKAGES=(vim curl wget man-db bash-completion)
|
94
|
+
chroot ${ROOTFS} apt-get install ${PACKAGES[*]} -y --force-yes
|
95
|
+
chroot ${ROOTFS} apt-get upgrade -y --force-yes
|
96
|
+
|
97
|
+
|
98
|
+
##################################################################################
|
99
|
+
# 5 - Configuration management tools
|
100
|
+
|
101
|
+
if [ $CHEF = 1 ]; then
|
102
|
+
./common/install-chef $ROOTFS
|
103
|
+
fi
|
104
|
+
|
105
|
+
if [ $PUPPET = 1 ]; then
|
106
|
+
./common/install-puppet $ROOTFS
|
107
|
+
fi
|
108
|
+
|
109
|
+
if [ $SALT = 1 ]; then
|
110
|
+
./common/install-salt $ROOTFS
|
111
|
+
fi
|
112
|
+
|
113
|
+
if [ $BABUSHKA = 1 ]; then
|
114
|
+
./common/install-babushka $ROOTFS
|
115
|
+
fi
|
116
|
+
|
117
|
+
|
118
|
+
##################################################################################
|
119
|
+
# 6 - Free up some disk space
|
120
|
+
|
121
|
+
rm -rf ${ROOTFS}/tmp/*
|
122
|
+
chroot ${ROOTFS} apt-get clean
|
123
|
+
|
124
|
+
|
125
|
+
##################################################################################
|
126
|
+
# 7 - Build box package
|
127
|
+
|
128
|
+
# Compress container's rootfs
|
129
|
+
cd $(dirname $ROOTFS)
|
130
|
+
tar --numeric-owner -czf /tmp/vagrant-lxc-${RELEASE}/rootfs.tar.gz ./rootfs/*
|
131
|
+
|
132
|
+
# Prepare package contents
|
133
|
+
cd $WORKING_DIR
|
134
|
+
cp $LXC_TEMPLATE .
|
135
|
+
cp $LXC_CONF .
|
136
|
+
cp $METATADA_JSON .
|
137
|
+
chmod +x lxc-template
|
138
|
+
sed -i "s/<TODAY>/${NOW}/" metadata.json
|
139
|
+
|
140
|
+
# Vagrant box!
|
141
|
+
tar -czf $PKG ./*
|
142
|
+
|
143
|
+
chmod +rw ${WORKING_DIR}/${PKG}
|
144
|
+
mkdir -p ${CWD}/output
|
145
|
+
mv ${WORKING_DIR}/${PKG} ${CWD}/output
|
146
|
+
|
147
|
+
# Clean up after ourselves
|
148
|
+
rm -rf ${WORKING_DIR}
|
149
|
+
lxc-destroy -n ${RELEASE}-base
|
150
|
+
|
151
|
+
echo "The base box was built successfully to ${CWD}/output/${PKG}"
|