|
- #!/bin/bash
-
- GOGS_FULL_DOMAIN=${GOGS_SERVER_NAME}.${GOGS_DOMAIN}
-
- source /etc/profile.d/gogs.sh
-
- # set DB root password from secret
- if [ ! -z $MYSQL_ROOT_PWD_FILE -a -f $MYSQL_ROOT_PWD_FILE ]; then
- MYSQL_ROOT_PWD=`cat $MYSQL_ROOT_PWD_FILE`;
- fi
-
- GOGS_DB_PWD=`openssl rand -base64 20`
-
- # set LDAP password from secret
- if [ ! -z $LDAP_BIND_PWD_FILE -a -f $LDAP_BIND_PWD_FILE ]; then
- LDAP_BIND_PWD=`cat $LDAP_BIND_PWD_FILE`;
- fi
-
- # set Admin password from secret
- if [ ! -z $GOGS_ADMIN_PWD_FILE -a -f $GOGS_ADMIN_PWD_FILE ]; then
- GOGS_ADMIN_PWD=`cat $GOGS_ADMIN_PWD_FILE`;
- fi
-
- # check needed variables
- if [[ -z ${DB_HOST} || -z ${GOGS_DB_NAME} \
- || -z ${GOGS_DB_USER} || -z ${GOGS_DB_PWD} \
- || -z ${GOGS_ADMIN_PWD} || -z ${ADMIN_EMAIL} \
- || -z ${LDAP_SERVER_HOST} || -z ${LDAP_BIND_DN} \
- || -z ${LDAP_BIND_PWD} || -z ${LDAP_SEARCH_BASE} \
- ]];
- then
- echo "Missing variable! You must provide: DB_HOST, GOGS_DB_NAME, \
- GOGS_DB_USER, GOGS_DB_PWD, GOGS_ADMIN_PWD, ADMIN_EMAIL and LDAP stuff";
- echo $DB_HOST, $GOGS_DB_NAME, $GOGS_DB_USER, ${#GOGS_DB_PWD}
- echo ${#GOGS_ADMIN_PWD}, ${ADMIN_EMAIL},
- echo ${LDAP_SERVER_HOST}, ${LDAP_BIND_DN}, ${#LDAP_BIND_PWD}, ${LDAP_SEARCH_BASE}
- #env;
- exit 1;
- fi
-
- GOGS_PATH=${GOPATH}/src/github.com/gogs/gogs
-
- function check_result {
- if [ $1 != 0 ]; then
- echo "Error: $2";
- exit 1;
- fi
- }
-
- # ### DB setup ###
-
- # wait for DB to be ready
- sleep 60 # to avoid hitting it while the first start for setting root pwd
- R=111
- while [ $R -eq 111 ]; do
- mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "SHOW DATABASES" 2> /dev/null;
- R=$?;
- done
-
- # check if DB exists
- DB_EXISTS=$(mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "SHOW DATABASES" 2> /dev/null | grep ${GOGS_DB_NAME})
- echo DB exists: ${DB_EXISTS}
-
- if [ -z "${DB_EXISTS}" ]; then
- echo Creating Database
- #mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "DROP DATABASE IF EXISTS ${GOGS_DB_NAME};"
- #check_result $? "Dropping DB"
- mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "CREATE DATABASE ${GOGS_DB_NAME};"
- check_result $? "Creating DB"
- fi
-
- echo Creating User
- # 'IF EXISTS' for DROP USER is available from MariaDB 10.1.3 only
- mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "DROP USER ${GOGS_DB_USER};" || echo "It seems it didn't exist"
- mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "CREATE USER ${GOGS_DB_USER} IDENTIFIED BY '${GOGS_DB_PWD}';"
- check_result $? "Creating User"
- mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "GRANT ALL ON ${GOGS_DB_NAME}.* TO ${GOGS_DB_USER};"
- check_result $? "Granting permissions"
- mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "FLUSH PRIVILEGES;"
- check_result $? "Flushing privileges"
-
- unset MYSQL_ROOT_PWD
-
- # ### Start ssh server ###
-
- echo "Starting ssh server"
- # https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/45234
- mkdir -p /var/run/sshd
- #/usr/sbin/sshd
- service ssh start
-
- # SSH certs
- if [[ ! -e ${GOGS_CUSTOM}/https/cert.pem || ! -e ${GOGS_CUSTOM}/https/key.pem ]]; then
- su git -c "mkdir -p ${GOGS_CUSTOM}/https"
- su git -c "cd ${GOGS_CUSTOM}/https && ${GOGS_PATH}/gogs cert --ca=true --duration=8760h0m0s --host=${GOGS_FULL_DOMAIN} && cd -"
- fi
-
- # ### Conf file ###
-
- echo Tweaking config files
- CONF_FILE=${GOGS_CUSTOM}/conf/app.ini
- # We need to re-generate conf file because we are changing DB pwd
- #if [[ ! -e ${CONF_FILE} ]]; then
- su git -c "mkdir -p ${GOGS_CUSTOM}/conf"
- mv ${GOGS_PATH}/custom/conf/app.ini ${CONF_FILE}
-
- echo Setting domain
- sed -i "s/GOGS_FULL_DOMAIN/${GOGS_FULL_DOMAIN}/g" ${CONF_FILE}
-
- # DB conf
- echo Setting DB conf
- sed -i "s/DB_HOST/${DB_HOST}/g" ${CONF_FILE}
- sed -i "s/GOGS_DB_NAME/${GOGS_DB_NAME}/g" ${CONF_FILE}
- sed -i "s/GOGS_DB_USER/${GOGS_DB_USER}/g" ${CONF_FILE}
- sed -i "s/GOGS_DB_PWD/${GOGS_DB_PWD//\//\\/}/g" ${CONF_FILE}
- #fi
-
- # LDAP config
- LDAP_FILE=${GOGS_CUSTOM}/conf/auth.d/ldap.conf
- #if [[ ! -e ${CONF_FILE} ]]; then
- su git -c "mkdir -p ${GOGS_CUSTOM}/conf/auth.d"
- mv ${GOGS_PATH}/custom/conf/auth.d/ldap.conf ${LDAP_FILE}
-
- echo Setting LDAP conf
- sed -i "s/LDAP_SERVER_HOST/${LDAP_SERVER_HOST}/g" ${LDAP_FILE}
- sed -i "s/LDAP_BIND_DN/${LDAP_BIND_DN}/g" ${LDAP_FILE}
- sed -i "s/LDAP_BIND_PWD/${LDAP_BIND_PWD}/g" ${LDAP_FILE}
- sed -i "s/LDAP_SEARCH_BASE/${LDAP_SEARCH_BASE}/g" ${LDAP_FILE}
- #fi
-
- # Create admin user if DB was new
- if [ -z "${DB_EXISTS}" ]; then
- su git -c "${GOGS_PATH}/gogs admin create-user --name admin --password ${GOGS_ADMIN_PWD} --admin --email ${ADMIN_EMAIL}"
- fi
-
- # Rewrite authorized keys. See issue:
- # https://github.com/gogs/gogs/issues/1688#issuecomment-143265108
- # https://github.com/gogs/gogs/issues/4435
- su git -c "${GOGS_PATH}/gogs admin rewrite-authorized-keys"
-
- #exec "$@"
- #exec gosu git ${GOGS_PATH}/gogs web
- exec su git -c "${GOGS_PATH}/gogs web"
|