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.

250 lines
9.0KB

  1. #!/bin/bash
  2. DEFAULT_VOLUMES=/media/volumes
  3. PWD_GEN='< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;'
  4. #PWD_GEN='openssl rand -base64 20'
  5. DEFAULT_LDAP_MAIL_UID='mail'
  6. DEFAULT_LDAP_NEXTCLOUD_UID='nextcloud'
  7. DEFAULT_LDAP_GOGS_UID='gogs'
  8. read -p "Main domain: " domain
  9. while [[ ! $domain =~ ^.*\.[a-z]{2,}$ ]]; do
  10. read -p "Please Enter a valid domain: " domain
  11. done
  12. # TODO: more than 1 level domains
  13. org=`echo $domain | cut -f1 -d'.'`
  14. ext=`echo $domain | cut -f2 -d'.'`
  15. read -p "Volumes path ($DEFAULT_VOLUMES): " volumes
  16. if [[ ${#volumes} -eq 0 ]]; then
  17. volumes=$DEFAULT_VOLUMES
  18. fi
  19. read -p "DB admin password (a random one will be generated if empty): " db_pwd
  20. if [[ ${#db_pwd} -eq 0 ]]; then
  21. db_pwd=`eval "$PWD_GEN"`
  22. fi
  23. read -p "LDAP admin password (a random one will be generated if empty): " ldap_pwd
  24. if [[ ${#ldap_pwd} -eq 0 ]]; then
  25. ldap_pwd=`eval "$PWD_GEN"`
  26. fi
  27. read -p "LDAP Mail Bind DN uid ($DEFAULT_LDAP_MAIL_UID): " ldap_mail_uid
  28. if [[ ${#ldap_mail_uid} -eq 0 ]]; then
  29. ldap_mail_uid=$DEFAULT_LDAP_MAIL_UID
  30. fi
  31. read -p "LDAP Mail Bind DN Pwd (a random one will be generated if empty): " ldap_mail_pwd
  32. if [[ ${#ldap_mail_pwd} -eq 0 ]]; then
  33. ldap_mail_pwd=`eval "$PWD_GEN"`
  34. fi
  35. read -p "LDAP Nextcloud Bind DN uid ($DEFAULT_LDAP_NEXTCLOUD_UID): " ldap_nextcloud_uid
  36. if [[ ${#ldap_nextcloud_uid} -eq 0 ]]; then
  37. ldap_nextcloud_uid=$DEFAULT_LDAP_NEXTCLOUD_UID
  38. fi
  39. read -p "LDAP Nextcloud Bind DN Pwd (a random one will be generated if empty): " ldap_nextcloud_pwd
  40. if [[ ${#ldap_nextcloud_pwd} -eq 0 ]]; then
  41. ldap_nextcloud_pwd=`eval "$PWD_GEN"`
  42. fi
  43. read -p "LDAP Gogs Bind DN uid ($DEFAULT_LDAP_GOGS_UID): " ldap_gogs_uid
  44. if [[ ${#ldap_gogs_uid} -eq 0 ]]; then
  45. ldap_gogs_uid=$DEFAULT_LDAP_GOGS_UID
  46. fi
  47. read -p "LDAP Gogs Bind DN Pwd (a random one will be generated if empty): " ldap_gogs_pwd
  48. if [[ ${#ldap_gogs_pwd} -eq 0 ]]; then
  49. ldap_gogs_pwd=`eval "$PWD_GEN"`
  50. fi
  51. read -p "Nextcloud Admin User Pwd (a random one will be generated if empty): " nextcloud_admin_pwd
  52. if [[ ${#nextcloud_admin_pwd} -eq 0 ]]; then
  53. nextcloud_admin_pwd=`eval "$PWD_GEN"`
  54. fi
  55. read -p "Gogs Admin User Pwd (a random one will be generated if empty): " gogs_admin_pwd
  56. if [[ ${#gogs_admin_pwd} -eq 0 ]]; then
  57. gogs_admin_pwd=`eval "$PWD_GEN"`
  58. fi
  59. read -p "Pi-Hole Web User Pwd (a random one will be generated if empty): " pihole_web_pwd
  60. if [[ ${#pihole_web_pwd} -eq 0 ]]; then
  61. pihole_web_pwd=`eval "$PWD_GEN"`
  62. fi
  63. read -p "Admin E-mail, used for Let's Encrypt account and more (admin@${domain}): " admin_email
  64. if [[ ${#admin_email} -eq 0 ]]; then
  65. admin_email=admin@${domain}
  66. fi
  67. echo "If you have a password salt and a secret from a previous installation, provide them here."
  68. echo "They are used by Passman and need to remain the same for the vaults to be accessible"
  69. read -p "Nextcloud Pwd Salt (a random one will be generated by NC if empty): " nextcloud_salt
  70. read -p "Nextcloud Secret (a random one will be generated by NC if empty): " nextcloud_secret
  71. # read -p "Paperless Web Server User (paperless): " paperless_webserver_user
  72. # if [[ ${#paperless_webserver_user} -eq 0 ]]; then
  73. # paperless_webserver_user=paperless
  74. # fi
  75. # read -p "Paperless Web Server Pwd (a random one will be generated if empty): " paperless_webserver_pwd
  76. # if [[ ${#paperless_webserver_pwd} -eq 0 ]]; then
  77. # paperless_webserver_pwd=`eval "$PWD_GEN"`
  78. # fi
  79. # read -p "Paperless Encryption Passphrase (a random one will be generated if empty): " paperless_passphrase
  80. # if [[ ${#paperless_passphrase} -eq 0 ]]; then
  81. # paperless_=`eval "$PWD_GEN"`
  82. # fi
  83. read -p "SFTP User - SFTP server is used by paperless (consume): " paperless_ftp_user
  84. if [[ ${#paperless_ftp_user} -eq 0 ]]; then
  85. paperless_ftp_user=consume
  86. fi
  87. read -p "SFTP Pwd (a random one will be generated if empty): " paperless_ftp_pwd
  88. if [[ ${#paperless_ftp_pwd} -eq 0 ]]; then
  89. paperless_ftp_pwd=`eval "$PWD_GEN"`
  90. fi
  91. echo $'\E[33m'
  92. echo "//////////////////////////////////////////////////"
  93. echo "///////////////// PLEASE CONFIRM /////////////////"
  94. echo "//////////////////////////////////////////////////"
  95. echo $'\E[1;30m'
  96. echo Your domain is: $domain
  97. echo Your Volumes path is: $volumes
  98. echo Your LDAP Mail Bind DN Uid is: $ldap_mail_uid
  99. echo Your LDAP Nextcloud Bind DN Uid is: $ldap_nextcloud_uid
  100. echo Your LDAP Gogs Bind DN Uid is: $ldap_gogs_uid
  101. echo Your Admin email. Let\'s Encrypt...: $admin_email
  102. echo Your Paperless Web Server User: $paperless_webserver_user
  103. echo Your SFTP User: $paperless_ftp_user
  104. echo $'\E[1;37m'
  105. read -p "Are These Settings Correct? Yes (y), No (n): " confirm
  106. while [[ ! $confirm =~ ^[yYnN]{1}$ ]]; do
  107. read -p "Please Enter 'y' or 'n' To Confirm Settings: " confirm
  108. done
  109. if [[ $confirm != [yY] ]]; then
  110. exit 1
  111. fi
  112. echo $'\E[33m'
  113. echo "//////////////////////////////////////////////////"
  114. echo "///////////// COPYING TEMPLATE FILES /////////////"
  115. echo "//////////////////////////////////////////////////"
  116. echo $'\E[1;30m'
  117. cp env.template .env
  118. cp mariadb.env.template mariadb.env
  119. cp openldap.env.template openldap.env
  120. cp mail.env.template mail.env
  121. cp nextcloud.env.template nextcloud.env
  122. cp haproxy.env.template haproxy.env
  123. cp paperless.env.template paperless.env
  124. cp sftp.env.template sftp.env
  125. cp gogs.env.template gogs.env
  126. cp pihole.env.template pihole.env
  127. chmod 600 *.env
  128. # Passwords
  129. echo MYSQL_ROOT_PWD=$db_pwd >> mariadb.env
  130. echo MYSQL_ROOT_PWD=$db_pwd >> nextcloud.env
  131. echo MYSQL_ROOT_PWD=$db_pwd >> gogs.env
  132. echo LDAP_ADMIN_PWD=$ldap_pwd >> openldap.env
  133. echo LDAP_MAIL_PWD=$ldap_mail_pwd >> openldap.env
  134. echo LDAP_NEXTCLOUD_PWD=$ldap_nextcloud_pwd >> openldap.env
  135. echo LDAP_GOGS_PWD=$ldap_gogs_pwd >> openldap.env
  136. echo LDAP_BIND_PWD=$ldap_mail_pwd >> mail.env
  137. echo LDAP_BIND_PWD=$ldap_nextcloud_pwd >> nextcloud.env
  138. echo LDAP_BIND_PWD=$ldap_gogs_pwd >> gogs.env
  139. echo NEXTCLOUD_ADMIN_PWD=$nextcloud_admin_pwd >> nextcloud.env
  140. echo NEXTCLOUD_SALT=$nextcloud_salt >> nextcloud.env
  141. echo NEXTCLOUD_SECRET=$nextcloud_secret >> nextcloud.env
  142. #echo PAPERLESS_WEBSERVER_PWD=$paperless_webserver_pwd >> paperless.env
  143. #echo PAPERLESS_PASSPHRASE=$paperless_passphrase >> paperless.env
  144. echo PAPERLESS_FTP_PWD=$paperless_ftp_pwd >> sftp.env
  145. echo GOGS_ADMIN_PWD=$gogs_admin_pwd >> gogs.env
  146. #echo $pihole_web_pwd | docker secret create pihole_web_pwd -
  147. sed -i "s/\${PIHOLE_WEB_PWD}/${pihole_web_pwd}/g" pihole.env
  148. # IP for Pi-Hole
  149. IP_LOOKUP="$(ip route get 8.8.8.8 | awk '{ print $NF; exit }')" # May not work for VPN / tun0
  150. IPv6_LOOKUP="$(ip -6 route get 2001:4860:4860::8888 | awk '{for(i=1;i<=NF;i++) if ($i=="src") print $(i+1)}')" # May not work for VPN / tun0
  151. for i in `ls *.env .env`; do
  152. sed -i "s/\${DOMAIN}/${domain}/g" $i
  153. sed -i "s/\${ORGANIZATION}/${org}/g" $i
  154. sed -i "s/\${EXTENSION}/${ext}/g" $i
  155. sed -i "s/\${VOLUMES_PATH}/${volumes//\//\\/}/g" $i
  156. sed -i "s/\${LDAP_MAIL_UID}/${ldap_mail_uid}/g" $i
  157. sed -i "s/\${LDAP_NEXTCLOUD_UID}/${ldap_nextcloud_uid}/g" $i
  158. sed -i "s/\${LDAP_GOGS_UID}/${ldap_gogs_uid}/g" $i
  159. sed -i "s/\${ADMIN_EMAIL}/${admin_email}/g" $i
  160. sed -i "s/\${PAPERLESS_WEBSERVER_USER}/${paperless_webserver_user}/g" $i
  161. sed -i "s/\${PAPERLESS_FTP_USER}/${paperless_ftp_user}/g" $i
  162. sed -i "s/\${IP_LOOKUP}/${IP_LOOKUP}/g" $i
  163. sed -i "s/\${IPv6_LOOKUP}/${IPv6_LOOKUP}/g" $i
  164. #sed -i "s/\${}/${}/g" $i
  165. done;
  166. # read variables
  167. . .env
  168. # repeated env variables
  169. echo "" >> mail.env
  170. echo "MAIL_DATA_PATH=${MAIL_DATA_PATH}" >> mail.env
  171. echo "" >> nextcloud.env
  172. echo "NEXTCLOUD_DB_BACKUP=${NEXTCLOUD_DATA_PATH}/nextcloud_db_backup.sql" >> nextcloud.env
  173. echo "NEXTCLOUD_DATA_PATH=${NEXTCLOUD_DATA_PATH}" >> nextcloud.env
  174. echo "NEXTCLOUD_BACKUP_PATH=${NEXTCLOUD_BACKUP_PATH}" >> nextcloud.env
  175. echo "" >> paperless.env
  176. echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> paperless.env
  177. echo "PAPERLESS_EXPORT_DIR=${PAPERLESS_EXPORT_PATH}" >> paperless.env
  178. echo "" >> sftp.env
  179. echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> sftp.env
  180. echo $'\E[33m'
  181. echo "//////////////////////////////////////////////////"
  182. echo "//////////////// CREATING FOLDERS ////////////////"
  183. echo "//////////////////////////////////////////////////"
  184. echo $'\E[1;30m'
  185. # openldap
  186. sudo mkdir -p ${LDAP_DATA_VOLUME_PATH}
  187. sudo mkdir -p ${LDAP_CONFIG_VOLUME_PATH}
  188. sudo mkdir -p ${LDAP_CERTS_VOLUME_PATH}
  189. # db
  190. sudo mkdir -p ${DB_DATA_VOLUME_PATH}
  191. #sudo mkdir -p ${DB_CONFIG_VOLUME_PATH}
  192. # mail
  193. sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}
  194. sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}/getmail
  195. #sudo mkdir -p ${MAIL_STATE_VOLUME_PATH}
  196. # nextcloud
  197. sudo mkdir -p ${NEXTCLOUD_DATA_VOLUME_PATH}
  198. sudo mkdir -p ${NEXTCLOUD_BACKUP_VOLUME_PATH}
  199. # paperless
  200. sudo mkdir -p ${PAPERLESS_DATA_VOLUME_PATH}
  201. sudo mkdir -p ${PAPERLESS_MEDIA_VOLUME_PATH}
  202. sudo mkdir -p ${PAPERLESS_CONSUMPTION_VOLUME_PATH}
  203. sudo mkdir -p ${PAPERLESS_EXPORT_VOLUME_PATH}
  204. # gogs
  205. sudo mkdir -p ${GOGS_DATA_VOLUME_PATH}
  206. # Pi-Hole
  207. sudo mkdir -p ${PIHOLE_CONFIG_VOLUME_PATH}
  208. sudo mkdir -p ${PIHOLE_DNSMASQ_VOLUME_PATH}
  209. # let's Encrypt
  210. sudo mkdir -p ${LETSENCRYPT_VOLUME_PATH}
  211. echo "Copying getmail confs"
  212. cp images/email/getmail/getmailrc-* ${MAIL_DATA_VOLUME_PATH}/getmail/