provision.sh 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. #!/bin/bash
  2. APT_SOURCES_LST="/etc/apt/sources.list.d/"
  3. DEVEL_DIR="/opt/devel"
  4. WGET="wget"
  5. RABBITMQCTL="rabbitmqctl"
  6. RABBITMQ_APT_URL="http://www.rabbitmq.com/debian/"
  7. RABBITMQ_APT_VER="testing main"
  8. RABBITMQ_APT_KEY="https://www.rabbitmq.com/rabbitmq-signing-key-public.asc"
  9. RABBITMQ_DEB="rabbitmq-server"
  10. RABBITMQ_USERNAME="testing"
  11. RABBITMQ_PASSWORD="t3s71ng"
  12. RABBITMQ_VHOST="/testing"
  13. REDIS_DEB="redis-server"
  14. REDIS_CONF="/etc/redis/redis.conf"
  15. GIT_ROOT="${DEVEL_DIR}"
  16. GITHUB_ROOT="https://github.com/"
  17. CELERY_GITHUB_USER="celery"
  18. CELERY_USER="celery"
  19. CELERY_GROUP="celery"
  20. CELERY_DIR="${GIT_ROOT}/celery"
  21. CELERY_FUNTESTS="${CELERY_DIR}/funtests/stress"
  22. CELERY_CONFIG_SRC="${CELERY_FUNTESTS}/run/provision/celeryd-init.config"
  23. CELERY_CONFIG_DST="/etc/default/celeryd"
  24. STRESS_DIR="${GIT_ROOT}/stress"
  25. die () {
  26. echo $*
  27. exit 1
  28. }
  29. # --- grent
  30. add_real_user () {
  31. user_shell=${3:-/bin/bash}
  32. addgroup $2
  33. echo creating user "$1 group='$2' shell='${user_shell}'"
  34. echo | adduser -q "$1" --shell="${user_shell}" \
  35. --ingroup="$2" \
  36. --disabled-password 1>/dev/null 2>&1
  37. id "$1" || die "Not able to create user"
  38. }
  39. # --- system
  40. make_directories () {
  41. mkdir -p "${DEVEL_DIR}"
  42. }
  43. enable_bash_vi_mode () {
  44. echo "set -o vi" >> /etc/bash.bashrc
  45. }
  46. configure_system () {
  47. make_directories
  48. enable_bash_vi_mode
  49. }
  50. # --- apt
  51. apt_update() {
  52. apt-get update
  53. }
  54. add_apt_source () {
  55. echo "deb $1" >> "${APT_SOURCES_LST}/rabbitmq.list"
  56. }
  57. add_apt_key() {
  58. "$WGET" --quiet -O - "$1" | apt-key add -
  59. }
  60. apt_install () {
  61. apt-get install -y "$1"
  62. }
  63. # --- rabbitmq
  64. rabbitmq_add_user () {
  65. "$RABBITMQCTL" add_user "$1" "$2"
  66. }
  67. rabbitmq_add_vhost () {
  68. "$RABBITMQCTL" add_vhost "$1"
  69. }
  70. rabbitmq_set_perm () {
  71. "$RABBITMQCTL" set_permissions -p $1 $2 '.*' '.*' '.*'
  72. }
  73. install_rabbitmq() {
  74. add_apt_source "${RABBITMQ_APT_URL} ${RABBITMQ_APT_VER}"
  75. add_apt_key "${RABBITMQ_APT_KEY}"
  76. apt_update
  77. apt_install "${RABBITMQ_DEB}"
  78. rabbitmq_add_user "${RABBITMQ_USERNAME}" "${RABBITMQ_PASSWORD}"
  79. rabbitmq_add_vhost "${RABBITMQ_VHOST}"
  80. rabbitmq_set_perm "${RABBITMQ_VHOST}" "${RABBITMQ_USERNAME}"
  81. }
  82. # --- redis
  83. restart_redis () {
  84. service redis-server restart
  85. }
  86. install_redis () {
  87. apt_install "${REDIS_DEB}"
  88. sed -i 's/^bind .*$/#bind 127.0.0.1/' "${REDIS_CONF}"
  89. restart_redis
  90. }
  91. # --- git
  92. install_git () {
  93. apt_install git
  94. }
  95. github_clone () {
  96. mkdir "${CELERY_DIR}"
  97. chown "${CELERY_USER}" "${CELERY_DIR}"
  98. (cd "${GIT_ROOT}"; sudo -u celery git clone "${GITHUB_ROOT}/${1}/${2}")
  99. }
  100. # --- pip
  101. pip_install () {
  102. pip install -U "$1"
  103. }
  104. install_pip () {
  105. apt_install python-setuptools
  106. easy_install pip
  107. pip_install virtualenv
  108. apt_install python-dev
  109. pip_install setproctitle
  110. }
  111. # --- celery
  112. restart_celery () {
  113. service celeryd restart
  114. }
  115. install_celery_service () {
  116. cp "${CELERY_DIR}/extra/generic-init.d/celeryd" /etc/init.d/
  117. chmod +x "/etc/init.d/celeryd"
  118. update-rc.d celeryd defaults
  119. echo "cp \'${CELERY_CONFIG_SRC}\' \'${CELERY_CONFIG_DST}'"
  120. cp "${CELERY_CONFIG_SRC}" "${CELERY_CONFIG_DST}"
  121. update-rc.d celeryd enable
  122. restart_celery
  123. }
  124. install_celery () {
  125. pip_install celery
  126. add_real_user "${CELERY_USER}" "${CELERY_GROUP}"
  127. echo github_clone "'${CELERY_GITHUB_USER}'" "'celery'"
  128. github_clone "${CELERY_GITHUB_USER}" celery
  129. (cd ${CELERY_DIR}; pip install -r requirements/dev.txt);
  130. (cd ${CELERY_DIR}; python setup.py develop);
  131. }
  132. install_stress () {
  133. mkdir "${STRESS_DIR}"
  134. chown "${CELERY_USER}" "${STRESS_DIR}"
  135. cp -r ${CELERY_DIR}/funtests/stress/* "${STRESS_DIR}/"
  136. }
  137. # --- MAIN
  138. provision () {
  139. apt_update
  140. configure_system
  141. apt_install powertop
  142. apt_install htop
  143. install_git
  144. install_rabbitmq
  145. install_redis
  146. install_pip
  147. install_celery
  148. install_stress
  149. install_celery_service
  150. }
  151. provision