You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.5KB

  1. #!/bin/bash
  2. GOGS_FULL_DOMAIN=${GOGS_SERVER_NAME}.${GOGS_DOMAIN}
  3. source /etc/profile.d/gogs.sh
  4. # set DB root password from secret
  5. if [ ! -z $MYSQL_ROOT_PWD_FILE -a -f $MYSQL_ROOT_PWD_FILE ]; then
  6. MYSQL_ROOT_PWD=`cat $MYSQL_ROOT_PWD_FILE`;
  7. fi
  8. GOGS_DB_PWD=`openssl rand -base64 20`
  9. # set LDAP password from secret
  10. if [ ! -z $LDAP_BIND_PWD_FILE -a -f $LDAP_BIND_PWD_FILE ]; then
  11. LDAP_BIND_PWD=`cat $LDAP_BIND_PWD_FILE`;
  12. fi
  13. # set Admin password from secret
  14. if [ ! -z $GOGS_ADMIN_PWD_FILE -a -f $GOGS_ADMIN_PWD_FILE ]; then
  15. GOGS_ADMIN_PWD=`cat $GOGS_ADMIN_PWD_FILE`;
  16. fi
  17. # check needed variables
  18. if [[ -z ${DB_HOST} || -z ${GOGS_DB_NAME} \
  19. || -z ${GOGS_DB_USER} || -z ${GOGS_DB_PWD} \
  20. || -z ${GOGS_ADMIN_PWD} || -z ${ADMIN_EMAIL} \
  21. || -z ${LDAP_SERVER_HOST} || -z ${LDAP_BIND_DN} \
  22. || -z ${LDAP_BIND_PWD} || -z ${LDAP_SEARCH_BASE} \
  23. ]];
  24. then
  25. echo "Missing variable! You must provide: DB_HOST, GOGS_DB_NAME, \
  26. GOGS_DB_USER, GOGS_DB_PWD, GOGS_ADMIN_PWD, ADMIN_EMAIL and LDAP stuff";
  27. echo $DB_HOST, $GOGS_DB_NAME, $GOGS_DB_USER, ${#GOGS_DB_PWD}
  28. echo ${#GOGS_ADMIN_PWD}, ${ADMIN_EMAIL},
  29. echo ${LDAP_SERVER_HOST}, ${LDAP_BIND_DN}, ${#LDAP_BIND_PWD}, ${LDAP_SEARCH_BASE}
  30. #env;
  31. exit 1;
  32. fi
  33. GOGS_PATH=${GOPATH}/src/github.com/gogs/gogs
  34. function check_result {
  35. if [ $1 != 0 ]; then
  36. echo "Error: $2";
  37. exit 1;
  38. fi
  39. }
  40. # ### DB setup ###
  41. # wait for DB to be ready
  42. sleep 60 # to avoid hitting it while the first start for setting root pwd
  43. R=111
  44. while [ $R -eq 111 ]; do
  45. mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "SHOW DATABASES" 2> /dev/null;
  46. R=$?;
  47. done
  48. # check if DB exists
  49. DB_EXISTS=$(mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "SHOW DATABASES" 2> /dev/null | grep ${GOGS_DB_NAME})
  50. echo DB exists: ${DB_EXISTS}
  51. if [ -z "${DB_EXISTS}" ]; then
  52. echo Creating Database
  53. #mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "DROP DATABASE IF EXISTS ${GOGS_DB_NAME};"
  54. #check_result $? "Dropping DB"
  55. mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "CREATE DATABASE ${GOGS_DB_NAME};"
  56. check_result $? "Creating DB"
  57. fi
  58. echo Creating User
  59. # 'IF EXISTS' for DROP USER is available from MariaDB 10.1.3 only
  60. mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "DROP USER ${GOGS_DB_USER};" || echo "It seems it didn't exist"
  61. mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "CREATE USER ${GOGS_DB_USER} IDENTIFIED BY '${GOGS_DB_PWD}';"
  62. check_result $? "Creating User"
  63. mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "GRANT ALL ON ${GOGS_DB_NAME}.* TO ${GOGS_DB_USER};"
  64. check_result $? "Granting permissions"
  65. mysql -u root -p${MYSQL_ROOT_PWD} -h ${DB_HOST} -e "FLUSH PRIVILEGES;"
  66. check_result $? "Flushing privileges"
  67. unset MYSQL_ROOT_PWD
  68. # ### Start ssh server ###
  69. echo "Starting ssh server"
  70. # https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/45234
  71. mkdir -p /var/run/sshd
  72. #/usr/sbin/sshd
  73. service ssh start
  74. # SSH certs
  75. if [[ ! -e ${GOGS_CUSTOM}/https/cert.pem || ! -e ${GOGS_CUSTOM}/https/key.pem ]]; then
  76. su git -c "mkdir -p ${GOGS_CUSTOM}/https"
  77. su git -c "cd ${GOGS_CUSTOM}/https && ${GOGS_PATH}/gogs cert --ca=true --duration=8760h0m0s --host=${GOGS_FULL_DOMAIN} && cd -"
  78. fi
  79. # ### Conf file ###
  80. echo Tweaking config files
  81. CONF_FILE=${GOGS_CUSTOM}/conf/app.ini
  82. # We need to re-generate conf file because we are changing DB pwd
  83. #if [[ ! -e ${CONF_FILE} ]]; then
  84. su git -c "mkdir -p ${GOGS_CUSTOM}/conf"
  85. mv ${GOGS_PATH}/custom/conf/app.ini ${CONF_FILE}
  86. echo Setting domain
  87. sed -i "s/GOGS_FULL_DOMAIN/${GOGS_FULL_DOMAIN}/g" ${CONF_FILE}
  88. # DB conf
  89. echo Setting DB conf
  90. sed -i "s/DB_HOST/${DB_HOST}/g" ${CONF_FILE}
  91. sed -i "s/GOGS_DB_NAME/${GOGS_DB_NAME}/g" ${CONF_FILE}
  92. sed -i "s/GOGS_DB_USER/${GOGS_DB_USER}/g" ${CONF_FILE}
  93. sed -i "s/GOGS_DB_PWD/${GOGS_DB_PWD//\//\\/}/g" ${CONF_FILE}
  94. #fi
  95. # LDAP config
  96. LDAP_FILE=${GOGS_CUSTOM}/conf/auth.d/ldap.conf
  97. #if [[ ! -e ${CONF_FILE} ]]; then
  98. su git -c "mkdir -p ${GOGS_CUSTOM}/conf/auth.d"
  99. mv ${GOGS_PATH}/custom/conf/auth.d/ldap.conf ${LDAP_FILE}
  100. echo Setting LDAP conf
  101. sed -i "s/LDAP_SERVER_HOST/${LDAP_SERVER_HOST}/g" ${LDAP_FILE}
  102. sed -i "s/LDAP_BIND_DN/${LDAP_BIND_DN}/g" ${LDAP_FILE}
  103. sed -i "s/LDAP_BIND_PWD/${LDAP_BIND_PWD}/g" ${LDAP_FILE}
  104. sed -i "s/LDAP_SEARCH_BASE/${LDAP_SEARCH_BASE}/g" ${LDAP_FILE}
  105. #fi
  106. # Create admin user if DB was new
  107. if [ -z "${DB_EXISTS}" ]; then
  108. su -c git "${GOGS_PATH}/gogs admin create-user --name admin --password ${GOGS_ADMIN_PWD} --admin --email ${ADMIN_EMAIL}"
  109. fi
  110. #exec "$@"
  111. #exec gosu git ${GOGS_PATH}/gogs web
  112. exec su git -c "${GOGS_PATH}/gogs web"