Skip to content

Commit ee86a2c

Browse files
committed
Add Vagrant support and documentation
1 parent bb60d2a commit ee86a2c

File tree

4 files changed

+139
-0
lines changed

4 files changed

+139
-0
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
build
2+
workspace
3+
.vagrant

README.md

+15
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,21 @@ $ go get github.com/karalabe/hive
2929
of resource files to build the corrent docker images and containers. This requirement will be removed
3030
in the future.*
3131

32+
## Compatibility note
33+
34+
`hive` uses Docker-in-Docker to bootstrap its test environment, and as such is incompatible with OSX or Windows at this time. This is because OSX and Windows only support the `vfs` storage driver reliably when running Docker-in-Docker, and `vfs` is too slow for usage within `hive`. The lack of reliability manifests itself through opaque filesystem errors such as `unable to mount... not implemented`.
35+
36+
To use `hive` on one of these operating systems, we recommend using a virtual machine solution such as Vagrant. We have included a sample `Vagrantfile` that will compile and install `hive` and all related dependencies. To run hive from within the Vagrant VM, use the following commands:
37+
38+
```bash
39+
vagrant up
40+
vagrant ssh
41+
cd /go/src/github.com/karalabe/hive
42+
hive <args>
43+
```
44+
45+
To sync your local Hive directory with the VM, run `vagrant rsync`.
46+
3247
# Validating clients
3348

3449
You can run the full suite of `hive` validation tests against all the known implementations tagged

Vagrantfile

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# -*- mode: ruby -*-
2+
# vi: set ft=ruby :
3+
4+
# All Vagrant configuration is done below. The "2" in Vagrant.configure
5+
# configures the configuration version (we support older styles for
6+
# backwards compatibility). Please don't change it unless you know what
7+
# you're doing.
8+
Vagrant.configure("2") do |config|
9+
# The most common configuration options are documented and commented below.
10+
# For a complete reference, please see the online documentation at
11+
# https://docs.vagrantup.com.
12+
13+
# Every Vagrant development environment requires a box. You can search for
14+
# boxes at https://vagrantcloud.com/search.
15+
config.vm.box = "ubuntu/trusty64"
16+
17+
# Disable automatic box update checking. If you disable this, then
18+
# boxes will only be checked for updates when the user runs
19+
# `vagrant box outdated`. This is not recommended.
20+
# config.vm.box_check_update = false
21+
22+
# Create a forwarded port mapping which allows access to a specific port
23+
# within the machine from a port on the host machine. In the example below,
24+
# accessing "localhost:8080" will access port 80 on the guest machine.
25+
# NOTE: This will enable public access to the opened port
26+
# config.vm.network "forwarded_port", guest: 80, host: 8080
27+
28+
# Create a forwarded port mapping which allows access to a specific port
29+
# within the machine from a port on the host machine and only allow access
30+
# via 127.0.0.1 to disable public access
31+
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
32+
33+
# Create a private network, which allows host-only access to the machine
34+
# using a specific IP.
35+
# config.vm.network "private_network", ip: "192.168.33.10"
36+
37+
# Create a public network, which generally matched to bridged network.
38+
# Bridged networks make the machine appear as another physical device on
39+
# your network.
40+
# config.vm.network "public_network"
41+
42+
# Share an additional folder to the guest VM. The first argument is
43+
# the path on the host to the actual folder. The second argument is
44+
# the path on the guest to mount the folder. And the optional third
45+
# argument is a set of non-required options.
46+
config.vm.synced_folder ".", "/go/src/github.com/karalabe/hive", type: "rsync",
47+
rsync__exclude: ["workspace", ".git/"],
48+
rsync__verbose: true,
49+
rsync__args: ["--verbose", "--archive", "--delete", "-z", "--no-links"]
50+
51+
# Provider-specific configuration so you can fine-tune various
52+
# backing providers for Vagrant. These expose provider-specific options.
53+
# Example for VirtualBox:
54+
#
55+
config.vm.provider "virtualbox" do |vb|
56+
# Customize the amount of memory on the VM:
57+
vb.memory = "2048"
58+
end
59+
#
60+
# View the documentation for the provider you are using for more
61+
# information on available options.
62+
63+
# fix GPG errors installing docker
64+
config.vm.provision :shell, inline: "su -c \"source /go/src/github.com/karalabe/hive/provision.sh\" vagrant"
65+
end

provision.sh

+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/usr/bin/env bash
2+
3+
set -e
4+
5+
# install required Docker dependencies
6+
echo "Running as $(whoami)"
7+
sudo apt-get update
8+
sudo apt-get install -y \
9+
apt-transport-https \
10+
ca-certificates \
11+
curl \
12+
software-properties-common \
13+
build-essential \
14+
git
15+
16+
# install Docker GPG key and repo
17+
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
18+
sudo apt-key fingerprint | grep 0EBFCD88
19+
if [ $? -eq 1 ]
20+
then
21+
echo "Invalid Docker GPG key."
22+
exit 1
23+
fi
24+
sudo add-apt-repository \
25+
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
26+
$(lsb_release -cs) \
27+
stable"
28+
29+
# install Docker
30+
sudo apt-get update
31+
sudo apt-get install -y docker-ce
32+
# allow vagrant user to interact with Docker
33+
sudo usermod -aG docker vagrant
34+
35+
# install go
36+
curl https://dl.google.com/go/go1.11.linux-amd64.tar.gz --output go.tgz
37+
sudo tar -C /usr/local -xaf go.tgz
38+
sudo mkdir -p /go/bin
39+
sudo mkdir -p /go/src/github.com/karalabe/hive
40+
sudo chown -R vagrant:vagrant /go
41+
cat >> /home/vagrant/.bashrc <<EOF
42+
export GOPATH=/go
43+
export GOBIN=/go/bin
44+
export PATH="\$PATH:\$GOBIN:/usr/local/go/bin"
45+
EOF
46+
export GOPATH=/go
47+
export GOBIN=/go/bin
48+
export PATH="$PATH:$GOBIN:/usr/local/go/bin"
49+
echo "GOPATH: $GOPATH"
50+
echo "GOBIN: $GOBIN"
51+
echo "PATH: $PATH"
52+
53+
# Compile Hive
54+
echo "Compiling..."
55+
cd /go/src/github.com/karalabe/hive
56+
go install ./

0 commit comments

Comments
 (0)