provision.sh 3.7 KB

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