0036e2a747
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.
91 lines
1.8 KiB
Bash
Executable File
91 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# A script to build and run the Swarm development environment using Docker.
|
|
|
|
set -e
|
|
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
|
|
# DEFAULT_NAME is the default name for the Docker image and container
|
|
DEFAULT_NAME="swarm-dev"
|
|
|
|
usage() {
|
|
cat >&2 <<USAGE
|
|
usage: $0 [options]
|
|
|
|
Build and run the Swarm development environment.
|
|
|
|
Depends on Docker being installed locally.
|
|
|
|
OPTIONS:
|
|
-n, --name NAME Docker image and container name [default: ${DEFAULT_NAME}]
|
|
-d, --docker-args ARGS Custom args to pass to 'docker run' (e.g. '-p 8000:8000' to expose a port)
|
|
-h, --help Show this message
|
|
USAGE
|
|
}
|
|
|
|
main() {
|
|
local name="${DEFAULT_NAME}"
|
|
local docker_args=""
|
|
parse_args "$@"
|
|
build_image
|
|
run_image
|
|
}
|
|
|
|
parse_args() {
|
|
while true; do
|
|
case "$1" in
|
|
-h | --help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
-n | --name)
|
|
if [[ -z "$2" ]]; then
|
|
echo "ERROR: --name flag requires an argument" >&2
|
|
exit 1
|
|
fi
|
|
name="$2"
|
|
shift 2
|
|
;;
|
|
-d | --docker-args)
|
|
if [[ -z "$2" ]]; then
|
|
echo "ERROR: --docker-args flag requires an argument" >&2
|
|
exit 1
|
|
fi
|
|
docker_args="$2"
|
|
shift 2
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [[ $# -ne 0 ]]; then
|
|
usage
|
|
echo "ERROR: invalid arguments" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
build_image() {
|
|
docker build --tag "${name}" "${ROOT}/swarm/dev"
|
|
}
|
|
|
|
run_image() {
|
|
exec docker run \
|
|
--privileged \
|
|
--interactive \
|
|
--tty \
|
|
--rm \
|
|
--hostname "${name}" \
|
|
--name "${name}" \
|
|
--volume "${ROOT}:/go/src/github.com/ethereum/go-ethereum" \
|
|
--volume "/var/run/docker.sock:/var/run/docker.sock" \
|
|
${docker_args} \
|
|
"${name}" \
|
|
/bin/bash
|
|
}
|
|
|
|
main "$@"
|