5.8 KiB
vagrant-lxc
This is a Vagrant plugin that allows it to control and provision Linux Containers as an alternative to the built in VirtualBox provider for Linux hosts.
Features / Limitations
- Provides the same workflow as the Vagrant VirtualBox provider
- Port forwarding via
redir
- Does not support public / private networks
- Assumes you have a
lxcbr0
bridge configured on your host similar to Ubuntu's built-in
Requirements
- Vagrant 1.1+
- lxc 0.7.5+
- redir (if you are planning to use port forwarding)
- A bug-free kernel
The plugin is known to work better and pretty much out of the box on Ubuntu 12.04+
hosts and installing the dependencies on it basically means a apt-get install lxc lxc-templates cgroup-lite redir
and a apt-get update && apt-get dist-upgrade
to upgrade the kernel. For Debian
hosts you'll need to follow the instructions described on the Wiki.
Some manual steps are required to set up a Linode machine prior to using this plugin, please check the wiki for more information. Documentation on how to set things up for other distros are welcome :)
If you are on a Mac or Windows machine, you might want to have a look at this blog post for some ideas on how to set things up or check out this other repo for a set of Vagrant VirtualBox machines ready for vagrant-lxc usage.
NOTE: Some users have been experiencing networking issues and right now you might need to disable checksum offloading as described on this comment
Installation
vagrant plugin install vagrant-lxc
Usage
After installing, add a base box using any name you want, for example:
vagrant box add quantal64 http://bit.ly/vagrant-lxc-quantal64-2013-07-12
Then create a Vagrantfile that looks like the following, changing the box name to the one you've just added:
Vagrant.configure("2") do |config|
config.vm.box = "quantal64"
end
And finally run vagrant up --provider=lxc
.
If you are using Vagrant 1.2+ you can also set VAGRANT_DEFAULT_PROVIDER
environmental variable to lxc
in order to avoid typing --provider=lxc
all
the time.
Advanced configuration
If you want, you can modify container configurations from within your Vagrantfile using the provider block:
Vagrant.configure("2") do |config|
config.vm.box = "quantal64"
config.vm.provider :lxc do |lxc|
# Same effect as as 'customize ["modifyvm", :id, "--memory", "1024"]' for VirtualBox
lxc.customize 'cgroup.memory.limit_in_bytes', '1024M'
end
end
vagrant-lxc will then write out lxc.cgroup.memory.limit_in_bytes='1024M'
to the
container config file (usually kept under /var/lib/lxc/<container>/config
)
prior to starting it.
For other configuration options, please check the lxc.conf manpages.
Avoiding sudo
passwords
This plugin requires a lot of sudo
ing since user namespaces
are not supported on mainstream kernels. Have a look at the Wiki
to find out how to work around that specially if you are running an OS with sudo
< 1.8.4 (like Ubuntu 12.04) as you might be affected by a bug.
Base boxes
Please check the wiki
for a list of pre built
base boxes and have a look at BOXES.md
for more information on building your own.
More information
Please refer the wiki.
Problems / ideas?
Please review the Troubleshooting wiki page + known bugs list if you have a problem and feel free to use the issue tracker propose new functionality and / or report bugs.
Donating
Support this project and others by fgrehm via gittip.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request