This project automates the setup of a development environment for python related development on gentoo which I prefered. You can customized the Vagrantfile
on your fork. This is the easiest way to build a box with everything ready to start hacking, all in an isolated virtual machine.
1. Download the .box file from here which I prepared at first. It's about 0.96G.
➜ boxes wget http://dl.dropbox.com/u/1212791/everbird-gentoo-64-i686-3.3.8.box
➜ boxes vagrant box add everbird-gentoo-64-i686-3.3.8 everbird-gentoo-64-i686-3.3.8.box
[vagrant] Downloading with Vagrant::Downloaders::File...
[vagrant] Copying box to temporary location...
[vagrant] Extracting box...
[vagrant] Verifying box...
[vagrant] Cleaning up downloaded box...
➜ boxes vagrant box list
everbird-gentoo-64-i686-3.3.8
➜ vagrant git clone --recursive git://github.com/everbird/vagrant-cidar.git
Cloning into 'vagrant-cidar'...
remote: Counting objects: 69, done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 69 (delta 21), reused 64 (delta 16)
Receiving objects: 100% (69/69), 6.31 KiB, done.
Resolving deltas: 100% (21/21), done.
Submodule 'modules/concat' (git://github.com/ripienaar/puppet-concat.git) registered for path 'modules/concat'
Submodule 'modules/gentoo' (git://github.com/ramereth/puppet-gentoo.git) registered for path 'modules/gentoo'
Cloning into 'modules/concat'...
remote: Counting objects: 247, done.
remote: Compressing objects: 100% (169/169), done.
remote: Total 247 (delta 103), reused 207 (delta 67)
Receiving objects: 100% (247/247), 40.68 KiB | 36 KiB/s, done.
Resolving deltas: 100% (103/103), done.
Submodule path 'modules/concat': checked out '00259779effdd210b7ad7b3e35551ddadd37116e'
Cloning into 'modules/gentoo'...
remote: Counting objects: 387, done.
remote: Compressing objects: 100% (176/176), done.
remote: Total 387 (delta 146), reused 383 (delta 142)
Receiving objects: 100% (387/387), 46.70 KiB | 35 KiB/s, done.
Resolving deltas: 100% (146/146), done.
Submodule path 'modules/gentoo': checked out '60276050986a9d6e14da3aa10336c1e17dba0f94'
➜ vagrant cd vagrant-cidar
➜ vagrant-cidar git:(master) vagrant up
That's it.
The setup itself takes about 11-13 minutes in my MacBook Pro.
[default] Importing base box 'everbird-gentoo-64-i686-3.3.8'...
[default] Matching MAC address for NAT networking...
[default] Clearing any previously set forwarded ports...
[default] Forwarding ports...
[default] -- 22 => 2223 (adapter 1)
[vagrant] Pruning invalid NFS exports. Administrator privileges will be required...
[default] Exporting NFS shared folders...
[vagrant] Preparing to edit /etc/exports. Administrator privileges will be required...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Running any VM customizations...
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- manifests: /tmp/vagrant-puppet/manifests
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0
[default] Mounting NFS shared folders...
[default] Running provisioner: Vagrant::Provisioners::Puppet...
[default] Running Puppet with /tmp/vagrant-puppet/manifests/dev.pp...
warning: Could not retrieve fact fqdn
notice: /Stage[main]/Vagrant/File[/etc/motd]/ensure: defined content as '{md5}42e6a4667e59045d30433b5f4dde5d00'
notice: /Stage[main]/Local_repo/Exec[sync-gentoo-portages]/returns: executed successfully
notice: /Stage[main]/Infrastructure/Package[app-misc/tmux]/ensure: created
notice: /Stage[main]/Local_repo/Exec[eix-update]/returns: executed successfully
notice: /Stage[main]/Python/Package[dev-python/pip]/ensure: created
notice: /Stage[main]/Python/Package_keywords[dev-python/virtualenvwrapper]/ensure: created
notice: /Stage[main]/Python/Package[dev-python/ipython]/ensure: created
notice: /Stage[main]/Python/Package[dev-python/virtualenv]/ensure: created
notice: /Stage[main]/Python/File[/etc/portage/package.keywords/puppet]/mode: mode changed '0600' to '0644'
notice: /Stage[main]/Python/Package[dev-python/virtualenvwrapper]/ensure: created
notice: /Stage[main]/Timezone/File[timezone]/ensure: created
notice: /Stage[main]/Timezone/Exec[set-timezone]: Triggered 'refresh' from 1 events
notice: Finished catalog run in 446.15 seconds
After the installation has finished, you can access the virtual machine with
➜ vagrant-cidar git:(master) vagrant ssh
Last login: Sat Sep 1 17:20:18 CST 2012 from 10.0.2.2 on ssh
Remember, there are not stupid questions, just stupid people.
- Herbert Garrison
vagrant@cidar ~ $
Port 2223 in the host computer is forwarded to port 22 in the virtual machine. Ip of the vm was set to 10.0.3.20
. You can ssh to vm either way.
As we use NFS Shared Folders by default, vagrant need authorization to change /etc/exports to mount. A better way is grant vagrant sudo-access without password for NFS-setup. A handy script is available here.
- Python 2.7.3 & 3.2.3
- Ruby 1.8.7 & 1.9.3
- Puppet
- Vim 7.3 (+python +ruby)
- Git
- Virtualbox Guest Additions 4.1.20
- Sqlite3, Mysql
- Redis, Memcached
- Nginx
- Virtualenv, VirtualenvWrapper
- zsh, tmux, ack, openntpd, mlocate, zerofree
- eix, gentoolkit
see Packages In The Box page.
When done just log out with ^D
and suspend the virtual machine
host $ vagrant suspend
then, resume to hack again
host $ vagrant resume
Run
host $ vagrant halt
to shutdown the virtual machine, and
host $ vagrant up
to boot it again.
You can find out the state of a virtual machine anytime by invoking
host $ vagrant status
Finally, to completely wipe the virtual machine from the disk destroying all its contents:
host $ vagrant destroy # DANGER: all is gone
Please check the Vagrant documentation for more information on Vagrant.