provision.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. #!/bin/bash
  2. echo "------------ HELLO ---------------"
  3. APT_SOURCES_LST="/etc/apt/sources.list.d/"
  4. DEVEL_DIR="/opt/devel"
  5. WGET="wget"
  6. RABBITMQCTL="rabbitmqctl"
  7. RABBITMQ_APT_URL="http://www.rabbitmq.com/debian/"
  8. RABBITMQ_APT_VER="testing main"
  9. RABBITMQ_APT_KEY="https://www.rabbitmq.com/rabbitmq-signing-key-public.asc"
  10. RABBITMQ_DEB="rabbitmq-server"
  11. RABBITMQ_USERNAME="testing"
  12. RABBITMQ_PASSWORD="t3s71ng"
  13. RABBITMQ_VHOST="/testing"
  14. REDIS_DEB="redis-server"
  15. REDIS_CONF="/etc/redis/redis.conf"
  16. GIT_ROOT="${DEVEL_DIR}"
  17. GITHUB_ROOT="https://github.com/"
  18. CELERY_GITHUB_USER="celery"
  19. CELERY_USER="celery"
  20. CELERY_GROUP="celery"
  21. CELERY_DIR="${GIT_ROOT}/celery"
  22. CELERY_FUNTESTS="${CELERY_DIR}/funtests/stress"
  23. CELERY_CONFIG_SRC="${CELERY_FUNTESTS}/run/provision/celeryd-init.config"
  24. CELERY_CONFIG_DST="/etc/default/celeryd"
  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. for_user_makedir () {
  40. mkdir "$2"
  41. chown "$1" "$2"
  42. chmod 0755 "$2"
  43. }
  44. # --- directories
  45. make_directories () {
  46. mkdir -p "${DEVEL_DIR}"
  47. }
  48. # --- apt
  49. apt_update() {
  50. apt-get update
  51. }
  52. add_apt_source () {
  53. echo "deb $1" >> "${APT_SOURCES_LST}/rabbitmq.list"
  54. }
  55. add_apt_key() {
  56. "$WGET" --quiet -O - "$1" | apt-key add -
  57. }
  58. apt_install () {
  59. apt-get install -y "$1"
  60. }
  61. # --- rabbitmq
  62. rabbitmq_add_user () {
  63. "$RABBITMQCTL" add_user "$1" "$2"
  64. }
  65. rabbitmq_add_vhost () {
  66. "$RABBITMQCTL" add_vhost "$1"
  67. }
  68. rabbitmq_set_perm () {
  69. "$RABBITMQCTL" set_permissions -p $1 $2 '.*' '.*' '.*'
  70. }
  71. install_rabbitmq() {
  72. add_apt_source "${RABBITMQ_APT_URL} ${RABBITMQ_APT_VER}"
  73. add_apt_key "${RABBITMQ_APT_KEY}"
  74. apt_update
  75. apt_install "${RABBITMQ_DEB}"
  76. rabbitmq_add_user "${RABBITMQ_USERNAME}" "${RABBITMQ_PASSWORD}"
  77. rabbitmq_add_vhost "${RABBITMQ_VHOST}"
  78. rabbitmq_set_perm "${RABBITMQ_VHOST}" "${RABBITMQ_USERNAME}"
  79. }
  80. # --- redis
  81. restart_redis () {
  82. service redis-server restart
  83. }
  84. install_redis () {
  85. apt_install "${REDIS_DEB}"
  86. sed -i 's/^bind .*$/#bind 127.0.0.1/' "${REDIS_CONF}"
  87. restart_redis
  88. }
  89. # --- git
  90. install_git () {
  91. apt_install git
  92. }
  93. github_clone () {
  94. (cd "${GIT_ROOT}"; git clone "${GITHUB_ROOT}/${1}/${2}")
  95. chown "${CELERY_USER}" "${CELERY_DIR}"
  96. ls -l /opt/devel/celery
  97. }
  98. # --- pip
  99. pip_install () {
  100. pip install -U "$1"
  101. }
  102. install_pip () {
  103. apt_install python-setuptools
  104. easy_install pip
  105. pip_install virtualenv
  106. }
  107. # --- celery
  108. restart_celery () {
  109. service celeryd restart
  110. }
  111. install_celery_service () {
  112. cp "${CELERY_DIR}/extra/generic-init.d/celeryd" /etc/init.d/
  113. chmod +x "/etc/init.d/celeryd"
  114. update-rc.d celeryd defaults
  115. cp "${CELERY_CONFIG_SRC}" "${CELERY_CONFIG_DEST}"
  116. update-rc.d celeryd enable
  117. restart_celery
  118. }
  119. install_celery () {
  120. pip_install celery
  121. add_real_user "${CELERY_USER}" "${CELERY_GROUP}"
  122. echo github_clone "'${CELERY_GITHUB_USER}'" "'celery'"
  123. github_clone "${CELERY_GITHUB_USER}" celery
  124. (cd ${CELERY_DIR}; pip install -r requirements/dev.txt);
  125. (cd ${CELERY_DIR}; python setup.py develop);
  126. install_celery_service
  127. }
  128. # --- MAIN
  129. provision () {
  130. make_directories
  131. apt_update
  132. install_git
  133. install_rabbitmq
  134. install_redis
  135. install_pip
  136. install_celery
  137. }
  138. provision