Skip to content

Commit 0036e2a

Browse files
lmarsfjl
authored andcommitted
swarm/dev: add development environment (#14332)
This PR adds a Swarm development environment which can be run in a Docker container and provides scripts for building binaries and running Swarm clusters.
1 parent 727eada commit 0036e2a

File tree

11 files changed

+726
-0
lines changed

11 files changed

+726
-0
lines changed

swarm/dev/.dockerignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
bin/*
2+
cluster/*

swarm/dev/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
bin/*
2+
cluster/*

swarm/dev/Dockerfile

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
FROM ubuntu:xenial
2+
3+
# install build + test dependencies
4+
RUN apt-get update && \
5+
apt-get install --yes --no-install-recommends \
6+
ca-certificates \
7+
curl \
8+
fuse \
9+
g++ \
10+
gcc \
11+
git \
12+
iproute2 \
13+
iputils-ping \
14+
less \
15+
libc6-dev \
16+
make \
17+
pkg-config \
18+
&& \
19+
apt-get clean
20+
21+
# install Go
22+
ENV GO_VERSION 1.8.1
23+
RUN curl -fSLo golang.tar.gz "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" && \
24+
tar -xzf golang.tar.gz -C /usr/local && \
25+
rm golang.tar.gz
26+
ENV GOPATH /go
27+
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
28+
29+
# install docker CLI
30+
RUN curl -fSLo docker.tar.gz https://get.docker.com/builds/Linux/x86_64/docker-17.04.0-ce.tgz && \
31+
tar -xzf docker.tar.gz -C /usr/local/bin --strip-components=1 docker/docker && \
32+
rm docker.tar.gz
33+
34+
# install jq
35+
RUN curl -fSLo /usr/local/bin/jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && \
36+
chmod +x /usr/local/bin/jq
37+
38+
# install govendor
39+
RUN go get -u github.com/kardianos/govendor
40+
41+
# add custom bashrc
42+
ADD bashrc /root/.bashrc

swarm/dev/Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.PHONY: build cluster test
2+
3+
default: build
4+
5+
build:
6+
go build -o bin/swarm github.com/ethereum/go-ethereum/cmd/swarm
7+
go build -o bin/geth github.com/ethereum/go-ethereum/cmd/geth
8+
go build -o bin/bootnode github.com/ethereum/go-ethereum/cmd/bootnode
9+
10+
cluster: build
11+
scripts/boot-cluster.sh
12+
13+
test:
14+
go test -v github.com/ethereum/go-ethereum/swarm/...

swarm/dev/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Swarm development environment
2+
=============================
3+
4+
The Swarm development environment is a Linux bash shell which can be run in a
5+
Docker container and provides a predictable build and test environment.
6+
7+
### Start the Docker container
8+
9+
Run the `run.sh` script to build the Docker image and run it, you will then be
10+
at a bash prompt inside the `swarm/dev` directory.
11+
12+
### Build binaries
13+
14+
Run `make` to build the `swarm`, `geth` and `bootnode` binaries into the
15+
`swarm/dev/bin` directory.
16+
17+
### Boot a cluster
18+
19+
Run `make cluster` to start a 3 node Swarm cluster, or run
20+
`scripts/boot-cluster.sh --size N` to boot a cluster of size N.

swarm/dev/bashrc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export ROOT="${GOPATH}/src/github.com/ethereum/go-ethereum"
2+
export PATH="${ROOT}/swarm/dev/bin:${PATH}"
3+
4+
cd "${ROOT}/swarm/dev"
5+
6+
cat <<WELCOME
7+
8+
=============================================
9+
10+
Welcome to the swarm development environment.
11+
12+
- Run 'make' to build the swarm, geth and bootnode binaries
13+
- Run 'make test' to run the swarm unit tests
14+
- Run 'make cluster' to start a swarm cluster
15+
- Run 'exit' to exit the development environment
16+
17+
See the 'scripts' directory for some useful scripts.
18+
19+
=============================================
20+
21+
WELCOME

swarm/dev/run.sh

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env bash
2+
#
3+
# A script to build and run the Swarm development environment using Docker.
4+
5+
set -e
6+
7+
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
8+
9+
# DEFAULT_NAME is the default name for the Docker image and container
10+
DEFAULT_NAME="swarm-dev"
11+
12+
usage() {
13+
cat >&2 <<USAGE
14+
usage: $0 [options]
15+
16+
Build and run the Swarm development environment.
17+
18+
Depends on Docker being installed locally.
19+
20+
OPTIONS:
21+
-n, --name NAME Docker image and container name [default: ${DEFAULT_NAME}]
22+
-d, --docker-args ARGS Custom args to pass to 'docker run' (e.g. '-p 8000:8000' to expose a port)
23+
-h, --help Show this message
24+
USAGE
25+
}
26+
27+
main() {
28+
local name="${DEFAULT_NAME}"
29+
local docker_args=""
30+
parse_args "$@"
31+
build_image
32+
run_image
33+
}
34+
35+
parse_args() {
36+
while true; do
37+
case "$1" in
38+
-h | --help)
39+
usage
40+
exit 0
41+
;;
42+
-n | --name)
43+
if [[ -z "$2" ]]; then
44+
echo "ERROR: --name flag requires an argument" >&2
45+
exit 1
46+
fi
47+
name="$2"
48+
shift 2
49+
;;
50+
-d | --docker-args)
51+
if [[ -z "$2" ]]; then
52+
echo "ERROR: --docker-args flag requires an argument" >&2
53+
exit 1
54+
fi
55+
docker_args="$2"
56+
shift 2
57+
;;
58+
*)
59+
break
60+
;;
61+
esac
62+
done
63+
64+
if [[ $# -ne 0 ]]; then
65+
usage
66+
echo "ERROR: invalid arguments" >&2
67+
exit 1
68+
fi
69+
}
70+
71+
build_image() {
72+
docker build --tag "${name}" "${ROOT}/swarm/dev"
73+
}
74+
75+
run_image() {
76+
exec docker run \
77+
--privileged \
78+
--interactive \
79+
--tty \
80+
--rm \
81+
--hostname "${name}" \
82+
--name "${name}" \
83+
--volume "${ROOT}:/go/src/github.com/ethereum/go-ethereum" \
84+
--volume "/var/run/docker.sock:/var/run/docker.sock" \
85+
${docker_args} \
86+
"${name}" \
87+
/bin/bash
88+
}
89+
90+
main "$@"

0 commit comments

Comments
 (0)