Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

236 Zeilen
8.7KB

  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 "\nMAIL_DATA_PATH=${MAIL_DATA_PATH}" >> mail.env
  163. echo "\nNEXTCLOUD_DB_BACKUP=${NEXTCLOUD_DATA_PATH}/nextcloud_db_backup.sql" >> nextcloud.env
  164. echo "\nNEXTCLOUD_DATA_PATH=${NEXTCLOUD_DATA_PATH}" >> nextcloud.env
  165. echo "\nNEXTCLOUD_BACKUP_PATH=${NEXTCLOUD_BACKUP_PATH}" >> nextcloud.env
  166. echo "\nPAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> paperless.env
  167. echo "\nPAPERLESS_EXPORT_DIR=${PAPERLESS_EXPORT_PATH}" >> paperless.env
  168. echo "\nPAPERLESS_CONSUMPTION_DIR=${PAPERLESS_CONSUMPTION_PATH}" >> sftp.env
  169. echo $'\E[33m'
  170. echo "//////////////////////////////////////////////////"
  171. echo "//////////////// CREATING FOLDERS ////////////////"
  172. echo "//////////////////////////////////////////////////"
  173. echo $'\E[1;30m'
  174. # openldap
  175. sudo mkdir -p ${LDAP_DATA_VOLUME_PATH}
  176. sudo mkdir -p ${LDAP_CONFIG_VOLUME_PATH}
  177. sudo mkdir -p ${LDAP_CERTS_VOLUME_PATH}
  178. # db
  179. sudo mkdir -p ${DB_DATA_VOLUME_PATH}
  180. #sudo mkdir -p ${DB_CONFIG_VOLUME_PATH}
  181. # mail
  182. sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}
  183. sudo mkdir -p ${MAIL_DATA_VOLUME_PATH}/getmail
  184. #sudo mkdir -p ${MAIL_STATE_VOLUME_PATH}
  185. # nextcloud
  186. sudo mkdir -p ${NEXTCLOUD_DATA_VOLUME_PATH}
  187. sudo mkdir -p ${NEXTCLOUD_BACKUP_VOLUME_PATH}
  188. # paperless
  189. sudo mkdir -p ${PAPERLESS_DATA_VOLUME_PATH}
  190. sudo mkdir -p ${PAPERLESS_MEDIA_VOLUME_PATH}
  191. sudo mkdir -p ${PAPERLESS_CONSUMPTION_VOLUME_PATH}
  192. sudo mkdir -p ${PAPERLESS_EXPORT_VOLUME_PATH}
  193. # gogs
  194. sudo mkdir -p ${GOGS_DATA_VOLUME_PATH}
  195. # Pi-Hole
  196. sudo mkdir -p ${PIHOLE_CONFIG_VOLUME_PATH}
  197. sudo mkdir -p ${PIHOLE_DNSMASQ_VOLUME_PATH}
  198. # let's Encrypt
  199. sudo mkdir -p ${LETSENCRYPT_VOLUME_PATH}
  200. echo "Copying getmail confs"
  201. cp images/rpi-email/getmail/getmailrc-* ${MAIL_DATA_VOLUME_PATH}/getmail/