setup_docker_worker_node.sh 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #!/usr/bin/env bash
  2. # Copyright IBM Corp, All Rights Reserved.
  3. #
  4. # SPDX-License-Identifier: Apache-2.0
  5. #
  6. # This script will help setup Docker at a server, then the server can be used as a worker node.
  7. # Detecting whether can import the header file to render colorful cli output
  8. if [ -f ../header.sh ]; then
  9. source ../header.sh
  10. elif [ -f scripts/header.sh ]; then
  11. source scripts/header.sh
  12. else
  13. echo_r() {
  14. echo "$@"
  15. }
  16. echo_g() {
  17. echo "$@"
  18. }
  19. echo_b() {
  20. echo "$@"
  21. }
  22. fi
  23. # collect ID from /etc/os-release as distribution name
  24. # tested on debian,ubuntu,mint , centos,fedora ,opensuse
  25. get_distribution() {
  26. distribution="Unknown"
  27. while read -r line
  28. do
  29. element=$(echo $line | cut -f1 -d=)
  30. if [ "$element" = "ID" ]
  31. then
  32. distribution=$(echo $line | cut -f2 -d=)
  33. fi
  34. done < "/etc/os-release"
  35. echo "${distribution//\"}"
  36. }
  37. # Install necessary software including curl, python-pip, tox, docker
  38. install_software() {
  39. case $DISTRO in
  40. ubuntu)
  41. command -v docker >/dev/null 2>&1 || { echo_r >&2 "No docker-engine found, try installing"; curl -sSL https://get.docker.com/ | sh; sudo service docker restart; }
  42. command -v docker-compose >/dev/null 2>&1 || { echo_r >&2 "No docker-compose found, try installing"; sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose; sudo chmod +x /usr/local/bin/docker-compose; }
  43. ;;
  44. linuxmint)
  45. sudo apt-get install apt-transport-https ca-certificates -y
  46. sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  47. sudo echo deb https://apt.dockerproject.org/repo ubuntu-xenial main >> /etc/apt/sources.list.d/docker.list
  48. sudo apt-get update
  49. sudo apt-get purge lxc-docker
  50. sudo apt-get install python-pip
  51. sudo apt-get install linux-image-extra-$(uname -r) -y
  52. sudo apt-get install docker-engine cgroup-lite apparmor -y
  53. sudo service docker start
  54. ;;
  55. debian)
  56. sudo apt-get install apt-transport-https ca-certificates -y
  57. sudo sh -c "echo deb https://apt.dockerproject.org/repo debian-jessie main > /etc/apt/sources.list.d/docker.list"
  58. sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
  59. sudo apt-get update
  60. sudo apt-cache policy docker-engine
  61. sudo apt-get install docker-engine curl python-pip -y
  62. sudo service docker start
  63. ;;
  64. centos)
  65. sudo yum install -y epel-release yum-utils
  66. sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  67. sudo yum makecache fast
  68. sudo yum update && sudo yum install -y docker-ce python-pip
  69. sudo systemctl enable docker
  70. sudo systemctl start docker
  71. ;;
  72. fedora)
  73. sudo dnf -y update
  74. sudo dnf -y install docker python-pip --allowerasing
  75. sudo systemctl enable docker
  76. sudo systemctl start docker
  77. ;;
  78. opensuse)
  79. sudo zypper refresh
  80. sudo zypper install docker docker-compose python-pip
  81. sudo systemctl restart docker
  82. ;;
  83. *)
  84. echo "Linux distribution not identified !!! skipping docker & pip installation"
  85. ;;
  86. esac
  87. }
  88. # pull fabric images
  89. #bash ./download_images.sh
  90. ARTIFACTS_DIR=/opt/cello
  91. USER=`whoami`
  92. USERGROUP=`id -gn`
  93. DISTRO=$(get_distribution)
  94. MASTER_NODE_IP=192.168.64.5
  95. echo_b "Check docker-engine for $DISTRO"
  96. NEED_INSTALL="false"
  97. for software in docker docker-compose; do
  98. command -v ${software} >/dev/null 2>&1 || { NEED_INSTALL="true"; break; }
  99. done
  100. [ $NEED_INSTALL = "true" ] && install_software
  101. echo_b "Add existing user ${USER} to docker group"
  102. sudo usermod -aG docker ${USER}
  103. if [ `sudo docker ps -qa|wc -l` -gt 0 ]; then
  104. echo_r "Warn: existing containers may cause unpredictable failure, suggest to clean them (docker rm)"
  105. docker ps -a
  106. fi
  107. echo_b "Checking local artifacts path ${ARTIFACTS_DIR}..."
  108. [ ! -d ${ARTIFACTS_DIR} ] \
  109. && echo_r "Local artifacts path ${ARTIFACTS_DIR} not existed, creating one" \
  110. && sudo mkdir -p ${ARTIFACTS_DIR} \
  111. && sudo chown -R ${USER}:${USERGROUP} ${ARTIFACTS_DIR}
  112. echo_b "Mount NFS Server ${MASTER_NODE_IP}"
  113. sudo mount -t nfs -o vers=4,loud ${MASTER_NODE_IP}:/ ${ARTIFACTS_DIR}
  114. if [ $? != 0 ]; then
  115. echo_r "Mount failed"
  116. exit 1
  117. fi
  118. echo_b "Setup ip forward rules"
  119. sudo sysctl -w net.ipv4.ip_forward=1
  120. echo_g "Setup done"