Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

213 lines
12KB

  1. #!/bin/bash
  2. #set -e
  3. #NEXTCLOUD_DB_PWD=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;`
  4. NEXTCLOUD_DB_PWD=`openssl rand -base64 20`
  5. if [ -z "${NEXTCLOUD_SERVER_NAME}" ]; then
  6. echo >&2 'error: you have to provide a server-name (NEXTCLOUD_SERVER_NAME)'
  7. exit 1
  8. fi
  9. sed -i "s/server_name localhost/server_name ${NEXTCLOUD_SERVER_NAME}.${DOMAIN} ${NEXTCLOUD_SERVER_NAME}/g" /etc/nginx/sites-available/default
  10. # check needed variables
  11. if [[ -z ${DB_HOST} || -z ${NEXTCLOUD_DB_NAME} || -z ${NEXTCLOUD_DB_USER} \
  12. || -z ${NEXTCLOUD_DB_PWD} || -z ${NEXTCLOUD_ADMIN_PWD} \
  13. || -z ${NEXTCLOUD_DATA_PATH} || -z ${NEXTCLOUD_BACKUP_PATH} ]]; then
  14. echo "Missing variable! You must provide: DB_HOST, NEXTCLOUD_DB_NAME, \
  15. NEXTCLOUD_DB_USER, NEXTCLOUD_DB_PWD, NEXTCLOUD_ADMIN_PWD, NEXTCLOUD_DATA_PATH, \
  16. NEXTCLOUD_BACKUP_PATH";
  17. #env;
  18. exit 1;
  19. fi
  20. # SSL certificates
  21. if [ ! -f /etc/nginx/ssl/nextcloud.crt ]; then
  22. sudo mkdir /etc/nginx/ssl
  23. sudo openssl genrsa -out /etc/nginx/ssl/nextcloud.key 4096
  24. sudo openssl req -new -sha256 -batch -subj "/CN=$NEXTCLOUD_SERVER_NAME" -key /etc/nginx/ssl/nextcloud.key -out /etc/nginx/ssl/nextcloud.csr
  25. sudo openssl x509 -req -sha256 -days 3650 -in /etc/nginx/ssl/nextcloud.csr -signkey /etc/nginx/ssl/nextcloud.key -out /etc/nginx/ssl/nextcloud.crt
  26. fi
  27. # Data folder
  28. if [ -z "${DATA_CHOWN}" -o "${DATA_CHOWN}" != "0" ]; then
  29. echo "Changing ownership of Data folder. It may take a while..."
  30. chown -R www-data:www-data ${NEXTCLOUD_DATA_PATH};
  31. fi
  32. function check_result {
  33. if [ $1 != 0 ]; then
  34. echo "Error $1: $2";
  35. exit 1;
  36. fi
  37. }
  38. # ### DB ###
  39. # wait for DB to be ready
  40. sleep 60 # to avoid hitting it while the first start for setting root pwd
  41. R=111
  42. while [ $R -eq 111 ]; do
  43. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "SHOW DATABASES" 1>/dev/null 2>&1;
  44. R=$?;
  45. done
  46. # check if DB exists
  47. DB_EXISTS=$(mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "SHOW DATABASES" 2> /dev/null | grep ${NEXTCLOUD_DB_NAME})
  48. echo "DB exists: ${DB_EXISTS}"
  49. if [ -z "${DB_EXISTS}" ]; then
  50. echo "Creating Database"
  51. #mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "DROP DATABASE IF EXISTS ${NEXTCLOUD_DB_NAME};"
  52. #check_result $? "Dropping DB"
  53. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "CREATE DATABASE ${NEXTCLOUD_DB_NAME};"
  54. check_result $? "Creating DB"
  55. fi
  56. echo "Creating User"
  57. # 'IF EXISTS' for DROP USER is available from MariaDB 10.1.3 only
  58. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "DROP USER ${NEXTCLOUD_DB_USER};" || echo "It seems it didn't exist"
  59. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "CREATE USER ${NEXTCLOUD_DB_USER} IDENTIFIED BY '${NEXTCLOUD_DB_PWD}';"
  60. check_result $? "Creating User"
  61. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "GRANT ALL ON ${NEXTCLOUD_DB_NAME}.* TO ${NEXTCLOUD_DB_USER};"
  62. check_result $? "Granting permissions"
  63. mysql --skip-ssl -u root -p${MARIADB_ROOT_PASSWORD} -h ${DB_HOST} -e "FLUSH PRIVILEGES;"
  64. check_result $? "Flushing privileges"
  65. unset MARIADB_ROOT_PASSWORD
  66. # DB Backup
  67. if [ ! -z "${DB_EXISTS}" -a ! -z "${NEXTCLOUD_DB_BACKUP}" -a -f "${NEXTCLOUD_DB_BACKUP}" ]; then
  68. echo "Restoring DB Backup..."
  69. mysql --skip-ssl -u ${NEXTCLOUD_DB_USER} -p${NEXTCLOUD_DB_PWD} -D ${NEXTCLOUD_DB_NAME} -h ${DB_HOST} < ${NEXTCLOUD_DB_BACKUP};
  70. check_result $? "Restoring DB"
  71. # empty oc_users table
  72. # TODO: explain why
  73. echo "Removing users"
  74. mysql --skip-ssl -u ${NEXTCLOUD_DB_USER} -p${NEXTCLOUD_DB_PWD} -D ${NEXTCLOUD_DB_NAME} -h ${DB_HOST} -e "TRUNCATE TABLE oc_users;" || echo "Truncate oc_users failed";
  75. # check_result $? "Truncating Users table"
  76. mysql --skip-ssl -u ${NEXTCLOUD_DB_USER} -p${NEXTCLOUD_DB_PWD} -D ${NEXTCLOUD_DB_NAME} -h ${DB_HOST} -e "TRUNCATE TABLE oc_ldap_user_mapping;" || echo "Truncate oc_ldap_user_mapping failed";
  77. #check_result $? "Truncating LDAP Users mapping table"
  78. fi
  79. # ### Nextcloud config file ###
  80. echo "Configuring Nextcloud"
  81. cd /var/www/nextcloud
  82. # https://github.com/nextcloud/server/pull/18130#issuecomment-604518403
  83. sudo -u www-data rm -Rf /srv/nextcloud/data/admin
  84. sudo -u www-data php occ maintenance:install --database "mysql" --database-host ${DB_HOST} --database-name ${NEXTCLOUD_DB_NAME} --database-user ${NEXTCLOUD_DB_USER} --database-pass ${NEXTCLOUD_DB_PWD} --admin-user "admin" --admin-pass ${NEXTCLOUD_ADMIN_PWD} --data-dir ${NEXTCLOUD_DATA_PATH}
  85. check_result $? "Initializing Config"
  86. # Password salt and secret are used by Passman and must remain the same after
  87. # restarting of the instance, otherwise vaults would become inaccessible
  88. if [ ! -z "${NEXTCLOUD_SALT}" ]; then
  89. sudo -u www-data php occ config:system:set passwordsalt --value "${NEXTCLOUD_SALT}"
  90. fi
  91. if [ ! -z "${NEXTCLOUD_SECRET}" ]; then
  92. sudo -u www-data php occ config:system:set secret --value "${NEXTCLOUD_SECRET}"
  93. fi
  94. #sudo -u www-data php occ config:system:set trusted_domains 0 --value ${NEXTCLOUD_SERVER_NAME}.${DOMAIN}
  95. #sudo -u www-data php occ config:system:set trusted_domains 1 --value ${DOMAIN}
  96. index=0
  97. for domain in ${DOMAINS[@]}; do
  98. sudo -u www-data php occ config:system:set trusted_domains ${index} --value ${NEXTCLOUD_SERVER_NAME}.${domain}
  99. index=$((${index}+1))
  100. sudo -u www-data php occ config:system:set trusted_domains ${index} --value ${domain}
  101. index=$((${index}+1))
  102. done;
  103. # Already in maintenance:install command:
  104. #sudo -u www-data php occ config:system:set datadirectory ${NEXTCLOUD_DATA_PATH}
  105. #sudo -u www-data php occ config:system:set dbtype --value mysql
  106. #sudo -u www-data php occ config:system:set dbhost --value ${DB_HOST}
  107. #sudo -u www-data php occ config:system:set dbname --value ${NEXTCLOUD_DB_NAME}
  108. #sudo -u www-data php occ config:system:set dbuser --value ${NEXTCLOUD_DB_USER}
  109. #sudo -u www-data php occ config:system:set dbpassword --value ${NEXTCLOUD_DB_PWD}
  110. sudo -u www-data php occ config:system:set mail_from_address --value postmaster
  111. sudo -u www-data php occ config:system:set mail_domain --value ${DOMAIN}
  112. sudo -u www-data php occ config:system:set ldapIgnoreNamingRules --value false
  113. sudo -u www-data php occ config:system:set ldapProviderFactory --value "\\OCA\\User_LDAP\\LDAPProviderFactory"
  114. # https://docs.nextcloud.com/server/13/admin_manual/configuration_server/caching_configuration.html
  115. sudo -u www-data php occ config:system:set memcache.local --value '\OC\Memcache\APCu'
  116. sudo -u www-data php occ config:app:set user_ldap enabled --value yes
  117. sudo -u www-data php occ config:app:set user_ldap types --value authentication
  118. sudo -u www-data php occ config:app:set user_ldap ldap_host --value ${LDAP_SERVER_HOST}
  119. sudo -u www-data php occ config:app:set user_ldap ldap_port --value 389
  120. sudo -u www-data php occ config:app:set user_ldap ldap_base --value ${LDAP_SEARCH_BASE}
  121. sudo -u www-data php occ config:app:set user_ldap ldap_base_users --value ${LDAP_SEARCH_BASE}
  122. sudo -u www-data php occ config:app:set user_ldap ldap_base_groups --value ${LDAP_SEARCH_BASE}
  123. sudo -u www-data php occ config:app:set user_ldap ldap_dn --value ${LDAP_BIND_DN}
  124. sudo -u www-data php occ config:app:set user_ldap ldap_agent_password --value `printf "${LDAP_BIND_PWD}" | base64`
  125. sudo -u www-data php occ config:app:set user_ldap ldap_email_attr --value mail
  126. sudo -u www-data php occ config:app:set user_ldap ldap_login_filter --value "(&(objectclass=*)(|(uniqueIdentifier=%uid)(mail=%uid)))"
  127. sudo -u www-data php occ config:app:set user_ldap ldap_login_filter_mode --value 1
  128. sudo -u www-data php occ config:app:set user_ldap ldap_loginfilter_email --value 1
  129. sudo -u www-data php occ config:app:set user_ldap ldap_loginfilter_username --value 1
  130. sudo -u www-data php occ config:app:set user_ldap ldap_user_filter_mode --value 1
  131. sudo -u www-data php occ config:app:set user_ldap ldap_userlist_filter --value "(objectclass=*)"
  132. sudo -u www-data php occ config:app:set user_ldap use_memberof_to_detect_membership --value 1
  133. sudo -u www-data php occ config:app:set user_ldap ldap_display_name --value "cn"
  134. #sudo -u www-data php occ config:app:set user_ldap ldap_expert_username_attr --value "mail"
  135. sudo -u www-data php occ config:app:set user_ldap has_memberof_filter_support --value "0"
  136. sudo -u www-data php occ config:app:set user_ldap home_folder_naming_rule --value ""
  137. sudo -u www-data php occ config:app:set user_ldap last_jpegPhoto_lookup --value "0"
  138. sudo -u www-data php occ config:app:set user_ldap ldap_attributes_for_group_search --value ""
  139. sudo -u www-data php occ config:app:set user_ldap ldap_attributes_for_user_search --value ""
  140. sudo -u www-data php occ config:app:set user_ldap ldap_backup_host --value ""
  141. sudo -u www-data php occ config:app:set user_ldap ldap_backup_port --value ""
  142. sudo -u www-data php occ config:app:set user_ldap ldap_cache_ttl --value "600"
  143. sudo -u www-data php occ config:app:set user_ldap ldap_configuration_active --value "1"
  144. sudo -u www-data php occ config:app:set user_ldap ldap_dynamic_group_member_url --value ""
  145. sudo -u www-data php occ config:app:set user_ldap ldap_experienced_admin --value "0"
  146. sudo -u www-data php occ config:app:set user_ldap ldap_expert_uuid_group_attr --value ""
  147. sudo -u www-data php occ config:app:set user_ldap ldap_expert_uuid_user_attr --value ""
  148. sudo -u www-data php occ config:app:set user_ldap ldap_group_display_name --value "cn"
  149. sudo -u www-data php occ config:app:set user_ldap ldap_group_filter --value ""
  150. sudo -u www-data php occ config:app:set user_ldap ldap_group_filter_mode --value "0"
  151. sudo -u www-data php occ config:app:set user_ldap ldap_group_member_assoc_attribute --value "uniqueMember"
  152. sudo -u www-data php occ config:app:set user_ldap ldap_groupfilter_groups --value ""
  153. sudo -u www-data php occ config:app:set user_ldap ldap_groupfilter_objectclass --value ""
  154. sudo -u www-data php occ config:app:set user_ldap ldap_loginfilter_attributes --value ""
  155. sudo -u www-data php occ config:app:set user_ldap ldap_nested_groups --value "0"
  156. sudo -u www-data php occ config:app:set user_ldap ldap_override_main_server --value ""
  157. sudo -u www-data php occ config:app:set user_ldap ldap_paging_size --value "500"
  158. sudo -u www-data php occ config:app:set user_ldap ldap_quota_attr --value ""
  159. sudo -u www-data php occ config:app:set user_ldap ldap_quota_def --value ""
  160. sudo -u www-data php occ config:app:set user_ldap ldap_tls --value "0"
  161. sudo -u www-data php occ config:app:set user_ldap ldap_turn_off_cert_check --value "0"
  162. sudo -u www-data php occ config:app:set user_ldap ldap_turn_on_pwd_change --value "0"
  163. sudo -u www-data php occ config:app:set user_ldap ldap_user_display_name_2 --value ""
  164. sudo -u www-data php occ config:app:set user_ldap ldap_userfilter_groups --value ""
  165. sudo -u www-data php occ config:app:set user_ldap ldap_userfilter_objectclass --value ""
  166. # upgrade apps
  167. sudo -u www-data php occ upgrade
  168. # enable apps
  169. sudo -u www-data php occ app:enable contacts
  170. sudo -u www-data php occ app:enable calendar
  171. sudo -u www-data php occ app:enable tasks
  172. #sudo -u www-data php occ app:enable spreed
  173. sudo -u www-data php occ app:enable bookmarks
  174. #sudo -u www-data php occ app:enable direct_menu
  175. sudo -u www-data php occ app:enable mail
  176. sudo -u www-data php occ app:enable news
  177. sudo -u www-data php occ app:enable notes
  178. sudo -u www-data php occ app:enable passman
  179. sudo -u www-data php occ app:enable tasks
  180. sudo -u www-data php occ app:enable drawio
  181. sudo -u www-data php occ app:enable gpxedit
  182. sudo -u www-data php occ app:enable gpxmotion
  183. sudo -u www-data php occ app:enable gpxpod
  184. sudo -u www-data php occ app:enable sharebyemail
  185. sudo -u www-data php occ app:enable socialsharing_email
  186. # copy variables to a file for cron
  187. printenv | grep "NEXTCLOUD\|DB" | sed 's/^\(.*\)$/export \1/g' > /root/env.sh
  188. service cron start
  189. exec "$@"