91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| 
								 | 
							
								#!/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 "$@"
							 |