/iRedMail/functions/iredadmin.sh

https://bitbucket.org/dineshkummarc/iredmail · Shell · 253 lines · 170 code · 40 blank · 43 comment · 29 complexity · ca4e83798765297ae88a54a68277f4f3 MD5 · raw file

  1. #!/usr/bin/env bash
  2. # Author: Zhang Huangbin (zhb _at_ iredmail.org)
  3. # Purpose: Install & config necessary packages for iRedAdmin.
  4. #---------------------------------------------------------------------
  5. # This file is part of iRedMail, which is an open source mail server
  6. # solution for Red Hat(R) Enterprise Linux, CentOS, Debian and Ubuntu.
  7. #
  8. # iRedMail is free software: you can redistribute it and/or modify
  9. # it under the terms of the GNU General Public License as published by
  10. # the Free Software Foundation, either version 3 of the License, or
  11. # (at your option) any later version.
  12. #
  13. # iRedMail is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. # GNU General Public License for more details.
  17. #
  18. # You should have received a copy of the GNU General Public License
  19. # along with iRedMail. If not, see <http://www.gnu.org/licenses/>.
  20. #---------------------------------------------------------------------
  21. iredadmin_config()
  22. {
  23. ECHO_INFO "Configure iRedAdmin (official web-based admin panel)."
  24. echo "export IREDADMIN_DB_PASSWD='${IREDADMIN_DB_PASSWD}'" >> ${CONFIG_FILE}
  25. if [ X"${DISTRO}" == X"DEBIAN" -o X"${DISTRO}" == X"UBUNTU" -o X"${DISTRO}" == X"SUSE" ]; then
  26. ECHO_DEBUG "Enable apache module: wsgi."
  27. a2enmod wsgi >/dev/null 2>&1
  28. elif [ X"${DISTRO}" == X"RHEL" ]; then
  29. # Make sure wsgi module is loaded.
  30. [ -f ${HTTPD_WSGI_CONF} ] && \
  31. perl -pi -e 's/#(LoadModule.*wsgi_module.*modules.*mod_wsgi.so)/${1}/' ${HTTPD_WSGI_CONF}
  32. fi
  33. cd ${MISC_DIR}
  34. # Extract source tarball.
  35. extract_pkg ${IREDADMIN_TARBALL} ${HTTPD_SERVERROOT}
  36. # Create symbol link, so that we don't need to modify apache
  37. # conf.d/iredadmin.conf file after upgrading this component.
  38. ln -s ${IREDADMIN_HTTPD_ROOT} ${IREDADMIN_HTTPD_ROOT_SYMBOL_LINK} 2>/dev/null
  39. ECHO_DEBUG "Set correct permission for iRedAdmin: ${IREDADMIN_HTTPD_ROOT}."
  40. chown -R ${IREDADMIN_HTTPD_USER}:${IREDADMIN_HTTPD_GROUP} ${IREDADMIN_HTTPD_ROOT}
  41. chmod -R 0555 ${IREDADMIN_HTTPD_ROOT}
  42. # Copy sample configure file.
  43. cd ${IREDADMIN_HTTPD_ROOT}/
  44. if [ X"${BACKEND}" == X'OPENLDAP' ]; then
  45. cp settings.ini.ldap.sample settings.ini
  46. elif [ X"${BACKEND}" == X'MYSQL' ]; then
  47. cp settings.ini.mysql.sample settings.ini
  48. elif [ X"${BACKEND}" == X'PGSQL' ]; then
  49. cp settings.ini.pgsql.sample settings.ini
  50. fi
  51. chown -R ${IREDADMIN_HTTPD_USER}:${IREDADMIN_HTTPD_GROUP} settings.ini
  52. chmod 0400 settings.ini
  53. if [ X"${DISTRO}" == X'OPENBSD' ]; then
  54. # Change file owner
  55. # iRedAdmin is not running as user 'iredadmin' on OpenBSD
  56. chown -R ${HTTPD_USER}:${HTTPD_GROUP} settings.ini
  57. fi
  58. backup_file ${IREDADMIN_HTTPD_CONF}
  59. ECHO_DEBUG "Create directory alias for iRedAdmin."
  60. if [ X"${DISTRO}" == X'OPENBSD' ]; then
  61. # Create directory alias.
  62. perl -pi -e 's#^(</VirtualHost>)#Alias /iredadmin/static "$ENV{IREDADMIN_HTTPD_ROOT_SYMBOL_LINK}/static"\n${1}#' ${HTTPD_SSL_CONF}
  63. perl -pi -e 's#^(</VirtualHost>)#ScriptAlias /iredadmin "$ENV{IREDADMIN_HTTPD_ROOT_SYMBOL_LINK}/iredadmin.py"\n${1}#' ${HTTPD_SSL_CONF}
  64. # There's no wsgi module for Apache available on OpenBSD, so
  65. # iRedAdmin runs as CGI program.
  66. cat > ${IREDADMIN_HTTPD_CONF} <<EOF
  67. AddType text/html .py
  68. AddHandler cgi-script .py
  69. <Directory "${IREDADMIN_HTTPD_ROOT_SYMBOL_LINK}">
  70. Options +ExecCGI
  71. Order allow,deny
  72. Allow from all
  73. </Directory>
  74. EOF
  75. else
  76. perl -pi -e 's#^(</VirtualHost>)#Alias /iredadmin/static "$ENV{IREDADMIN_HTTPD_ROOT_SYMBOL_LINK}/static/"\n${1}#' ${HTTPD_SSL_CONF}
  77. perl -pi -e 's#^(</VirtualHost>)#WSGIScriptAlias /iredadmin "$ENV{IREDADMIN_HTTPD_ROOT_SYMBOL_LINK}/iredadmin.py/"\n${1}#' ${HTTPD_SSL_CONF}
  78. # iRedAdmin runs as WSGI application with Apache + mod_wsgi
  79. cat > ${IREDADMIN_HTTPD_CONF} <<EOF
  80. WSGISocketPrefix /var/run/wsgi
  81. WSGIDaemonProcess iredadmin user=${IREDADMIN_HTTPD_USER} threads=15
  82. WSGIProcessGroup ${IREDADMIN_HTTPD_GROUP}
  83. AddType text/html .py
  84. <Directory ${IREDADMIN_HTTPD_ROOT_SYMBOL_LINK}/>
  85. Order allow,deny
  86. Allow from all
  87. </Directory>
  88. EOF
  89. fi
  90. ECHO_DEBUG "Import iredadmin database template."
  91. if [ X"${BACKEND}" == X'OPENLDAP' -o X"${BACKEND}" == X'MYSQL' ]; then
  92. mysql -h${SQL_SERVER} -P${SQL_SERVER_PORT} -u${MYSQL_ROOT_USER} -p"${MYSQL_ROOT_PASSWD}" <<EOF
  93. # Create databases.
  94. CREATE DATABASE ${IREDADMIN_DB_NAME} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
  95. # Import SQL template.
  96. USE ${IREDADMIN_DB_NAME};
  97. SOURCE ${IREDADMIN_HTTPD_ROOT}/docs/samples/iredadmin.sql;
  98. GRANT SELECT,INSERT,UPDATE,DELETE ON ${IREDADMIN_DB_NAME}.* TO "${IREDADMIN_DB_USER}"@localhost IDENTIFIED BY "${IREDADMIN_DB_PASSWD}";
  99. FLUSH PRIVILEGES;
  100. EOF
  101. # Import addition tables.
  102. if [ X"${BACKEND}" == X"OPENLDAP" ]; then
  103. mysql -h${SQL_SERVER} -P${SQL_SERVER_PORT} -u${MYSQL_ROOT_USER} -p"${MYSQL_ROOT_PASSWD}" <<EOF
  104. USE ${IREDADMIN_DB_NAME};
  105. SOURCE ${SAMPLE_DIR}/dovecot/used_quota.sql;
  106. SOURCE ${SAMPLE_DIR}/dovecot/imap_share_folder.sql;
  107. FLUSH PRIVILEGES;
  108. EOF
  109. fi
  110. elif [ X"${BACKEND}" == X'PGSQL' ]; then
  111. cp -f ${IREDADMIN_HTTPD_ROOT_SYMBOL_LINK}/docs/samples/iredadmin.pgsql ${PGSQL_DATA_DIR}/ >/dev/null
  112. chmod 0777 ${PGSQL_DATA_DIR}/iredadmin.pgsql >/dev/null
  113. su - ${PGSQL_SYS_USER} -c "psql -d template1" >/dev/null <<EOF
  114. -- Create database
  115. CREATE DATABASE ${IREDADMIN_DB_NAME} WITH TEMPLATE template0 ENCODING 'UTF8';
  116. -- Create user
  117. CREATE USER ${IREDADMIN_DB_USER} WITH ENCRYPTED PASSWORD '${IREDADMIN_DB_PASSWD}' NOSUPERUSER NOCREATEDB NOCREATEROLE;
  118. \c ${IREDADMIN_DB_NAME};
  119. \i ${PGSQL_DATA_DIR}/iredadmin.pgsql;
  120. -- Grant permissions
  121. GRANT INSERT,UPDATE,DELETE,SELECT on sessions,log,updatelog to ${IREDADMIN_DB_USER};
  122. GRANT UPDATE,USAGE,SELECT ON log_id_seq TO ${IREDADMIN_DB_USER};
  123. EOF
  124. rm -f ${PGSQL_DATA_DIR}/iredadmin.pgsql
  125. fi
  126. ECHO_DEBUG "Configure iRedAdmin."
  127. # Modify iRedAdmin settings.
  128. # [general] section.
  129. ECHO_DEBUG "Configure general settings."
  130. perl -pi -e 's#^(storage_base_directory =).*#${1} $ENV{STORAGE_MAILBOX_DIR}#' settings.ini
  131. # [iredadmin] section.
  132. ECHO_DEBUG "Configure iredadmin database related settings."
  133. perl -pi -e 's#(.*)host_of_iredadmin_sql_server#${1} $ENV{SQL_SERVER}#' settings.ini
  134. perl -pi -e 's#(.*)port_of_iredadmin_sql_server#${1} $ENV{SQL_SERVER_PORT}#' settings.ini
  135. perl -pi -e 's#^(db =) iredadmin#${1} $ENV{IREDADMIN_DB_NAME}#' settings.ini
  136. perl -pi -e 's#^(user =) iredadmin#${1} $ENV{IREDADMIN_DB_USER}#' settings.ini
  137. perl -pi -e 's#(.*)password_of_iredadmin_db#${1} $ENV{IREDADMIN_DB_PASSWD}#' settings.ini
  138. # Backend related settings.
  139. if [ X"${BACKEND}" == X"OPENLDAP" ]; then
  140. # Change backend.
  141. perl -pi -e 's#^(backend.*=).*#${1} ldap#' settings.ini
  142. # Section [ldap].
  143. ECHO_DEBUG "Configure OpenLDAP backend related settings."
  144. perl -pi -e 's#^(uri =).*#${1} ldap://$ENV{LDAP_SERVER_HOST}:$ENV{LDAP_SERVER_PORT}#' settings.ini
  145. perl -pi -e 's#^(basedn =).*#${1} $ENV{LDAP_BASEDN}#' settings.ini
  146. perl -pi -e 's#^(domainadmin_dn =).*#${1} $ENV{LDAP_ADMIN_BASEDN}#' settings.ini
  147. perl -pi -e 's#^(bind_dn =).*#${1} $ENV{LDAP_ADMIN_DN}#' settings.ini
  148. perl -pi -e 's#^(bind_pw =).*#${1} $ENV{LDAP_ADMIN_PW}#' settings.ini
  149. elif [ X"${BACKEND}" == X"MYSQL" -o X"${BACKEND}" == X'PGSQL' ]; then
  150. ECHO_DEBUG "Configure MySQL related settings."
  151. perl -pi -e 's#(.*)host_of_vmaildb_sql_server#${1} $ENV{SQL_SERVER}#' settings.ini
  152. perl -pi -e 's#(.*)port_of_vmaildb_sql_server#${1} $ENV{SQL_SERVER_PORT}#' settings.ini
  153. perl -pi -e 's#^(db =) vmail#${1} $ENV{VMAIL_DB}#' settings.ini
  154. perl -pi -e 's#^(user =) vmailadmin#${1} $ENV{VMAIL_DB_ADMIN_USER}#' settings.ini
  155. perl -pi -e 's#(.*)password_of_vmail_db#${1} $ENV{VMAIL_DB_ADMIN_PASSWD}#' settings.ini
  156. fi
  157. # Section [policyd].
  158. ECHO_DEBUG "Configure Policyd related settings."
  159. if [ X"${USE_POLICYD}" == X'YES' ]; then
  160. perl -pi -e 's#^(enabled =).*#${1} True#' settings.ini
  161. perl -pi -e 's#(.*)host_of_policyd_sql_server#${1} $ENV{SQL_SERVER}#' settings.ini
  162. perl -pi -e 's#(.*)port_of_policyd_sql_server#${1} $ENV{SQL_SERVER_PORT}#' settings.ini
  163. perl -pi -e 's#^(db =) policyd#${1} $ENV{POLICYD_DB_NAME}#' settings.ini
  164. perl -pi -e 's#^(user =) policyd#${1} $ENV{POLICYD_DB_USER}#' settings.ini
  165. perl -pi -e 's#(.*)password_of_policyd_db#${1} $ENV{POLICYD_DB_PASSWD}#' settings.ini
  166. else
  167. # Policyd-2 (cluebringer) is not yet supported in iRedAdmin.
  168. perl -pi -e 's#^(enabled =) True#${1} False#' settings.ini
  169. fi
  170. # Section [amavisd].
  171. ECHO_DEBUG "Configure Amavisd related settings."
  172. perl -pi -e 's#(.*)host_of_amavisd_sql_server#${1} $ENV{SQL_SERVER}#' settings.ini
  173. perl -pi -e 's#(.*)port_of_amavisd_sql_server#${1} $ENV{SQL_SERVER_PORT}#' settings.ini
  174. perl -pi -e 's#^(db =) amavisd#${1} $ENV{AMAVISD_DB_NAME}#' settings.ini
  175. perl -pi -e 's#^(user =) amavisd#${1} $ENV{AMAVISD_DB_USER}#' settings.ini
  176. perl -pi -e 's#(.*)password_of_amavisd_db#${1} $ENV{AMAVISD_DB_PASSWD}#' settings.ini
  177. perl -pi -e 's#^(logging_into_sql =).*#${1} True#' settings.ini
  178. perl -pi -e 's#^(quarantine =).*#${1} True#' settings.ini
  179. perl -pi -e 's#^(quarantine_port =).*#${1} $ENV{AMAVISD_QUARANTINE_PORT}#' settings.ini
  180. cat >> ${TIP_FILE} <<EOF
  181. iRedAdmin - official web-based admin panel:
  182. * Version: ${IREDADMIN_VERSION}
  183. * Configuration files:
  184. - ${HTTPD_SERVERROOT}/iRedAdmin-${IREDADMIN_VERSION}/
  185. - ${HTTPD_SERVERROOT}/iRedAdmin-${IREDADMIN_VERSION}/settings.ini*
  186. * URL:
  187. - https://${HOSTNAME}/iredadmin/
  188. * Login account:
  189. - Username: ${DOMAIN_ADMIN_NAME}@${FIRST_DOMAIN}, password: ${DOMAIN_ADMIN_PASSWD_PLAIN}
  190. * Settings:
  191. - ${IREDADMIN_HTTPD_ROOT}/settings.ini
  192. - Addition settings for Policyd & Amavisd integration support in iRedAdmin-Pro:
  193. [policyd]
  194. enabled = True
  195. host = ${SQL_SERVER}
  196. port = ${SQL_SERVER_PORT}
  197. db = ${POLICYD_DB_NAME}
  198. user = ${POLICYD_DB_USER}
  199. passwd = ${POLICYD_DB_PASSWD}
  200. [amavisd]
  201. quarantine = True
  202. quarantine_port = ${AMAVISD_QUARANTINE_PORT}
  203. logging_into_sql = True
  204. host = ${SQL_SERVER}
  205. port = ${SQL_SERVER_PORT}
  206. db = ${AMAVISD_DB_NAME}
  207. user = ${AMAVISD_DB_USER}
  208. passwd = ${AMAVISD_DB_PASSWD}
  209. * See also:
  210. - ${IREDADMIN_HTTPD_CONF}
  211. EOF
  212. echo 'export status_iredadmin_config="DONE"' >> ${STATUS_FILE}
  213. }