Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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