This sets up an idiomatic Go workspace in /opt/go with the source
shared from the host directory in
/opt/go/src/github.com/dotcloud/docker and docker installed into
/opt/go
| ... | ... |
@@ -2,115 +2,30 @@ |
| 2 | 2 |
# vi: set ft=ruby : |
| 3 | 3 |
|
| 4 | 4 |
def v10(config) |
| 5 |
- # All Vagrant configuration is done here. The most common configuration |
|
| 6 |
- # options are documented and commented below. For a complete reference, |
|
| 7 |
- # please see the online documentation at vagrantup.com. |
|
| 8 |
- |
|
| 9 |
- # Every Vagrant virtual environment requires a box to build off of. |
|
| 10 | 5 |
config.vm.box = "quantal64_3.5.0-25" |
| 11 |
- |
|
| 12 |
- # The url from where the 'config.vm.box' box will be fetched if it |
|
| 13 |
- # doesn't already exist on the user's system. |
|
| 14 | 6 |
config.vm.box_url = "http://get.docker.io/vbox/ubuntu/12.10/quantal64_3.5.0-25.box" |
| 15 | 7 |
|
| 16 |
- # Boot with a GUI so you can see the screen. (Default is headless) |
|
| 17 |
- # config.vm.boot_mode = :gui |
|
| 18 |
- |
|
| 19 |
- # Assign this VM to a host-only network IP, allowing you to access it |
|
| 20 |
- # via the IP. Host-only networks can talk to the host machine as well as |
|
| 21 |
- # any other machines on the same network, but cannot be accessed (through this |
|
| 22 |
- # network interface) by any external networks. |
|
| 23 |
- config.vm.network :hostonly, "192.168.33.10" |
|
| 24 |
- |
|
| 25 |
- # Assign this VM to a bridged network, allowing you to connect directly to a |
|
| 26 |
- # network using the host's network device. This makes the VM appear as another |
|
| 27 |
- # physical device on your network. |
|
| 28 |
- #config.vm.network :bridged |
|
| 29 |
- |
|
| 30 |
- # Forward a port from the guest to the host, which allows for outside |
|
| 31 |
- # computers to access the VM, whereas host only networking does not. |
|
| 32 |
- # config.vm.forward_port 80, 8080 |
|
| 8 |
+ config.vm.share_folder "v-data", "/opt/go/src/github.com/dotcloud/docker", File.dirname(__FILE__) |
|
| 33 | 9 |
|
| 34 | 10 |
# Ensure puppet is installed on the instance |
| 35 | 11 |
config.vm.provision :shell, :inline => "apt-get -qq update; apt-get install -y puppet" |
| 36 | 12 |
|
| 37 |
- # Share an additional folder to the guest VM. The first argument is |
|
| 38 |
- # an identifier, the second is the path on the guest to mount the |
|
| 39 |
- # folder, and the third is the path on the host to the actual folder. |
|
| 40 |
- config.vm.share_folder "v-data", "~/docker", File.dirname(__FILE__) |
|
| 41 |
- |
|
| 42 |
- # Enable provisioning with Puppet stand alone. Puppet manifests |
|
| 43 |
- # are contained in a directory path relative to this Vagrantfile. |
|
| 44 |
- # You will need to create the manifests directory and a manifest in |
|
| 45 |
- # the file quantal64.pp in the manifests_path directory. |
|
| 46 |
- # |
|
| 47 |
- # An example Puppet manifest to provision the message of the day: |
|
| 48 |
- # |
|
| 49 |
- # # group { "puppet":
|
|
| 50 |
- # # ensure => "present", |
|
| 51 |
- # # } |
|
| 52 |
- # # |
|
| 53 |
- # # File { owner => 0, group => 0, mode => 0644 }
|
|
| 54 |
- # # |
|
| 55 |
- # # file { '/etc/motd':
|
|
| 56 |
- # # content => "Welcome to your Vagrant-built virtual machine! |
|
| 57 |
- # # Managed by Puppet.\n" |
|
| 58 |
- # # } |
|
| 59 |
- # |
|
| 60 | 13 |
config.vm.provision :puppet do |puppet| |
| 61 | 14 |
puppet.manifests_path = "puppet/manifests" |
| 62 | 15 |
puppet.manifest_file = "quantal64.pp" |
| 63 | 16 |
puppet.module_path = "puppet/modules" |
| 64 | 17 |
end |
| 65 |
- |
|
| 66 |
- # Enable provisioning with chef solo, specifying a cookbooks path, roles |
|
| 67 |
- # path, and data_bags path (all relative to this Vagrantfile), and adding |
|
| 68 |
- # some recipes and/or roles. |
|
| 69 |
- # |
|
| 70 |
- # config.vm.provision :chef_solo do |chef| |
|
| 71 |
- # chef.cookbooks_path = "../my-recipes/cookbooks" |
|
| 72 |
- # chef.roles_path = "../my-recipes/roles" |
|
| 73 |
- # chef.data_bags_path = "../my-recipes/data_bags" |
|
| 74 |
- # chef.add_recipe "mysql" |
|
| 75 |
- # chef.add_role "web" |
|
| 76 |
- # |
|
| 77 |
- # # You may also specify custom JSON attributes: |
|
| 78 |
- # chef.json = { :mysql_password => "foo" }
|
|
| 79 |
- # end |
|
| 80 |
- |
|
| 81 |
- # Enable provisioning with chef server, specifying the chef server URL, |
|
| 82 |
- # and the path to the validation key (relative to this Vagrantfile). |
|
| 83 |
- # |
|
| 84 |
- # The Opscode Platform uses HTTPS. Substitute your organization for |
|
| 85 |
- # ORGNAME in the URL and validation key. |
|
| 86 |
- # |
|
| 87 |
- # If you have your own Chef Server, use the appropriate URL, which may be |
|
| 88 |
- # HTTP instead of HTTPS depending on your configuration. Also change the |
|
| 89 |
- # validation key to validation.pem. |
|
| 90 |
- # |
|
| 91 |
- # config.vm.provision :chef_client do |chef| |
|
| 92 |
- # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" |
|
| 93 |
- # chef.validation_key_path = "ORGNAME-validator.pem" |
|
| 94 |
- # end |
|
| 95 |
- # |
|
| 96 |
- # If you're using the Opscode platform, your validator client is |
|
| 97 |
- # ORGNAME-validator, replacing ORGNAME with your organization name. |
|
| 98 |
- # |
|
| 99 |
- # IF you have your own Chef Server, the default validation client name is |
|
| 100 |
- # chef-validator, unless you changed the configuration. |
|
| 101 |
- # |
|
| 102 |
- # chef.validation_client_name = "ORGNAME-validator" |
|
| 103 | 18 |
end |
| 104 | 19 |
|
| 105 |
-"#{Vagrant::VERSION}" < "1.1.0" and Vagrant::Config.run do |config|
|
|
| 20 |
+Vagrant::VERSION < "1.1.0" and Vagrant::Config.run do |config| |
|
| 106 | 21 |
v10(config) |
| 107 | 22 |
end |
| 108 | 23 |
|
| 109 |
-"#{Vagrant::VERSION}" >= "1.1.0" and Vagrant.configure("1") do |config|
|
|
| 24 |
+Vagrant::VERSION >= "1.1.0" and Vagrant.configure("1") do |config|
|
|
| 110 | 25 |
v10(config) |
| 111 | 26 |
end |
| 112 | 27 |
|
| 113 |
-"#{Vagrant::VERSION}" >= "1.1.0" and Vagrant.configure("2") do |config|
|
|
| 28 |
+Vagrant::VERSION >= "1.1.0" and Vagrant.configure("2") do |config|
|
|
| 114 | 29 |
config.vm.provider :aws do |aws| |
| 115 | 30 |
config.vm.box = "dummy" |
| 116 | 31 |
config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box" |
| ... | ... |
@@ -130,10 +45,10 @@ end |
| 130 | 130 |
config.ssh.private_key_path = ENV["RS_PRIVATE_KEY"] |
| 131 | 131 |
rs.username = ENV["RS_USERNAME"] |
| 132 | 132 |
rs.api_key = ENV["RS_API_KEY"] |
| 133 |
- rs.public_key_path = ENV["RS_PUBLIC_KEY"] |
|
| 133 |
+ rs.public_key_path = ENV["RS_PUBLIC_KEY"] |
|
| 134 | 134 |
rs.flavor = /512MB/ |
| 135 | 135 |
rs.image = /Ubuntu/ |
| 136 |
- end |
|
| 136 |
+ end |
|
| 137 | 137 |
|
| 138 | 138 |
config.vm.provider :virtualbox do |vb| |
| 139 | 139 |
config.vm.box = "quantal64_3.5.0-25" |
| ... | ... |
@@ -1,76 +1,29 @@ |
| 1 | 1 |
class virtualbox {
|
| 2 |
- Package { ensure => "installed" }
|
|
| 3 |
- |
|
| 4 |
- user { "vagrant":
|
|
| 5 |
- name => "vagrant", |
|
| 6 |
- ensure => present, |
|
| 7 |
- comment => "Vagrant User", |
|
| 8 |
- shell => "/bin/bash", |
|
| 9 |
- home => "/home/vagrant", |
|
| 10 |
- } |
|
| 11 |
- |
|
| 12 |
- file { "/home/vagrant":
|
|
| 13 |
- mode => 644, |
|
| 14 |
- require => User["vagrant"], |
|
| 15 |
- } |
|
| 2 |
+ Package { ensure => "installed" }
|
|
| 16 | 3 |
|
| 17 |
- # remove some files from the base vagrant image because they're old |
|
| 18 |
- file { "/home/vagrant/docker-master":
|
|
| 19 |
- ensure => absent, |
|
| 20 |
- recurse => true, |
|
| 21 |
- force => true, |
|
| 22 |
- purge => true, |
|
| 23 |
- require => File["/home/vagrant"], |
|
| 24 |
- } |
|
| 25 |
- file { "/usr/local/bin/dockerd":
|
|
| 26 |
- ensure => absent, |
|
| 27 |
- } |
|
| 4 |
+ # remove some files from the base vagrant image because they're old |
|
| 5 |
+ file { "/home/vagrant/docker-master":
|
|
| 6 |
+ ensure => absent, |
|
| 7 |
+ recurse => true, |
|
| 8 |
+ force => true, |
|
| 9 |
+ purge => true, |
|
| 10 |
+ } |
|
| 11 |
+ file { "/usr/local/bin/dockerd":
|
|
| 12 |
+ ensure => absent, |
|
| 13 |
+ } |
|
| 28 | 14 |
|
| 29 |
- # Set up VirtualBox guest utils |
|
| 30 |
- package { "virtualbox-guest-utils": }
|
|
| 15 |
+ # Set up VirtualBox guest utils |
|
| 16 |
+ package { "virtualbox-guest-utils": }
|
|
| 31 | 17 |
exec { "vbox-add" :
|
| 32 | 18 |
command => "/etc/init.d/vboxadd setup", |
| 33 | 19 |
require => [ |
| 34 |
- Package["virtualbox-guest-utils"], |
|
| 35 |
- Package["linux-headers-3.5.0-25-generic"], ], |
|
| 20 |
+ Package["virtualbox-guest-utils"], |
|
| 21 |
+ Package["linux-headers-3.5.0-25-generic"], ], |
|
| 36 | 22 |
} |
| 37 | 23 |
} |
| 38 | 24 |
|
| 39 |
-class ec2 {
|
|
| 40 |
- user { "vagrant":
|
|
| 41 |
- name => "ubuntu", |
|
| 42 |
- ensure => present, |
|
| 43 |
- comment => "Vagrant User", |
|
| 44 |
- shell => "/bin/bash", |
|
| 45 |
- home => "/home/ubuntu", |
|
| 46 |
- } |
|
| 47 |
- file { "/home/vagrant":
|
|
| 48 |
- ensure => link, |
|
| 49 |
- target => "/home/ubuntu", |
|
| 50 |
- require => User["vagrant"], |
|
| 51 |
- } |
|
| 52 |
-} |
|
| 53 |
- |
|
| 54 |
-class rax {
|
|
| 55 |
- user { "vagrant":
|
|
| 56 |
- name => "ubuntu", |
|
| 57 |
- ensure => present, |
|
| 58 |
- comment => "Vagrant User", |
|
| 59 |
- shell => "/bin/bash", |
|
| 60 |
- home => "/home/ubuntu", |
|
| 61 |
- } |
|
| 62 |
- file { "/home/vagrant":
|
|
| 63 |
- ensure => link, |
|
| 64 |
- target => "/home/ubuntu", |
|
| 65 |
- require => User["vagrant"], |
|
| 66 |
- } |
|
| 67 |
-} |
|
| 68 |
- |
|
| 69 | 25 |
class docker {
|
| 70 |
- |
|
| 71 |
- # update this with latest docker binary distro |
|
| 72 |
- $docker_url = "http://get.docker.io/builds/$kernel/$hardwaremodel/docker-master.tgz" |
|
| 73 |
- # update this with latest go binary distry |
|
| 26 |
+ # update this with latest go binary dist |
|
| 74 | 27 |
$go_url = "http://go.googlecode.com/files/go1.0.3.linux-amd64.tar.gz" |
| 75 | 28 |
|
| 76 | 29 |
Package { ensure => "installed" }
|
| ... | ... |
@@ -81,67 +34,63 @@ class docker {
|
| 81 | 81 |
"linux-image-extra-3.5.0-25-generic", |
| 82 | 82 |
"linux-headers-3.5.0-25-generic"]: } |
| 83 | 83 |
|
| 84 |
- notify { "docker_url = $docker_url": withpath => true }
|
|
| 85 |
- |
|
| 86 | 84 |
$ec2_version = file("/etc/ec2_version", "/dev/null")
|
| 87 | 85 |
$rax_version = inline_template("<%= %x{/usr/bin/xenstore-read vm-data/provider_data/provider} %>")
|
| 88 | 86 |
|
| 89 | 87 |
if ($ec2_version) {
|
| 90 |
- $vagrant_user = "ubuntu" |
|
| 91 |
- include ec2 |
|
| 88 |
+ $vagrant_user = "ubuntu" |
|
| 89 |
+ $vagrant_home = "/home/ubuntu" |
|
| 92 | 90 |
} elsif ($rax_version) {
|
| 93 |
- $vagrant_user = "vagrant" |
|
| 94 |
- include rax |
|
| 91 |
+ $vagrant_user = "root" |
|
| 92 |
+ $vagrant_home = "/root" |
|
| 95 | 93 |
} else {
|
| 96 |
- # virtualbox is the vagrant default, so it should be safe to assume |
|
| 97 |
- $vagrant_user = "vagrant" |
|
| 94 |
+ # virtualbox is the vagrant default, so it should be safe to assume |
|
| 95 |
+ $vagrant_user = "vagrant" |
|
| 96 |
+ $vagrant_home = "/home/vagrant" |
|
| 98 | 97 |
include virtualbox |
| 99 | 98 |
} |
| 100 | 99 |
|
| 101 |
- file { "/usr/local/bin":
|
|
| 102 |
- ensure => directory, |
|
| 103 |
- owner => root, |
|
| 104 |
- group => root, |
|
| 105 |
- mode => 755, |
|
| 106 |
- } |
|
| 107 |
- |
|
| 108 | 100 |
exec { "fetch-go":
|
| 109 | 101 |
require => Package["wget"], |
| 110 | 102 |
command => "/usr/bin/wget -O - $go_url | /bin/tar xz -C /usr/local", |
| 111 | 103 |
creates => "/usr/local/go/bin/go", |
| 112 | 104 |
} |
| 113 | 105 |
|
| 114 |
- exec { "fetch-docker" :
|
|
| 115 |
- command => "/usr/bin/wget -O - $docker_url | /bin/tar xz -C /tmp", |
|
| 116 |
- require => Package["wget"], |
|
| 117 |
- } |
|
| 118 |
- |
|
| 119 | 106 |
file { "/etc/init/dockerd.conf":
|
| 120 | 107 |
mode => 600, |
| 121 | 108 |
owner => "root", |
| 122 | 109 |
group => "root", |
| 123 | 110 |
content => template("docker/dockerd.conf"),
|
| 124 |
- require => Exec["copy-docker-bin"], |
|
| 125 | 111 |
} |
| 126 | 112 |
|
| 127 |
- file { "/home/vagrant/.profile":
|
|
| 113 |
+ file { "/opt/go":
|
|
| 114 |
+ owner => $vagrant_user, |
|
| 115 |
+ group => $vagrant_user, |
|
| 116 |
+ recurse => true, |
|
| 117 |
+ } |
|
| 118 |
+ |
|
| 119 |
+ file { "${vagrant_home}/.profile":
|
|
| 128 | 120 |
mode => 644, |
| 129 | 121 |
owner => $vagrant_user, |
| 130 |
- group => "ubuntu", |
|
| 122 |
+ group => $vagrant_user, |
|
| 131 | 123 |
content => template("docker/profile"),
|
| 132 |
- require => File["/home/vagrant"], |
|
| 133 | 124 |
} |
| 134 | 125 |
|
| 135 |
- exec { "copy-docker-bin" :
|
|
| 136 |
- command => "/usr/bin/sudo /bin/cp -f /tmp/docker-master/docker /usr/local/bin/", |
|
| 137 |
- require => [ Exec["fetch-docker"], File["/usr/local/bin"] ], |
|
| 126 |
+ exec { "build-docker" :
|
|
| 127 |
+ cwd => "/opt/go/src/github.com/dotcloud/docker", |
|
| 128 |
+ user => $vagrant_user, |
|
| 129 |
+ environment => "GOPATH=/opt/go", |
|
| 130 |
+ command => "/usr/local/go/bin/go get -v ./... && /usr/local/go/bin/go install ./docker", |
|
| 131 |
+ creates => "/opt/go/bin/docker", |
|
| 132 |
+ logoutput => "on_failure", |
|
| 133 |
+ require => [ Exec["fetch-go"], File["/opt/go"] ], |
|
| 138 | 134 |
} |
| 139 | 135 |
|
| 140 | 136 |
service { "dockerd" :
|
| 141 | 137 |
ensure => "running", |
| 142 | 138 |
start => "/sbin/initctl start dockerd", |
| 143 | 139 |
stop => "/sbin/initctl stop dockerd", |
| 144 |
- require => File["/etc/init/dockerd.conf"], |
|
| 140 |
+ require => [ Exec["build-docker"], File["/etc/init/dockerd.conf"] ], |
|
| 145 | 141 |
name => "dockerd", |
| 146 | 142 |
provider => "base" |
| 147 | 143 |
} |
| ... | ... |
@@ -21,7 +21,10 @@ if [ -d "$HOME/bin" ] ; then |
| 21 | 21 |
PATH="$HOME/bin:$PATH" |
| 22 | 22 |
fi |
| 23 | 23 |
|
| 24 |
-# set ~/docker as the go path |
|
| 25 |
-export GOPATH=~/docker |
|
| 26 |
-# add go to the PATH |
|
| 27 |
-export PATH=$PATH:/usr/local/go/bin |
|
| 28 | 24 |
\ No newline at end of file |
| 25 |
+export GOPATH=/opt/go |
|
| 26 |
+export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin |
|
| 27 |
+ |
|
| 28 |
+docker=/opt/go/src/github.com/dotcloud/docker |
|
| 29 |
+if [ -d $docker ]; then |
|
| 30 |
+ cd $docker |
|
| 31 |
+fi |