選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

281 行
10KB

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