#!/bin/bash set -e GEM_CACHE_DIR="${SETUP_DIR}/cache" # add golang1.5 ppa apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv B0B8B106A0CA2F79FBB616DBA65E2E5D742A38EE echo "deb http://ppa.launchpad.net/evarlast/golang1.5/ubuntu trusty main" >> /etc/apt/sources.list # rebuild apt cache apt-get update # install build dependencies for gem installation apt-get install -y gcc g++ make patch pkg-config cmake paxctl \ libc6-dev ruby2.1-dev golang-go \ libmysqlclient-dev libpq-dev zlib1g-dev libyaml-dev libssl-dev \ libgdbm-dev libreadline-dev libncurses5-dev libffi-dev \ libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev # https://en.wikibooks.org/wiki/Grsecurity/Application-specific_Settings#Node.js paxctl -Cm `which nodejs` # remove the host keys generated during openssh-server installation rm -rf /etc/ssh/ssh_host_*_key /etc/ssh/ssh_host_*_key.pub # add ${GITLAB_USER} user adduser --disabled-login --gecos 'GitLab' ${GITLAB_USER} passwd -d ${GITLAB_USER} # set PATH (fixes cron job PATH issues) cat >> ${GITLAB_HOME}/.profile < ${GITLAB_LOG_DIR}/gitlab rm -rf log ln -sf ${GITLAB_LOG_DIR}/gitlab log # create required tmp directories sudo -HEu ${GITLAB_USER} mkdir -p tmp/pids/ tmp/sockets/ chmod -R u+rwX tmp # create symlink to assets in tmp/cache rm -rf tmp/cache sudo -HEu ${GITLAB_USER} ln -s ${GITLAB_DATA_DIR}/tmp/cache tmp/cache # create symlink to assets in public/assets rm -rf public/assets sudo -HEu ${GITLAB_USER} ln -s ${GITLAB_DATA_DIR}/tmp/public/assets public/assets # create symlink to uploads directory rm -rf public/uploads sudo -HEu ${GITLAB_USER} ln -s ${GITLAB_DATA_DIR}/uploads public/uploads # create symlink to .secret in GITLAB_DATA_DIR rm -rf .secret sudo -HEu ${GITLAB_USER} ln -sf ${GITLAB_DATA_DIR}/.secret # install gems required by gitlab, use local cache if available if [[ -d ${GEM_CACHE_DIR} ]]; then mv ${GEM_CACHE_DIR} vendor/ chown -R ${GITLAB_USER}:${GITLAB_USER} vendor/cache fi sudo -HEu ${GITLAB_USER} bundle install -j$(nproc) --deployment --without development test aws # make sure everything in ${GITLAB_HOME} is owned by the git user chown -R ${GITLAB_USER}:${GITLAB_USER} ${GITLAB_HOME}/ # install schedules cronjob sudo -HEu ${GITLAB_USER} bundle exec whenever -w # install gitlab bootscript cp lib/support/init.d/gitlab /etc/init.d/gitlab chmod +x /etc/init.d/gitlab # disable default nginx configuration and enable gitlab's nginx configuration rm -f /etc/nginx/sites-enabled/default # disable pam authentication for sshd sed 's/UsePAM yes/UsePAM no/' -i /etc/ssh/sshd_config sed 's/UsePrivilegeSeparation yes/UsePrivilegeSeparation no/' -i /etc/ssh/sshd_config echo "UseDNS no" >> /etc/ssh/sshd_config # permit password login sed 's/#PasswordAuthentication yes/PasswordAuthentication no/' -i /etc/ssh/sshd_config # configure verbose logging for sshd sed 's/LogLevel INFO/LogLevel VERBOSE/' -i /etc/ssh/sshd_config # move supervisord.log file to ${GITLAB_LOG_DIR}/supervisor/ sed 's|^logfile=.*|logfile='"${GITLAB_LOG_DIR}"'/supervisor/supervisord.log ;|' -i /etc/supervisor/supervisord.conf # move nginx logs to ${GITLAB_LOG_DIR}/nginx sed 's|access_log /var/log/nginx/access.log;|access_log '"${GITLAB_LOG_DIR}"'/nginx/access.log;|' -i /etc/nginx/nginx.conf sed 's|error_log /var/log/nginx/error.log;|error_log '"${GITLAB_LOG_DIR}"'/nginx/error.log;|' -i /etc/nginx/nginx.conf # configure supervisord log rotation cat > /etc/logrotate.d/supervisord < /etc/logrotate.d/gitlab < /etc/logrotate.d/gitlab-shell < /etc/logrotate.d/gitlab-nginx < /etc/supervisor/conf.d/unicorn.conf < /etc/supervisor/conf.d/sidekiq.conf < /etc/supervisor/conf.d/gitlab-git-http-server.conf < /etc/supervisor/conf.d/mail_room.conf < /etc/supervisor/conf.d/sshd.conf < /etc/supervisor/conf.d/nginx.conf < /etc/supervisor/conf.d/cron.conf <