PageRenderTime 58ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/setup-debian8.sh

https://gitlab.com/yelworc/eleven-vagrant
Shell | 271 lines | 154 code | 71 blank | 46 comment | 40 complexity | 75d391078fef988dd553cefdbbea5615 MD5 | raw file
  1. #!/bin/sh
  2. set -e
  3. webapp_db_password=eleventest01
  4. rethinkdb_password=test123
  5. echo "::: Installing packages..."
  6. # make apt retry package download attempts (httpredir.debian.org appears to be quite flaky)
  7. echo "APT::Acquire::Retries \"20\";" > /etc/apt/apt.conf
  8. # make apt use default options instead of interactive prompts
  9. export DEBIAN_FRONTEND=noninteractive
  10. # prevent interactive service restart prompt during openssl package installation
  11. echo openssl libraries/restart-without-asking boolean true | debconf-set-selections
  12. # make MySQL installation set custom root password
  13. echo mysql-server-5.5 mysql-server/root_password password $webapp_db_password | debconf-set-selections
  14. echo mysql-server-5.5 mysql-server/root_password_again password $webapp_db_password | debconf-set-selections
  15. # update apt sources (adding RethinkDB PPA, and non-free for the flash plugin)
  16. echo "deb http://download.rethinkdb.com/apt jessie main" > /etc/apt/sources.list.d/rethinkdb.list
  17. wget -qO- http://download.rethinkdb.com/apt/pubkey.gpg | apt-key add -
  18. cat <<EOF > /etc/apt/sources.list.d/contrib-nonfree.list
  19. deb http://http.us.debian.org/debian jessie contrib non-free
  20. deb-src http://http.us.debian.org/debian jessie contrib non-free
  21. deb http://security.debian.org/ jessie/updates non-free
  22. deb-src http://security.debian.org/ jessie/updates non-free
  23. # jessie-updates, previously known as 'volatile'
  24. deb http://http.us.debian.org/debian jessie-updates contrib non-free
  25. deb-src http://http.us.debian.org/debian jessie-updates contrib non-free
  26. deb http://ftp.us.debian.org/debian jessie-backports contrib non-free
  27. EOF
  28. apt-get update
  29. apt-get upgrade -f -y -q
  30. # install all the things
  31. apt-get install -f -y -q build-essential git-core curl openssl libssl-dev git \
  32. strace valgrind htop screen vim emacs python python-pip python-dev python3-dev \
  33. python3-pip python3-pkg-resources python3-setuptools dos2unix nodejs \
  34. nodejs-legacy rethinkdb=2.3.5~0jessie nginx php5-fpm php5-cli php5-mcrypt \
  35. mysql-server php5-mysql libsqlite3-dev ruby ruby-dev unzip rabbitmq-server \
  36. xvfb arora joe dsniff debconf-utils apt-show-versions netcat libnotify-bin
  37. # set up flash plugin and RabbitMQ for the spritesheet generator
  38. apt-get install -y flashplugin-nonfree > /dev/null 2>&1
  39. # workaround for the broken Debian flashplugin-nonfree package
  40. # see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=851066
  41. wget -q -P /tmp "https://fpdownload.adobe.com/get/flashplayer/pdc/28.0.0.161/flash_player_npapi_linux.x86_64.tar.gz"
  42. tar zxfO /tmp/flash_player_npapi_linux.x86_64.tar.gz \
  43. libflashplayer.so > /usr/lib/flashplugin-nonfree/libflashplayer.so
  44. chmod 644 /usr/lib/flashplugin-nonfree/libflashplayer.so
  45. update-alternatives --install /usr/lib/mozilla/plugins/flash-mozilla.so \
  46. flash-mozilla.so /usr/lib/flashplugin-nonfree/libflashplayer.so 50
  47. rabbitmq-plugins enable rabbitmq_management
  48. /etc/init.d/rabbitmq-server restart
  49. echo "::: Installing nvm, node, npm and some global packages"
  50. # install nvm for user vagrant
  51. su -l vagrant -c "curl -s -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash"
  52. # set node v6 as default node version for user vagrant
  53. su -l vagrant -c "(. ~/.nvm/nvm.sh && nvm install 6 2> /dev/null && nvm alias default 6)"
  54. # install some useful npm packages globally
  55. su -l vagrant -c "(. ~/.nvm/nvm.sh && npm install -g bunyan mocha json gulp)"
  56. echo "::: Installing and setting up RethinkDB..."
  57. # add RethinkDB Python driver (for command line tools)
  58. pip3 install rethinkdb==2.3.0
  59. # set up RethinkDB as systemd service
  60. # see http://www.rethinkdb.com/docs/start-on-startup/
  61. echo "d /run/rethinkdb 0755 rethinkdb rethinkdb -" > /usr/lib/tmpfiles.d/rethinkdb.conf
  62. chmod 644 /usr/lib/tmpfiles.d/rethinkdb.conf
  63. mkdir -p /usr/lib/systemd/system
  64. cp /vagrant/eleven-vagrant/rethinkdb@.service /usr/lib/systemd/system/
  65. chmod 644 /usr/lib/systemd/system/rethinkdb@.service
  66. # initialize data and pid file directories
  67. mkdir -p /var/lib/rethinkdb
  68. rethinkdb create -d /var/lib/rethinkdb/eleven
  69. chown -R rethinkdb:rethinkdb /var/lib/rethinkdb
  70. mkdir -p /var/run/rethinkdb
  71. chown -R rethinkdb:rethinkdb /var/run/rethinkdb
  72. # configure RethinkDB instance and start it up
  73. cp /vagrant/eleven-vagrant/rethinkdb.conf /etc/rethinkdb/instances.d/eleven.conf
  74. systemctl enable rethinkdb@eleven
  75. systemctl start rethinkdb@eleven
  76. echo "Waiting for RethinkDB startup..."
  77. while ! nc -z -w 1 localhost 28015; do sleep 1; done
  78. # set admin password and make it available for fixtures management scripts
  79. python3 -c "import rethinkdb as r;\
  80. conn = r.connect(host='localhost', port=28015);\
  81. r.db('rethinkdb').table('users').get('admin').update({'password': '$rethinkdb_password'}).run(conn)"
  82. echo $rethinkdb_password > /root/.rethinkdbpw
  83. echo $rethinkdb_password > /home/vagrant/.rethinkdbpw
  84. chown vagrant:vagrant /home/vagrant/.rethinkdbpw
  85. echo "::: Importing Eleven fixtures into RethinkDB..."
  86. (cd /vagrant/eleven-fixtures-rdb && ./rdb-import.sh --dbname=eleven_dev --from=rdb-fixtures --noprogress)
  87. echo "::: (Re)building binary modules for Eleven node.js components..."
  88. if [ -d /vagrant/eleven-throwaway-server ]; then
  89. su -l vagrant -c "(. ~/.nvm/nvm.sh && cd /vagrant/eleven-throwaway-server/ && nvm install 2> /dev/null && npm rebuild --no-bin-links)"
  90. fi
  91. if [ -d /vagrant/eleven-server ]; then
  92. su -l vagrant -c "(. ~/.nvm/nvm.sh && cd /vagrant/eleven-server/ && nvm install 2> /dev/null && npm install --no-bin-links --no-progress)"
  93. su -l vagrant -c "(. ~/.nvm/nvm.sh && cd /vagrant/eleven-server/ && npm -s run preproc)"
  94. if [ ! -f /vagrant/eleven-server/config_local.js ]; then
  95. cp /vagrant/eleven-server/config_local.js.SAMPLE_VAGRANT /vagrant/eleven-server/config_local.js
  96. fi
  97. fi
  98. if [ -d /vagrant/eleven-http-api ]; then
  99. su -l vagrant -c "(. ~/.nvm/nvm.sh && cd /vagrant/eleven-http-api/ && nvm install 2> /dev/null && npm install --no-bin-links --no-progress)"
  100. if [ ! -f /vagrant/eleven-http-api/config/local.json ]; then
  101. cp /vagrant/eleven-http-api/config/local.json.SAMPLE_VAGRANT /vagrant/eleven-http-api/config/local.json
  102. fi
  103. fi
  104. echo "::: Setting up local asset server..."
  105. # nginx setup for assets server
  106. cp /vagrant/eleven-vagrant/nginx-assets /etc/nginx/sites-available/assets
  107. ln -s /etc/nginx/sites-available/assets /etc/nginx/sites-enabled
  108. echo "::: Setting up spritesheet generator..."
  109. if [ -d /vagrant/eleven-spritesheet-generator ]; then
  110. pip install virtualenv
  111. su -l vagrant -c "(cd /vagrant/eleven-spritesheet-generator && virtualenv venv --always-copy && source venv/bin/activate && pip install .)"
  112. if [ ! -f /vagrant/eleven-spritesheet-generator/config.py ]; then
  113. cp /vagrant/eleven-spritesheet-generator/config.py.sample /vagrant/eleven-spritesheet-generator/config.py
  114. fi
  115. # set up as systemd service
  116. cp /vagrant/eleven-spritesheet-generator/deploy/eleven-spritesheet-generator.service.VAGRANT /usr/lib/systemd/system/eleven-spritesheet-generator.service
  117. chmod 644 /usr/lib/systemd/system/eleven-spritesheet-generator.service
  118. systemctl enable eleven-spritesheet-generator
  119. systemctl start eleven-spritesheet-generator
  120. fi
  121. echo "::: Running Webapp Setup..."
  122. # copy configuration files for nginx and PHP, and the local environment settings for the webapp
  123. cp /vagrant/eleven-vagrant/nginx-webapp /etc/nginx/sites-available/webapp
  124. ln -s /etc/nginx/sites-available/webapp /etc/nginx/sites-enabled
  125. cp /vagrant/eleven-vagrant/php.ini /etc/php5/fpm/php.ini
  126. [ ! -f /vagrant/eleven-web/.env ] && cp /vagrant/eleven-web/.env.example /vagrant/eleven-web/.env
  127. # Disable "sendfile" in nginx - apparently it causes problems when running in
  128. # Vagrant/VirtualBox, causing encoding issues that make it seem that your
  129. # CSS/JS/static file changes are permanently stuck in cache.
  130. #
  131. # Info about this issue: http://jeremyfelt.com/code/2013/01/08/clear-nginx-cache-in-vagrant/
  132. sed -i 's/sendfile on/sendfile off/g' /etc/nginx/nginx.conf
  133. # restart nginx and php5-fpm
  134. rm /etc/nginx/sites-enabled/default
  135. /usr/sbin/service php5-fpm restart
  136. /usr/sbin/service nginx restart
  137. mkdir -p /var/eleven/eleven-web/cache
  138. mkdir -p /var/eleven/eleven-web/logs
  139. mkdir -p /var/eleven/eleven-web/meta
  140. mkdir -p /var/eleven/eleven-web/sessions
  141. mkdir -p /var/eleven/eleven-web/views
  142. chown -R www-data.www-data /var/eleven/eleven-web
  143. # install Composer (PHP package manager)
  144. curl -sS https://getcomposer.org/installer | php
  145. mv composer.phar /usr/local/bin/composer
  146. # run composer to install the Laravel framework and other webapp dependencies
  147. (cd /vagrant/eleven-web/ && composer install --prefer-source --no-interaction --no-progress)
  148. # setup webapp database
  149. mysql -u root -p$webapp_db_password -e 'CREATE DATABASE elevenweb;'
  150. mysql -u root -p$webapp_db_password -e "CREATE USER 'eleven'@'localhost' IDENTIFIED BY 'eleventest@'"
  151. mysql -u root -p$webapp_db_password -e "GRANT ALL PRIVILEGES ON *.* TO 'eleven'@'localhost'"
  152. # populate webapp database - run migrations and load initial data
  153. (cd /vagrant/eleven-web/ && php artisan migrate)
  154. (cd /vagrant/eleven-web/ && php artisan db:seed)
  155. (cd /vagrant/eleven-web/ && php artisan db:seed --class=DevAccountsSeeder)
  156. # set permissions and give the webserver access to the eleven-web folder
  157. usermod -a -G vagrant www-data
  158. chmod -R 777 /vagrant/eleven-web/storage/
  159. # run gulp to process assets
  160. su -l vagrant -c "(. ~/.nvm/nvm.sh && cd /vagrant/eleven-web/ && npm install --no-bin-links --no-progress ; npm install --no-bin-links --no-progress && npm rebuild --no-bin-links --no-progress)"
  161. su -l vagrant -c "(. ~/.nvm/nvm.sh && cd /vagrant/eleven-web/ && gulp --production)"
  162. echo "::: Setting up Vanilla Forum..."
  163. # Vanilla core
  164. mkdir -p /var/www/forum
  165. git clone https://github.com/vanilla/vanilla.git -b Vanilla_2.1.13p1 --single-branch --depth 1 -c advice.detachedHead=false /var/www/forum
  166. # jsConnect plugin
  167. wget -q -P /var/www/forum/plugins http://cdn.vanillaforums.com/www.vanillaforums.org/addons/2748HPRKK41Y.zip
  168. unzip /var/www/forum/plugins/2748HPRKK41Y.zip -d /var/www/forum/plugins
  169. # jsConnect auto-signin plugin
  170. wget -q -P /var/www/forum/plugins http://cdn.vanillaforums.com/www.vanillaforums.org/addons/EEUMKPCDYY38.zip
  171. unzip /var/www/forum/plugins/EEUMKPCDYY38.zip -d /var/www/forum/plugins
  172. # Copy forum theme
  173. if [ -d /vagrant/eleven-forum-theme ]; then
  174. rsync -r --exclude=.git* /vagrant/eleven-forum-theme/ /var/www/forum/themes/eleven
  175. fi
  176. # Copy config
  177. cp /vagrant/eleven-vagrant/vanilla-config.php /var/www/forum/conf/config.php
  178. # Set permissions for forum
  179. chmod -R 777 /var/www/forum/conf
  180. chmod -R 777 /var/www/forum/uploads
  181. chmod -R 777 /var/www/forum/cache
  182. # Set up test forum DB
  183. mysql -u root -p$webapp_db_password -e 'CREATE DATABASE elevenforum;'
  184. mysql -u root -p$webapp_db_password < /vagrant/eleven-vagrant/eleven-forum-testdata.sql
  185. echo "::: Setting up MailCatcher (local email testing tool)..."
  186. # install MailCatcher (for testing outbound emails)
  187. gem install mailcatcher
  188. echo "::: Setting up monitoring components..."
  189. # set up statsd, graphite and collectd
  190. /vagrant/eleven-vagrant/add-statsd-graphite-collectd.sh
  191. echo "::: Putting on the finishing touches..."
  192. /usr/bin/updatedb
  193. # source optional shell profile customization in .profile
  194. cat >> /home/vagrant/.profile <<EOF
  195. # include personal profile from shared folder if there is one
  196. if [ -f "/vagrant/vagrant-profile.sh" ]; then
  197. . "/vagrant/vagrant-profile.sh"
  198. fi
  199. EOF
  200. echo "::: Eleven development VM setup completed!"