#! /bin/sh # postinst script for gitlab # copied from postinst script for hplip # $Id: hplip.postinst,v 1.1 2005/10/15 21:39:04 hmh Exp $ # # see: dh_installdeb(1) set -e # summary of how this script can be called: # * `configure' # * `abort-upgrade' # * `abort-remove' `in-favour' # # * `abort-deconfigure' `in-favour' # `removing' # # for details, see http://www.debian.org/doc/debian-policy/ or # the debian-policy package # # quoting from the policy: # Any necessary prompting should almost always be confined to the # post-installation script, and should be protected with a conditional # so that unnecessary prompting doesn't happen if a package's # installation fails and the `postinst' is called with `abort-upgrade', # `abort-remove' or `abort-deconfigure'. case "$1" in configure) # Show debconf questions . /usr/share/debconf/confmodule # Read and export debian specific configuration # Only exported variables will be passed on to gitlab app gitlab_debian_conf=/etc/gitlab/gitlab-debian.conf for i in $(cat ${gitlab_debian_conf}); do export $i; done # Create gitlab user . /usr/lib/gitlab/scripts/adduser.sh gitlab_repo_path=${gitlab_data_dir}/repositories mkdir -p ${gitlab_repo_path} chmod -R ug+rwX,o-rwx ${gitlab_repo_path}/ chmod -R ug-s ${gitlab_repo_path}/ find ${gitlab_repo_path}/ -type d -print0 | xargs -0 chmod g+s chown -R ${gitlab_user}: ${gitlab_home} chown -R ${gitlab_user}: ${gitlab_data_dir} mkdir -p ${gitlab_shell_log} chown -R ${gitlab_user}: ${gitlab_shell_root} chown -R ${gitlab_user}: ${gitlab_shell_log} su ${gitlab_user} -s /bin/sh -c "mkdir -p -m 750 ${gitlab_home}/public/uploads" su ${gitlab_user} -s /bin/sh -c 'git config --global core.autocrlf "input"' cd ${gitlab_home} # Obtain hostname from debconf db db_get gitlab/fqdn if [ "${RET}" != "" ]; then if ! grep GITLAB_HOST ${gitlab_debian_conf}; then export GITLAB_HOST=${RET} # We need this to configure nginx below echo GITLAB_HOST=${RET} >> ${gitlab_debian_conf} echo GITLAB_EMAIL_FROM="no-reply@${RET}" >> ${gitlab_debian_conf} echo GITLAB_EMAIL_DISPLAY_NAME="Gitlab" >> ${gitlab_debian_conf} echo GITLAB_EMAIL_REPLY_TO="no-reply@${RET}" >> ${gitlab_debian_conf} fi # Check if ssl option is selected db_get gitlab/ssl if [ "${RET}" = "true" ]; then if ! grep GITLAB_HTTPS ${gitlab_debian_conf}; then echo GITLAB_HTTPS=${RET} >> ${gitlab_debian_conf} fi mkdir -p /etc/gitlab/ssl if [ -f "${nginx_ssl_conf_example_gz}" ]; then # undo dh_installdocs auto compress export nginx_conf_example_tmp=$(mktemp) zcat ${nginx_ssl_conf_example_gz} > ${nginx_conf_example_tmp} export nginx_conf_example=${nginx_conf_example_tmp} fi # Check if letsencrypt option is selected db_get gitlab/letsencrypt if [ "${RET}" = "true" ]; then ln -sf /etc/letsencrypt/live/${GITLAB_HOST}/fullchain.pem \ /etc/gitlab/ssl/gitlab.crt ln -sf /etc/letsencrypt/live/${GITLAB_HOST}/privkey.pem \ /etc/gitlab/ssl/gitlab.key # Port 80 and 443 should be available for letsencrypt invoke-rc.d nginx stop letsencrypt -d ${GITLAB_HOST} certonly fi fi if test -f ${nginx_conf_example}; then sed -e "s/YOUR_SERVER_FQDN/${GITLAB_HOST}/"\ ${nginx_conf_example} >/etc/nginx/sites-available/${GITLAB_HOST} ln -fs /etc/nginx/sites-available/${GITLAB_HOST} /etc/nginx/sites-enabled/ rm -f ${nginx_conf_example_tmp} else echo "nginx example configuration file not found" exit 1 fi # Start nginx invoke-rc.d nginx start else echo "Failed to retrieve fully qualified domain name" exit 1 fi db_stop echo "Create database if not present" if ! su postgres -s /bin/sh -c "psql gitlab_production -c ''"; then su postgres -c 'createdb gitlab_production' fi # Adjust database privileges . /usr/lib/gitlab/scripts/grantpriv.sh # Remove Gemfile.lock if present rm -f ${gtilab_home}/Gemfile.lock echo "Verifying we have all required libraries..." su ${gitlab_user} -s /bin/sh -c 'bundle install --local' echo "Running final rake tasks..." . /usr/lib/gitlab/scripts/rake-tasks.sh ;; abort-upgrade|abort-remove|abort-deconfigure) ;; *) echo "postinst called with unknown argument \`$1'" >&2 exit 1 ;; esac #DEBHELPER# exit 0