Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

240 lines
8.8KB

  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. # Generate docker secrets
  113. echo $db_pwd | docker secret create db_pwd -
  114. echo $ldap_pwd | docker secret create ldap_pwd -
  115. echo $ldap_mail_pwd | docker secret create ldap_mail_pwd -
  116. echo $ldap_nextcloud_pwd | docker secret create ldap_nextcloud_pwd -
  117. echo $ldap_gogs_pwd | docker secret create ldap_gogs_pwd -
  118. echo $nextcloud_admin_pwd | docker secret create nextcloud_admin_pwd -
  119. echo $nextcloud_salt | docker secret create nextcloud_salt -
  120. echo $nextcloud_secret | docker secret create nextcloud_secret -
  121. #echo $paperless_webserver_pwd | docker secret create paperless_webserver_pwd -
  122. #echo $paperless_passphrase | docker secret create paperless_passphrase -
  123. echo $paperless_ftp_pwd | docker secret create paperless_ftp_pwd -
  124. echo $gogs_admin_pwd | docker secret create gogs_admin_pwd -
  125. #echo $pihole_web_pwd | docker secret create pihole_web_pwd -
  126. sed -i "s/\${PIHOLE_WEB_PWD}/${pihole_web_pwd}/g" pihole.env
  127. echo $'\E[33m'
  128. echo "//////////////////////////////////////////////////"
  129. echo "///////////// COPYING TEMPLATE FILES /////////////"
  130. echo "//////////////////////////////////////////////////"
  131. echo $'\E[1;30m'
  132. cp env.template .env
  133. cp openldap.env.template openldap.env
  134. cp mail.env.template mail.env
  135. cp nextcloud.env.template nextcloud.env
  136. cp haproxy.env.template haproxy.env
  137. cp paperless.env.template paperless.env
  138. cp sftp.env.template sftp.env
  139. cp gogs.env.template gogs.env
  140. cp pihole.env.template pihole.env
  141. # IP for Pi-Hole
  142. IP_LOOKUP="$(ip route get 8.8.8.8 | awk '{ print $NF; exit }')" # May not work for VPN / tun0
  143. 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
  144. for i in `ls *.env .env`; do
  145. sed -i "s/\${DOMAIN}/${domain}/g" $i
  146. sed -i "s/\${ORGANIZATION}/${org}/g" $i
  147. sed -i "s/\${EXTENSION}/${ext}/g" $i
  148. sed -i "s/\${VOLUMES_PATH}/${volumes//\//\\/}/g" $i
  149. sed -i "s/\${LDAP_MAIL_UID}/${ldap_mail_uid}/g" $i
  150. sed -i "s/\${LDAP_NEXTCLOUD_UID}/${ldap_nextcloud_uid}/g" $i
  151. sed -i "s/\${LDAP_GOGS_UID}/${ldap_gogs_uid}/g" $i
  152. sed -i "s/\${ADMIN_EMAIL}/${admin_email}/g" $i
  153. sed -i "s/\${PAPERLESS_WEBSERVER_USER}/${paperless_webserver_user}/g" $i
  154. sed -i "s/\${PAPERLESS_FTP_USER}/${paperless_ftp_user}/g" $i
  155. sed -i "s/\${IP_LOOKUP}/${IP_LOOKUP}/g" $i
  156. sed -i "s/\${IPv6_LOOKUP}/${IPv6_LOOKUP}/g" $i
  157. #sed -i "s/\${}/${}/g" $i
  158. done;
  159. # read variables
  160. . .env
  161. # repeated env variables
  162. echo "" >> mail.env
  163. echo "MAIL_DATA_PATH=${MAIL_DATA_PATH}" >> mail.env
  164. echo "" >> nextcloud.env
  165. echo "NEXTCLOUD_DB_BACKUP=${NEXTCLOUD_DATA_PATH}/nextcloud_db_backup.sql" >> nextcloud.env
  166. echo "NEXTCLOUD_DATA_PATH=${NEXTCLOUD_DATA_PATH}" >> nextcloud.env
  167. echo "NEXTCLOUD_BACKUP_PATH=${NEXTCLOUD_BACKUP_PATH}" >> nextcloud.env
  168. echo "" >> paperless.env
  169. echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> paperless.env
  170. echo "PAPERLESS_EXPORT_DIR=${PAPERLESS_EXPORT_PATH}" >> paperless.env
  171. echo "" >> sftp.env
  172. echo "PAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> sftp.env
  173. echo $'\E[33m'
  174. echo "//////////////////////////////////////////////////"
  175. echo "//////////////// CREATING FOLDERS ////////////////"
  176. echo "//////////////////////////////////////////////////"
  177. echo $'\E[1;30m'
  178. # openldap
  179. sudo mkdir -p ${LDAP_DATA_VOLUME_PATH}
  180. sudo mkdir -p ${LDAP_CONFIG_VOLUME_PATH}
  181. sudo mkdir -p ${LDAP_CERTS_VOLUME_PATH}
  182. # db
  183. sudo mkdir -p ${DB_DATA_VOLUME_PATH}
  184. #sudo mkdir -p ${DB_CONFIG_VOLUME_PATH}
  185. # mail
  186. sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}
  187. sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}/getmail
  188. #sudo mkdir -p ${MAIL_STATE_VOLUME_PATH}
  189. # nextcloud
  190. sudo mkdir -p ${NEXTCLOUD_DATA_VOLUME_PATH}
  191. sudo mkdir -p ${NEXTCLOUD_BACKUP_VOLUME_PATH}
  192. # paperless
  193. sudo mkdir -p ${PAPERLESS_DATA_VOLUME_PATH}
  194. sudo mkdir -p ${PAPERLESS_MEDIA_VOLUME_PATH}
  195. sudo mkdir -p ${PAPERLESS_CONSUMPTION_VOLUME_PATH}
  196. sudo mkdir -p ${PAPERLESS_EXPORT_VOLUME_PATH}
  197. # gogs
  198. sudo mkdir -p ${GOGS_DATA_VOLUME_PATH}
  199. # Pi-Hole
  200. sudo mkdir -p ${PIHOLE_CONFIG_VOLUME_PATH}
  201. sudo mkdir -p ${PIHOLE_DNSMASQ_VOLUME_PATH}
  202. # let's Encrypt
  203. sudo mkdir -p ${LETSENCRYPT_VOLUME_PATH}
  204. echo "Copying getmail confs"
  205. cp images/email/getmail/getmailrc-* ${MAIL_DATA_VOLUME_PATH}/getmail/