nertwork/frr-cookbook

View on GitHub
scripts/start_docker.sh

Summary

Maintainability
Test Coverage
#!/bin/bash

# Copied from:
# https://raw.githubusercontent.com/zuazo/kitchen-in-travis/master/scripts/start_docker.sh
#
# Installs and starts Docker Engine inside Travis CI using User Mode Linux
#

# Exit immediately if a simple command exits with a non-zero status
set -e

# Some travis bash functions
ANSI_RED="${ANSI_RED:-\e[31;1m}"
ANSI_YELLOW="${ANSY_YELLOW:-\e[33;1m}"
ANSI_RESET="${ANSI_RESET:-\e[0m}"
if ! type travis_fold &> /dev/null
then
  travis_fold() {
    local ACTION="${1}"
    local NAME="${2}"
    echo "${NAME} ${ACTION}"
    if [ x"${ACTION}" == x'end' ]
    then
      echo
    fi
  }
fi
if ! type travis_retry &> /dev/null
then
  travis_retry() {
    local RESULT=0
    local COUNT=1
    while [ "${COUNT}" -le 3 ]; do
      if [ "${RESULT}" -ne 0 ]
      then
        echo -e "\n${ANSI_RED}The command \"$@\" failed. Retrying, $COUNT of 3.${ANSI_RESET}\n" >&2
      fi
      "$@"
      RESULT="$?"
      [ "${RESULT}" -eq 0 ] && break
      COUNT="$(($COUNT + 1))"
      sleep 1
    done
    if [ $COUNT -gt 3 ]
    then
      echo -e "\n${ANSI_RED}The command \"$@\" failed 3 times.${ANSI_RESET}\n" >&2
    fi
    return $RESULT
 }
fi

travis_section() {
  echo -e "${ANSI_YELLOW}${*}${ANSI_RESET}"
}

# Define some environment variables
travis_fold start env.setup
  travis_section 'Setting environment variables for Docker'
  SLIRP_HOST="$(ip addr | awk '/scope global/ {print $2; exit}' | cut -d/ -f1)"
  SLIRP_MIN_PORT='2375'
  SLIRP_MAX_PORT='2400'
  SLIRP_PORTS="$(seq "${SLIRP_MIN_PORT}" "${SLIRP_MAX_PORT}")"
  DOCKER_HOST="tcp://${SLIRP_HOST}:${SLIRP_MIN_PORT}"
  DOCKER_PORT_RANGE="$((SLIRP_MIN_PORT+1)):${SLIRP_MAX_PORT}"
  export SLIRP_HOST DOCKER_HOST DOCKER_PORT_RANGE SLIRP_PORTS
  echo "SLIRP_HOST=${SLIRP_HOST}"
  echo "DOCKER_HOST=${DOCKER_HOST}"
  echo "DOCKER_PORT_RANGE=${DOCKER_PORT_RANGE}"
travis_fold end env.setup
echo

travis_fold start curl.install
  travis_section 'Installing cURL'
  sudo apt-get -y update
  sudo apt-get install -y ca-certificates curl
travis_fold end curl.install
echo

travis_fold start docker.repository.install
  travis_section 'Installing docker repository'
  curl https://get.docker.com/gpg | sudo apt-key add -
  echo 'deb https://get.docker.io/ubuntu docker main' | sudo tee /etc/apt/sources.list.d/docker.list
travis_fold end docker.repository.install
echo

travis_fold start apparmor.reinstall
  travis_section "Reinstalling AppArmor (Could not open 'tunables/global')"
  sudo apt-get -o Dpkg::Options::=--force-confnew -o Dpkg::Options::=--force-confmiss --reinstall install apparmor
travis_fold end apparmor.reinstall
echo

travis_fold start apt.policy.setup
  travis_section 'Preventing APT from starting any service'
  echo exit 101 | sudo tee /usr/sbin/policy-rc.d
  sudo chmod +x /usr/sbin/policy-rc.d
travis_fold end apt.policy.setup
echo

travis_fold start docker.install
  travis_section 'Installing Docker'
  sudo apt-get -y update
  sudo apt-get -y install lxc lxc-docker slirp
  sudo usermod -aG docker "${USER}"
  sudo service docker stop || true
travis_fold end docker.install
echo

travis_fold start uml.download
  travis_section 'Downloading User Mode Linux scripts'
  if ! [ -e sekexe ]
  then
    travis_retry git clone git://github.com/cptactionhank/sekexe
  fi
travis_fold end uml.download
echo

travis_fold start docker.start
  travis_section 'Starting Docker Engine'
  cat > run-uml.sh << EOF
sekexe/run "
  echo ${SLIRP_MIN_PORT} ${SLIRP_MAX_PORT} > /proc/sys/net/ipv4/ip_local_port_range && \\
  docker daemon -H tcp://0.0.0.0:${SLIRP_MIN_PORT}
"
EOF
  chmod +x run-uml.sh
  if [ "${DOCKER_DEBUG}"x = 'true'x ]
  then
    ./run-uml.sh 2>&1 | tee -a docker_daemon.log &
  else
    ./run-uml.sh &> docker_daemon.log &
  fi
travis_fold end docker.start
echo

travis_fold start docker.wait
  travis_section 'Waiting for Docker to start'
  TIME=0
  while ! docker info &> /dev/null
  do
    [ "${TIME}" -gt 60 ] && exit 1
    echo -n .
    sleep 1
    TIME="$((TIME+1))"
  done
travis_fold end docker.wait
echo

travis_section 'Docker version:'
docker version
echo