5.9 KiB
title, layout
| title | layout |
|---|---|
| Building Weave | default |
You only need to build weave if you want to work on the weave codebase (or you just enjoy building software).
Apart from the weave shell script, weave is delivered as a set of
container images. There is no distribution-specific packaging, so in
principle it shouldn't matter which Linux distribution you build
under. But naturally, Docker is a prerequisite (version 1.3.0 or
later). And it is difficult to build under Fedora because Fedora
does not include static
libraries.
So we recommend building under Ubuntu.
You can also build in a container under any system that supports Docker. And you can run Ubuntu in a VM and build there. These options are described below.
Building directly on Ubuntu
The weave git repository should be cloned into
$GOPATH/src/github.com/weaveworks/weave, in accordance with the go
workspace conventions:
$ WEAVE=github.com/weaveworks/weave
$ git clone https://$WEAVE $GOPATH/src/$WEAVE
$ cd $GOPATH/src/$WEAVE
Some prerequisites are needed to build weave:
- Install Docker if you haven't already, by following the instructions
on the Docker
site. Note that
we recommend using the Docker-maintained
lxc-dockerpackage, rather than thedocker.iopackage which contains a very old version. Then install the other prerequisites for building with: - Building weave requires Go 1.4.2, and the
golangpackage in Ubuntu 14.04 LTS is too old. So you may need to install the tarball from golang.org. - A few other packages are also needed:
$ sudo apt-get install build-essential git mercurial libpcap-dev
Then to actually build, simply do:
$ make
This will build the weave components and package them into three
Docker images (weaveworks/weave, weaveworks/weavedns, and
weaveworks/weaveexec). These are then exported (as weave.tar,
weavedns.tar and weaveexec.tar).
Building in a Docker container
As a preliminary step, we create a container image based on Ubuntu
that has all the prerequisites. This avoids the need to download and
install them for each build. In the weave directory, do:
$ sudo docker build -t weaveworks/weave-build build
Next we run a container based on that image. That container requires
access to the Docker daemon on the host, via
/var/run/docker.sock. If you are building under a Fedora or RHEL
Docker host (or another distribution that uses SELinux), and you have
SELinux set to enforcing mode, it will block attempts to access
/var/run/docker.sock inside the container. See
dpw/selinux-dockersock
for a way to work around this problem.
To perform a build, run:
$ sudo docker run -v /var/run/docker.sock:/var/run/docker.sock weaveworks/weave-build https://github.com/weaveworks/weave.git
This will clone the weave git repository, then do the build.
When the build completes, the resulting images are stored in docker on the host, as when building directly under Ubuntu.
The container arguments are passed to git clone, so for example, you
can build from a forked repository and a specific branch with:
$ sudo docker run -v /var/run/docker.sock:/var/run/docker.sock weaveworks/weave-build -b <branch name> <repo URI>
Alternatively, you might want to build from a weave source tree
already present on the host. You can do this by using the -v option
to bind the bind your go workspace containing the weave repository to
/home/go inside the container. No container arguments should be
passed in this case:
$ sudo docker run -v /var/run/docker.sock:/var/run/docker.sock -v <host gopath>:/home/go weaveworks/weave-build
This will leave the intermediate build artifacts on the host, so that you can modify the weave source code and rebuild quickly.
Building using Vagrant
If you aren't running Linux, or otherwise don't want to run the docker daemon outside a VM, you can use Vagrant to run a development environment. You'll probably need to install VirtualBox too, for Vagrant to run VMs in.
First, check out the code:
$ git clone https://github.com/weaveworks/weave
$ cd weave
The Vagrantfile in the top directory constructs a VM that has
- docker installed
- go tools installed
- weave dependencies installed
- $GOPATH set to ~
- the local working directory mapped as a synced folder into the right place in $GOPATH
Once you are in the working directory you can issue
$ vagrant up
and wait for a while (don't worry, the long download and package
installation is done just once). The working directory is sync'ed with
~/src/github.com/weaveworks/weave on the VM, so you can edit files and
use git and so on in the regular filesystem.
To build and run the code, you need to use the VM. To log in and build the weave image, do
$ vagrant ssh
vm$ cd src/github.com/weaveworks/weave
vm$ make
The docker daemon is also running in this VM, so you can then do
vm$ sudo ./weave launch
vm$ sudo docker ps
and so on.
If you are looking to just do a build and not run anything on this VM, you can do so with
$ vagrant ssh -c 'make -C src/github.com/weaveworks/weave'
you should then find container snapshot tarballs in the top-level
directory. You can use these snapshots with docker load against a
different host, e.g.
$ export DOCKER_HOST=tcp://<HOST:PORT>
$ docker load < weave.tar
$ docker load < weavedns.tar
$ docker load < weaveexec.tar
You can provide extra Vagrant configuration by putting a file
Vagrant.local in the same place as Vagrantfile; for instance, to
forward additional ports.